magic_mirror 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7cf70f0e31e11fca22459e7960f5c953561b73dc
4
- data.tar.gz: 781941ac1db3d9b076deb59960a4e86e0face783
3
+ metadata.gz: 99ae6ed2cd45562d4fe35027396c9fb97c71e35a
4
+ data.tar.gz: 9a94943f0ec1d9c6e59534a1653cef1aa5584dfc
5
5
  SHA512:
6
- metadata.gz: b595cd0b4776e3181fb7bfd68c9d65b00b8e814928de0dd30c56b0bd5b9ac8e92141bcb40f5ab6782114ba68ecfae39a432931a54916304b638d68765d7e2665
7
- data.tar.gz: ea30cb839bc94c180e75d882759b934a9950c67ab99178b30d31a88d53e4559c5dd9d6b453be500a0fb12b889e8fd94a8ae40489343ed70f54e2965a67f11104
6
+ metadata.gz: b44cbc8caa075fd22f931bea1ca149b99c0bd2b8a95d5e7577998b71c714a5dde15ffa7fa7e3394a6259cd68949b5418e5a71e97c9a68fc2c5382e74de394298
7
+ data.tar.gz: 5b8b356d1117ef8d273a2c54d9747e079cad042afa0eda612d82643aef108e14c547a879174285bc86d1ff5430d1c427342150a80333aae0053a0c90c3aa0f08
data/changelog CHANGED
@@ -2,6 +2,15 @@
2
2
  TODO: List off what features you'll be including at some point in the
3
3
  future.
4
4
 
5
+ - Test against port in use problem.
6
+
7
+ - How do you tell the host gem to just 'listen for commands' and idle there?
8
+ (so the reverse usage of trtl)
9
+ possible do a .join() on the sinatra thread?
10
+
11
+ - limitation: Can only have one rendering display at a time *per computer*
12
+ > Solution: Clean up the output and make ports random
13
+
5
14
  - Bug: If faye server goes offline for a second, and misses commands, then comes back online,
6
15
  the command_cache variable will be out of sync with that of the server
7
16
  > Solutions: Javascript Function periodically checks in to see the
@@ -22,9 +31,15 @@ Currently:
22
31
 
23
32
  Finished:
24
33
 
34
+ ** 0.1.1 **
35
+
36
+ - Added command_cache#reset
37
+ - Silenced booting of servers and added own boot message
38
+
39
+
25
40
  ** 0.1.0 **
26
41
 
27
- - Changed API to Minimizing magic_mirror commands needed on the host gem
42
+ - Changed API to Minimizing magic_mirror commands needed on the host gem
28
43
 
29
44
  ** 0.0.2 **
30
45
  - got websockets online
@@ -7,5 +7,10 @@ module MagicMirror
7
7
  super
8
8
  end
9
9
 
10
+ def reset
11
+ self.clear
12
+ MagicMirror.mirror.speak_into("MagicMirror.clearCommandCache();")
13
+ end
14
+
10
15
  end
11
16
  end
@@ -6,33 +6,58 @@ module MagicMirror
6
6
  end
7
7
 
8
8
  def init_servers!
9
- threads = []
9
+ Thin::Logging.silent = true
10
+ print "\nActivating the Magic Mirror."
11
+
12
+ @threads = []
13
+
10
14
  # start sinatra
11
- threads << start_sinatra
12
- threads << start_faye
15
+ @threads << start_sinatra
16
+ @threads << start_faye
13
17
 
18
+ puts "\nThe Magic Mirror is Activated. Navigate to http://127.0.0.1:4567"
14
19
  self
15
20
  end
16
21
 
17
22
  def start_sinatra
23
+ queue = Queue.new # allows waiting for sinatra boot
24
+ $stderr_backup = $stderr.dup
25
+ $stderr.reopen("/dev/null", "w")
26
+
18
27
  Thread.new {
19
- SinatraSilver::App.run!
28
+ SinatraSilver::App.run! do |server|
29
+ queue.push("started") # tells caller thread to continue
30
+ end
20
31
  }
32
+
33
+ queue.pop # blocks until sinatra is booted
34
+ print "."
35
+
36
+ $stderr = $stderr_backup.dup
21
37
  end
22
38
 
23
39
  def start_faye
40
+ queue = Queue.new # allows waiting for sinatra boot
24
41
 
25
42
  Thread.new {
26
43
  bayeux = Faye::RackAdapter.new(:mount => '/faye', :timeout => 25)
27
44
  bayeux.listen(FAYE_PORT)
28
- run bayeux
45
+ bayeux.run!
46
+ #run bayeux
29
47
  }
30
48
 
31
- #wait_until_faye_is_up
49
+ #queue.pop # blocks until server is booted
50
+ wait_until_faye_is_up
51
+ print "."
52
+
32
53
  end
33
54
 
34
- def get_faye_app
55
+ def command_cache
56
+ MagicMirror.command_cache
57
+ end
35
58
 
59
+ def command_cache=(value)
60
+ MagicMirror.command_cache = value
36
61
  end
37
62
 
38
63
  # sends messages through faye server to web interface
@@ -45,22 +70,22 @@ module MagicMirror
45
70
  begin
46
71
  Net::HTTP.post_form(uri, :message => message.to_json)
47
72
  rescue
48
- puts "failed to send message to faye server and thus webclient"
73
+ $stderr.puts "failed to send message to faye server and thus webclient"
49
74
  end
50
75
 
51
76
  end
52
77
 
53
78
  def wait_until_faye_is_up
79
+ require 'net/http'
54
80
  while(true) do
55
81
  begin
56
- uri = URI.parse("http://localhost:#{FAYE_PORT}/faye")
57
- # Shortcut
82
+ uri = URI.parse("http://localhost:#{FAYE_PORT}/")
58
83
  response = Net::HTTP.get_response(uri)
59
84
  rescue
60
85
 
61
86
  end
62
- sleep 1
63
- break if response and response.code == 400 and response.body == "Bad request"
87
+ break if response and response.code == "404" and response.body == "Sure you're not looking for /faye ?"
88
+ sleep 0.1
64
89
  end
65
90
  end
66
91
 
@@ -7,6 +7,12 @@ module SinatraSilver
7
7
  # set :views, MagicMirror.sinatra_root
8
8
  set :views, Proc.new { File.join(MagicMirror.sinatra_root, "lib", "views") }
9
9
  #set :public_folder, Proc.new { File.join(MagicMirror.sinatra_root, "lib", "views") }
10
+ #set :logging, false
11
+ set :logging, false
12
+
13
+ configure do
14
+ disable :logging
15
+ end
10
16
 
11
17
  get '/' do
12
18
  @command_cache = MagicMirror.command_cache.to_json
@@ -1,3 +1,3 @@
1
1
  module MagicMirror
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/talk.md ADDED
@@ -0,0 +1,57 @@
1
+ ## S1.0 What is magic_mirror?
2
+
3
+
4
+
5
+
6
+ ## S1.1 rails vs traditional programming
7
+
8
+ Everyone here has probably heard of rails before.
9
+ Well Rails, Sinatra, Python's django... Flask...
10
+ These are all ways of building GUI applications for
11
+ * Multiple Users
12
+ and in an
13
+ * MVC design pattern
14
+
15
+ Now that I know rails, I'm happy with MVC.
16
+ It helps us keep our code organized and clean.
17
+ Though in some use cases, it slows us down.
18
+ Say, if you wanted your app to print the version number when /version is accessed.
19
+ That should only take 4 lines of code, one after another, right?
20
+ But with MVC, we need to change 4 different files.
21
+ So MVC is good for some things.
22
+ But MVC isn't good for *all* things, I don't think that's a controversial statement.
23
+
24
+ So what if we just want to add a GUI to our existing command line app?
25
+ Obviously our CLI apps aren't designed in the MVC pattern,
26
+ so we can't just start copy/pasting things into a rails app.
27
+ And maybe we don't even want to put it on the web,
28
+ we want to use the app exclusively from our own machine.
29
+
30
+ That's where magic_mirror comes in.
31
+ We simply add it as a dependency, and call MagicMirror.new() and pass in a root
32
+ directory from which to serve our index view.
33
+
34
+ Of course we have to draw up an html file to serve as our GUI,
35
+ but once that's done, you now have a GUI for your once gooey-less application.
36
+
37
+ So in principle, this is a pretty cool gem...
38
+
39
+
40
+ ## S2 What is magic_mirror... Specifically?
41
+
42
+ So by now you're probably wondering what comprises this interesting gem.
43
+ Well magic_mirror is:
44
+ * A sinatra html/ web server (on thin)
45
+ * A Faye websocket server (on thin)
46
+ * A class variable that caches all commands sent through the websocket server
47
+ (The mirror if you will)
48
+
49
+ ## S3 How do you add magic_mirror to a project?
50
+
51
+ To use magic_mirror, simply require the gem as a dependency and add a line
52
+ `@mirror = MagicMirror.new(options)`
53
+ As options, you must specify where your html assets live.
54
+ Then you can do `@mirror.init_servers!` to boot the web/ websocket servers.
55
+
56
+
57
+ ## Lets do a hello world
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magic_mirror
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - TheNotary
@@ -159,6 +159,7 @@ files:
159
159
  - lib/views/index.erb
160
160
  - magic_mirror.gemspec
161
161
  - rspec
162
+ - talk.md
162
163
  homepage: https://github.com/TheNotary/magic_mirror
163
164
  licenses:
164
165
  - MIT