appswarm 0.0.1

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.
Files changed (305) hide show
  1. data/.autotest +124 -0
  2. data/History.txt +7 -0
  3. data/Manifest.txt +304 -0
  4. data/README.txt +373 -0
  5. data/Rakefile +153 -0
  6. data/TODO +7 -0
  7. data/apps/README.txt +17 -0
  8. data/apps/admin/admin.rb +79 -0
  9. data/apps/admin/controllers/admin.rb +81 -0
  10. data/apps/admin/controllers/settings.rb +63 -0
  11. data/apps/admin/controllers/users.rb +3 -0
  12. data/apps/admin/features/access.feature +21 -0
  13. data/apps/admin/features/mountLocal.feature +12 -0
  14. data/apps/admin/features/settings.feature +68 -0
  15. data/apps/admin/features/startApps.feature +27 -0
  16. data/apps/admin/layouts/main.rhtml +10 -0
  17. data/apps/admin/lib/settings.rb +52 -0
  18. data/apps/admin/static/admin.css +23 -0
  19. data/apps/admin/views/_log.rhtml +21 -0
  20. data/apps/admin/views/index.rhtml +43 -0
  21. data/apps/admin/views/info.rhtml +7 -0
  22. data/apps/admin/views/settings.rhtml +9 -0
  23. data/apps/admin/views/settings/_http_app.rhtml +15 -0
  24. data/apps/admin/views/settings/_web_server.rhtml +32 -0
  25. data/apps/admin/views/settings/index.rhtml +3 -0
  26. data/apps/admin/views/users/index.rhtml +6 -0
  27. data/apps/application_provider/application_provider.rb +11 -0
  28. data/apps/blog/blog.rb +27 -0
  29. data/apps/blog/controllers/blog.rb +29 -0
  30. data/apps/blog/views/index.rhtml +27 -0
  31. data/apps/browser_starter/browser_starter.rb +32 -0
  32. data/apps/crypto/crypto.rb +47 -0
  33. data/apps/crypto/crypto_rsa.rb +102 -0
  34. data/apps/crypto/spec/crypto_spec.rb +10 -0
  35. data/apps/directory_service/directory_service.rb +107 -0
  36. data/apps/directory_service/net_application.rb +92 -0
  37. data/apps/directory_service/spec/directory_service_spec.rb +36 -0
  38. data/apps/directory_service/spec/net_application_spec.rb +3 -0
  39. data/apps/global_application_interface/global_application.rb +52 -0
  40. data/apps/global_application_interface/global_application_interface.rb +84 -0
  41. data/apps/global_application_interface/spec/app_api_spec.rb +5 -0
  42. data/apps/global_tuple_space/global_tuple_space.rb +27 -0
  43. data/apps/global_web_proxy/features/session_handling.feature +7 -0
  44. data/apps/global_web_proxy/global_web_proxy.rb +221 -0
  45. data/apps/global_web_proxy/proxy/HTTPProxyServer-Dateien/rdoc-style.css +208 -0
  46. data/apps/global_web_proxy/proxy/HTTPProxyServer.html +566 -0
  47. data/apps/global_web_proxy/proxy/dnstest.rb +30 -0
  48. data/apps/global_web_proxy/proxy/proxy.rb +86 -0
  49. data/apps/global_web_proxy/proxy/wiki.html +267 -0
  50. data/apps/global_web_proxy/proxy/wiki.rb +115 -0
  51. data/apps/global_web_proxy/spec/res1 +112 -0
  52. data/apps/global_web_proxy/spec/res2 +125 -0
  53. data/apps/global_web_proxy/spec/web_proxy_spec.rb +88 -0
  54. data/apps/global_web_server/global_web_server.rb +120 -0
  55. data/apps/global_web_server/global_web_servlet.rb +6 -0
  56. data/apps/hello_world/controllers/hello_world.rb +11 -0
  57. data/apps/hello_world/features/show_on_local_web_server.feature +44 -0
  58. data/apps/hello_world/features/starting_apps.feature +6 -0
  59. data/apps/hello_world/features/through_global.feature +12 -0
  60. data/apps/hello_world/hello_world.rb +3 -0
  61. data/apps/hello_world/views/get.rhtml +10 -0
  62. data/apps/hello_world/views/index.rhtml +9 -0
  63. data/apps/hello_world/views/post.rhtml +10 -0
  64. data/apps/home/controllers/home.rb +11 -0
  65. data/apps/home/home.rb +12 -0
  66. data/apps/home/layouts/main.rhtml +16 -0
  67. data/apps/home/static/Zeichnung.svg +240 -0
  68. data/apps/home/static/home.css +134 -0
  69. data/apps/home/static/menu.css +99 -0
  70. data/apps/home/views/_appInfo.rhtml +22 -0
  71. data/apps/home/views/_dummy_fill.rhtml +3 -0
  72. data/apps/home/views/_info.rhtml +6 -0
  73. data/apps/home/views/_menu.rhtml +17 -0
  74. data/apps/home/views/index.rhtml +4 -0
  75. data/apps/home/views/overview.rhtml +2 -0
  76. data/apps/local_chunk_store/chunk_store.rb +15 -0
  77. data/apps/local_chunk_store/local_chunk_store.rb +123 -0
  78. data/apps/local_chunk_store/spec/local_chunk_store_spec.rb +30 -0
  79. data/apps/local_file_store/app_configuration.rb +78 -0
  80. data/apps/local_file_store/app_file_store.rb +32 -0
  81. data/apps/local_file_store/cached_file_store.rb +94 -0
  82. data/apps/local_file_store/features/testbed_handling_of_directories.feature +20 -0
  83. data/apps/local_file_store/local_file_store.rb +47 -0
  84. data/apps/local_file_store/spec/app_configuration_spec.rb +30 -0
  85. data/apps/local_file_store/spec/local_file_store_spec.rb +54 -0
  86. data/apps/local_object_storage/lib/cell.rb +29 -0
  87. data/apps/local_object_storage/lib/cellmgr.rb +57 -0
  88. data/apps/local_object_storage/lib/index.rb +43 -0
  89. data/apps/local_object_storage/lib/marshal.rb +96 -0
  90. data/apps/local_object_storage/lib/pagefile.rb +6 -0
  91. data/apps/local_object_storage/lib/persistent_object.rb +126 -0
  92. data/apps/local_object_storage/local_object_storage.rb +148 -0
  93. data/apps/local_object_storage/spec/local_object_storage_spec.rb +123 -0
  94. data/apps/local_secure_file_store/local_secure_file_store.rb +64 -0
  95. data/apps/local_secure_file_store/spec/local_secure_file_store_spec.rb +23 -0
  96. data/apps/local_tuple_space/local_tuple_space.rb +92 -0
  97. data/apps/local_tuple_space/spec/tuple_space_spec.rb +25 -0
  98. data/apps/local_web_server/features/parsing_args.feature +18 -0
  99. data/apps/local_web_server/local_web_server.rb +166 -0
  100. data/apps/logger/logger.rb +27 -0
  101. data/apps/master/master.rb +46 -0
  102. data/apps/master/spec/master_spec.rb +31 -0
  103. data/apps/my_spec_spec.rb +15 -0
  104. data/apps/name_service/name_service.rb +75 -0
  105. data/apps/name_service/spec/name_service_spec.rb +51 -0
  106. data/apps/network_discovery/network_discovery.rb +45 -0
  107. data/apps/network_discovery_localstore/network_discovery_localstore.rb +20 -0
  108. data/apps/network_discovery_udp/network_discovery_udp.rb +51 -0
  109. data/apps/network_lookup/network_lookup.rb +61 -0
  110. data/apps/network_node/abstract_node.rb +104 -0
  111. data/apps/network_node/drb_node.rb +90 -0
  112. data/apps/network_node/network_app.rb +9 -0
  113. data/apps/network_node/network_node.rb +471 -0
  114. data/apps/network_node/remote_service.rb +45 -0
  115. data/apps/network_node/secure_node.rb +125 -0
  116. data/apps/network_node/spec/drb_spec.rb +41 -0
  117. data/apps/network_node/spec/network_node_spec_not.rb +264 -0
  118. data/apps/new_network_node/new_network_node.rb +427 -0
  119. data/apps/new_network_node/spec/new_network_node_spec.rb +186 -0
  120. data/apps/node_broadcast/node_broadcast.rb +167 -0
  121. data/apps/node_broadcast/spec/node_broadcast_spec.rb +59 -0
  122. data/apps/permaspace/permaspace.rb +47 -0
  123. data/apps/plaindb/lib/btree.rb +38 -0
  124. data/apps/plaindb/plaindb.rb +199 -0
  125. data/apps/plaindb/spec/table_write_spec.rb +36 -0
  126. data/apps/routed_network/routed_network.rb +23 -0
  127. data/apps/routed_network/spec/routed_network_spec.rb +17 -0
  128. data/apps/session_manager/session_manager.rb +18 -0
  129. data/apps/spec_output.html +222 -0
  130. data/apps/todo/controllers/todo.rb +87 -0
  131. data/apps/todo/model/comment.rb +10 -0
  132. data/apps/todo/model/project.rb +20 -0
  133. data/apps/todo/model/todo.rb +16 -0
  134. data/apps/todo/model/user.rb +5 -0
  135. data/apps/todo/todo.rb +21 -0
  136. data/apps/todo/views/_commentList.rhtml +7 -0
  137. data/apps/todo/views/_createProject.rhtml +5 -0
  138. data/apps/todo/views/_partList.rhtml +12 -0
  139. data/apps/todo/views/_projectList.rhtml +16 -0
  140. data/apps/todo/views/edit.rhtml +11 -0
  141. data/apps/todo/views/editPart.rhtml +10 -0
  142. data/apps/todo/views/index.rhtml +2 -0
  143. data/apps/todo/views/question.rhtml +4 -0
  144. data/apps/transparent_network/transparent_network.rb +7 -0
  145. data/apps/udp_network/big_transfer.rb +97 -0
  146. data/apps/udp_network/features/information.feature +7 -0
  147. data/apps/udp_network/message_queue.rb +84 -0
  148. data/apps/udp_network/network_interface_api.rb +39 -0
  149. data/apps/udp_network/qos_queue.rb +186 -0
  150. data/apps/udp_network/simple_api.rb +180 -0
  151. data/apps/udp_network/spec/big_transfer_spec.rb +0 -0
  152. data/apps/udp_network/spec/qos_queue_spec.rb +99 -0
  153. data/apps/udp_network/spec/simple_api_spec.rb +35 -0
  154. data/apps/udp_network/spec/udp_network_spec.rb +115 -0
  155. data/apps/udp_network/spec/udp_transceiver_spec.rb +90 -0
  156. data/apps/udp_network/udp_network.rb +196 -0
  157. data/apps/udp_network/udp_transceiver.rb +329 -0
  158. data/apps/wiki/controllers/wiki.rb +56 -0
  159. data/apps/wiki/features/editing.feature +21 -0
  160. data/apps/wiki/layouts/main.rhtml +18 -0
  161. data/apps/wiki/lib/media_wiki_html.rb +35 -0
  162. data/apps/wiki/lib/wikicreole.rb +2147 -0
  163. data/apps/wiki/lib/wikicreole.tt +135 -0
  164. data/apps/wiki/lib/wikitest.rb +158 -0
  165. data/apps/wiki/lib/wikitest.tt +17 -0
  166. data/apps/wiki/model/menu.rb +15 -0
  167. data/apps/wiki/model/page.rb +31 -0
  168. data/apps/wiki/spec/wiki_creole_spec.rb +20 -0
  169. data/apps/wiki/spec/wiki_spec.rb +19 -0
  170. data/apps/wiki/static/Zeichnung.svg +240 -0
  171. data/apps/wiki/static/home.css +134 -0
  172. data/apps/wiki/static/mainMenu.css +32 -0
  173. data/apps/wiki/static/menu.css +99 -0
  174. data/apps/wiki/views/_mainMenu.rhtml +3 -0
  175. data/apps/wiki/views/_menu.rhtml +13 -0
  176. data/apps/wiki/views/edit.rhtml +13 -0
  177. data/apps/wiki/views/index.rhtml +2 -0
  178. data/apps/wiki/views/save.rhtml +1 -0
  179. data/apps/wiki/wiki.rb +17 -0
  180. data/bin/appswarm +47 -0
  181. data/cucumber.yml +2 -0
  182. data/data/PermaspaceApp/AFS_WikiApp_wiki_config +6 -0
  183. data/data/draft.txt +63 -0
  184. data/docs/appswarm_motivation.graffle +0 -0
  185. data/docs/appswarm_pics.graffle/QuickLook/Preview.pdf +0 -0
  186. data/docs/appswarm_pics.graffle/QuickLook/Thumbnail.tiff +0 -0
  187. data/docs/appswarm_pics.graffle/data.plist +63494 -0
  188. data/docs/appswarm_pics.graffle/image1.tiff +0 -0
  189. data/docs/appswarm_pics.graffle/image2.tif +0 -0
  190. data/docs/appswarm_pics.graffle/image3.tif +0 -0
  191. data/docs/appswarm_pics.graffle/image4.tif +0 -0
  192. data/docs/appswarm_pics.graffle/image5.tiff +0 -0
  193. data/docs/routing.graffle +0 -0
  194. data/features/step_definitions/appstart_steps.rb +28 -0
  195. data/features/step_definitions/cluster_steps.rb +18 -0
  196. data/features/step_definitions/testbed_steps.rb +64 -0
  197. data/features/step_definitions/webapp_steps.rb +257 -0
  198. data/features/support/env.rb +7 -0
  199. data/lib/appswarm.rb +127 -0
  200. data/lib/appswarm/README.txt +67 -0
  201. data/lib/appswarm/app_config.rb +19 -0
  202. data/lib/appswarm/application.rb +267 -0
  203. data/lib/appswarm/breaking_mutex.rb +41 -0
  204. data/lib/appswarm/cluster_funcs.rb +157 -0
  205. data/lib/appswarm/cross_spectool.rb +153 -0
  206. data/lib/appswarm/crypt.rb +10 -0
  207. data/lib/appswarm/crypt/crypto.rb +90 -0
  208. data/lib/appswarm/crypt/rsa_key +15 -0
  209. data/lib/appswarm/crypt/rsa_key.pub +5 -0
  210. data/lib/appswarm/crypt/test.rb +27 -0
  211. data/lib/appswarm/dir_tool.rb +41 -0
  212. data/lib/appswarm/event_api.rb +7 -0
  213. data/lib/appswarm/features_helper.rb +44 -0
  214. data/lib/appswarm/global_service.rb +38 -0
  215. data/lib/appswarm/http.rb +1 -0
  216. data/lib/appswarm/http/http_app.rb +257 -0
  217. data/lib/appswarm/http/http_controller.rb +267 -0
  218. data/lib/appswarm/http/http_provider.rb +80 -0
  219. data/lib/appswarm/http/static/favicon.ico +0 -0
  220. data/lib/appswarm/http/static/javascript/._prototype.js +0 -0
  221. data/lib/appswarm/http/static/javascript/prototype.js +2515 -0
  222. data/lib/appswarm/http/webrick_logger.rb +12 -0
  223. data/lib/appswarm/net_service.rb +69 -0
  224. data/lib/appswarm/package.rb +88 -0
  225. data/lib/appswarm/parallel_each.rb +46 -0
  226. data/lib/appswarm/protocols/protocol_dice.rb +25 -0
  227. data/lib/appswarm/proxy_testing.rb +48 -0
  228. data/lib/appswarm/public_api.rb +35 -0
  229. data/lib/appswarm/routing/matrix_math.rb +57 -0
  230. data/lib/appswarm/routing/pca.rb +211 -0
  231. data/lib/appswarm/routing/routetest.rb +85 -0
  232. data/lib/appswarm/routing/routing.rb +326 -0
  233. data/lib/appswarm/routing/spec/nods_spec.rb +23 -0
  234. data/lib/appswarm/routing/spec/pca_spec.rb +27 -0
  235. data/lib/appswarm/routing/spec/routing_spec.rb +91 -0
  236. data/lib/appswarm/secure_con.rb +437 -0
  237. data/lib/appswarm/secure_connection.rb +79 -0
  238. data/lib/appswarm/secure_marshal.rb +137 -0
  239. data/lib/appswarm/service.rb +76 -0
  240. data/lib/appswarm/simple_marshal.rb +96 -0
  241. data/lib/appswarm/simple_marshal_parser.rb +1243 -0
  242. data/lib/appswarm/simple_marshal_parser.tt +158 -0
  243. data/lib/appswarm/spec/application_spec.rb +50 -0
  244. data/lib/appswarm/spec/cluster_spec.rb +2 -0
  245. data/lib/appswarm/spec/hexdist_spec.rb +13 -0
  246. data/lib/appswarm/spec/http_controller_spec.rb +18 -0
  247. data/lib/appswarm/spec/main_spec.rb +6 -0
  248. data/lib/appswarm/spec/parallel_each_spec.rb +30 -0
  249. data/lib/appswarm/spec/secure_connection_spec.rb +108 -0
  250. data/lib/appswarm/spec/secure_marshal_spec.rb +93 -0
  251. data/lib/appswarm/spec/simple_marshal_spec.rb +87 -0
  252. data/lib/appswarm/spec/tools_spec.rb +13 -0
  253. data/lib/appswarm/spec/whiteboard_spec.rb +20 -0
  254. data/lib/appswarm/spec_helper.rb +18 -0
  255. data/lib/appswarm/test_bed.rb +207 -0
  256. data/lib/appswarm/tools.rb +284 -0
  257. data/lib/appswarm/tools/http_tunnel_client.rb +139 -0
  258. data/lib/appswarm/tools/http_tunnel_common.rb +8 -0
  259. data/lib/appswarm/tools/http_tunnel_server.rb +78 -0
  260. data/lib/appswarm/tools/parser/example_data.simple +102 -0
  261. data/lib/appswarm/tools/parser/match_test.rb +14 -0
  262. data/lib/appswarm/tools/parser/parser_lib.rb +165 -0
  263. data/lib/appswarm/tools/parser/parser_test.rb +104 -0
  264. data/lib/appswarm/tools/parser/spec/parser_spec.rb +44 -0
  265. data/lib/appswarm/tools/pipes.rb +95 -0
  266. data/lib/appswarm/tools/spec/tracing_spec.rb +16 -0
  267. data/lib/appswarm/tools/spec/waiting_queue_spec.rb +15 -0
  268. data/lib/appswarm/tools/thread_tool.rb +61 -0
  269. data/lib/appswarm/tools/tracing.rb +84 -0
  270. data/lib/appswarm/tools/treetop_test.rb +20 -0
  271. data/lib/appswarm/tools/treetop_test_grammar.rb +114 -0
  272. data/lib/appswarm/tools/treetop_test_grammar.tt +7 -0
  273. data/lib/appswarm/tools/waiting_prio_queue.rb +47 -0
  274. data/lib/appswarm/tools/waiting_queue.rb +34 -0
  275. data/lib/appswarm/whiteboard.rb +73 -0
  276. data/nettest.rb +50 -0
  277. data/packages/README.txt +1 -0
  278. data/packages/msandbox/data/packages/store/my.txt +1 -0
  279. data/packages/msandbox/interfaces.rb +172 -0
  280. data/packages/msandbox/old/defa.rb +3 -0
  281. data/packages/msandbox/old/test.rb +14 -0
  282. data/packages/msandbox/old/test2.rb +56 -0
  283. data/packages/msandbox/package.rb +67 -0
  284. data/packages/msandbox/packages/store/config.yml +1 -0
  285. data/packages/msandbox/packages/store/main.rb +27 -0
  286. data/packages/msandbox/packages/store/myinclude.rb +7 -0
  287. data/packages/msandbox/packages/store_test/config.yml +1 -0
  288. data/packages/msandbox/packages/store_test/main.rb +9 -0
  289. data/packages/msandbox/server.rb +146 -0
  290. data/packages/msandbox/test.rb +13 -0
  291. data/packages/msandbox/test2.rb +29 -0
  292. data/templates/web/appswarm/controllers/appswarm.rb +41 -0
  293. data/templates/web/appswarm/layouts/main.rhtml +20 -0
  294. data/templates/web/appswarm/models/asmenu.rb +14 -0
  295. data/templates/web/appswarm/models/asuser.rb +30 -0
  296. data/templates/web/appswarm/static/custom.css +15 -0
  297. data/templates/web/appswarm/static/home.css +134 -0
  298. data/templates/web/appswarm/static/mainMenu.css +32 -0
  299. data/templates/web/appswarm/static/menu.css +99 -0
  300. data/templates/web/appswarm/views/_mainMenu.rhtml +5 -0
  301. data/templates/web/appswarm/views/_menu.rhtml +13 -0
  302. data/templates/web/appswarm/views/_userInfo.rhtml +7 -0
  303. data/templates/web/appswarm/views/login.rhtml +9 -0
  304. data/tools/checkPort.rb +11 -0
  305. metadata +379 -0
@@ -0,0 +1,12 @@
1
+ class WebrickLogger
2
+ def initialize(app)
3
+ @app=app
4
+ end
5
+ def method_missing(*args)
6
+ @app.log(args)
7
+ end
8
+ def error(*args)
9
+ @app.log(args.inspect)
10
+ @app.log(caller.join("\n"))
11
+ end
12
+ end
@@ -0,0 +1,69 @@
1
+ require 'application.rb'
2
+
3
+ require 'drb/drb'
4
+
5
+ class NetService<Application
6
+ include DRbUndumped
7
+ attr_reader :valid
8
+
9
+ def initialize(cluster,options)
10
+ super
11
+ @port=options[:port]
12
+ @uri="druby://127.0.0.1:#{@port}"
13
+ @drb=nil
14
+ @valid=false
15
+ end
16
+ def shutdown
17
+ assert{@valid}
18
+ log "NetServer Shutting down service #{@uri}"
19
+ @drb.stop_service if @drb
20
+ @thread.kill if @thread
21
+ log "NetServer Shut down service #{@uri}"
22
+ assert { NetService::checkPort(@port) }
23
+ end
24
+ def stop
25
+ shutdown
26
+ end
27
+ def run
28
+ assert{@drb.nil?}
29
+ @thread=Thread.new {
30
+ begin
31
+ loop do
32
+ begin
33
+ this=self
34
+ log "NetServer starting #{@uri}"
35
+ @drb=DRb.start_service(@uri,this)
36
+ log "NetServer started"
37
+ @valid=true
38
+ break
39
+ rescue Errno::EADDRINUSE=>e
40
+ log "#{self.class} could not be started - port blocked"
41
+ sleep(20)
42
+ end
43
+ end
44
+
45
+ loop do
46
+ cron
47
+ sleep(10)
48
+ end
49
+ rescue Exception=>e
50
+ pp e.backtrace
51
+ #pp caller
52
+ end
53
+ }
54
+ end
55
+
56
+ def cron
57
+ end
58
+
59
+ def self.checkPort(port)
60
+ begin
61
+ p=TCPServer.new('127.0.0.1',port)
62
+ p.close
63
+ return true
64
+ rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR, Errno::EAFNOSUPPORT,Errno::EADDRINUSE
65
+ return false
66
+ end
67
+ end
68
+
69
+ end
@@ -0,0 +1,88 @@
1
+ require 'tools.rb'
2
+ require 'pp'
3
+
4
+ class Certificate
5
+ attr_accessor :description
6
+ attr_accessor :publicKey
7
+ end
8
+
9
+ class MyCertificate<Certificate
10
+ attr_accessor :privateKey
11
+
12
+ def initialize
13
+ end
14
+ end
15
+
16
+ class Permissions<Hash
17
+ PERMISSIONS=[:access_net,:access_temp,:run_cron,:run_continously]
18
+ def initialize
19
+ super
20
+ PERMISSIONS.each{|perm|self[perm]=false}
21
+ end
22
+ end
23
+
24
+ class Information
25
+ attr_accessor :author
26
+ attr_accessor :description
27
+ end
28
+
29
+ class Package
30
+ attr_accessor :source
31
+ attr_reader :permissions
32
+ attr_accessor :information
33
+
34
+ attr_accessor :sign
35
+ end
36
+
37
+ class Configuration
38
+ attr_accessor :acceptedCertificates
39
+
40
+ def packagePermitted?(package)
41
+ end
42
+ end
43
+
44
+ class NetworkNode
45
+ end
46
+
47
+ class AbstractNetwork
48
+ def getNodesProviding(what,many)
49
+ []
50
+ end
51
+ end
52
+
53
+ class OpenNetwork<AbstractNetwork
54
+ end
55
+
56
+ class CertificateGetter
57
+ end
58
+
59
+ def applicationDir
60
+ File.expand_path("../../../apps",__FILE__)
61
+ end
62
+
63
+ def loadApp(cluster,name)
64
+ filename=File.join(applicationDir,name,name+".rb")
65
+ cluster.log "LOADING #{filename}"
66
+ require filename
67
+ end
68
+
69
+
70
+ def loadApps(cluster)
71
+ allApps=[]
72
+ Dir[File.join(applicationDir,'*')].each{|dir|
73
+ if File.directory?(dir)
74
+ $:<<dir
75
+ name=File.split(dir)[1]
76
+ loadApp(cluster,name)
77
+ app=nil
78
+ begin
79
+ app=eval(name.camelCase+"App")
80
+ rescue
81
+ end
82
+ allApps<<app
83
+ end
84
+ }
85
+ allApps.select{|a|a}
86
+ end
87
+
88
+
@@ -0,0 +1,46 @@
1
+ require 'tools.rb'
2
+
3
+ class Array
4
+ # run each in parallel (WARNING: creates infinite threads !!!)
5
+ def p_each(&block)
6
+ threads=[]
7
+ self.each{|element|
8
+ thread = Thread.new(element,block){|element,block|
9
+ block.call(element)
10
+ }
11
+ threads << thread
12
+ }
13
+ (threads.uniq-[Thread.current]).each{|t|
14
+ assert{Thread.current!=t}
15
+ t.join
16
+ }
17
+ threads.each{|t|t.kill!}
18
+ end
19
+
20
+ # run map in parallel (WARNING: creates infinite threads !!!)
21
+ def p_map(&block)
22
+ threads=[]
23
+ results=[nil]*length
24
+ mutex=Mutex.new
25
+ i=0
26
+ self.each{|element|
27
+ t=Thread.start(element,block,results,mutex,i){|element,block,results,mutex,mi|
28
+ j=mi
29
+ begin
30
+ res=block.call(element)
31
+ mutex.synchronize {
32
+ results[j]=res
33
+ }
34
+ rescue Object=>e
35
+ pp e,e.stacktrace
36
+ end
37
+ }
38
+ threads<<t
39
+ i+=1
40
+ }
41
+ assert{threads.uniq.length==length}
42
+ threads.each{|t|t.join}
43
+ assert{results.length==length}
44
+ results
45
+ end
46
+ end
@@ -0,0 +1,25 @@
1
+ module Protocol
2
+ ProtocolInfo=Struct.new(:parties, :pkAlg)
3
+
4
+ class Base
5
+ def initialize(parties)
6
+ @otherParties=parties
7
+ end
8
+ end
9
+
10
+ class Dice
11
+ def initialize(parties,maximum)
12
+ super(parties)
13
+ @maximum=maximum
14
+ myValue=(rand*maximum*5).to_i
15
+ end
16
+
17
+
18
+ end
19
+
20
+
21
+ def initiateProtocol(type,parties,*args)
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,48 @@
1
+ require 'uri'
2
+
3
+ def getFromGlobalProxy(proxy,url,post=nil)
4
+
5
+ proxy_addr = '127.0.0.1'
6
+ proxy_port = proxy.port
7
+ result=nil
8
+ puts "TRYING PROXY #{proxy_addr} #{proxy_port}"
9
+ origurl=url.dup
10
+ url=URI.parse(url)
11
+
12
+ origurl.gsub!(/http:\/\/[^\/]*/,'')
13
+
14
+ Net::HTTP::Proxy(proxy_addr, proxy_port).start(url.host,url.port) {|http|
15
+ puts "HTTP OPENED"
16
+ begin
17
+ #pp url.path.
18
+ #path=url
19
+ if post
20
+ req = Net::HTTP::Post.new(origurl)
21
+ # req.basic_auth 'jack', 'pass'
22
+ # req.set_form_data({'from'=>'2005-01-01', 'to'=>'2005-03-31'}, ';')
23
+ pp "POST",post
24
+ req.set_form_data(post,";")
25
+ #req.set_form_data({'from'=>'2005-01-01', 'to'=>'2005-03-31'}, ';')
26
+ pp "POSTREQ",req.body
27
+ #pp req
28
+ #result=http.requestpost(req)
29
+ result=http.request_post(origurl,post.map{|k,v|k+"="+v}.join(";"))
30
+
31
+ else
32
+ result=http.get(origurl)
33
+ end
34
+ pp "RESULT:",result,result.body
35
+ rescue Object=>e
36
+ pp e,e.backtrace
37
+ end
38
+ # pp "PROXY_RESULT:",result
39
+ # pp result.body
40
+ }
41
+ result
42
+ end
43
+
44
+ class String
45
+ def valid_html?
46
+ self=~/html/i # FIXME
47
+ end
48
+ end
@@ -0,0 +1,35 @@
1
+ class AccessViolationException<Exception
2
+ end
3
+
4
+ class PublicAPI
5
+ def initialize(target)
6
+ @@api||={}
7
+ @target=target
8
+ this=self
9
+ @target.class_eval{
10
+ @@_api=this
11
+ def self.api(*s)
12
+ @@_api.addAPI(self,*s)
13
+ end
14
+ def api(*s)
15
+ @@_api.api(self,*s)
16
+ end
17
+ }
18
+ end
19
+ def addAPI(this,*s)
20
+ @@api[this]||=[]
21
+ @@api[this]+=s
22
+ end
23
+ def api(object,*s)
24
+ if @@api[object.class].member?(s[0])
25
+ object.send(*s)
26
+ else
27
+ raise AccessViolationException.new
28
+ end
29
+ end
30
+ end
31
+
32
+ def publicAPI
33
+ PublicAPI.new(self)
34
+ end
35
+
@@ -0,0 +1,57 @@
1
+ require 'linalg'
2
+
3
+
4
+ module Linalg
5
+ class DMatrix
6
+ #
7
+ # Pseudo-inverse.
8
+ #
9
+ # For matrix +m+, find +x+ which minimizes
10
+ # (m*x - DMatrix.identity(m.vsize)).norm
11
+ #
12
+ def pseudo_inverse(epsilon = nil)
13
+ DMatrix.fit(self, DMatrix.identity(vsize))
14
+ end
15
+
16
+ def middle_row
17
+ startA=([0]*columns.entries.length)
18
+ start=DMatrix[startA]
19
+
20
+ rows.entries.inject(start){|old,new|
21
+ old+new
22
+ }/rows.entries.length
23
+ end
24
+ def middle_col
25
+ startA=([[0]]*rows.entries.length)
26
+ start=DMatrix[*startA]
27
+
28
+ columns.entries.inject(start){|old,new|
29
+ old+new
30
+ }/columns.entries.length
31
+ end
32
+
33
+ def covariance
34
+ m=middle_row
35
+ colCount=self.columns.entries.length
36
+ rowCount=self.rows.entries.length
37
+ r=(0...colCount).to_a.map{|y|
38
+ (0...colCount).to_a.map{|x|
39
+ (0...rowCount).inject(0) {|old,c|
40
+ old+(self[c,y]-m[0,y])*(self[c,x]-m[0,x])
41
+ }/rowCount
42
+ }
43
+ }
44
+ DMatrix[*r]
45
+ end
46
+
47
+ def cut(w,h)
48
+ r=(0...h).to_a.map{|y|
49
+ (0...w).to_a.map{|x|
50
+ self[y,x]
51
+ }
52
+ }
53
+ DMatrix[*r]
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,211 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pp'
3
+
4
+ $:<<".."
5
+
6
+ require 'tools.rb'
7
+ require 'matrix_math.rb'
8
+
9
+
10
+ module PCA
11
+ class Input
12
+ def initialize(i=nil)
13
+ @vecs=[]
14
+ if i
15
+ if i.is_a?(Array)
16
+ i.each{|k|self<<k}
17
+ end
18
+ end
19
+ end
20
+ def <<(v)
21
+ assert {v.is_a?(Array)}
22
+ if @vecs.length==0
23
+ @vecs<<v
24
+ else
25
+ assert {@vecs[0].length == v.length }
26
+ @vecs<<v
27
+ end
28
+ end
29
+
30
+ def trainCount
31
+ @vecs.length
32
+ end
33
+
34
+ def featureCount
35
+ @vecs[0].length
36
+ end
37
+
38
+ def dmatrix
39
+ Linalg::DMatrix[*@vecs]
40
+ end
41
+ end
42
+
43
+ class Base
44
+ attr_reader :eigenvalues
45
+ def initialize(input)
46
+ assert { input.is_a?(Input) }
47
+ @input=input
48
+
49
+ computePCA
50
+ @input=nil
51
+ end
52
+
53
+ def dimension
54
+ @base.hsize
55
+ end
56
+
57
+ def reduce(size)
58
+ assert{size<=@eigenvalues.length}
59
+ return if size==@eigenvalues.length
60
+ @eigenvalues=@eigenvalues[0...size]
61
+
62
+ @base=@base.cut(size,@base.vsize)
63
+ @baseInv=@base.pseudo_inverse
64
+ end
65
+
66
+ def compress(v)
67
+ v=Linalg::DMatrix[v]
68
+ v2=v-@middle
69
+ #pp "---",v2,@baseInv,"---"
70
+ @baseInv*v2.transpose
71
+
72
+ #pp v2
73
+ end
74
+
75
+ def decompress(v)
76
+ #pp "---",v,@base,"---"
77
+ (@base*v).transpose+@middle
78
+ end
79
+
80
+ def measureErrors(input)
81
+ errs=input.map{|i|measureSingleError(i)}
82
+
83
+ mean=errs.inject(0){|old,new|
84
+ # pp "#{old} #{new}"
85
+ old+new
86
+ }/input.length
87
+ [errs.max,errs.min,mean]
88
+ end
89
+
90
+ def measureSingleError(input)
91
+ inter=compress(input)
92
+ output=decompress(inter)
93
+ pp inter
94
+ input=Linalg::DMatrix[input]
95
+ diff=input-output
96
+ (diff*diff.transpose)[0,0]
97
+ end
98
+
99
+
100
+ private
101
+ def computePCA
102
+ #return doOrthoPCA if @input.trainCount<@input.FeatureCount
103
+
104
+ dm=@input.dmatrix
105
+ @middle=dm.middle_row
106
+ puts "COV..."
107
+ cov=dm.covariance
108
+ puts "SVD..."
109
+ u, s, vt = cov.singular_value_decomposition
110
+ @eigenvalues=(0...s.vsize).map{|x|s[x,x]}
111
+ @base=u
112
+
113
+ #sort
114
+ puts "INV"
115
+ @baseInv=@base.pseudo_inverse
116
+ puts "READY"
117
+ end
118
+ def sort
119
+ pp self
120
+ a=@base.to_a
121
+ x=
122
+ (0...a.length).to_a.map{|i|
123
+ [a[i],@eigenvalues[i]]
124
+ }
125
+ y=x.sort{|a,b| a[1]<=>b[1]}.reverse
126
+
127
+ z=y.map{|a|a[0]}
128
+ #pp x,y,z
129
+
130
+ @base=Linalg::DMatrix[*@base]
131
+ @eigenvalues.sort!.reverse!
132
+ pp self
133
+ exit
134
+ end
135
+ end
136
+
137
+ def doOrthoPCA
138
+
139
+ trainCount=@input.trainCount
140
+ featureCount=@input.featureCount
141
+
142
+ #middle=@input.middle
143
+ d=@input.dmatrix
144
+ @middle=d.middle_row
145
+ dt=d.transpose
146
+
147
+ t=d*dt
148
+
149
+ t=t*(1.0/trainCount)
150
+
151
+ eigenValues=eigenVectors=nil
152
+ t.eigensystem {|_eigenVectors,_eigenValues,img|
153
+ eigenValues=_eigenValues
154
+ eigenVectors=_eigenVectors
155
+ }
156
+
157
+ nvr=dT*eigenVectors
158
+
159
+ #Tools::Math::Matrix nvr(trainCount,featureCount);
160
+
161
+ #nvr=dT*vr;
162
+
163
+
164
+ # PCAOutput o;
165
+
166
+
167
+
168
+ # for(size_t y=0;y<ev.size();y++)
169
+ # {
170
+ # PCAVector v;
171
+ # double scale;
172
+
173
+ # if(ev[y]>0)
174
+ # scale=sqrt(ev[y]*trainCount);
175
+ # else
176
+ # scale=0;
177
+
178
+ # if(scale<=0.0f)
179
+ # scale=0;
180
+ # else
181
+ # scale=1.0/scale;
182
+
183
+
184
+ # for(size_t x=0;x<nvr.nrows();x++)
185
+ # v.push_back(nvr(x,y)*scale);
186
+ # o.vectors.push_back(v);
187
+ # o.values.push_back(ev[y]>0?ev[y]:0);
188
+ # }
189
+ end
190
+
191
+ end
192
+
193
+ if false
194
+ i=PCA::Input.new
195
+ i<<[1,1,0]
196
+ i<<[0,1,1]
197
+ i<<[0,1,2]
198
+ i<<[9,1,1]
199
+ i<<[0,1,0]
200
+
201
+ base=PCA::Base.new(i)
202
+
203
+ #pp base
204
+
205
+ c=base.compress([5,1,0])
206
+ #pp c
207
+ r=base.decompress(c)
208
+ pp r
209
+
210
+
211
+ end