Skip to content

Instantly share code, notes, and snippets.

View paneq's full-sized avatar
🏠
Working from home

Robert Pankowecki paneq

🏠
Working from home
View GitHub Profile
@paneq
paneq / maybe.rb
Created March 28, 2012 13:17 — forked from pzol/maybe.rb
Maybe in ruby
def Maybe(obj)
Maybe.new(obj)
end
class Nothing
include Singleton
end
class Maybe
attr_reader :value
@paneq
paneq / file.txt
Created March 27, 2012 09:28
file 5.11 fix
>> sudo dpkg -i libmagic1_5.11-1_amd64.deb libmagic-dev_5.11-1_amd64.deb file_5.11-1_amd64.deb
[sudo] password for rupert:
(Odczytywanie bazy danych ... 291117 files and directories currently installed.)
Przygotowanie do zastąpienia libmagic1 5.04-5ubuntu2 (wykorzystując libmagic1_5.11-1_amd64.deb) ...
Rozpakowanie pakietu zastępującego libmagic1 ...
Przygotowanie do zastąpienia libmagic-dev 5.04-5ubuntu2 (wykorzystując libmagic-dev_5.11-1_amd64.deb) ...
Rozpakowanie pakietu zastępującego libmagic-dev ...
Przygotowanie do zastąpienia file 5.04-5ubuntu2 (wykorzystując file_5.11-1_amd64.deb) ...
Rozpakowanie pakietu zastępującego file ...
Konfigurowanie libmagic1 (5.11-1) ...
@paneq
paneq / default_timeout_in_em_spec.rb
Created March 26, 2012 12:34
default timeout in em spec
module EventMachine
TestTimeoutExceededError = Class.new(RuntimeError)
module TestHelper
def self.included(cls)
cls.class_eval(<<-HERE_DOC, __FILE__, __LINE__)
DefaultTimeout = nil unless const_defined?(:DefaultTimeout)
def self.default_timeout(timeout)
@paneq
paneq / c1.txt
Created March 1, 2012 23:11
Simple Distributed chat proof of concept with celluloid and Dcell
>> ncat 127.0.0.1 3456
auth
a3863a5aa8afe5eaf1ccfa6738172305
message from a3863a5aa8afe5eaf1ccfa6738172305
@paneq
paneq / me_gusta.rb
Created February 26, 2012 10:27 — forked from LTe/me_gusta.rb
Challenge
class TestUser
def is_ok?
true
end
def receive_message
yield("message", self)
end
def &(other)
@paneq
paneq / ex10.rb
Created February 24, 2012 22:38
Example 10 - Using returned values to distinguish if fiber is resumable
jobs = []
jobs << Fiber.new{ 2.times{|i| puts "working on part #{i}"; Fiber.yield(i) }; :finished }
jobs << Fiber.new{ 4.times{|i| puts "doing part #{i}"; Fiber.yield(i) }; :finished }
jobs << Fiber.new{ 3.times{|i| puts "making part #{i}"; Fiber.yield(i) }; :finished }
until jobs.empty?
job = jobs.shift
result = job.resume
jobs << job if result != :finished
end
@paneq
paneq / e9.rb
Created February 24, 2012 22:26
Example 9 - Fibers using shared variable
results = []
f1 = Fiber.new do
i = 1
loop do
i+= 1
if Prime.prime?(i)
results << i
Fiber.yield(i)
end
end
@paneq
paneq / e8.txt
Created February 24, 2012 22:23
Example 8 - Using result from 2 fibers
> require 'prime'
> f1 = Fiber.new{ i = 1; loop{ i+= 1; Fiber.yield(i) if Prime.prime?(i) } }
> f2 = Fiber.new{ i = 1; loop{ i+= 1; Fiber.yield(i**2) } }
> 4.times do
> puts f1.resume + f2.resume
> end
6
12
21
32
@paneq
paneq / e7.txt
Created February 24, 2012 22:11
Example 7 - Using cooperating fibers
ruby-1.9.2-p180-fastrequire :057 > f1 = Fiber.new{ i = 1; loop{ i+= 1; Fiber.yield(i) if Prime.prime?(i) } }
=> #<Fiber:0x0000000234a150>
ruby-1.9.2-p180-fastrequire :058 > f2 = Fiber.new{ i = 1; loop{ i+= 1; Fiber.yield(i**2) } }
=> #<Fiber:0x00000002329c48>
ruby-1.9.2-p180-fastrequire :060 > 4.times do
ruby-1.9.2-p180-fastrequire :061 > puts f1.resume + f2.resume
ruby-1.9.2-p180-fastrequire :062?> end
6
12
21
@paneq
paneq / e7.txt
Created February 24, 2012 22:08
Example 7 - Resuming different fibers
> f1 = Fiber.new{ loop{ Fiber.yield rand() } }
> f2 = Fiber.new{ ary = [true, false]; loop{ Fiber.yield(ary.sample) } }
> f1.resume
=> 0.39994797202857346
> f2.resume
=> false
> f2.resume
=> false
> f1.resume
=> 0.9078216956199455