enigmamachine 0.1.3 → 0.1.4

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.
data/README.rdoc CHANGED
@@ -3,19 +3,94 @@
3
3
  Enigmamachine is a video processor which queues and encodes videos according
4
4
  to target profiles that you define. Videos must be on a locally mounted
5
5
  filesystem. The processor takes the path to the video, and executes
6
- multiple ffmpeg commands on the video. There is a handy web interface for
6
+ one or more ffmpeg commands on the video. There is a handy web interface for
7
7
  defining encoding tasks, and a restful web service which takes encoding commands.
8
8
 
9
9
  Enigmamachine is written using Sinatra, Thin, and Eventmachine.
10
10
 
11
- == Current Status
11
+ == Why would you want one?
12
12
 
13
- The basic Sinatra application and the encoding queue work, but the app needs to
14
- be packaged up as a gem and all the niceties of running the server need to be
15
- made more convenient.
13
+ If you're not running a server, you probably don't need enigmamachine, because
14
+ there are already lots of great client-side batch processors for all kinds of
15
+ different operating systems. However, if you are running a web application,
16
+ and you want to process uploaded video, enigmamachine offers you a convenient
17
+ fire-and-forget video encoder.
18
+
19
+ The main problem with encoding video on a server is that it takes a really,
20
+ really long time - you don't want to do it within the scope of a single HTTP
21
+ request, because you want the user's browser to return to their control as
22
+ soon as the upload is finished. If the video took ten minutes to upload,
23
+ you don't want to keep their browser (and your webapp) busy for a
24
+ further ten minutes while the encoding happens.
25
+
26
+ The right way to deal with the uploaded video is to fire up a new thread which
27
+ can take over responsibility for encoding the video, while your web app goes
28
+ on its merry way. Unfortunately, this is difficult in some languages (PHP, for
29
+ example, doesn't have lightweight threading support), and even in languages
30
+ with good threading support it still sort of sucks. With Enigmamachine, all you
31
+ need to do to trigger encoding of a video is shoot off an HTTP request, and
32
+ everything else is handled for you.
33
+
34
+ == Using it
35
+
36
+ Once you've installed the gem (see below), you can do something like:
37
+
38
+ mkdir enigma
39
+ cd enigma
40
+ enigmamachine start # -d to daemonize
41
+
42
+ Then check it out in your browser, at http://localhost:2002.
43
+
44
+ Your application receives a video, and you do an HTTP call like:
45
+
46
+ POST http://localhost:2002/videos
47
+
48
+ with the params:
49
+
50
+ params["video"] # the full path to a file on your local filesystem
51
+ params["encoder_id"] # the id of an encoder defined in your database
52
+
53
+ The enigmamachine will run all encoding tasks on the video. If a new video is
54
+ uploaded while the first one is still encoding, it will be placed in a queue.
55
+ Videos are encoded sequentially as they arrive.
56
+
57
+ == Encoders and Encoding Tasks
58
+
59
+
60
+ TODO
61
+
62
+
63
+ == Installation
64
+
65
+ Enigmamachine is written in Ruby and uses the Sinatra web framework, the
66
+ Datamapper ORM library, and the Eventmachine event-processing library. If
67
+ you're not a Ruby person, you don't need to care about any of this.
68
+ Enigmamachine can be triggered by any language that can send a POST request -
69
+ so all you PHPistas, python-lovers, droopy-moustachists, or blue-suited
70
+ java types can all use it just as easy as us fashionable-haircut-language
71
+ people.
72
+
73
+ You can install it as a gem by doing:
74
+
75
+ gem install enigmamachine
76
+
77
+ If this command doesn't make any sense to you, it's because you don't know that
78
+ "gems" are ruby code packages, somewhat like apt-get except for ruby code only.
79
+ You can install rubygems on righteous operating systems by typing
80
+
81
+ apt-get install rubygems # as root
82
+
83
+ Then "gem install " should theoretically work. You'll also need a copy of
84
+ ffmpeg installed and available in your path.
85
+
86
+ == Status
87
+
88
+ This thing is still pre-release.
89
+
90
+ I'm just working on getting the gem dependencies correct, so you may need to
91
+ manually install a few things to get it to work. You'll also need a working
92
+ copy of ffmpeg available on your path.
16
93
 
17
- The biggest problem is that it was done on a whim (i.e. without test-first
18
- development) since it was just a sketch at first - this needs to be fixed.
19
94
 
20
95
  == Note on Patches/Pull Requests
21
96
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{enigmamachine}
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["dave"]
data/lib/enigmamachine.rb CHANGED
@@ -94,7 +94,7 @@ class EnigmaMachine < Sinatra::Base
94
94
  # Shows the enigma status page.
95
95
  #
96
96
  get '/' do
97
- @videos = Video.all(:limit => 50, :order => [:created_at.asc])
97
+ @videos = Video.all(:limit => 50, :order => [:created_at.desc])
98
98
  erb :index
99
99
  end
100
100
 
@@ -156,6 +156,8 @@ class EnigmaMachine < Sinatra::Base
156
156
  end
157
157
  end
158
158
 
159
+ # Deletes an encoder
160
+ #
159
161
  delete '/encoders/:id' do |id|
160
162
  @encoder = Encoder.get(id)
161
163
  @encoder.destroy!
@@ -1,13 +1,12 @@
1
1
  <div class="post">
2
- <h1 class="title">Your enigma machine</h1>
2
+ <h1 class="title">Your own enigma machine</h1>
3
3
  <div class="entry">
4
- <p>It is encoding some videos.</p>
5
- <% unless @videos.empty? %>
6
- <p>Here are the next videos which will be encoded:</p>
7
- <ul>
8
- <%= partial :'videos/video', :collection => @videos %>
9
- </ul>
10
- <% end %>
4
+ <% unless @videos.empty? %>
5
+ <p>Some recently added videos:</p>
6
+ <ul>
7
+ <%= partial :'videos/video', :collection => @videos %>
8
+ </ul>
9
+ <% end %>
11
10
  </div>
12
- </div>
13
-
11
+ </div>
12
+
@@ -1,6 +1,6 @@
1
1
  <% video = videos_video %>
2
2
  <li>
3
- <%=h video.file %> -
4
- created at <%=h video.created_at.strftime("%m/%d/%Y at %H:%M:%S")%><br/>
3
+ <strong><%= video.state %></strong> - <%=h video.file %> -
4
+ created at <%=h video.created_at.strftime("%m/%d/%Y at %H:%M:%S")%><br/>
5
5
  </li>
6
6
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enigmamachine
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - dave