diff options
Diffstat (limited to 'ruby')
-rwxr-xr-x | ruby/binom.rb | 17 | ||||
-rwxr-xr-x | ruby/binom.sh | 6 | ||||
-rwxr-xr-x | ruby/blocks.rb | 15 | ||||
-rwxr-xr-x | ruby/call_by_reference.rb | 14 | ||||
-rwxr-xr-x | ruby/class_method.rb | 36 | ||||
-rwxr-xr-x | ruby/cmp.rb | 29 | ||||
-rwxr-xr-x | ruby/extend_array.rb | 12 | ||||
-rwxr-xr-x | ruby/lowercase.rb | 10 | ||||
-rwxr-xr-x | ruby/maildir-to-imap | 41 | ||||
-rw-r--r-- | ruby/module.rb | 20 | ||||
-rwxr-xr-x | ruby/modules.rb | 16 | ||||
-rwxr-xr-x | ruby/multinom.rb | 21 | ||||
-rw-r--r-- | ruby/multinom.sh | 4 | ||||
-rwxr-xr-x | ruby/named-pipe-a.rb | 12 | ||||
-rwxr-xr-x | ruby/named-pipe-b.rb | 8 | ||||
-rwxr-xr-x | ruby/proc-in-out-in-out.rb | 17 | ||||
-rw-r--r-- | ruby/rand-strings.rb | 11 | ||||
-rwxr-xr-x | ruby/spawn.rb | 10 | ||||
-rwxr-xr-x | ruby/spawn_with_timeout.rb | 17 | ||||
-rwxr-xr-x | ruby/split_range.rb | 27 | ||||
-rwxr-xr-x | ruby/threads.rb | 37 | ||||
-rwxr-xr-x | ruby/threads1.rb | 17 | ||||
-rwxr-xr-x | ruby/timeout.rb | 18 |
23 files changed, 415 insertions, 0 deletions
diff --git a/ruby/binom.rb b/ruby/binom.rb new file mode 100755 index 0000000..1a2dc1b --- /dev/null +++ b/ruby/binom.rb @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +def binom n, k + prod = 1 + (1..k).each { |j| + prod *= (n+1-j)/j + } + + return prod +end + +def bdist k, p, n + binom(n, k)*(p**k)*(1-p)**(n-k) +end + +puts bdist(ARGV[0].to_f, ARGV[1].to_f, ARGV[2].to_f) + diff --git a/ruby/binom.sh b/ruby/binom.sh new file mode 100755 index 0000000..da84f03 --- /dev/null +++ b/ruby/binom.sh @@ -0,0 +1,6 @@ +#!/bin/zsh + +for i in {0..10}; do + echo "k=$i p=0.1 n=10 : $(./binom.rb $i 0.1 10)" +done + diff --git a/ruby/blocks.rb b/ruby/blocks.rb new file mode 100755 index 0000000..9cea44f --- /dev/null +++ b/ruby/blocks.rb @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby + + +def a + i = 0 + while line = STDIN.gets + yield i, line + i += 1 + end +end + +a { |i,j| + puts "#{i} #{j}" +} + diff --git a/ruby/call_by_reference.rb b/ruby/call_by_reference.rb new file mode 100755 index 0000000..12dc933 --- /dev/null +++ b/ruby/call_by_reference.rb @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby + + +def fun w + w << "x" +end + + +w = [1,3,4,5] + +fun w + +puts w.to_s + diff --git a/ruby/class_method.rb b/ruby/class_method.rb new file mode 100755 index 0000000..447a477 --- /dev/null +++ b/ruby/class_method.rb @@ -0,0 +1,36 @@ +#!/usr/bin/env ruby + + +class A + attr_accessor :z + + def initialize + self.z = 'a' + end + + def self.a + r = self.new + return r + end +end + +class B < A + + def initialize + self.z = 'b' + end + + def b + "b" + end +end + +a = A.new +b = B.new + +puts a.z +puts b.z +puts +x = B.a +puts x.z + diff --git a/ruby/cmp.rb b/ruby/cmp.rb new file mode 100755 index 0000000..65e5c5f --- /dev/null +++ b/ruby/cmp.rb @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby + + +class A + attr_accessor :a + + def initialize a + @a = a + end + + def == other + @a.size == other.a.size + end + alias :eql? :== + + def hash + @a.hash + end +end + +a = A.new 'a' +b = A.new 'b' +ax = A.new 'a' + +puts a == ax + +l = [a, b, ax] +puts l.uniq.size + diff --git a/ruby/extend_array.rb b/ruby/extend_array.rb new file mode 100755 index 0000000..9b00917 --- /dev/null +++ b/ruby/extend_array.rb @@ -0,0 +1,12 @@ +#!/usr/bin/env ruby + + +class Array + def sum + self.inject(:+) + end +end + +a = [1,2,3] +puts a.sum + diff --git a/ruby/lowercase.rb b/ruby/lowercase.rb new file mode 100755 index 0000000..52c1097 --- /dev/null +++ b/ruby/lowercase.rb @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby + +STDIN.set_encoding 'utf-8' +STDOUT.set_encoding 'utf-8' + + +while line = STDIN.gets + STDOUT.write line.downcase +end + diff --git a/ruby/maildir-to-imap b/ruby/maildir-to-imap new file mode 100755 index 0000000..24d6194 --- /dev/null +++ b/ruby/maildir-to-imap @@ -0,0 +1,41 @@ +#!/usr/bin/env ruby +# source: http://wiki.colar.net/ruby_script_to_upload_convert_a_maildir_inbox_to_an_imap_server + +require 'net/imap' + +if ARGV.length < 5 then + STDERR.write "args: <host> <user> <pass> <maildir> <imapdir> [test]" + exit +end + +imap_host = ARGV[0] +imap_user = ARGV[1] +imap_pass = ARGV[2] +mail_dir = ARGV[3]+"/" +imap_dir = ARGV[4] +TEST_MODE = ARGV[5]!=nil + +def upload_dir(imap, mail_dir, imap_dir) + imap.examine(imap_dir) + msgs = Dir.entries(mail_dir).each_with_index do |f,j| + if !File.directory?(f) then + STDERR.write "adding #{mail_dir+f} to: #{imap_dir}\n" + if !TEST_MODE then + imap.append(imap_dir, File.open(mail_dir+f).read,[:Seen]) + STDERR.write "##{j}\n" + end + end + end +end + +imap = Net::IMAP.new(imap_host, ssl:true) +imap.authenticate('PLAIN', imap_user, imap_pass) + +begin + imap.create(imap_dir) +rescue + STDERR.write "failed creating: #{imap_dir}, that's probably ok\n" +end + +upload_dir(imap, mail_dir, imap_dir) + diff --git a/ruby/module.rb b/ruby/module.rb new file mode 100644 index 0000000..b25d603 --- /dev/null +++ b/ruby/module.rb @@ -0,0 +1,20 @@ +module Aaa + class Bbb + def initialize + puts "BBB" + end + end + + def Aaa.q + puts "xxx" + end + + def Aaa.bla + q + end +end + +Aaa.bla + +a = Aaa::Bbb.new + diff --git a/ruby/modules.rb b/ruby/modules.rb new file mode 100755 index 0000000..673bd82 --- /dev/null +++ b/ruby/modules.rb @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby + + +module X + def self.f + return 42 + end + + def X::g + return 23 + end +end + +puts X::f +puts X::g + diff --git a/ruby/multinom.rb b/ruby/multinom.rb new file mode 100755 index 0000000..afee4b7 --- /dev/null +++ b/ruby/multinom.rb @@ -0,0 +1,21 @@ +#!/usr/bin/env ruby + +def fak n + r = 1 + (1).upto(n) { |i| r = r*i } + return r +end + +def multinom n, ks, ps + b = fak(n) + prod = 1 + ks.each { |k| prod = prod*fak(k) } + b = b/prod + ps.each_with_index { |p,j| + b = b*p**ks[j] + } + return b +end + +puts multinom(ARGV[0].to_f, ARGV[1].split.map{|i| i.to_f}, ARGV[2].split.map{|i| i.to_f}) + diff --git a/ruby/multinom.sh b/ruby/multinom.sh new file mode 100644 index 0000000..f78d4d5 --- /dev/null +++ b/ruby/multinom.sh @@ -0,0 +1,4 @@ +#!/bin/zsh -x + +./multinom.rb 10 "0 10" "0.1 0.9" + diff --git a/ruby/named-pipe-a.rb b/ruby/named-pipe-a.rb new file mode 100755 index 0000000..23e260c --- /dev/null +++ b/ruby/named-pipe-a.rb @@ -0,0 +1,12 @@ +#!/usr/bin/env ruby + +`mkfifo #{ARGV[0]}` +f = File.new "#{ARGV[0]}", 'w' + +while line = STDIN.gets + f.write line+"\n" + f.flush +end + +`rm #{ARGV[0]}` + diff --git a/ruby/named-pipe-b.rb b/ruby/named-pipe-b.rb new file mode 100755 index 0000000..0ea2f61 --- /dev/null +++ b/ruby/named-pipe-b.rb @@ -0,0 +1,8 @@ +#!/usr/bin/env ruby + +f = File.new ARGV[0], 'r' + +while line = f.gets + puts line +end + diff --git a/ruby/proc-in-out-in-out.rb b/ruby/proc-in-out-in-out.rb new file mode 100755 index 0000000..645d620 --- /dev/null +++ b/ruby/proc-in-out-in-out.rb @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +require 'expect' +require 'open3' + +Open3.popen3("/bin/bash") do + | input, output, error, wait_thr | + input.sync = true + output.sync = true + + input.puts "ls /tmp" + puts output.expect("\n", 5) + + input.puts "ls /etc" + puts output.expect("\n", 5) +end + diff --git a/ruby/rand-strings.rb b/ruby/rand-strings.rb new file mode 100644 index 0000000..6552d0b --- /dev/null +++ b/ruby/rand-strings.rb @@ -0,0 +1,11 @@ +#!/usr/bin/env ruby + +s = "" +alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] +(0).upto(1000) { + n = Random.rand(10) + w = alphabet.sample(n).join("") + s += w+" " +} +puts s + diff --git a/ruby/spawn.rb b/ruby/spawn.rb new file mode 100755 index 0000000..8ee810a --- /dev/null +++ b/ruby/spawn.rb @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby + + +cmd = "for i in {1..30}; do echo '123456789'; done" +pipe_in, pipe_out = IO.pipe +pid = Process.spawn(cmd, :out => pipe_out, :err => pipe_out) +Process.wait pid +pipe_out.close +puts pipe_in.read + diff --git a/ruby/spawn_with_timeout.rb b/ruby/spawn_with_timeout.rb new file mode 100755 index 0000000..a884673 --- /dev/null +++ b/ruby/spawn_with_timeout.rb @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +require 'timeout' + + +cmd = "for i in {1..2000000}; do echo '123456789'; done" +pipe_in, pipe_out = IO.pipe +pid = Process.spawn(cmd, :out => pipe_out, :err => pipe_out) +begin + Timeout.timeout(1) { Process.wait pid } +rescue Timeout::Error + puts 'process not finished in time, killing it' + Process.kill('TERM', pid) +end +pipe_out.close +puts pipe_in.read + diff --git a/ruby/split_range.rb b/ruby/split_range.rb new file mode 100755 index 0000000..ee28c75 --- /dev/null +++ b/ruby/split_range.rb @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby + + +a = (5..10) +b = (8..9) + +def split_range a, b, index=0 + return nil if a==b + aa = a.to_a + begin_split = b.first + end_split = b.last + + p1 = aa[0..aa.index([begin_split-1,aa.first].max)] + p2 = aa[aa.index([end_split+1, aa.last].min)..aa.last] + + if begin_split > a.first && end_split < a.last + return [(p1.first..p1.last), "X#{index}", (p2.first..p2.last)] + elsif begin_split == a.first + return ["X#{index}", (p2.first..p2.last)] + elsif end_split == a.last + return [(p1.first..p1.last), "X#{index}"] + end + return nil +end + +puts split_range(a, b).to_s + diff --git a/ruby/threads.rb b/ruby/threads.rb new file mode 100755 index 0000000..ca2d0b2 --- /dev/null +++ b/ruby/threads.rb @@ -0,0 +1,37 @@ +#!/usr/bin/env ruby + +require 'thread' + + +prev = 'z' +('a'..'r').each { |i| + Marshal.dump({i=>1,prev=>1,'x'=>1}, File.new("test.#{i}", 'wb')) + prev = i +} + +a = [] +threads = [] +mutex = Mutex.new +('a'..'r').each { |i| + threads << Thread.new(i) { |c| + mutex.synchronize { puts c } + h = Marshal.load(File.new('test.'+c, 'rb')) + puts "#{c} x" + mutex.synchronize { a << h } + } +} +threads.each { |t| t.join } +puts '--' +threads = [] +while a.size > 1 + threads << Thread.new { + i = j = nil + mutex.synchronize { i = a.pop; j = a.pop } + i.merge!(j) { |k,v,w| v+w } + mutex.synchronize { a << i } + } + threads.each { |t| t.join } +end + +File.open('counts.merged', 'wb') { |f| Marshal.dump(a[0], f) } + diff --git a/ruby/threads1.rb b/ruby/threads1.rb new file mode 100755 index 0000000..1136621 --- /dev/null +++ b/ruby/threads1.rb @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +require 'thread' + + +a = [] +threads = [] +mutex = Mutex.new +('a'..'r').each { |i| + threads << Thread.new(i) { |c| + mutex.synchronize { a << i } + } +} +threads.each { |t| t.join } + +puts a.to_s + diff --git a/ruby/timeout.rb b/ruby/timeout.rb new file mode 100755 index 0000000..f5c1e7e --- /dev/null +++ b/ruby/timeout.rb @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby + +require 'timeout' + + +puts 'starting process' +pid = Process.spawn('sleep 20') +begin + Timeout.timeout(5) do + puts 'waiting for the process to end' + Process.wait(pid) + puts 'process finished in time' + end +rescue Timeout::Error + puts 'process not finished in time, killing it' + Process.kill('TERM', pid) +end + |