wukong 3.0.0.pre → 3.0.0.pre2

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 (476) hide show
  1. data/.gitignore +46 -33
  2. data/.gitmodules +3 -0
  3. data/.rspec +1 -1
  4. data/.travis.yml +8 -1
  5. data/.yardopts +0 -13
  6. data/Guardfile +4 -6
  7. data/{LICENSE.textile → LICENSE.md} +43 -55
  8. data/README-old.md +422 -0
  9. data/README.md +279 -418
  10. data/Rakefile +21 -5
  11. data/TODO.md +6 -6
  12. data/bin/wu-clean-encoding +31 -0
  13. data/bin/wu-lign +2 -2
  14. data/bin/wu-local +69 -0
  15. data/bin/wu-server +70 -0
  16. data/examples/Gemfile +38 -0
  17. data/examples/README.md +9 -0
  18. data/examples/dataflow/apache_log_line.rb +64 -25
  19. data/examples/dataflow/fibonacci_series.rb +101 -0
  20. data/examples/dataflow/parse_apache_logs.rb +37 -7
  21. data/examples/{dataflow.rb → dataflow/scraper_macro_flow.rb} +0 -0
  22. data/examples/dataflow/simple.rb +4 -4
  23. data/examples/geo.rb +4 -0
  24. data/examples/geo/geo_grids.numbers +0 -0
  25. data/examples/geo/geolocated.rb +331 -0
  26. data/examples/geo/quadtile.rb +69 -0
  27. data/examples/geo/spec/geolocated_spec.rb +247 -0
  28. data/examples/geo/tile_fetcher.rb +77 -0
  29. data/examples/graph/minimum_spanning_tree.rb +61 -61
  30. data/examples/jabberwocky.txt +36 -0
  31. data/examples/models/wikipedia.rb +20 -0
  32. data/examples/munging/Gemfile +8 -0
  33. data/examples/munging/airline_flights/airline.rb +57 -0
  34. data/examples/munging/airline_flights/airline_flights.rake +83 -0
  35. data/{lib/wukong/settings.rb → examples/munging/airline_flights/airplane.rb} +0 -0
  36. data/examples/munging/airline_flights/airport.rb +211 -0
  37. data/examples/munging/airline_flights/airport_id_unification.rb +129 -0
  38. data/examples/munging/airline_flights/airport_ok_chars.rb +4 -0
  39. data/examples/munging/airline_flights/flight.rb +156 -0
  40. data/examples/munging/airline_flights/models.rb +4 -0
  41. data/examples/munging/airline_flights/parse.rb +26 -0
  42. data/examples/munging/airline_flights/reconcile_airports.rb +142 -0
  43. data/examples/munging/airline_flights/route.rb +35 -0
  44. data/examples/munging/airline_flights/tasks.rake +83 -0
  45. data/examples/munging/airline_flights/timezone_fixup.rb +62 -0
  46. data/examples/munging/airline_flights/topcities.rb +167 -0
  47. data/examples/munging/airports/40_wbans.txt +40 -0
  48. data/examples/munging/airports/filter_weather_reports.rb +37 -0
  49. data/examples/munging/airports/join.pig +31 -0
  50. data/examples/munging/airports/to_tsv.rb +33 -0
  51. data/examples/munging/airports/usa_wbans.pig +19 -0
  52. data/examples/munging/airports/usa_wbans.txt +2157 -0
  53. data/examples/munging/airports/wbans.pig +19 -0
  54. data/examples/munging/airports/wbans.txt +2310 -0
  55. data/examples/munging/geo/geo_json.rb +54 -0
  56. data/examples/munging/geo/geo_models.rb +69 -0
  57. data/examples/munging/geo/geonames_models.rb +78 -0
  58. data/examples/munging/geo/iso_codes.rb +172 -0
  59. data/examples/munging/geo/reconcile_countries.rb +124 -0
  60. data/examples/munging/geo/tasks.rake +71 -0
  61. data/examples/munging/rake_helper.rb +62 -0
  62. data/examples/munging/weather/.gitignore +1 -0
  63. data/examples/munging/weather/Gemfile +4 -0
  64. data/examples/munging/weather/Rakefile +28 -0
  65. data/examples/munging/weather/extract_ish.rb +13 -0
  66. data/examples/munging/weather/models/weather.rb +119 -0
  67. data/examples/munging/weather/utils/noaa_downloader.rb +46 -0
  68. data/examples/munging/wikipedia/README.md +34 -0
  69. data/examples/munging/wikipedia/Rakefile +193 -0
  70. data/examples/munging/wikipedia/articles/extract_articles-parsed.rb +79 -0
  71. data/examples/munging/wikipedia/articles/extract_articles-templated.rb +136 -0
  72. data/examples/munging/wikipedia/articles/textualize_articles.rb +54 -0
  73. data/examples/munging/wikipedia/articles/verify_structure.rb +43 -0
  74. data/examples/munging/wikipedia/articles/wp2txt-LICENSE.txt +22 -0
  75. data/examples/munging/wikipedia/articles/wp2txt_article.rb +259 -0
  76. data/examples/munging/wikipedia/articles/wp2txt_utils.rb +452 -0
  77. data/examples/munging/wikipedia/dbpedia/dbpedia_common.rb +4 -0
  78. data/examples/munging/wikipedia/dbpedia/dbpedia_extract_geocoordinates.rb +78 -0
  79. data/examples/munging/wikipedia/dbpedia/extract_links.rb +193 -0
  80. data/examples/munging/wikipedia/dbpedia/sameas_extractor.rb +20 -0
  81. data/examples/munging/wikipedia/n1_subuniverse/n1_nodes.pig +18 -0
  82. data/examples/munging/wikipedia/page_metadata/extract_page_metadata.rb +21 -0
  83. data/examples/munging/wikipedia/page_metadata/extract_page_metadata.rb.old +27 -0
  84. data/examples/munging/wikipedia/pagelinks/augment_pagelinks.pig +29 -0
  85. data/examples/munging/wikipedia/pagelinks/extract_pagelinks.rb +14 -0
  86. data/examples/munging/wikipedia/pagelinks/extract_pagelinks.rb.old +25 -0
  87. data/examples/munging/wikipedia/pagelinks/undirect_pagelinks.pig +29 -0
  88. data/examples/munging/wikipedia/pageviews/augment_pageviews.pig +32 -0
  89. data/examples/munging/wikipedia/pageviews/extract_pageviews.rb +85 -0
  90. data/examples/munging/wikipedia/pig_style_guide.md +25 -0
  91. data/examples/munging/wikipedia/redirects/redirects_page_metadata.pig +19 -0
  92. data/examples/munging/wikipedia/subuniverse/sub_articles.pig +23 -0
  93. data/examples/munging/wikipedia/subuniverse/sub_page_metadata.pig +24 -0
  94. data/examples/munging/wikipedia/subuniverse/sub_pagelinks_from.pig +22 -0
  95. data/examples/munging/wikipedia/subuniverse/sub_pagelinks_into.pig +22 -0
  96. data/examples/munging/wikipedia/subuniverse/sub_pagelinks_within.pig +26 -0
  97. data/examples/munging/wikipedia/subuniverse/sub_pageviews.pig +29 -0
  98. data/examples/munging/wikipedia/subuniverse/sub_undirected_pagelinks_within.pig +24 -0
  99. data/examples/munging/wikipedia/utils/get_namespaces.rb +86 -0
  100. data/examples/munging/wikipedia/utils/munging_utils.rb +68 -0
  101. data/examples/munging/wikipedia/utils/namespaces.json +1 -0
  102. data/examples/rake_helper.rb +85 -0
  103. data/examples/server_logs/geo_ip_mapping/munge_geolite.rb +82 -0
  104. data/examples/server_logs/logline.rb +95 -0
  105. data/examples/server_logs/models.rb +66 -0
  106. data/examples/server_logs/page_counts.pig +48 -0
  107. data/examples/server_logs/server_logs-01-parse-script.rb +13 -0
  108. data/examples/server_logs/server_logs-02-histograms-full.rb +33 -0
  109. data/examples/server_logs/server_logs-02-histograms-mapper.rb +14 -0
  110. data/{old/examples/server_logs/breadcrumbs.rb → examples/server_logs/server_logs-03-breadcrumbs-full.rb} +26 -30
  111. data/examples/server_logs/server_logs-04-page_page_edges-full.rb +40 -0
  112. data/examples/string_reverser.rb +26 -0
  113. data/examples/text/pig_latin.rb +2 -2
  114. data/examples/text/regional_flavor/README.md +14 -0
  115. data/examples/text/regional_flavor/article_wordbags.pig +39 -0
  116. data/examples/text/regional_flavor/j01-article_wordbags.rb +4 -0
  117. data/examples/text/regional_flavor/simple_pig_script.pig +27 -0
  118. data/examples/word_count/accumulator.rb +26 -0
  119. data/examples/word_count/tokenizer.rb +13 -0
  120. data/examples/word_count/word_count.rb +6 -0
  121. data/examples/workflow/cherry_pie.dot +97 -0
  122. data/examples/workflow/cherry_pie.png +0 -0
  123. data/examples/workflow/cherry_pie.rb +61 -26
  124. data/lib/hanuman.rb +34 -7
  125. data/lib/hanuman/graph.rb +55 -31
  126. data/lib/hanuman/graphvizzer.rb +199 -178
  127. data/lib/hanuman/graphvizzer/gv_models.rb +161 -0
  128. data/lib/hanuman/graphvizzer/gv_presenter.rb +97 -0
  129. data/lib/hanuman/link.rb +35 -0
  130. data/lib/hanuman/registry.rb +46 -0
  131. data/lib/hanuman/stage.rb +76 -32
  132. data/lib/wukong.rb +23 -24
  133. data/lib/wukong/boot.rb +87 -0
  134. data/lib/wukong/configuration.rb +8 -0
  135. data/lib/wukong/dataflow.rb +45 -78
  136. data/lib/wukong/driver.rb +99 -0
  137. data/lib/wukong/emitter.rb +22 -0
  138. data/lib/wukong/model/faker.rb +24 -24
  139. data/lib/wukong/model/flatpack_parser/flat.rb +60 -0
  140. data/lib/wukong/model/flatpack_parser/flatpack.rb +4 -0
  141. data/lib/wukong/model/flatpack_parser/lang.rb +46 -0
  142. data/lib/wukong/model/flatpack_parser/parser.rb +55 -0
  143. data/lib/wukong/model/flatpack_parser/tokens.rb +130 -0
  144. data/lib/wukong/processor.rb +60 -114
  145. data/lib/wukong/spec_helpers.rb +81 -0
  146. data/lib/wukong/spec_helpers/integration_driver.rb +144 -0
  147. data/lib/wukong/spec_helpers/integration_driver_matchers.rb +219 -0
  148. data/lib/wukong/spec_helpers/processor_helpers.rb +95 -0
  149. data/lib/wukong/spec_helpers/processor_methods.rb +108 -0
  150. data/lib/wukong/spec_helpers/shared_examples.rb +15 -0
  151. data/lib/wukong/spec_helpers/spec_driver.rb +28 -0
  152. data/lib/wukong/spec_helpers/spec_driver_matchers.rb +195 -0
  153. data/lib/wukong/version.rb +2 -1
  154. data/lib/wukong/widget/filters.rb +311 -0
  155. data/lib/wukong/widget/processors.rb +156 -0
  156. data/lib/wukong/widget/reducers.rb +7 -0
  157. data/lib/wukong/widget/reducers/accumulator.rb +73 -0
  158. data/lib/wukong/widget/reducers/bin.rb +318 -0
  159. data/lib/wukong/widget/reducers/count.rb +61 -0
  160. data/lib/wukong/widget/reducers/group.rb +85 -0
  161. data/lib/wukong/widget/reducers/group_concat.rb +70 -0
  162. data/lib/wukong/widget/reducers/moments.rb +72 -0
  163. data/lib/wukong/widget/reducers/sort.rb +130 -0
  164. data/lib/wukong/widget/serializers.rb +287 -0
  165. data/lib/wukong/widget/sink.rb +10 -52
  166. data/lib/wukong/widget/source.rb +7 -113
  167. data/lib/wukong/widget/utils.rb +46 -0
  168. data/lib/wukong/widgets.rb +6 -0
  169. data/spec/examples/dataflow/fibonacci_series_spec.rb +18 -0
  170. data/spec/examples/dataflow/parsing_spec.rb +12 -11
  171. data/spec/examples/dataflow/simple_spec.rb +32 -6
  172. data/spec/examples/dataflow/telegram_spec.rb +36 -36
  173. data/spec/examples/graph/minimum_spanning_tree_spec.rb +30 -31
  174. data/spec/examples/munging/airline_flights/identifiers_spec.rb +16 -0
  175. data/spec/examples/munging/airline_flights_spec.rb +202 -0
  176. data/spec/examples/text/pig_latin_spec.rb +13 -16
  177. data/spec/examples/workflow/cherry_pie_spec.rb +34 -4
  178. data/spec/hanuman/graph_spec.rb +27 -2
  179. data/spec/hanuman/hanuman_spec.rb +10 -0
  180. data/spec/hanuman/registry_spec.rb +123 -0
  181. data/spec/hanuman/stage_spec.rb +61 -7
  182. data/spec/spec_helper.rb +29 -19
  183. data/spec/support/hanuman_test_helpers.rb +14 -12
  184. data/spec/support/shared_context_for_reducers.rb +37 -0
  185. data/spec/support/shared_examples_for_builders.rb +101 -0
  186. data/spec/support/shared_examples_for_shortcuts.rb +57 -0
  187. data/spec/support/wukong_test_helpers.rb +37 -11
  188. data/spec/wukong/dataflow_spec.rb +77 -55
  189. data/spec/wukong/local_runner_spec.rb +24 -24
  190. data/spec/wukong/model/faker_spec.rb +132 -131
  191. data/spec/wukong/runner_spec.rb +8 -8
  192. data/spec/wukong/widget/filters_spec.rb +61 -0
  193. data/spec/wukong/widget/processors_spec.rb +126 -0
  194. data/spec/wukong/widget/reducers/bin_spec.rb +92 -0
  195. data/spec/wukong/widget/reducers/count_spec.rb +11 -0
  196. data/spec/wukong/widget/reducers/group_spec.rb +20 -0
  197. data/spec/wukong/widget/reducers/moments_spec.rb +36 -0
  198. data/spec/wukong/widget/reducers/sort_spec.rb +26 -0
  199. data/spec/wukong/widget/serializers_spec.rb +92 -0
  200. data/spec/wukong/widget/sink_spec.rb +15 -15
  201. data/spec/wukong/widget/source_spec.rb +65 -41
  202. data/spec/wukong/wukong_spec.rb +10 -0
  203. data/wukong.gemspec +17 -10
  204. metadata +359 -335
  205. data/.document +0 -5
  206. data/VERSION +0 -1
  207. data/bin/hdp-bin +0 -44
  208. data/bin/hdp-bzip +0 -23
  209. data/bin/hdp-cat +0 -3
  210. data/bin/hdp-catd +0 -3
  211. data/bin/hdp-cp +0 -3
  212. data/bin/hdp-du +0 -86
  213. data/bin/hdp-get +0 -3
  214. data/bin/hdp-kill +0 -3
  215. data/bin/hdp-kill-task +0 -3
  216. data/bin/hdp-ls +0 -11
  217. data/bin/hdp-mkdir +0 -2
  218. data/bin/hdp-mkdirp +0 -12
  219. data/bin/hdp-mv +0 -3
  220. data/bin/hdp-parts_to_keys.rb +0 -77
  221. data/bin/hdp-ps +0 -3
  222. data/bin/hdp-put +0 -3
  223. data/bin/hdp-rm +0 -32
  224. data/bin/hdp-sort +0 -40
  225. data/bin/hdp-stream +0 -40
  226. data/bin/hdp-stream-flat +0 -22
  227. data/bin/hdp-stream2 +0 -39
  228. data/bin/hdp-sync +0 -17
  229. data/bin/hdp-wc +0 -67
  230. data/bin/wu-flow +0 -10
  231. data/bin/wu-map +0 -17
  232. data/bin/wu-red +0 -17
  233. data/bin/wukong +0 -17
  234. data/data/CREDITS.md +0 -355
  235. data/data/graph/airfares.tsv +0 -2174
  236. data/data/text/gift_of_the_magi.txt +0 -225
  237. data/data/text/jabberwocky.txt +0 -36
  238. data/data/text/rectification_of_names.txt +0 -33
  239. data/data/twitter/a_atsigns_b.tsv +0 -64
  240. data/data/twitter/a_follows_b.tsv +0 -53
  241. data/data/twitter/tweet.tsv +0 -167
  242. data/data/twitter/twitter_user.tsv +0 -55
  243. data/data/wikipedia/dbpedia-sentences.tsv +0 -1000
  244. data/docpages/INSTALL.textile +0 -92
  245. data/docpages/LICENSE.textile +0 -107
  246. data/docpages/README-elastic_map_reduce.textile +0 -377
  247. data/docpages/README-performance.textile +0 -90
  248. data/docpages/README-wulign.textile +0 -65
  249. data/docpages/UsingWukong-part1-get_ready.textile +0 -17
  250. data/docpages/UsingWukong-part2-ThinkingBigData.textile +0 -75
  251. data/docpages/UsingWukong-part3-parsing.textile +0 -138
  252. data/docpages/_config.yml +0 -39
  253. data/docpages/avro/avro_notes.textile +0 -56
  254. data/docpages/avro/performance.textile +0 -36
  255. data/docpages/avro/tethering.textile +0 -19
  256. data/docpages/bigdata-tips.textile +0 -143
  257. data/docpages/code/api_response_example.txt +0 -20
  258. data/docpages/code/parser_skeleton.rb +0 -38
  259. data/docpages/diagrams/MapReduceDiagram.graffle +0 -0
  260. data/docpages/favicon.ico +0 -0
  261. data/docpages/gem.css +0 -16
  262. data/docpages/hadoop-tips.textile +0 -83
  263. data/docpages/index.textile +0 -92
  264. data/docpages/intro.textile +0 -8
  265. data/docpages/moreinfo.textile +0 -174
  266. data/docpages/news.html +0 -24
  267. data/docpages/pig/PigLatinExpressionsList.txt +0 -122
  268. data/docpages/pig/PigLatinReferenceManual.txt +0 -1640
  269. data/docpages/pig/commandline_params.txt +0 -26
  270. data/docpages/pig/cookbook.html +0 -481
  271. data/docpages/pig/images/hadoop-logo.jpg +0 -0
  272. data/docpages/pig/images/instruction_arrow.png +0 -0
  273. data/docpages/pig/images/pig-logo.gif +0 -0
  274. data/docpages/pig/piglatin_ref1.html +0 -1103
  275. data/docpages/pig/piglatin_ref2.html +0 -14340
  276. data/docpages/pig/setup.html +0 -505
  277. data/docpages/pig/skin/basic.css +0 -166
  278. data/docpages/pig/skin/breadcrumbs.js +0 -237
  279. data/docpages/pig/skin/fontsize.js +0 -166
  280. data/docpages/pig/skin/getBlank.js +0 -40
  281. data/docpages/pig/skin/getMenu.js +0 -45
  282. data/docpages/pig/skin/images/chapter.gif +0 -0
  283. data/docpages/pig/skin/images/chapter_open.gif +0 -0
  284. data/docpages/pig/skin/images/current.gif +0 -0
  285. data/docpages/pig/skin/images/external-link.gif +0 -0
  286. data/docpages/pig/skin/images/header_white_line.gif +0 -0
  287. data/docpages/pig/skin/images/page.gif +0 -0
  288. data/docpages/pig/skin/images/pdfdoc.gif +0 -0
  289. data/docpages/pig/skin/images/rc-b-l-15-1body-2menu-3menu.png +0 -0
  290. data/docpages/pig/skin/images/rc-b-r-15-1body-2menu-3menu.png +0 -0
  291. data/docpages/pig/skin/images/rc-b-r-5-1header-2tab-selected-3tab-selected.png +0 -0
  292. data/docpages/pig/skin/images/rc-t-l-5-1header-2searchbox-3searchbox.png +0 -0
  293. data/docpages/pig/skin/images/rc-t-l-5-1header-2tab-selected-3tab-selected.png +0 -0
  294. data/docpages/pig/skin/images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png +0 -0
  295. data/docpages/pig/skin/images/rc-t-r-15-1body-2menu-3menu.png +0 -0
  296. data/docpages/pig/skin/images/rc-t-r-5-1header-2searchbox-3searchbox.png +0 -0
  297. data/docpages/pig/skin/images/rc-t-r-5-1header-2tab-selected-3tab-selected.png +0 -0
  298. data/docpages/pig/skin/images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png +0 -0
  299. data/docpages/pig/skin/print.css +0 -54
  300. data/docpages/pig/skin/profile.css +0 -181
  301. data/docpages/pig/skin/screen.css +0 -587
  302. data/docpages/pig/tutorial.html +0 -1059
  303. data/docpages/pig/udf.html +0 -1509
  304. data/docpages/tutorial.textile +0 -283
  305. data/docpages/usage.textile +0 -195
  306. data/docpages/wutils.textile +0 -263
  307. data/examples/dataflow/complex.rb +0 -11
  308. data/examples/dataflow/donuts.rb +0 -13
  309. data/examples/tiny_count/jabberwocky_output.tsv +0 -92
  310. data/examples/word_count.rb +0 -48
  311. data/examples/workflow/fiddle.rb +0 -24
  312. data/lib/away/escapement.rb +0 -129
  313. data/lib/away/exe.rb +0 -11
  314. data/lib/away/experimental.rb +0 -5
  315. data/lib/away/from_file.rb +0 -52
  316. data/lib/away/job.rb +0 -56
  317. data/lib/away/job/rake_compat.rb +0 -17
  318. data/lib/away/registry.rb +0 -79
  319. data/lib/away/runner.rb +0 -276
  320. data/lib/away/runner/execute.rb +0 -121
  321. data/lib/away/script.rb +0 -161
  322. data/lib/away/script/hadoop_command.rb +0 -240
  323. data/lib/away/source/file_list_source.rb +0 -15
  324. data/lib/away/source/looper.rb +0 -18
  325. data/lib/away/task.rb +0 -219
  326. data/lib/hanuman/action.rb +0 -21
  327. data/lib/hanuman/chain.rb +0 -4
  328. data/lib/hanuman/graphviz.rb +0 -74
  329. data/lib/hanuman/resource.rb +0 -6
  330. data/lib/hanuman/slot.rb +0 -87
  331. data/lib/hanuman/slottable.rb +0 -220
  332. data/lib/wukong/bad_record.rb +0 -15
  333. data/lib/wukong/event.rb +0 -44
  334. data/lib/wukong/local_runner.rb +0 -55
  335. data/lib/wukong/mapred.rb +0 -3
  336. data/lib/wukong/universe.rb +0 -48
  337. data/lib/wukong/widget/filter.rb +0 -81
  338. data/lib/wukong/widget/gibberish.rb +0 -123
  339. data/lib/wukong/widget/monitor.rb +0 -26
  340. data/lib/wukong/widget/reducer.rb +0 -66
  341. data/lib/wukong/widget/stringifier.rb +0 -50
  342. data/lib/wukong/workflow.rb +0 -22
  343. data/lib/wukong/workflow/command.rb +0 -42
  344. data/old/config/emr-example.yaml +0 -48
  345. data/old/examples/README.txt +0 -17
  346. data/old/examples/contrib/jeans/README.markdown +0 -165
  347. data/old/examples/contrib/jeans/data/normalized_sizes +0 -3
  348. data/old/examples/contrib/jeans/data/orders.tsv +0 -1302
  349. data/old/examples/contrib/jeans/data/sizes +0 -3
  350. data/old/examples/contrib/jeans/normalize.rb +0 -20
  351. data/old/examples/contrib/jeans/sizes.rb +0 -55
  352. data/old/examples/corpus/bnc_word_freq.rb +0 -44
  353. data/old/examples/corpus/bucket_counter.rb +0 -47
  354. data/old/examples/corpus/dbpedia_abstract_to_sentences.rb +0 -86
  355. data/old/examples/corpus/sentence_bigrams.rb +0 -53
  356. data/old/examples/corpus/sentence_coocurrence.rb +0 -66
  357. data/old/examples/corpus/stopwords.rb +0 -138
  358. data/old/examples/corpus/words_to_bigrams.rb +0 -53
  359. data/old/examples/emr/README.textile +0 -110
  360. data/old/examples/emr/dot_wukong_dir/credentials.json +0 -7
  361. data/old/examples/emr/dot_wukong_dir/emr.yaml +0 -69
  362. data/old/examples/emr/dot_wukong_dir/emr_bootstrap.sh +0 -33
  363. data/old/examples/emr/elastic_mapreduce_example.rb +0 -28
  364. data/old/examples/network_graph/adjacency_list.rb +0 -74
  365. data/old/examples/network_graph/breadth_first_search.rb +0 -72
  366. data/old/examples/network_graph/gen_2paths.rb +0 -68
  367. data/old/examples/network_graph/gen_multi_edge.rb +0 -112
  368. data/old/examples/network_graph/gen_symmetric_links.rb +0 -64
  369. data/old/examples/pagerank/README.textile +0 -6
  370. data/old/examples/pagerank/gen_initial_pagerank_graph.pig +0 -57
  371. data/old/examples/pagerank/pagerank.rb +0 -72
  372. data/old/examples/pagerank/pagerank_initialize.rb +0 -42
  373. data/old/examples/pagerank/run_pagerank.sh +0 -21
  374. data/old/examples/sample_records.rb +0 -33
  375. data/old/examples/server_logs/apache_log_parser.rb +0 -15
  376. data/old/examples/server_logs/nook.rb +0 -48
  377. data/old/examples/server_logs/nook/faraday_dummy_adapter.rb +0 -94
  378. data/old/examples/server_logs/user_agent.rb +0 -40
  379. data/old/examples/simple_word_count.rb +0 -82
  380. data/old/examples/size.rb +0 -61
  381. data/old/examples/stats/avg_value_frequency.rb +0 -86
  382. data/old/examples/stats/binning_percentile_estimator.rb +0 -140
  383. data/old/examples/stats/data/avg_value_frequency.tsv +0 -3
  384. data/old/examples/stats/rank_and_bin.rb +0 -173
  385. data/old/examples/stupidly_simple_filter.rb +0 -40
  386. data/old/examples/word_count.rb +0 -75
  387. data/old/graph/graphviz_builder.rb +0 -580
  388. data/old/graph_easy/Attributes.pm +0 -4181
  389. data/old/graph_easy/Graphviz.pm +0 -2232
  390. data/old/wukong.rb +0 -18
  391. data/old/wukong/and_pig.rb +0 -38
  392. data/old/wukong/bad_record.rb +0 -18
  393. data/old/wukong/datatypes.rb +0 -24
  394. data/old/wukong/datatypes/enum.rb +0 -127
  395. data/old/wukong/datatypes/fake_types.rb +0 -17
  396. data/old/wukong/decorator.rb +0 -28
  397. data/old/wukong/encoding/asciize.rb +0 -108
  398. data/old/wukong/extensions.rb +0 -16
  399. data/old/wukong/extensions/array.rb +0 -18
  400. data/old/wukong/extensions/blank.rb +0 -93
  401. data/old/wukong/extensions/class.rb +0 -189
  402. data/old/wukong/extensions/date_time.rb +0 -53
  403. data/old/wukong/extensions/emittable.rb +0 -69
  404. data/old/wukong/extensions/enumerable.rb +0 -79
  405. data/old/wukong/extensions/hash.rb +0 -167
  406. data/old/wukong/extensions/hash_keys.rb +0 -16
  407. data/old/wukong/extensions/hash_like.rb +0 -150
  408. data/old/wukong/extensions/hashlike_class.rb +0 -47
  409. data/old/wukong/extensions/module.rb +0 -2
  410. data/old/wukong/extensions/pathname.rb +0 -27
  411. data/old/wukong/extensions/string.rb +0 -65
  412. data/old/wukong/extensions/struct.rb +0 -17
  413. data/old/wukong/extensions/symbol.rb +0 -11
  414. data/old/wukong/filename_pattern.rb +0 -74
  415. data/old/wukong/helper.rb +0 -7
  416. data/old/wukong/helper/stopwords.rb +0 -195
  417. data/old/wukong/helper/tokenize.rb +0 -35
  418. data/old/wukong/logger.rb +0 -38
  419. data/old/wukong/periodic_monitor.rb +0 -72
  420. data/old/wukong/schema.rb +0 -269
  421. data/old/wukong/script.rb +0 -286
  422. data/old/wukong/script/avro_command.rb +0 -5
  423. data/old/wukong/script/cassandra_loader_script.rb +0 -40
  424. data/old/wukong/script/emr_command.rb +0 -168
  425. data/old/wukong/script/hadoop_command.rb +0 -237
  426. data/old/wukong/script/local_command.rb +0 -41
  427. data/old/wukong/store.rb +0 -10
  428. data/old/wukong/store/base.rb +0 -27
  429. data/old/wukong/store/cassandra.rb +0 -10
  430. data/old/wukong/store/cassandra/streaming.rb +0 -75
  431. data/old/wukong/store/cassandra/struct_loader.rb +0 -21
  432. data/old/wukong/store/cassandra_model.rb +0 -91
  433. data/old/wukong/store/chh_chunked_flat_file_store.rb +0 -37
  434. data/old/wukong/store/chunked_flat_file_store.rb +0 -48
  435. data/old/wukong/store/conditional_store.rb +0 -57
  436. data/old/wukong/store/factory.rb +0 -8
  437. data/old/wukong/store/flat_file_store.rb +0 -89
  438. data/old/wukong/store/key_store.rb +0 -51
  439. data/old/wukong/store/null_store.rb +0 -15
  440. data/old/wukong/store/read_thru_store.rb +0 -22
  441. data/old/wukong/store/tokyo_tdb_key_store.rb +0 -33
  442. data/old/wukong/store/tyrant_rdb_key_store.rb +0 -57
  443. data/old/wukong/store/tyrant_tdb_key_store.rb +0 -20
  444. data/old/wukong/streamer.rb +0 -30
  445. data/old/wukong/streamer/accumulating_reducer.rb +0 -83
  446. data/old/wukong/streamer/base.rb +0 -126
  447. data/old/wukong/streamer/counting_reducer.rb +0 -25
  448. data/old/wukong/streamer/filter.rb +0 -20
  449. data/old/wukong/streamer/instance_streamer.rb +0 -15
  450. data/old/wukong/streamer/json_streamer.rb +0 -21
  451. data/old/wukong/streamer/line_streamer.rb +0 -12
  452. data/old/wukong/streamer/list_reducer.rb +0 -31
  453. data/old/wukong/streamer/rank_and_bin_reducer.rb +0 -145
  454. data/old/wukong/streamer/record_streamer.rb +0 -14
  455. data/old/wukong/streamer/reducer.rb +0 -11
  456. data/old/wukong/streamer/set_reducer.rb +0 -14
  457. data/old/wukong/streamer/struct_streamer.rb +0 -48
  458. data/old/wukong/streamer/summing_reducer.rb +0 -29
  459. data/old/wukong/streamer/uniq_by_last_reducer.rb +0 -51
  460. data/old/wukong/typed_struct.rb +0 -12
  461. data/spec/away/encoding_spec.rb +0 -32
  462. data/spec/away/exe_spec.rb +0 -20
  463. data/spec/away/flow_spec.rb +0 -82
  464. data/spec/away/graph_spec.rb +0 -6
  465. data/spec/away/job_spec.rb +0 -15
  466. data/spec/away/rake_compat_spec.rb +0 -9
  467. data/spec/away/script_spec.rb +0 -81
  468. data/spec/hanuman/graphviz_spec.rb +0 -29
  469. data/spec/hanuman/slot_spec.rb +0 -2
  470. data/spec/support/examples_helper.rb +0 -10
  471. data/spec/support/streamer_test_helpers.rb +0 -6
  472. data/spec/support/wukong_widget_helpers.rb +0 -66
  473. data/spec/wukong/processor_spec.rb +0 -109
  474. data/spec/wukong/widget/filter_spec.rb +0 -99
  475. data/spec/wukong/widget/stringifier_spec.rb +0 -51
  476. data/spec/wukong/workflow/command_spec.rb +0 -5
@@ -0,0 +1,247 @@
1
+ require 'gorillib/data_munging'
2
+ require_relative '../geolocated'
3
+
4
+ describe Wukong::Geolocated do
5
+ let(:aus_lng){ -97.759003 } # Austin, TX -- infochimps HQ
6
+ let(:aus_lat){ 30.273884 }
7
+ let(:sat_lng){ -98.486123 } # San Antonio, TX
8
+ let(:sat_lat){ 29.42575 }
9
+ let(:dpi){ 72 }
10
+ #
11
+ let(:aus_tile_x_3){ 1.82758 } # zoom level 3
12
+ let(:aus_tile_y_3){ 3.29356 }
13
+ let(:aus_pixel_x_3){ 468 }
14
+ let(:aus_pixel_y_3){ 843 }
15
+ #
16
+ let(:aus_tile_x_8){ 58.48248675555555 } # zoom level 8
17
+ let(:aus_tile_y_8){ 105.39405073699557 }
18
+ let(:aus_tile_x_11){ 467 } # zoom level 11
19
+ let(:aus_tile_y_11){ 843 }
20
+ #
21
+ let(:aus_quadkey ){ "0231301203311211" }
22
+ let(:aus_quadkey_3){ "023" }
23
+ let(:radius){ 1_000_000 } # 1,000 km
24
+
25
+ context Wukong::Geolocated::ByCoordinates do
26
+ let(:point_klass) do
27
+ module Wukong
28
+ class TestPoint
29
+ include Gorillib::Model
30
+ include Wukong::Geolocated::ByCoordinates
31
+ field :name, String, position: 0, doc: "Name of this location"
32
+ field :longitude, Float, position: 1, doc: "Longitude (X) of a point, in decimal degrees"
33
+ field :latitude, Float, position: 2, doc: "Latitude (Y) of a point, in decimal degrees"
34
+ end
35
+ end
36
+ Wukong::TestPoint
37
+ end
38
+ subject{ point_klass.new("Infochimps HQ", aus_lng, aus_lat) }
39
+
40
+ context '#tile_xf' do
41
+ it "tile X coordinate, as a float" do
42
+ subject.tile_xf(3).should be_within(0.0001).of( 1.82758)
43
+ subject.tile_xf(8).should be_within(0.0001).of(58.48248)
44
+ subject.tile_xf(11).should be_within(0.0001).of(467.8598)
45
+ end
46
+ end
47
+ context '#tile_x' do
48
+ it "tile X coordinate, as an integer" do
49
+ subject.tile_x(3).should == 1
50
+ subject.tile_x(8).should == 58
51
+ subject.tile_x(11).should == 467
52
+ end
53
+ end
54
+ context '#tile_yf' do
55
+ it "tile Y coordinate, as a float" do
56
+ subject.tile_yf(3).should be_within(0.0001).of( 3.29356)
57
+ subject.tile_yf(8).should be_within(0.0001).of(105.394051)
58
+ subject.tile_yf(11).should be_within(0.0001).of(843.152406)
59
+ end
60
+ end
61
+ context '#tile_x' do
62
+ it "tile Y coordinate, as an integer" do
63
+ subject.tile_y(3).should == 3
64
+ subject.tile_y(8).should == 105
65
+ subject.tile_y(11).should == 843
66
+ end
67
+ end
68
+ context '#quadkey' do
69
+ it "a string of 2-bit tile selectors" do
70
+ subject.quadkey(3).should == "023"
71
+ subject.quadkey(16).should == "0231301203311211"
72
+ end
73
+ end
74
+ end
75
+
76
+ context Wukong::Geolocated do
77
+
78
+ it "gives private methods on including class as well as the methods on itself" do
79
+ klass = Class.new{ include Wukong::Geolocated }
80
+ klass.should be_private_method_defined(:lng_lat_zl_to_tile_xy)
81
+ klass.should be_private_method_defined(:haversine_distance)
82
+ end
83
+
84
+ #
85
+ # Tile coordinates
86
+ #
87
+
88
+ it "returns a map tile size given a zoom level" do
89
+ Wukong::Geolocated.map_tile_size(3).should == 8
90
+ end
91
+
92
+ it "returns a tile_x, tile_y pair given a longitude, latitude and zoom level" do
93
+ Wukong::Geolocated.lng_lat_zl_to_tile_xy(aus_lng, aus_lat, 8).should == [ 58, 105]
94
+ Wukong::Geolocated.lng_lat_zl_to_tile_xy(aus_lng, aus_lat, 11).should == [467, 843]
95
+ end
96
+
97
+ it "returns a longitude, latitude pair given tile_x, tile_y and zoom level" do
98
+ lng, lat = Wukong::Geolocated.tile_xy_zl_to_lng_lat(aus_tile_x_8, aus_tile_y_8, 8)
99
+ lng.should be_within(0.0001).of(aus_lng)
100
+ lat.should be_within(0.0001).of(aus_lat)
101
+ end
102
+
103
+ #
104
+ # Pixel coordinates
105
+ #
106
+
107
+ it "returns a map pizel size given a zoom level" do
108
+ Wukong::Geolocated.map_pixel_size(3).should == 2048
109
+ end
110
+
111
+ it "returns a pixel_x, pixel_y pair given a longitude, latitude and zoom level" do
112
+ Wukong::Geolocated.lng_lat_zl_to_pixel_xy(aus_lng, aus_lat, 3).should == [468, 843]
113
+ end
114
+
115
+ it "returns a longitude, latitude pair given pixel_x, pixel_y and zoom level" do
116
+ lng, lat = Wukong::Geolocated.pixel_xy_zl_to_lng_lat(aus_pixel_x_3, aus_pixel_y_3, 3)
117
+ lat.round(4).should == 30.2970
118
+ lng.round(4).should == -97.7344
119
+ end
120
+
121
+ it "returns a tile x-y pair given a pixel x-y pair" do
122
+ Wukong::Geolocated.pixel_xy_to_tile_xy(aus_pixel_x_3, aus_pixel_y_3).should == [1,3]
123
+ end
124
+
125
+ it "returns a pixel x-y pair given a float tile x-y pair" do
126
+ Wukong::Geolocated.tile_xy_to_pixel_xy(aus_tile_x_3, aus_tile_y_3 ).should == [467.86048, 843.15136]
127
+ end
128
+
129
+ it "returns a pixel x-y pair given an integer tile x-y pair" do
130
+ Wukong::Geolocated.tile_xy_to_pixel_xy(aus_tile_x_3.to_i, aus_tile_y_3.to_i).should == [256, 768]
131
+ end
132
+
133
+ #
134
+ # Quadkey coordinates
135
+ #
136
+
137
+ it "returns a quadkey given a tile x-y pair and a zoom level" do
138
+ Wukong::Geolocated.tile_xy_zl_to_quadkey(aus_tile_x_3, aus_tile_y_3, 3).should == "023"
139
+ Wukong::Geolocated.tile_xy_zl_to_quadkey(aus_tile_x_8, aus_tile_y_8, 8).should == "02313012"
140
+ Wukong::Geolocated.tile_xy_zl_to_quadkey(aus_tile_x_11, aus_tile_y_11,11).should == "02313012033"
141
+ end
142
+
143
+ it "returns a quadkey given a longitude, latitude and a zoom level" do
144
+ Wukong::Geolocated.lng_lat_zl_to_quadkey(aus_lng, aus_lat, 3).should == "023"
145
+ Wukong::Geolocated.lng_lat_zl_to_quadkey(aus_lng, aus_lat, 8).should == "02313012"
146
+ Wukong::Geolocated.lng_lat_zl_to_quadkey(aus_lng, aus_lat, 11).should == "02313012033"
147
+ Wukong::Geolocated.lng_lat_zl_to_quadkey(aus_lng, aus_lat, 16).should == "0231301203311211"
148
+ end
149
+
150
+ it "returns a packed quadkey (an integer) given a tile xy and zoom level" do
151
+ Wukong::Geolocated.tile_xy_zl_to_packed_qk(aus_tile_x_3.floor, aus_tile_y_3.floor, 3).should == "023".to_i(4)
152
+ Wukong::Geolocated.tile_xy_zl_to_packed_qk(aus_tile_x_8.floor, aus_tile_y_8.floor, 8).should == "02313012".to_i(4)
153
+ Wukong::Geolocated.tile_xy_zl_to_packed_qk(aus_tile_x_11.floor, aus_tile_y_11.floor,11).should == "02313012033".to_i(4)
154
+ end
155
+
156
+ context '.packed_qk_zl_to_tile_xy' do
157
+ let(:packed_qk){ "0231301203311211".to_i(4) }
158
+ it "returns a tile xy given a packed quadkey (integer)" do
159
+ Wukong::Geolocated.packed_qk_zl_to_tile_xy(packed_qk >> 26, 3).should == [ 1, 3, 3]
160
+ Wukong::Geolocated.packed_qk_zl_to_tile_xy(packed_qk >> 16, 8).should == [ 58, 105, 8]
161
+ Wukong::Geolocated.packed_qk_zl_to_tile_xy(packed_qk >> 10, 11).should == [467, 843, 11]
162
+ end
163
+
164
+ it "defaults to zl=16 for packed quadkeys" do
165
+ Wukong::Geolocated.packed_qk_zl_to_tile_xy(packed_qk ).should == [14971, 26980, 16]
166
+ Wukong::Geolocated.packed_qk_zl_to_tile_xy(packed_qk, 16).should == [14971, 26980, 16]
167
+ end
168
+ end
169
+
170
+ it "returns tile x-y pair and a zoom level given a quadkey" do
171
+ Wukong::Geolocated.quadkey_to_tile_xy_zl(aus_quadkey[0..2] ).should == [1, 3, 3]
172
+ Wukong::Geolocated.quadkey_to_tile_xy_zl(aus_quadkey[0..7] ).should == [aus_tile_x_8.floor, aus_tile_y_8.floor, 8]
173
+ Wukong::Geolocated.quadkey_to_tile_xy_zl(aus_quadkey[0..10]).should == [aus_tile_x_11.floor, aus_tile_y_11.floor, 11]
174
+ end
175
+
176
+ it "allows '' to be a quadkey (whole map)" do
177
+ Wukong::Geolocated.quadkey_to_tile_xy_zl("").should == [0, 0, 0]
178
+ end
179
+
180
+ it "maps tile xyz [0,0,0] to quadkey ''" do
181
+ Wukong::Geolocated.tile_xy_zl_to_quadkey(0,0,0).should == ""
182
+ end
183
+
184
+ it "throws an error if a bad quadkey is given" do
185
+ expect{ Wukong::Geolocated.quadkey_to_tile_xy_zl("bad_key") }.to raise_error(ArgumentError, /Quadkey.*characters/)
186
+ end
187
+
188
+ it "returns a bounding box given a quadkey" do
189
+ left, btm, right, top = Wukong::Geolocated.quadkey_to_bbox(aus_quadkey_3)
190
+ left.should be_within(0.0001).of(-135.0)
191
+ right.should be_within(0.0001).of(- 90.0)
192
+ btm.should be_within(0.0001).of( 0.0)
193
+ top.should be_within(0.0001).of( 40.9799)
194
+ end
195
+
196
+ it "returns the smallest quadkey containing two points" do
197
+ Wukong::Geolocated.quadkey_containing_bbox(aus_lng, aus_lat, sat_lng, sat_lat).should == "023130"
198
+ end
199
+
200
+ it "returns a bounding box given a point and radius" do
201
+ left, btm, right, top = Wukong::Geolocated.lng_lat_rad_to_bbox(aus_lng, aus_lat, radius)
202
+
203
+ left.should be_within(0.0001).of(-108.1723)
204
+ right.should be_within(0.0001).of(- 87.3457)
205
+ btm.should be_within(0.0001).of( 21.2807)
206
+ top.should be_within(0.0001).of( 39.2671)
207
+ end
208
+
209
+ it "returns a centroid given a bounding box" do
210
+ mid_lng, mid_lat = Wukong::Geolocated.bbox_centroid([aus_lng, sat_lat], [sat_lng, aus_lat])
211
+ mid_lng.should be_within(0.0001).of(-98.1241)
212
+ mid_lat.should be_within(0.0001).of( 29.8503)
213
+ end
214
+
215
+ it "returns a pixel resolution given a latitude and zoom level" do
216
+ Wukong::Geolocated.pixel_resolution(aus_lat, 3).should be_within(0.0001).of(16880.4081)
217
+ end
218
+
219
+ it "returns a map scale given a latitude, zoom level and dpi" do
220
+ Wukong::Geolocated.map_scale_for_dpi(aus_lat, 3, dpi).should be_within(0.0001).of(47849975.8302)
221
+ end
222
+
223
+ it "calculates the haversine distance between two points" do
224
+ Wukong::Geolocated.haversine_distance(aus_lng, aus_lat, sat_lng, sat_lat).should be_within(0.0001).of(117522.1219)
225
+ end
226
+
227
+ it "calculates the haversine midpoint between two points" do
228
+ lng, lat = Wukong::Geolocated.haversine_midpoint(aus_lng, sat_lat, sat_lng, aus_lat)
229
+ lng.should be_within(0.0001).of(-98.1241)
230
+ lat.should be_within(0.0001).of( 29.8503)
231
+ end
232
+
233
+ it "calculates the point a given distance directly north from a lat/lng" do
234
+ lng, lat = Wukong::Geolocated.point_north(aus_lng, aus_lat, 1000000)
235
+ lng.should be_within(0.0001).of(-97.7590)
236
+ lat.should be_within(0.0001).of( 39.2671)
237
+ end
238
+
239
+ it "calculates the point a given distance directly east from a lat/lng" do
240
+ lng, lat = Wukong::Geolocated.point_east(aus_lng, aus_lat, 1000000)
241
+ lng.should be_within(0.0001).of(-87.3457)
242
+ lat.should be_within(0.0001).of( 30.2739)
243
+ end
244
+
245
+
246
+ end # module methods
247
+ end
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'faraday'
4
+ require 'gorillib/pathname/utils'
5
+ #
6
+ require_relative '../rake_helper'
7
+ require_relative '../geo'
8
+
9
+ Pathname.register_paths(
10
+ images: [:root, 'images', 'map_grid_cells'],
11
+ )
12
+
13
+ Settings.use :commandline
14
+ Settings.define :server, default: 'http://a.tile.stamen.com/toner-lite', description: "Map tile server; anything X/Y/Z.png-addressable works, eg http://b.tile.openstreetmap.org"
15
+ Settings.define :clobber, default: true, type: :boolean, description: "true to overwrite files (the default)"
16
+
17
+ Settings.define :slug, default: 'tile', description: "A name to prefix on the file"
18
+
19
+ Settings.define :zl, description: "Zoom level of tile to fetch. An integer between 0 (world) and 16 or so"
20
+ Settings.define :tile_x, type: Integer, description: "Tile X index, an integer between 0 and 2^zoom_level - 1"
21
+ Settings.define :tile_y, type: Integer, description: "Tile Y index, an integer between 0 and 2^zoom_level - 1"
22
+ Settings.define :longitude, type: Float, description: "Longitude (X) of a point on the tile in decimal degrees"
23
+ Settings.define :latitude, type: Float, description: "Latitude (Y) of a point on the tile in decimal degrees"
24
+ Settings.define :quadkey, description: "Quadkey of tile, eg 002313012."
25
+
26
+ Settings.resolve!
27
+
28
+ def fetch_tile(tile_info)
29
+ tile = Wukong::Geo::Quadtile.from_whatever(tile_info)
30
+
31
+ Pathname.of(:images, tile.basename(Settings.slug)).if_missing(force: Settings.clobber) do |output_file|
32
+ Log.info "Writing to file #{output_file.path} from #{tile.tile_url}"
33
+ output_file << tile.fetch.body
34
+ end
35
+ end
36
+
37
+ tile_info = Settings.to_hash
38
+
39
+ MAX_TILES_TO_FETCH = 1e4 unless defined?(MAX_TILES_TO_FETCH)
40
+ # MAX_TILES_TO_FETCH = 18 unless defined?(MAX_TILES_TO_FETCH)
41
+
42
+ def quadkey_range(quadkey, zl, zl_max, &block)
43
+ return if zl > zl_max
44
+ p [quadkey, zl, zl_max]
45
+ #
46
+ if quadkey.length >= zl
47
+ yield quadkey[0 .. zl]
48
+ quadkey_range(quadkey, zl+1, zl_max, &block)
49
+ else
50
+ n_tiles = 4 ** (zl_max - quadkey.length)
51
+ if (n_tiles > MAX_TILES_TO_FETCH) then raise "Too many sub-tiles: #{quadkey} at zl #{zl}..#{zl_max} would create #{n_tiles} tiles; limit is #{MAX_TILES_TO_FETCH}" ; end
52
+ #
53
+ (0..3).each do |quad|
54
+ quadkey_range("#{quadkey}#{quad}", zl, zl_max, &block)
55
+ end
56
+ end
57
+ end
58
+
59
+ # Guess the zoom level from quadkey if missing
60
+ Settings.zl ||= Settings.quadkey.length.to_s if Settings.quadkey.present?
61
+ # and then extract the range if any
62
+ zl_min, zl_max = Settings.zl.split('-', 2)
63
+ zl_min = zl_min.to_i
64
+ zl_max = zl_max ? zl_max.to_i : zl_min
65
+
66
+ if Settings.quadkey.present?
67
+ Settings.quadkey.gsub!(/_/, '')
68
+
69
+ quadkey_range(Settings.quadkey, zl_min, zl_max) do |quadkey|
70
+ fetch_tile(tile_info.merge(quadkey: quadkey, zl: quadkey.length))
71
+ end
72
+
73
+ else
74
+ (zl_min.to_i .. zl_max.to_i).each do |zl|
75
+ fetch_tile(tile_info.merge(zl: zl))
76
+ end
77
+ end
@@ -1,73 +1,73 @@
1
- require Pathname.path_to(:examples, 'graph/union_find')
2
- require 'gorillib/model/serialization'
1
+ # require Pathname.path_to(:examples, 'graph/union_find')
2
+ # require 'gorillib/model/serialization'
3
3
 
4
- class Airfare
5
- include Gorillib::Model
4
+ # class Airfare
5
+ # include Gorillib::Model
6
6
 
7
- field :from, String
8
- field :into, String
9
- field :price, Integer
10
- field :from_name, String
11
- field :into_name, String
7
+ # field :from, String
8
+ # field :into, String
9
+ # field :price, Integer
10
+ # field :from_name, String
11
+ # field :into_name, String
12
12
 
13
- def undirected_edge
14
- [from, into].sort
15
- end
16
- end
13
+ # def undirected_edge
14
+ # [from, into].sort
15
+ # end
16
+ # end
17
17
 
18
18
 
19
- airfares = File.open(Pathname.path_to(:data, 'graph/airfares.tsv')).
20
- readlines.
21
- map{|line| line.split("\t").map(&:strip) }.
22
- map{|vals| Airfare.from_tuple(*vals) }
19
+ # airfares = File.open(Pathname.path_to(:data, 'graph/airfares.tsv')).
20
+ # readlines.
21
+ # map{|line| line.split("\t").map(&:strip) }.
22
+ # map{|vals| Airfare.from_tuple(*vals) }
23
23
 
24
- # airfares.sort_by(&:undirected_edge).each do |airfare|
25
- # puts "%-7s\t%-7s\t%-7s\t%-7s\t%d" % [*airfare.undirected_edge, airfare.from, airfare.into, airfare.price]
26
- # end
24
+ # # airfares.sort_by(&:undirected_edge).each do |airfare|
25
+ # # puts "%-7s\t%-7s\t%-7s\t%-7s\t%d" % [*airfare.undirected_edge, airfare.from, airfare.into, airfare.price]
26
+ # # end
27
27
 
28
- cities = airfares.map(&:from).uniq | airfares.map(&:into)
28
+ # cities = airfares.map(&:from).uniq | airfares.map(&:into)
29
29
 
30
- edges = {}
31
- airfares.each do |airfare|
32
- edge = airfare.undirected_edge
33
- edges[edge] = airfare.price unless edges.include?(edge) && edges[edge] <= airfare.price
34
- end
30
+ # edges = {}
31
+ # airfares.each do |airfare|
32
+ # edge = airfare.undirected_edge
33
+ # edges[edge] = airfare.price unless edges.include?(edge) && edges[edge] <= airfare.price
34
+ # end
35
35
 
36
- mst = Hash.new{|h,k| h[k] = {} }
37
- forest = Wukong::Widget::DisjointForest.new
36
+ # mst = Hash.new{|h,k| h[k] = {} }
37
+ # forest = Wukong::Widget::DisjointForest.new
38
38
 
39
- edges.sort_by(&:last).each do |(city_a, city_b), price|
40
- forest.add(city_a) if not forest.include?(city_a)
41
- forest.add(city_b) if not forest.include?(city_b)
42
- next if forest.find(city_a) == forest.find(city_b)
43
- forest.union(city_a, city_b)
44
- mst[city_a][city_b] = price
45
- end
39
+ # edges.sort_by(&:last).each do |(city_a, city_b), price|
40
+ # forest.add(city_a) if not forest.include?(city_a)
41
+ # forest.add(city_b) if not forest.include?(city_b)
42
+ # next if forest.find(city_a) == forest.find(city_b)
43
+ # forest.union(city_a, city_b)
44
+ # mst[city_a][city_b] = price
45
+ # end
46
46
 
47
- $mst_both = Hash.new{|h,k| h[k] = {} }
48
- mst.each{|city_a, hsh| hsh.each{|city_b, price|
49
- $mst_both[city_a][city_b] = price
50
- $mst_both[city_b][city_a] = price
51
- }}
52
- def dfs(city, seen)
53
- seen << city
54
- children = $mst_both[city].keys - seen
55
- # [children, children.map{|child| dfs(child, seen) } ]
56
- children.map{|child| [ child, dfs(child, seen) ] }
57
- end
58
- sorted_cities = ['LAS', dfs('LAS', [])]
47
+ # $mst_both = Hash.new{|h,k| h[k] = {} }
48
+ # mst.each{|city_a, hsh| hsh.each{|city_b, price|
49
+ # $mst_both[city_a][city_b] = price
50
+ # $mst_both[city_b][city_a] = price
51
+ # }}
52
+ # def dfs(city, seen)
53
+ # seen << city
54
+ # children = $mst_both[city].keys - seen
55
+ # # [children, children.map{|child| dfs(child, seen) } ]
56
+ # children.map{|child| [ child, dfs(child, seen) ] }
57
+ # end
58
+ # sorted_cities = ['LAS', dfs('LAS', [])]
59
59
 
60
- gv_filename = Pathname.path_to(:tmp, 'airfares_mst')
61
- File.open("#{gv_filename}.dot", 'w') do |gv_file|
62
- gv_file.puts "graph AirfareMST {\n label=\"#{Time.now}\"; height= 800; labelloc = t; mindist = 1.5 ; "
63
- # gv_file.puts "mode = hier;"
64
- gv_file.puts 'node [ shape = "plaintext" ]; '
65
- sorted_cities.flatten.each{|city| gv_file.puts " #{city};" }
66
- mst.sort_by(&:first).each do |from, hsh|
67
- hsh.sort_by(&:first).each do |into, price|
68
- gv_file.puts " %-7s -- %-7s [ label = \"%d\" ];" % [from, into, price]
69
- end
70
- end
71
- gv_file.puts "}"
72
- end
73
- `neato -Tpng #{gv_filename}.dot -o #{gv_filename}.png`
60
+ # gv_filename = Pathname.path_to(:tmp, 'airfares_mst')
61
+ # File.open("#{gv_filename}.dot", 'w') do |gv_file|
62
+ # gv_file.puts "graph AirfareMST {\n label=\"#{Time.now}\"; height= 800; labelloc = t; mindist = 1.5 ; "
63
+ # # gv_file.puts "mode = hier;"
64
+ # gv_file.puts 'node [ shape = "plaintext" ]; '
65
+ # sorted_cities.flatten.each{|city| gv_file.puts " #{city};" }
66
+ # mst.sort_by(&:first).each do |from, hsh|
67
+ # hsh.sort_by(&:first).each do |into, price|
68
+ # gv_file.puts " %-7s -- %-7s [ label = \"%d\" ];" % [from, into, price]
69
+ # end
70
+ # end
71
+ # gv_file.puts "}"
72
+ # end
73
+ # `neato -Tpng #{gv_filename}.dot -o #{gv_filename}.png`