gorthaur 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6f7eae1fa292604c422b65c4c098a5ef5bc9a543
4
+ data.tar.gz: 5c89d51c6f7be40a92feb22b664bfd3a9a3a9e21
5
+ SHA512:
6
+ metadata.gz: 2b68cf797096c0eb59094d6b522e6179df6cb830b3c2fa8119d5e1790f77e1b73f1aee6113497d0d7c467fdc4921edc342aba0aa0514dfd45e790950b6674ff0
7
+ data.tar.gz: 53942893460458e5c58268cbc9602e5a621d85e74008d9392f85037bc97bd10e1b392a3a821eb9bbd9e7fdcf20c121465a5ea766fac5e11f890276110ba290c2
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "dante"
4
+ require "gorthaur"
5
+ case
6
+ when ARGV.include?("server") then
7
+ Dante::Runner.new("gorthaur_server").tap do |runner|
8
+ runner.description = "Listen for any clients"
9
+
10
+ log_path = File.join((ENV["GORTHAUR_LOG_PATH"] || Gorthaur::DEFAULT_LOG_PATH), "server.log")
11
+ pid_path = File.join((ENV["GORTHAUR_PID_PATH"] || Gorthaur::DEFAULT_PID_PATH), "server.pid")
12
+
13
+ runner.execute(:log_path => log_path, :pid_path => pid_path) do
14
+ server = Gorthaur::Server.new
15
+ Thread.new { server.call }
16
+ DRb.start_service(Gorthaur::URI, server)
17
+ DRb.thread.join
18
+ end
19
+ end
20
+
21
+ when ARGV.include?("client")
22
+ Dante::Runner.new("gorthaur_client").tap do |runner|
23
+ runner.description = "Uses the camera and reports to the server"
24
+
25
+ runner.with_options do |opts|
26
+ opts.on("-r", "--rate SECONDS", Integer, "Wait this long between shots") do |rate|
27
+ options[:rate] = rate
28
+ end
29
+
30
+ opts.on("-f", "--frame INDEX", Integer, "Start at this frame index") do |frame|
31
+ options[:frame] = frame
32
+ end
33
+
34
+ opts.on("-p", "--path PATH", String, "Store shots in this path") do |path|
35
+ options[:path] = path
36
+ end
37
+ end
38
+
39
+ log_path = File.join((ENV["GORTHAUR_LOG_PATH"] || Gorthaur::DEFAULT_LOG_PATH), "client.log")
40
+ pid_path = File.join((ENV["GORTHAUR_PID_PATH"] || Gorthaur::DEFAULT_PID_PATH), "client.pid")
41
+
42
+ runner.execute(:log_path => log_path, :pid_path => pid_path) do |opts|
43
+ rate = opts[:rate] || ENV["GORTHAUR_RATE"] || Gorthaur::DEFAULT_RATE
44
+ frame = opts[:frame] || ENV["GORTHAUR_FRAME"] || Gorthaur::DEFAULT_FRAME
45
+ directory = opts[:path] || ENV["GORTHAUR_PATH"] || Gorthaur::DEFAULT_PATH
46
+
47
+ Gorthaur::Client.new(rate, frame, FileUtils.mkdir_p(directory).first).call
48
+ end
49
+ end
50
+ else
51
+ abort "You need to use gorthaur server or gorthaur client"
52
+ end
@@ -0,0 +1,17 @@
1
+ require "drb"
2
+ require "thread"
3
+ require "logger"
4
+ require "av_capture"
5
+
6
+ module Gorthaur
7
+ URI = "druby://localhost:8787"
8
+ DEFAULT_RATE = 5
9
+ DEFAULT_FRAME = 1
10
+ DEFAULT_PATH = File.join(Dir.home, "Pictures", "gorthaur", "frames")
11
+ DEFAULT_PID_PATH = File.join(Dir.home, ".gorthaur")
12
+ DEFAULT_LOG_PATH = File.join(Dir.home, ".gorthaur")
13
+ end
14
+
15
+ require_relative "gorthaur/version"
16
+ require_relative "gorthaur/server"
17
+ require_relative "gorthaur/client"
@@ -0,0 +1,20 @@
1
+ module Gorthaur
2
+ class Client
3
+ def initialize(rate, frame, directory)
4
+ @rate = rate
5
+ @frame = frame
6
+ @directory = directory
7
+ # @logger = Logger.new
8
+ @server = DRbObject.new_with_uri(Gorthaur::URI)
9
+ end
10
+
11
+ def call
12
+ loop do
13
+ # @logger.info "#{@frame} "
14
+ IO.write(File.join(@directory, "#{@frame}.jpg"), @server.capture)
15
+ sleep(@rate)
16
+ @frame += 1
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,31 @@
1
+ module Gorthaur
2
+ class Server
3
+ def initialize
4
+ @request = Queue.new
5
+ @response = Queue.new
6
+ @mutex = Mutex.new
7
+ @session = AVCapture::Session.new
8
+ end
9
+
10
+ def capture
11
+ @mutex.synchronize do
12
+ @request << "x"
13
+ @response.pop
14
+ end
15
+ end
16
+
17
+ def call
18
+ @session.run_with(recorders) do |connection|
19
+ while @request.pop
20
+ @response.push connection.capture
21
+ end
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def recorders
28
+ AVCapture.devices.find(&:video?)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,3 @@
1
+ module Gorthaur
2
+ VERSION = "1.0.0"
3
+ end
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gorthaur
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Aaron Paterson
8
+ - Benjamin Eckel
9
+ - Kurtis Rainbolt-Greene
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2014-04-16 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: av_capture
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '1.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: dante
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '0.2'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.2'
43
+ - !ruby/object:Gem::Dependency
44
+ name: bundler
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.3'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.3'
57
+ - !ruby/object:Gem::Dependency
58
+ name: rspec
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '2.14'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '2.14'
71
+ - !ruby/object:Gem::Dependency
72
+ name: rake
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '10.1'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '10.1'
85
+ - !ruby/object:Gem::Dependency
86
+ name: pry
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '0.9'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: '0.9'
99
+ description: Watch yourself coding
100
+ email: []
101
+ executables:
102
+ - gorthaur
103
+ extensions: []
104
+ extra_rdoc_files: []
105
+ files:
106
+ - bin/gorthaur
107
+ - lib/gorthaur.rb
108
+ - lib/gorthaur/client.rb
109
+ - lib/gorthaur/server.rb
110
+ - lib/gorthaur/version.rb
111
+ homepage: http://bhelx.github.io/time_lapser
112
+ licenses:
113
+ - MIT
114
+ metadata: {}
115
+ post_install_message:
116
+ rdoc_options: []
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubyforge_project:
131
+ rubygems_version: 2.2.2
132
+ signing_key:
133
+ specification_version: 4
134
+ summary: Watch yourself coding
135
+ test_files: []