Skip to content

Instantly share code, notes, and snippets.

@seki
seki / rich_rinda.rb
Last active August 16, 2017 01:53
LindaのWeb版の一提案。
# -*- coding; utf-8 -*-
require 'rinda/tuplespace'
require 'drb/drb'
require 'webrick'
require 'webrick/cgi'
class RichRinda < WEBrick::CGI
def initialize(ts, *args)
super(*args)
@ts = ts
@seki
seki / shuffle.rb
Created May 21, 2013 15:37
merge sort for ikezawa-san
class Merge
def initialize(*fnames)
@file = fnames.collect {|fn| MergeFile.new(fn)}
delete_empty
end
def delete_empty
@file.delete_if {|f| f.empty?}
end
@seki
seki / kagero.rb
Created May 22, 2013 21:20
merge sort for ikezawa-san 2
module Enumerable
def merge(*other)
return to_enum(__method__, *other) unless block_given?
inputs = [self, *other]
while ! inputs.keep_if {|it| it.peek rescue nil}.empty?
yield(inputs.min_by {|it| it.peek}.next)
end
end
def split_for_shuffle(n = 1000000)
@seki
seki / drb.rb
Created June 5, 2013 13:32
1st druby. [ruby-list:15406]
drb.rb
#!/usr/local/bin/ruby
=begin
Tiny distributed Ruby --- dRuby
DRb --- dRuby module.
DRbProtocol --- Mixin class.
DRbObject --- dRuby remote object.
DRbConn ---
DRbServer --- dRuby message handler.
=end
@seki
seki / erb_with_hash.rb
Last active December 22, 2015 09:08
Using BasicObject
module ERBWithHash
class HashAsBinding < BasicObject
def initialize(hash)
@_env = hash
end
def method_missing(msg, *args, &block)
super if block
super unless args.empty?
@_env.fetch(msg) { @_env.fetch(msg.to_s) { super }}
# -*- coding: utf-8 -*-
require 'test/unit'
class TriApp
def on_OK(t1, t2, t3)
n1 = positive_integer(t1)
n2 = positive_integer(t2)
n3 = positive_integer(t3)
return "三角形ではありません" unless triangle?(n1, n2, n3)
case [n1, n2, n3].uniq.size
require 'av_capture'
require 'drb'
class PhotoServer
attr_reader :worker
def initialize
@worker = Queue.new
end
@seki
seki / rinda_sizedqueue.rb
Last active August 29, 2015 14:02
YA SizedQueue, uses pattern [key, Range, Array].
class ChannelSpace
class ChannelHandle
def initialize(ts, size)
@ts = ts
@size = size
@name = Object.new
@ts.write([@name, 0, []])
end
def write(value)
@seki
seki / channel.rb
Last active August 29, 2015 14:02
# -*- coding: utf-8 -*-
require 'rinda/tuplespace'
module Channel
class ChannelSpace
class Any
def initialize(ary)
@ary = ary
end
require 'rinda/tuplespace'
class ChannelSpace
include DRbUndumped
class ChannelError < RuntimeError
def initialize(str, handle)
@channel = handle
super(str)
end