=== Test case: lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 (click for source code)
=== Config value:
[{watchdog,infinity},
<EMAIL_ADDRESS>{tc_group_properties,[]},
{tc_group_path,[]},
{data_dir,"/Users/anne-francevanswieten/lasp/_build/test/lib/lasp/test/lasp_advertisement_counter_partition_overcounting_SUITE_data/"},
<EMAIL_ADDRESS>=== Current directory is<EMAIL_ADDRESS>=== Started at 2017-05-02 18:12:45
*** User 2017-05-02 18:12:45.132 ***
Beginning test case client_server_partition_overcounting_test
*** User 2017-05-02 18:12:45.144 ***
Running client_server_partition_overcounting_test with nodes [server,client_1,
client_2,
client_3,
client_4]
*** User 2017-05-02 18:12:45.144 ***
Launching Erlang distribution...
*** System report during lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 2017-05-02 18:12:45.203 ***
=PROGRESS REPORT==== 2-May-2017::18:12:45 ===
application: sasl
started_at: 'runner@MacBook-Pro-de-Anne-France'
*** System report during lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 2017-05-02 18:12:45.212 ***
=PROGRESS REPORT==== 2-May-2017::18:12:45 ===
application: syntax_tools
started_at: 'runner@MacBook-Pro-de-Anne-France'
*** System report during lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 2017-05-02 18:12:45.223 ***
=PROGRESS REPORT==== 2-May-2017::18:12:45 ===
application: compiler
started_at: 'runner@MacBook-Pro-de-Anne-France'
*** System report during lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 2017-05-02 18:12:45.235 ***
=PROGRESS REPORT==== 2-May-2017::18:12:45 ===
supervisor: {local,gr_sup}
started: [{pid,<0.479.0>},
{id,gr_counter_sup},
{mfargs,{gr_counter_sup,start_link,[]}},
{restart_type,permanent},
{shutdown,5000},
{child_type,supervisor}]
*** System report during lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 2017-05-02 18:12:45.239 ***
=PROGRESS REPORT==== 2-May-2017::18:12:45 ===
supervisor: {local,gr_sup}
started: [{pid,<0.481.0>},
{id,gr_param_sup},
{mfargs,{gr_param_sup,start_link,[]}},
{restart_type,permanent},
{shutdown,5000},
{child_type,supervisor}]
*** System report during lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 2017-05-02 18:12:45.242 ***
=PROGRESS REPORT==== 2-May-2017::18:12:45 ===
supervisor: {local,gr_sup}
started: [{pid,<0.483.0>},
{id,gr_manager_sup},
{mfargs,{gr_manager_sup,start_link,[]}},
{restart_type,permanent},
{shutdown,5000},
{child_type,supervisor}]
*** System report during lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 2017-05-02 18:12:45.242 ***
=PROGRESS REPORT==== 2-May-2017::18:12:45 ===
application: goldrush
started_at: 'runner@MacBook-Pro-de-Anne-France'
*** System report during lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 2017-05-02 18:12:45.251 ***
=PROGRESS REPORT==== 2-May-2017::18:12:45 ===
supervisor: {local,lager_sup}
started: [{pid,<0.490.0>},
{id,lager},
{mfargs,{gen_event,start_link,[{local,lager_event}]}},
{restart_type,permanent},
{shutdown,5000},
{child_type,worker}]
*** System report during lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 2017-05-02 18:12:45.253 ***
=PROGRESS REPORT==== 2-May-2017::18:12:45 ===
supervisor: {local,lager_sup}
started: [{pid,<0.492.0>},
{id,lager_handler_watcher_sup},
{mfargs,{lager_handler_watcher_sup,start_link,[]}},
{restart_type,permanent},
{shutdown,5000},
{child_type,supervisor}]
*** System report during lasp_advertisement_counter_partition_overcounting_SUITE:client_server_partition_overcounting_test/1 2017-05-02 18:12:45.255 ***
=PROGRESS REPORT==== 2-May-2017::18:12:45 ===
supervisor: {local,lager_sup}
started: [{pid,<0.494.0>},
{id,lager_crash_log},
{mfargs,
{lager_crash_log,start_link,
["log/crash.log",65536,10485760,[{hour,0}],5]}},
{restart_type,permanent},
{shutdown,5000},
{child_type,worker}]
*** User 2017-05-02 18:12:45.321 ***
Starting node: server
*** User 2017-05-02 18:12:45.323 ***
18:12:45.320 [info] Application lager started on node 'runner@MacBook-Pro-de-Anne-France'
*** User 2017-05-02 18:12:46.433 ***
Starting node: client_1
*** User 2017-05-02 18:12:47.503 ***
Starting node: client_2
*** User 2017-05-02 18:12:48.573 ***
Starting node: client_3
*** User 2017-05-02 18:12:49.642 ***
Starting node: client_4
*** User 2017-05-02 18:12:50.715 ***
Loading lasp on node: 'server@MacBook-Pro-de-Anne-France'
*** User 2017-05-02 18:12:50.747 ***
Loading lasp on node: 'client_1@MacBook-Pro-de-Anne-France'
*** User 2017-05-02 18:12:50.780 ***
Loading lasp on node: 'client_2@MacBook-Pro-de-Anne-France'
*** User 2017-05-02 18:12:50.811 ***
Loading lasp on node: 'client_3@MacBook-Pro-de-Anne-France'
*** User 2017-05-02 18:12:50.845 ***
Loading lasp on node: 'client_4@MacBook-Pro-de-Anne-France'
*** User 2017-05-02 18:12:51.861 ***
Starting lasp.
*** User 2017-05-02 18:12:53.266 ***
Custering nodes...
*** User 2017-05-02 18:12:53.266 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 58820
*** User 2017-05-02 18:12:53.269 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 58822
*** User 2017-05-02 18:12:53.270 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 58824
*** User 2017-05-02 18:12:53.273 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 58827
*** User 2017-05-02 18:12:53.274 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 58818
*** User 2017-05-02 18:12:53.277 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 58822
*** User 2017-05-02 18:12:53.278 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 58824
*** User 2017-05-02 18:12:53.279 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 58827
*** User 2017-05-02 18:12:53.280 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 58818
*** User 2017-05-02 18:12:53.283 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 58820
*** User 2017-05-02 18:12:53.284 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 58824
*** User 2017-05-02 18:12:53.285 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 58827
*** User 2017-05-02 18:12:53.286 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 58818
*** User 2017-05-02 18:12:53.289 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 58820
*** User 2017-05-02 18:12:53.290 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 58822
*** User 2017-05-02 18:12:53.291 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 58827
*** User 2017-05-02 18:12:53.292 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 58818
*** User 2017-05-02 18:12:53.295 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 58820
*** User 2017-05-02 18:12:53.296 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 58822
*** User 2017-05-02 18:12:53.297 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 58824
*** User 2017-05-02 18:12:53.298 ***
Lasp fully initialized.
*** User 2017-05-02 18:12:53.298 ***
Waiting for simulation to end
*** User 2017-05-02 18:14:43.310 ***
Simulation ended with success
*** User 2017-05-02 18:14:53.401 ***
Running client_server_partition_overcounting_test with nodes [server,client_1,
client_2,
client_3,
client_4]
*** User 2017-05-02 18:14:53.401 ***
Launching Erlang distribution...

*** User 2017-05-02 18:15:01.358 ***
Custering nodes...
*** User 2017-05-02 18:15:01.359 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59052
*** User 2017-05-02 18:15:01.361 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59054
*** User 2017-05-02 18:15:01.363 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59056
*** User 2017-05-02 18:15:01.366 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59059
*** User 2017-05-02 18:15:01.367 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59050
*** User 2017-05-02 18:15:01.371 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59054
*** User 2017-05-02 18:15:01.372 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59056
*** User 2017-05-02 18:15:01.373 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59059
*** User 2017-05-02 18:15:01.373 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59050
*** User 2017-05-02 18:15:01.377 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59052
*** User 2017-05-02 18:15:01.378 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59056
*** User 2017-05-02 18:15:01.379 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59059
*** User 2017-05-02 18:15:01.380 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59050
*** User 2017-05-02 18:15:01.383 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59052
*** User 2017-05-02 18:15:01.384 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59054
*** User 2017-05-02 18:15:01.385 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59059
*** User 2017-05-02 18:15:01.386 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59050
*** User 2017-05-02 18:15:01.389 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59052
*** User 2017-05-02 18:15:01.390 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59054
*** User 2017-05-02 18:15:01.391 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59056
*** User 2017-05-02 18:15:01.392 ***
Lasp fully initialized.
*** User 2017-05-02 18:15:01.392 ***
Waiting for simulation to end
*** User 2017-05-02 18:17:01.405 ***
Simulation ended with success
*** User 2017-05-02 18:17:11.497 ***
Running client_server_partition_overcounting_test with nodes [server,client_1,
client_2,
client_3,
client_4]
*** User 2017-05-02 18:17:11.497 ***
Launching Erlang distribution...

*** User 2017-05-02 18:17:19.238 ***
Custering nodes...
*** User 2017-05-02 18:17:19.238 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59295
*** User 2017-05-02 18:17:19.241 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59297
*** User 2017-05-02 18:17:19.242 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59299
*** User 2017-05-02 18:17:19.243 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59302
*** User 2017-05-02 18:17:19.244 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59293
*** User 2017-05-02 18:17:19.247 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59297
*** User 2017-05-02 18:17:19.248 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59299
*** User 2017-05-02 18:17:19.249 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59302
*** User 2017-05-02 18:17:19.250 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59293
*** User 2017-05-02 18:17:19.253 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59295
*** User 2017-05-02 18:17:19.254 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59299
*** User 2017-05-02 18:17:19.255 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59302
*** User 2017-05-02 18:17:19.256 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59293
*** User 2017-05-02 18:17:19.259 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59295
*** User 2017-05-02 18:17:19.260 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59297
*** User 2017-05-02 18:17:19.260 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59302
*** User 2017-05-02 18:17:19.262 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59293
*** User 2017-05-02 18:17:19.264 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59295
*** User 2017-05-02 18:17:19.265 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59297
*** User 2017-05-02 18:17:19.266 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59299
*** User 2017-05-02 18:17:19.267 ***
Lasp fully initialized.
*** User 2017-05-02 18:17:19.267 ***
Waiting for simulation to end
*** User 2017-05-02 18:19:19.283 ***
Simulation ended with success
*** User 2017-05-02 18:50:02.263 ***
Running client_server_partition_overcounting_test with nodes [server,client_1,
client_2,
client_3,
client_4]
*** User 2017-05-02 18:50:02.263 ***
Launching Erlang distribution...

*** User 2017-05-02 18:50:11.040 ***
Custering nodes...
*** User 2017-05-02 18:50:11.040 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59537
*** User 2017-05-02 18:50:11.044 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59540
*** User 2017-05-02 18:50:11.045 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59542
*** User 2017-05-02 18:50:11.046 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59544
*** User 2017-05-02 18:50:11.050 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59534
*** User 2017-05-02 18:50:11.054 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59540
*** User 2017-05-02 18:50:11.055 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59542
*** User 2017-05-02 18:50:11.056 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59544
*** User 2017-05-02 18:50:11.057 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59534
*** User 2017-05-02 18:50:11.064 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59537
*** User 2017-05-02 18:50:11.066 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59542
*** User 2017-05-02 18:50:11.067 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59544
*** User 2017-05-02 18:50:11.070 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59534
*** User 2017-05-02 18:50:11.077 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59537
*** User 2017-05-02 18:50:11.080 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59540
*** User 2017-05-02 18:50:11.081 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59544
*** User 2017-05-02 18:50:11.082 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59534
*** User 2017-05-02 18:50:11.088 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59537
*** User 2017-05-02 18:50:11.089 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59540
*** User 2017-05-02 18:50:11.091 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59542
*** User 2017-05-02 18:50:11.091 ***
Lasp fully initialized.
*** User 2017-05-02 18:50:11.092 ***
Waiting for simulation to end
*** User 2017-05-02 18:52:20.240 ***
Simulation ended with success
*** User 2017-05-02 18:52:30.268 ***
Running client_server_partition_overcounting_test with nodes [server,client_1,
client_2,
client_3,
client_4]
*** User 2017-05-02 18:52:30.268 ***
Launching Erlang distribution...

*** User 2017-05-02 18:52:38.319 ***
Custering nodes...
*** User 2017-05-02 18:52:38.319 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59876
*** User 2017-05-02 18:52:38.322 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59878
*** User 2017-05-02 18:52:38.323 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59881
*** User 2017-05-02 18:52:38.324 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59883
*** User 2017-05-02 18:52:38.325 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59873
*** User 2017-05-02 18:52:38.329 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59878
*** User 2017-05-02 18:52:38.330 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59881
*** User 2017-05-02 18:52:38.331 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59883
*** User 2017-05-02 18:52:38.333 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59873
*** User 2017-05-02 18:52:38.336 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59876
*** User 2017-05-02 18:52:38.337 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59881
*** User 2017-05-02 18:52:38.338 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59883
*** User 2017-05-02 18:52:38.339 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59873
*** User 2017-05-02 18:52:38.343 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59876
*** User 2017-05-02 18:52:38.344 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59878
*** User 2017-05-02 18:52:38.345 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 59883
*** User 2017-05-02 18:52:38.346 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 59873
*** User 2017-05-02 18:52:38.350 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 59876
*** User 2017-05-02 18:52:38.351 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 59878
*** User 2017-05-02 18:52:38.352 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 59881
*** User 2017-05-02 18:52:38.353 ***
Lasp fully initialized.
*** User 2017-05-02 18:52:38.353 ***
Waiting for simulation to end
*** User 2017-05-02 18:54:57.284 ***
Simulation ended with success
*** User 2017-05-02 18:55:07.287 ***
Running client_server_partition_overcounting_test with nodes [server,client_1,
client_2,
client_3,
client_4]
*** User 2017-05-02 18:55:07.287 ***
Launching Erlang distribution...

*** User 2017-05-02 18:55:15.331 ***
Custering nodes...
*** User 2017-05-02 18:55:15.332 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60141
*** User 2017-05-02 18:55:15.335 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60143
*** User 2017-05-02 18:55:15.336 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60145
*** User 2017-05-02 18:55:15.337 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60147
*** User 2017-05-02 18:55:15.340 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60139
*** User 2017-05-02 18:55:15.344 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60143
*** User 2017-05-02 18:55:15.345 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60145
*** User 2017-05-02 18:55:15.346 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60147
*** User 2017-05-02 18:55:15.347 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60139
*** User 2017-05-02 18:55:15.349 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60141
*** User 2017-05-02 18:55:15.351 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60145
*** User 2017-05-02 18:55:15.352 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60147
*** User 2017-05-02 18:55:15.353 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60139
*** User 2017-05-02 18:55:15.357 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60141
*** User 2017-05-02 18:55:15.358 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60143
*** User 2017-05-02 18:55:15.359 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60147
*** User 2017-05-02 18:55:15.360 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60139
*** User 2017-05-02 18:55:15.363 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60141
*** User 2017-05-02 18:55:15.364 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60143
*** User 2017-05-02 18:55:15.365 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60145
*** User 2017-05-02 18:55:15.366 ***
Lasp fully initialized.
*** User 2017-05-02 18:55:15.366 ***
Waiting for simulation to end
*** User 2017-05-02 18:58:33.782 ***
Simulation ended with success
*** User 2017-05-02 18:58:43.787 ***
Running client_server_partition_overcounting_test with nodes [server,client_1,
client_2,
client_3,
client_4]
*** User 2017-05-02 18:58:43.787 ***
Launching Erlang distribution...

*** User 2017-05-02 18:58:51.792 ***
Custering nodes...
*** User 2017-05-02 18:58:51.792 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60463
*** User 2017-05-02 18:58:51.796 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60466
*** User 2017-05-02 18:58:51.797 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60469
*** User 2017-05-02 18:58:51.800 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60472
*** User 2017-05-02 18:58:51.801 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60461
*** User 2017-05-02 18:58:51.805 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60466
*** User 2017-05-02 18:58:51.806 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60469
*** User 2017-05-02 18:58:51.807 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60472
*** User 2017-05-02 18:58:51.808 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60461
*** User 2017-05-02 18:58:51.812 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60463
*** User 2017-05-02 18:58:51.813 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60469
*** User 2017-05-02 18:58:51.814 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60472
*** User 2017-05-02 18:58:51.815 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60461
*** User 2017-05-02 18:58:51.818 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60463
*** User 2017-05-02 18:58:51.820 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60466
*** User 2017-05-02 18:58:51.821 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60472
*** User 2017-05-02 18:58:51.822 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60461
*** User 2017-05-02 18:58:51.825 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60463
*** User 2017-05-02 18:58:51.826 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60466
*** User 2017-05-02 18:58:51.828 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60469
*** User 2017-05-02 18:58:51.829 ***
Lasp fully initialized.
*** User 2017-05-02 18:58:51.829 ***
Waiting for simulation to end
*** User 2017-05-02 19:02:00.423 ***
Simulation ended with success
*** User 2017-05-02 19:02:10.427 ***
Running client_server_partition_overcounting_test with nodes [server,client_1,
client_2,
client_3,
client_4]
*** User 2017-05-02 19:02:10.427 ***
Launching Erlang distribution...

*** User 2017-05-02 19:02:18.312 ***
Custering nodes...
*** User 2017-05-02 19:02:18.312 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60776
*** User 2017-05-02 19:02:18.315 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60778
*** User 2017-05-02 19:02:18.316 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60780
*** User 2017-05-02 19:02:18.318 ***
Joining node: 'server@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60782
*** User 2017-05-02 19:02:18.319 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60774
*** User 2017-05-02 19:02:18.323 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60778
*** User 2017-05-02 19:02:18.324 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60780
*** User 2017-05-02 19:02:18.325 ***
Joining node: 'client_1@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60782
*** User 2017-05-02 19:02:18.326 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60774
*** User 2017-05-02 19:02:18.329 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60776
*** User 2017-05-02 19:02:18.331 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60780
*** User 2017-05-02 19:02:18.332 ***
Joining node: 'client_2@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60782
*** User 2017-05-02 19:02:18.332 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60774
*** User 2017-05-02 19:02:18.336 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60776
*** User 2017-05-02 19:02:18.337 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60778
*** User 2017-05-02 19:02:18.338 ***
Joining node: 'client_3@MacBook-Pro-de-Anne-France' to 'client_4@MacBook-Pro-de-Anne-France' at port 60782
*** User 2017-05-02 19:02:18.339 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'server@MacBook-Pro-de-Anne-France' at port 60774
*** User 2017-05-02 19:02:18.342 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_1@MacBook-Pro-de-Anne-France' at port 60776
*** User 2017-05-02 19:02:18.344 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_2@MacBook-Pro-de-Anne-France' at port 60778
*** User 2017-05-02 19:02:18.344 ***
Joining node: 'client_4@MacBook-Pro-de-Anne-France' to 'client_3@MacBook-Pro-de-Anne-France' at port 60780
*** User 2017-05-02 19:02:18.345 ***
Lasp fully initialized.
*** User 2017-05-02 19:02:18.345 ***
Waiting for simulation to end
*** User 2017-05-02 19:05:36.867 ***
Simulation ended with success
*** User 2017-05-02 19:05:46.863 ***
Ending test case client_server_partition_overcounting_test
=== Ended at 2017-05-02 19:05:46
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


--- layout: post title: '30 Days in April: Day 21' date: 2009-04-22 00:17:21.000000000 -07:00 type: post published: true status: publish categories: - 30 Days in April tags: - 30 days - conceptual art - my po box is lonely - participatory - project - send me mail - snail mail RULES! meta: _publicize_pending: '1' _edit_last: '6192' aktt_tweeted: '1' original_post_id: '246' _wp_old_slug: '246' author: login: falsefridays email<EMAIL_ADDRESS>display_name: Jim Withington first_name: '' last_name: '' ---
Mail Reaction (2009)
Instructions:
1. Choose and listen to one of the unmarked songs below.
2. If you know the song, then choose another.
3. If you do not know the song, then listen to the song in its entirety.
4. During or after listening, make a piece of postcard-sized art based on what you are hearing. This can include anything you define as art.
5. Send the postcard/art to: Hard Like Algebra, PO Box 40161, Portland, OR 97240-0161. Be sure to identify if it was track 1, 2, 3, or 4.
Bonus: any participant who choses to do so may include the link to a song in the comments. Upon receipt of that participant's art, I will participate in the first 4 steps above, and send my art to the participant's address.
One last thing: some of the embedded info in the tracks is showing through on two of these. Please ignore those words--the songs are intended to be heard without band or track name.
[audio:042109-project1.mp3]
[audio:042109-project2.mp3]
[audio:042109-project3.mp3]
[audio:042109-project4.mp3]


7.3. Command Line Tools¶
This chapter describes GeoMesa Tools, a set of command line tools for feature management, query planning and explanation, ingest, and export from the command line.
7.3.1. Installing SFT and Converter Definitions¶
Starting with version 1.2.3, GeoMesa Tools ships with embedded SimpleFeatureType and GeoMesa Converter definitions for common data types including Twitter, GeoNames, T-drive, and many more. See Using SFT and Converter Definitions with Command-Line Tools.
To see which SFT and converter configurations are installed,
try the geomesa env
command described below.
7.3.2. Running the command line tools¶
Note
Some command names have changed in GeoMesa 1.3.0; see Updated Command Line Tools
Run geomesa
without any arguments to produce the following usage text:
$ geomesa
Usage: geomesa [command] [command options]
Commands:
add-attribute-index Run a Hadoop map reduce job to add an index for attributes
add-index Add or update indices for an existing GeoMesa feature type
classpath Display the GeoMesa classpath
config-table Perform table configuration operations
configure Configure the local environment for GeoMesa
convert Convert files using GeoMesa's internal SFT converter framework
create-schema Create a GeoMesa feature type
delete-catalog Delete a GeoMesa catalog completely (and all features in it)
delete-features Delete features from a table in GeoMesa. Does not delete any tables or schema information.
delete-raster Delete a GeoMesa Raster table
env Examine the current GeoMesa environment
explain Explain how a GeoMesa query will be executed
export Export features from a GeoMesa data store
export-bin Export features from a GeoMesa data store in a binary format.
gen-avro-schema Generate an Avro schema from a SimpleFeatureType
get-names List GeoMesa feature types for a given catalog
get-schema Describe the attributes of a given GeoMesa feature type
get-sft-config Get the SimpleFeatureType of a feature
help Show help
ingest Ingest/convert various file formats into GeoMesa
ingest-raster Ingest raster files into GeoMesa
keywords Add/Remove/List keywords on an existing schema
query-raster-stats Export queries and statistics about the last X number of queries to a CSV file.
remove-schema Remove a schema and associated features from a GeoMesa catalog
stats-analyze Analyze statistics on a GeoMesa feature type
stats-bounds View or calculate bounds on attributes in a GeoMesa feature type
stats-count Estimate or calculate feature counts in a GeoMesa feature type
stats-histogram View or calculate counts of attribute in a GeoMesa feature type, grouped by sorted values
stats-top-k Enumerate the most frequent values in a GeoMesa feature type
version Display the installed GeoMesa version
This usage text lists the available commands. To see help for an individual command,
run geomesa help <command-name>
, which for example will give you something like this:
$ geomesa help get-type-names
Usage: get-type-names [options]
Options:
--auths
Accumulo authorizations
* -c, --catalog
Catalog table for GeoMesa datastore
-i, --instance
Accumulo instance name
--keytab
Path to Accumulo user Kerberos keytab file
--mock
Run everything with a mock accumulo instance instead of a real one
Default: false
-p, --password
Accumulo password (will prompt if not supplied and not using Kerberos)
* -u, --user
Accumulo user name
--visibilities
Default feature visibilities
-z, --zookeepers
Zookeepers (host[:port], comma separated)
The Accumulo username and either a password or a path to a Kerberos keytab file is required for each command.
Specify the username and password in each command by using -u
(or --username
) and -p
(or
--password
), respectively. One can also only specify the username on the
command line using -u
or --username
and type the password in an additional
prompt, where the password will be hidden from the shell history.
To use Kerberos authentication instead, use --keytab
with a path to a Kerberos keytab file containing an entry for
the specified user. Since a keytab file allows authentication without any further constraints, it should be protected
appropriately.
In nearly all commands below, one can add --instance-name
, --zookeepers
,
--auths
, and --visibilities
(or in short form -i
, -z
, -a
, and -v
) arguments
to properly configure the Accumulo data store connector. The Accumulo instance
name and Zookeepers string can usually be automatically assigned as long as
Accumulo is configured correctly. The Auths and Visibilities strings will have
to be added as arguments to each command, if needed.
7.3.3. Command overview¶
<IP_ADDRESS>. Tools Configuration¶
<IP_ADDRESS>.1. configure¶
Used to configure the current environment for using the commandline tools. This is frequently run after the tools are first installed to ensure the environment is configured correctly:
$ geomesa configure
<IP_ADDRESS>. Creating and deleting feature types¶
<IP_ADDRESS>.1. create-schema¶
Used to create a feature type (SimpleFeatureType
) in a GeoMesa catalog:
$ geomesa create -u username -p password \
-i instance -z zoo1,zoo2,zoo3 \
-c test_create \
-f testing \
-s fid:String:index=true,dtg:Date,geom:Point:srid=4326 \
--dtg dtg
<IP_ADDRESS>.2. get-schema¶
Display details about the attributes of a specified feature type:
$ geomesa get-schema -u username -p password -c test_delete -f testing
<IP_ADDRESS>.3. get-sft-config¶
Get the specified feature type as a typesafe config:
$ geomesa get-sft-config -u username -p password -c test_catalog -f test_feature --format typesafe
Get the specified feature type as an encoded feature schema string:
$ geomesa get-sft-config -u username -p password -c test_catalog -f test_feature --format spec
<IP_ADDRESS>.4. keywords¶
Add or remove keywords to a specified schema::
Repeat the -a or -r flags to add or remove multiple keywords
The --removeAll
option removes all keywords
The -l
option lists the schema’s keywords following all operations
If there is whitespace within a keyword, enclose it in quotes for proper functionality:
$ geomesa keywords -u username -p password \
-a keywordB -a keywordC -r keywordA -l \
-i instance -z zoo1,zoo2,zoo3 \
-c catalog -f featureTypeName
<IP_ADDRESS>.5. get-names¶
List all known feature types in a GeoMesa catalog:
$ geomesa get-names -u username -p password -c test_catalog
<IP_ADDRESS>.6. remove-schema¶
Used to remove a feature type (SimpleFeatureType
) in a GeoMesa catalog. This will also delete any feature of that type in the data store:
$ geomesa remove-schema -u username -p password \
-i instance -z zoo1,zoo2,zoo3 \
-c test_catalog -f testfeature1
$ geomesa remove-schema -u username -p password \
-i instance -z zoo1,zoo2,zoo3 \
-c test_catalog --pattern 'testfeatures\d+'
<IP_ADDRESS>. Manipulating data¶
<IP_ADDRESS>.1. convert¶
Convert files using the internal SFT (SimpleFeatureType
) converter framework:
$ geomesa convert -spec example --converter example-csv \
-F json ./exampledata.csv
$ geomesa convert -s example -C example-csv -F avro --gzip 4 \
--max-features 10 -o exampleout.avro ./exampledata.csv
Note
Output data has been converted by the internal SFT converters as defined by the provided converter config. This most likely means a new converter config will be required to ingest (or re-convert) the converted data.
<IP_ADDRESS>. Ingesting and exporting data¶
<IP_ADDRESS>.1. export¶
Export GeoMesa features. The “attribute expressions” specified by the -a
option are comma-separated expressions
in the format:
attribute[=filter_function_expression]|derived-attribute=filter_function_expression
filter_function_expression is an expression of filter function applied to attributes, literals and filter functions, i.e. can be nested.
Example export commands:
$ geomesa export -u username -p password \
-c test_catalog -f test_feature \
-a "geom,text,user_name" --format csv \
-q "include" -m 100
$ geomesa export -u username -p password \
-c test_catalog -f test_feature \
-a "geom,text,user_name" --format gml \
-q "user_name='JohnSmith'"
$ geomesa export -u username -p password \
-c test_catalog -f test_feature \
-a "user_name,buf=buffer(geom\, 2)" \
--format csv -q "[[ user_name like `John%' ] AND [ bbox(geom, 22.1371589, 44.386463, 40.228581, 52.379581, 'EPSG:4326') ]]"
For fine-grained control, query hints can be set using the –hints parameter, in the form key1=value1;key2=value2. See Setting Query Hints and Feature Sampling for more information.
<IP_ADDRESS>.2. ingest¶
Used to convert and ingest data from various file formats as GeoMesa features.
GeoMesa defines several common converter factories for formats such as delimited text (TSV, CSV), fixed width files, JSON, XML, and Avro. New converter factories (e.g. for custom binary formats) can be registered on the classpath using Java SPI. Shapefile ingest is also supported. Files can be either local or in HDFS. You cannot mix target files (e.g. local and HDFS).
Note
The header, if present, is not parsed by ingest
for information. It is assumed that all lines are valid entries.
Converters and SFTs are specified in the HOCON format
and loaded using the TypeSafe configuration library.
They can be referenced by name using the -s
and -C
args.
To define new converters for the users can package a reference.conf
file inside a jar and drop it in the
$GEOMESA_ACCUMULO_HOME/lib
directory or add config definitions to the $GEOMESA_TOOLS/conf/application.conf
file which
includes some examples. SFT and Converter specifications should use the path prefixes
geomesa.converters.<convertername>
and geomesa.sfts.<typename>
For example, here’s a simple CSV file to ingest named example.csv
:
FID,Name,Age,LastSeen,Friends,Lat,Lon
23623,Harry,20,2015-05-06,"Will, Mark, Suzan",-100.236523,23
26236,Hermione,25,2015-06-07,"Edward, Bill, Harry",40.232,-53.2356
3233,Severus,30,2015-10-23,"Tom, Riddle, Voldemort",3,-62.23
Note
ID is a reserved word, for a full list of reserved words see Reserved Words.
To ingest this file, a SimpleFeatureType named renegades
and a converter named renegades-csv
can be placed in
the application.conf
file:
# cat $GEOMESA_ACCUMULO_HOME/conf/application.conf
geomesa {
sfts {
renegades = {
attributes = [
{ name = "fid", type = "Integer", index = false }
{ name = "name", type = "String", index = true }
{ name = "age", type = "Integer", index = false }
{ name = "lastseen", type = "Date", index = true }
{ name = "friends", type = "List[String]", index = true }
{ name = "geom", type = "Point", index = true, srid = 4326, default = true }
]
}
}
converters {
renegades-csv = {
type = "delimited-text"
format = "CSV"
options {
skip-lines = 1 //skip the header
}
id-field = "toString($fid)"
fields = [
{ name = "fid", transform = "$1::int" }
{ name = "name", transform = "$2::string" }
{ name = "age", transform = "$3::int" }
{ name = "lastseen", transform = "date('YYYY-MM-dd', $4)" }
{ name = "friends", transform = "parseList('string', $5)" }
{ name = "lon", transform = "$6::double" }
{ name = "lat", transform = "$7::double" }
{ name = "geom", transform = "point($lon, $lat)" }
]
}
}
}
The SFT and Converter can be referenced by name and the following commands can ingest the file:
$ geomesa ingest -u username -p password \
-c geomesa_catalog -i instance --threads 1 \
-s renegades -C renegades-csv example.csv
# use the Hadoop file system instead
$ geomesa ingest -u username -p password \
-c geomesa_catalog -i instance \
-s renegades -C renegades-csv hdfs:///some/hdfs/path/to/example.csv
SFT and Converter configs can also be provided as strings or filenames to the -s
and -C
arguments. The syntax is
very similar to the application.conf
and reference.conf
format. Config specifications must be nested using the
paths geomesa.converters.<convertername>
and geomesa.sfts.<typename>
as shown below:
# A nested SFT config provided as a string or file to the -s argument specifying
# a type named "renegades"
#
# cat /tmp/renegades.sft
geomesa.sfts.renegades = {
attributes = [
{ name = "fid", type = "Integer", index = false }
{ name = "name", type = "String", index = true }
{ name = "age", type = "Integer", index = false }
{ name = "lastseen", type = "Date", index = true }
{ name = "friends", type = "List[String]", index = true }
{ name = "geom", type = "Point", index = true, srid = 4326, default = true }
]
}
Similarly, converter configurations must be nested when passing them directly to the -C
argument:
# a nested converter definition
# cat /tmp/renegades.convert
geomesa.converters.renegades-csv = {
type = "delimited-text"
format = "CSV"
options {
skip-lines = 0 // don't skip lines in distributed ingest
}
id-field = "toString($fid)"
fields = [
{ name = "fid", transform = "$1::int" }
{ name = "name", transform = "$2::string" }
{ name = "age", transform = "$3::int" }
{ name = "lastseen", transform = "date('YYYY-MM-dd', $4)" }
{ name = "friends", transform = "parseList('string', $5)" }
{ name = "lon", transform = "$6::double" }
{ name = "lat", transform = "$7::double" }
{ name = "geom", transform = "point($lon, $lat)" }
]
}
Using the SFT and Converter config files we can then ingest our csv file with this command:
# ingest command
$ geomesa ingest -u username -p password \
-c geomesa_catalog -i instance \
-s /tmp/renegades.sft \
-C /tmp/renegades.convert hdfs:///some/hdfs/path/to/example.csv
For more documentation on converter configuration, see GeoMesa Convert.
Shape files may also be ingested:
$ geomesa ingest -u username -p password \
-c test_catalog -f shapeFileFeatureName /some/path/to/file.shp
<IP_ADDRESS>. Enabling S3 Ingest¶
Hadoop ships with implementations of S3-based filesystems, which can be enabled in the Hadoop configuration used with
GeoMesa tools. Specifically, GeoMesa tools can perform ingests using both the second-generation (s3n) and
third-generation (s3a) filesystems. Edit the $HADOOP_CONF_DIR/core-site.xml
file in your Hadoop installation,
as shown below (these instructions apply to Hadoop 2.5.0 and higher). Note that you must have the environment variable
$HADOOP_MAPRED_HOME
set properly in your environment. Some configurations
can substitute $HADOOP_PREFIX
in the classpath values below.
Warning
AWS credentials are valuable! They pay for services and control read and write protection for data. If you are
running GeoMesa on AWS EC2 instances, it is recommended to use the s3a
filesystem. With s3a
, you can omit the
Access Key Id and Secret Access keys from core-site.xml and rely on IAM roles.
For s3a
:
<!-- core-site.xml -->
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_MAPRED_HOME/share/hadoop/tools/lib/*</value>
<description>The classpath specifically for Map-Reduce jobs. This override is needed so that s3 URLs work on Hadoop 2.6.0+</description>
</property>
<!-- OMIT these keys if running on AWS EC2; use IAM roles instead -->
<property>
<name>fs.s3a.access.key</name>
<value>XXXX YOURS HERE</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>XXXX YOURS HERE</value>
<description>Valuable credential - do not commit to CM</description>
</property>
After you have enabled S3 in your Hadoop configuration you can ingest with GeoMesa tools. Note that you can still use the Kleene star (*) with S3.:
$ geomesa ingest -u username -p password -c geomesa_catalog -i instance -s yourspec -C convert s3a://bucket/path/file*
For s3n
:
<!-- core-site.xml -->
<!-- Note that you need to make sure HADOOP_MAPRED_HOME is set or some other way of getting this on the classpath -->
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_MAPRED_HOME/share/hadoop/tools/lib/*</value>
<description>The classpath specifically for mapreduce jobs. This override is needed so that s3 URLs work on hadoop 2.6.0+</description>
</property>
<property>
<name>fs.s3n.impl</name>
<value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
<description>Tell hadoop which class to use to access s3 URLs. This change became necessary in hadoop 2.6.0</description>
</property>
<property>
<name>fs.s3n.awsAccessKeyId</name>
<value>XXXX YOURS HERE</value>
</property>
<property>
<name>fs.s3n.awsSecretAccessKey</name>
<value>XXXX YOURS HERE</value>
</property>
S3n paths are prefixed in hadoop with s3n://
as shown below:
$ geomesa ingest -u username -p password \
-c geomesa_catalog -i instance -s yourspec \
-C convert s3n://bucket/path/file s3n://bucket/path/*
<IP_ADDRESS>. Enabling Azure Ingest¶
Hadoop ships with implementations of Azure-based filesystems, which can be enabled in the Hadoop configuration used with
GeoMesa tools. Specifically, GeoMesa tools can perform ingests using the (wasb) and (wasbs) filesystems.
Edit the $HADOOP_CONF_DIR/core-site.xml
file in your Hadoop installation as shown below
(these instructions apply to Hadoop 2.5.0 and higher). In addition, the hadoop-azure and azure-storage jars need to be
available.
Warning
Azure credentials are valuable! They pay for services and control read and write protection for data. Be sure to keep your core-site.xml configuration file safe. It is recommended that you use Azure’s SSL enable file protocal variant wasbs where possible.
Configuration:
To enable, place the following in your Hadoop Installation’s core-site.xml.
<!-- core-site.xml -->
<property>
<name>fs.azure.account.key.ACCOUNTNAME.blob.core.windows.net</name>
<value>XXXX YOUR ACCOUNT KEY</value>
</property>
After you have enabled Azure in your Hadoop configuration you can ingest with GeoMesa tools. Note that you can still use the Kleene star (*) with Azure.:
$ geomesa ingest -u username -p password \
-c geomesa_catalog -i instance -s yourspec \
-C convert<EMAIL_ADDRESS><IP_ADDRESS>. Working with raster data¶
<IP_ADDRESS>.1. delete-raster¶
Delete a given GeoMesa raster table:
$ geomesa delete-raster -u username -p password -t somerastertable -f
<IP_ADDRESS>.2. ingest-raster¶
Ingest one or multiple raster image files into Geomesa. Input files, GeoTIFF or DTED, should be located on the local file system.
Note
Make sure GDAL is installed when doing chunking, which depends on the GDAL utility gdal_translate
.
Input raster files are assumed to have CRS set to EPSG:4326. For non-EPSG:4326 files, they need to be converted into
EPSG:4326 raster files before ingestion. An example of doing conversion with GDAL utility is gdalwarp -t_srs EPSG:4326
input_file out_file
.
Example usage:
$ geomesa ingest-raster -u username -p password \
-t geomesa_raster -f /some/local/path/to/raster.tif
<IP_ADDRESS>.3. query-rasterstats¶
Export queries and statistics about the n most recent raster queries to a CSV file:
$ geomesa query-rasterstats -u username -p password -t somerastertable -n 10
<IP_ADDRESS>. Performing system administration tasks¶
<IP_ADDRESS>.1. add-index¶
Add or update indices for an existing feature type. This can be used to upgrade-in-place, converting an older index format into the latest. See Upgrading Existing Indices for more information.
Example usage:
$ geomesa add-index -u username -p password -i instance \
-z zoo1,zoo2,zoo3 -c test_catalog -f test_feature --index xz3
<IP_ADDRESS>.2. delete-catalog¶
Delete a GeoMesa catalog table completely, along with all features in it.
Example usage:
$ geomesa delete-catalog -u username -p password \
-i instance -z zoo1,zoo2,zoo3 -c test_catalog
<IP_ADDRESS>.3. delete-features¶
Delete features from a table in GeoMesa. Does not delete any tables or schema information.
Example usage:
$ geomesa delete-features -u username -p password \
-i instance -z zoo1,zoo2,zoo3 -c test_catalog \
-q 'dtg DURING 2016-02-02T00:00:00.000Z/2016-02-03T00:00:00.000Z'
<IP_ADDRESS>.4. add-attribute-index¶
Add attribute indices for a specified list of attributes.:
$ geomesa add-attribute-index -u username -p password -i instance -z zoo1,zoo2,zoo3 -c test_catalog \
-f test_feature -a attribute1,attribute2 --coverage full
This will launch a map-reduce job creating attribute indices for each attribute listed in -a
. This is essentially a convenience wrapper for invoking the job described in Attribute Indexing.
<IP_ADDRESS>.5. env¶
Examines the current GeoMesa tools environment, and prints out simple feature types converters that are available on the current classpath. The available types can be used for ingestion; see the ingest command. Use of this command without parameters will result in behavior similar to when the help command is used.
Parameters allow you to specify what to print to out. These give you the ability to view a list of all simple feature types and converters, describe all the feature types and converters, or review a subset of these simple feature types and converters. There are a few options that permit you to specify the desired format when describing simple feature types.
There are a few commands pertaining to the format of describing simple feature types.
Example usage:
$ geomesa env --list-sfts
<IP_ADDRESS>.6. explain¶
Explain how a given GeoMesa query will be executed:
$ geomesa explain -u username -p password \
-c test_catalog -f test_feature \
-q "INTERSECTS(geom, POLYGON ((41 28, 42 28, 42 29, 41 29, 41 28)))"
<IP_ADDRESS>.7. stats-analyze¶
Analyze statistics for your data set. This may improve query planning.
Example usage:
$ geomesa stats-analyze -u username -p password -c geomesa.data -f twitter
Running stat analysis for feature type twitter...
Stats analyzed:
Total features: 8852601
Bounds for geom: [ -171.75, -45.5903996, 157.7302, 89.99997102 ] cardinality: 2119237
Bounds for dtg: [ '2016-02-01T00:09:12.000Z' to '2016-03-01T00:21:02.000Z' ] cardinality: 2161132
Bounds for user_id: [ '100000215' to '99999502' ] cardinality: 861283
Use 'stats-histogram' or 'stats-count' commands for more details
<IP_ADDRESS>.8. stats-bounds¶
Displays the bounds of your data for different attributes. You can use pre-calculated stats for a quick estimation, or get the definitive result by querying the data set using the ‘–no-cache’ flag.
Example usage:
$ geomesa stats-bounds -u username -p password -i instance -z zoo1,zoo2,zoo3 \
-c geomesa.data -f twitter
user_id [ 100000215 to 99999502 ] cardinality: 861283
user_name [ unavailable ]
text [ unavailable ]
dtg [ 2016-02-01T00:09:12.000Z to 2016-03-01T00:21:02.000Z ] cardinality: 2161132
geom [ -171.75, -45.5903996, 157.7302, 89.99997102 ] cardinality: 2119237
$ geomesa stats-bounds -u username -p password -i instance -z zoo1,zoo2,zoo3 \
-c geomesa.data -f twitter --no-cache \
-q 'BBOX(geom,-70,45,-60,55) AND dtg DURING 2016-02-02T00:00:00.000Z/2016-02-03T00:00:00.000Z'
Running stat query...
user_id [<PHONE_NUMBER> to 99124417 ] cardinality: 115
user_name [ bar_user to foo_user ] cardinality: 113
text [ bar to foo ] cardinality: 180
dtg [ 2016-02-02T00:01:07.000Z to 2016-02-02T23:59:41.000Z ] cardinality: 178
geom [ -69.87212338, 45.01259299, -60.08925, 53.8868369 ] cardinality: 155
<IP_ADDRESS>.9. stats-count¶
Counts the features in your data set. You can count total features, or features that match a CQL filter. You can use pre-calculated stats for a quick estimation, or get the definitive result by querying the data set using the ‘–no-cache’ flag.
Example usage:
$ geomesa stats-count -u username -p password -i instance -z zoo1,zoo2,zoo3 \
-c geomesa.data -f twitter
Estimated count: 8852601
$ geomesa stats-count -u username -p password -i instance -z zoo1,zoo2,zoo3 \
-c geomesa.data -f twitter \
-q 'BBOX(geom,-70,45,-60,55) AND dtg DURING 2016-02-02T00:00:00.000Z/2016-02-03T00:00:00.000Z'
Estimated count: 2681
$ geomesa stats-count -u username -p password -i instance -z zoo1,zoo2,zoo3 \
-c geomesa.data -f twitter --no-cache \
-q 'BBOX(geom,-70,45,-60,55) AND dtg DURING 2016-02-02T00:00:00.000Z/2016-02-03T00:00:00.000Z'
Running stat query...
Count: 182
<IP_ADDRESS>.10. stats-top-k¶
Enumerates the values for attributes in your data set. You can enumerate all values for all features, or only values for features that match a CQL filter.
Example usage:
$ geomesa stats-top-k -u username -p password -i instance -z zoo1,zoo2,zoo3 \
-c geomesa.data -f twitter -a user_id -k 10
Top values for 'user_id':
3144822634 (26681)
388009236 (20553)
497145453 (19858)
563319506 (15848)
2841269945 (15763)
2924224280 (15731)
141302910 (15240)
2587789764 (14811)
56266341 (14487)
889599440 (14330)
<IP_ADDRESS>.11. stats-histogram¶
Counts the features in your data set, grouped into sorted bins. You may specify the number of bins to group attribute into. You can count total features, or features that match a CQL filter. You can use pre-calculated stats for a quick estimation, or get the definitive result by querying the data set using the ‘–no-cache’ flag.
If you query a histogram for a geometry attribute, the result will be displayed in an ASCII heatmap.
Example usage:
$ geomesa stats-histogram -u username -p password -i instance -z zoo1,zoo2,zoo3 \
-c geomesa.data -f twitter -a dtg --bins 10
Binned histogram for 'dtg':
[ 2016-02-01T00:09:12.000Z to 2016-02-03T21:46:23.000Z ] 798968
[ 2016-02-03T21:46:23.000Z to 2016-02-06T19:23:34.000Z ] 868019
[ 2016-02-06T19:23:34.000Z to 2016-02-09T17:00:45.000Z ] 861720
[ 2016-02-09T17:00:45.000Z to 2016-02-12T14:37:56.000Z ] 833473
[ 2016-02-12T14:37:56.000Z to 2016-02-15T12:15:07.000Z ] 990292
[ 2016-02-15T12:15:07.000Z to 2016-02-18T09:52:18.000Z ] 842434
[ 2016-02-18T09:52:18.000Z to 2016-02-21T07:29:29.000Z ] 968936
[ 2016-02-21T07:29:29.000Z to 2016-02-24T05:06:40.000Z ] 862808
[ 2016-02-24T05:06:40.000Z to 2016-02-27T02:43:51.000Z ] 869208
[ 2016-02-27T02:43:51.000Z to 2016-03-01T00:21:02.000Z ] 956743
$ geomesa stats-histogram -u username -p password -i instance -z zoo1,zoo2,zoo3 \
-c geomesa.data -f twitter -a dtg --bins 10 --no-cache
Running stat query...
Binned histogram for 'dtg':
[ 2016-02-01T00:09:12.000Z to 2016-02-03T21:46:23.000Z ] 805620
[ 2016-02-03T21:46:23.000Z to 2016-02-06T19:23:34.000Z ] 869361
[ 2016-02-06T19:23:34.000Z to 2016-02-09T17:00:45.000Z ] 859868
[ 2016-02-09T17:00:45.000Z to 2016-02-12T14:37:56.000Z ] 832458
[ 2016-02-12T14:37:56.000Z to 2016-02-15T12:15:07.000Z ] 986829
[ 2016-02-15T12:15:07.000Z to 2016-02-18T09:52:18.000Z ] 841580
[ 2016-02-18T09:52:18.000Z to 2016-02-21T07:29:29.000Z ] 970460
[ 2016-02-21T07:29:29.000Z to 2016-02-24T05:06:40.000Z ] 863484
[ 2016-02-24T05:06:40.000Z to 2016-02-27T02:43:51.000Z ] 871742
[ 2016-02-27T02:43:51.000Z to 2016-03-01T00:21:02.000Z ] 951199
<IP_ADDRESS>.12. config-table¶
Perform various table configuration tasks. There are three sub-arguments:
- list - List the configuration options for a GeoMesa table
- describe - Describe a given configuration option for a table
- update - Update a given configuration option for a table
Example commands:
$ geomesa config-table list -u username -p password \
-c test_catalog -f test_feature -t st_idx
$ geomesa config-table describe -u username -p password \
-c test_catalog -f test_feature -t attr_idx \
--param table.bloom.enabled
$ geomesa config-table update -u username -p password \
-c test_catalog -f test_feature -t records \
--param table.bloom.enabled -n true
<IP_ADDRESS>.13. version¶
Prints out the version, git branch, and commit ID that the tools were built with:
$ geomesa version


This is a valuable resource for anyone interested in metric learning. The papers presented cover an almost 15-year span with the latest ones being from CVPR 2019.
[...] Contemporary experience is that sparse architectures produced by pruning are difficult to train from the start, which would similarly improve training performance. We find that a standard pruning technique naturally uncovers subnetworks whose initializations made them capable of training effectively. Based on these results, we articulate the 'lottery ticket hypothesis:' dense, randomly-initialized, feed-forward networks contain subnetworks ('winning tickets') that - when trained in isolation - reach test accuracy comparable to the original network in a similar number of iterations. The winning tickets we find have won the initialization lottery: their connections have initial weights that make training particularly effective. We present an algorithm to identify winning tickets and a series of experiments that support the lottery ticket hypothesis and the importance of these fortuitous initializations. [...]
See also another paper that explores the lottery ticket hypothesis by Uber AI Labs here (arXiv preprint).
We present the next generation of MobileNets based on a combination of complementary search techniques as well as a novel architecture design. MobileNetV3 is tuned to mobile phone CPUs through a combination of hardware aware network architecture search (NAS) complemented by the NetAdapt algorithm and then subsequently improved through novel architecture advances. This paper starts the exploration of how automated search algorithms and network design can work together to harness complementary approaches improving the overall state of the art. [...]
This post goes through the implementation of the Fast-SCNN architecture with the Keras API of Tensorflow 2.0. Fast-SCNN is a fast segmentation model capable of above-real-time segmentation of high-resolution images proposed in February this year. The post is a good reference for implementation details but does not provide additional insights into the architecture compared to the original paper. In particular, you will want to be familiar with common tricks found in fast nets: depthwise separable convolutions, pyramid pooling modules, inverted residual bottlenecks,...
Recent work has sought to understand the behavior of neural networks by comparing representations between layers and between different trained models. We examine methods for comparing neural network representations based on canonical correlation analysis (CCA). We show that CCA belongs to a family of statistics for measuring multivariate similarity, but that neither CCA nor any other statistic that is invariant to invertible linear transformation can measure meaningful similarities between representations of higher dimension than the number of data points. We introduce a similarity index that measures the relationship between representational similarity matrices and does not suffer from this limitation. This similarity index is equivalent to centered kernel alignment (CKA) and is also closely connected to CCA. Unlike CCA, CKA can reliably identify correspondences between representations in networks trained from different initializations.
A gentle introduction to the problem of transferring robotic knowledge obtained in a simulation to the physical world. In particular, the author explores domain randomization, a method that randomly modifies attributes of the simulation (physics dynamics like weight of objects, gravity, surface properties or even colors, behaviour of light, etc.) as a sort of data augmentation. The post is a thorough survey of papers exploring this topic; some of them are very recent like Meta-Sim which we talked about last week.
Natural language is hierarchically structured: smaller units (e.g., phrases) are nested within larger units (e.g., clauses). When a larger constituent ends, all of the smaller constituents that are nested within it must also be closed. While the standard LSTM architecture allows different neurons to track information at different time scales, it does not have an explicit bias towards modeling a hierarchy of constituents. This paper proposes to add such inductive bias by ordering the neurons; a vector of master input and forget gates ensures that when a given neuron is updated, all the neurons that follow it in the ordering are also updated. Our novel recurrent architecture, ordered neurons LSTM (ON-LSTM), achieves good performance on four different tasks: language modeling, unsupervised parsing, targeted syntactic evaluation, and logical inference.
Transformer-XL is, with GPT-2, one of the leading architectures in NLP, especially for language models. Training these models from scratch on extremely large datasets like WebText or WikiText-103 still takes a fair amount of time. In this post, authors describe how they were able to scale up the training using multiple machines and a bigger batch size.
This post is a love letter to DVC, a Git-like system for data versioning. The author first shows why Git and Git LFS may not be suitable for a proper data versioning for machine learning (limit in the file size and in the location where the files can be stored). Instead, DVC is presented as a flexible, robust way towards reproducibility. In the post, the author gives an introduction to how DVC works and how it could be used in a work environment.


abstract class Moongoon::Database::Scripts::Base
- Moongoon::Database::Scripts::Base
- Reference
- Object
Overview
Scripts inherit from this class.
Example
class Moongoon::Database::Scripts::Test < Moongoon::Database::Scripts::Base
# Scripts run in ascending order.
# Default order if not specified is 1.
order Time.utc(2020, 3, 11).to_unix
def process(db : Mongo::Database)
# Dummy code that will add a ban flag for users that are called 'John'.
# This code uses the `mongo.cr` driver shard syntax, but Models could
# be used for convenience despite a performance overhead.
db["users"].update(
selector: {name: "John"},
update: {"$set": {"banned": true}},
flags: LibMongoC::UpdateFlags::MULTI_UPDATE
)
end
end
Usage
Any class that inherits from Moongoon::Database::Scripts::Base
will be registered as a script.
Scripts are run when calling Moongoon::Database.connect
and after a successful database connection.
They are run a single time and the outcome is be written in the scripts
collection.
If multiple instances of the server are started simultaneously they will wait until all the scripts are processed before resuming execution.
Defined in:
database/scripts.crInstance Method Summary
-
#process(db : Mongo::Database)
Will be executed once after a successful database connection and if it has never been run against the target database before.
Instance Method Detail
abstract
def process(db : Mongo::Database)
#
Will be executed once after a successful database connection and if it has never been run against the target database before.


Swapping in External Data Sources for the JET Cookbook Examples
The new layout and format for the Cookbook for Oracle JET 2.1.0 is gorgeous. As before, it’s loaded with lots of working sample code, which you can change in-browser and see the results immediately.
But what if you’re working with a data collection and you want to test the cookbook recipe with some custom data? You’re only able to edit the HTML view and JS viewModel of a cookbook entry, not any of the supporting files.
This was a fun exercise to see if we could host sample data files on Github. Plus I learned something about the way JET’s Cookbook uses tools like MockPagingRESTServer()
and how to overcome caching issues.
If you look at the JS tab of a cookbook sample that retrieves data, you’ll see that it’s just fetching a URL with $getJSON()
. For example, in the List View using oj.Collection sample, it’s a relative URL to a tweets.json file on the Cookbook file system that you can path out to retrieve the raw data with this link.
So we can change the path of the $getJSON()
call in the Cookbook to retrieve tweets.json
from a different location. And we have the format and content of the original JSON file which we could upload to another server after modifying it. But where can we host our modified JSON file?
How about as a GitHub Gist?
We can create a public Gist file, upload our JSON there and then point to the gist’s raw content from the Cookbook’s JS tab. Really, our modified JSON could be hosted anywhere we can stick a file that our browser can find, whether on the internet, our intranet or even on our localhost. Or we could point the cookbook code at an existing endpoint, including fake ones like JSON Placeholder.
But Github gives us an option to stick our own custom JSON data file in a public place. We point the Cookbook code at the file itself using a “raw” URL link (as opposed to the fancy Github webpage with all of its chrome). And, Github is nice enough to set the CORS headers so we don’t run into cross-origin issues loading data from a different server than the Cookbook host.
So download the tweets.json file and modify it to match your needs. Now login to Github and click the Gist link at the top of the page, or instead navigate straight to gist.github.com. Click New gist
, name the gist and paste your JSON into the editor, and then click Create public gist
.
After the gist is saved, you’ll see a Raw
button you can click to get a URL like this one:
https://gist.githubusercontent.com/pthaden/ab957da62672b4a305da5b653615830c/raw/d2004aa6793e240cc6565786a71c4fbe6a844c55/tweets.json
We’ll replace the URL in the $.getJSON()
call inside the Cookbook recipe with this gist URL.
But it doesn’t work!
If you’ve jumped ahead and already pressed Apply Changes
after pasting in your URL to the ojCollection List View example, you may notice that nothing updated in the UI. We chose this recipe on purpose, because it leverages the MockPagingRESTServer
.
This is a chunk of JavaScript that some of the Cookbook entries use to simulate a proper REST endpoint. It fools the recipe’s ojCollection into thinking there’s a real server out there that can get more data if needed at a mock URL such as ` /context-root/ojet/Tweets?limit=15&offset=0&totalResults=true`.
The problem is that the MockServers are cached in memory when you click Apply Changes
in the Cookbook. So the browser does indeed go out to getJSON() your new data from Github, but the ojCollection that is backing the HTML List View hits the same MockServer URL as before and it uses the cached data.
I haven’t figured a way to flush out the MockServer’s data, but an approach that did work is to rename the URL it builds internally by editing the object passed to the new MockPagingRESTServer()
constructor. In our List View recipe, we’ll change the “Tweets” entries to something like “myTweets” before clicking Apply Changes. Here’s the changes I made to the JS tab of the recipe:
require(['ojs/ojcore', 'knockout', 'jquery', 'ojs/ojknockout', 'promise', 'ojs/ojlistview', 'ojs/ojcollectiontabledatasource', 'ojs/ojmodel', 'mockjax', 'mockpagingrest'],
function(oj, ko, $)
{
$(document).ready(
function()
{
$.getJSON("https://gist.githubusercontent.com/pthaden/ab957da62672b4a305da5b653615830c/raw/d2004aa6793e240cc6565786a71c4fbe6a844c55/tweets.json",
function (data)
{
// responseTime is only added so that the activity indicator is more noticeable
var server = new MockPagingRESTServer({"myTweets": data}, {collProp:"myTweets", id:"source", responseTime:1000});
var model = oj.Model.extend({
idAttribute: 'source'
});
var collection = new oj.Collection(null, {
url: server.getURL(),
fetchSize: 15,
model: model
});
ko.applyBindings({
dataSource: new oj.CollectionTableDataSource(collection)
}, document.getElementById('listview'));
});
}
);
});
And it works now, with custom data from my gist!


Spoilers: Robert murders Vicky and his unborn baby in Corrie?
Robert Preston (Tristan Gemmill) has fought long and hard in Coronation Street to ensure that his wedding to Michelle Connor (Kym Marsh) goes ahead, and with him having been leading a double life and cheating on Michelle with Vicki Jeffries (Kerri Quinn), he’s lucky he’s got this far. However, Vicky proves to be a thorn in his side as the week of the wedding arrives, but will he resort to murder to ensure she remains out of the picture?
In the coming episodes, pre-wedding celebrations get underway at the bistro, but Robert is left horrified when Vicki shows up and interrupts proceedings.
However, he quickly manages to get rid of her, and lies to Michelle about it — claiming that he’s simply attempting to help out Tyler. As a result, Vicky scolds him, and promises to take him for every penny.
With the wedding in sight, Michelle orders Robert to ban Vicky from the ceremony, so he takes a trip to visit her to do just that. However, during his visit, a neighbour of Vicky’s hears the two of them shouting — that is, until there’s a resounding noise, followed by total silence.
Advertisement Advertisement
Robert returns to the cobbles and ensures Michelle that Vicky won’t be a problem.
Later in the week, the wedding arrives, and Tyler barges into the ceremony, and demands that Robert tell him what he’s done to Vicky.
With people starting to believe that Robert’s murdered his ex, Michelle puts two and two together — remembering how Robert informed her that Vicky wouldn’t be a problem on their big day.
Later, Robert’s questioned by the police in regards to Vicky’s vanishing.
Has Robert went to extreme lengths to keep Vicky out of his life? If so, then that means he’s also killed his unborn baby.
One to watch: Monday 2ndDecember at 7:30pm on ITV.


Hi, My name is Dylan Edwards, and I am currently pursuing a degree in Computer Science at Occidental College. My passion is using Computer Science and Software Engineering to solve complex business problems!
View ResumeTwitter sentiment analysis is a web application developed using React, Express, Node, the Twitter API, and the Google NLP API. The premise behind it is to allow users to enter in tweet Urls and return information on the sentiment (the positive/negative emotions of the tweet langauge) and on the magnitude (the strength of the sentiment).
Intellivest is a fictional finance based social media application that I build in order to demonstrate the functionality and advantages of micro services. Each service is written with Java Spring Boot and run through a Github actions CI/CD pipeline where each service is deployed behind a load balancer in an ECS service. all endpoints are accesible by one API Gateway.
An extremely reliable (9.9999% uptime) anonymous online chat application powered using pubnub for pubsub API and typescript + React frontend
I created a Natural Language Model using an LSTM RNN along with the word vectors from GloVe as model weights in order to generate lyrics from Country, Metal, Rock, and Pop music. To train theModel I seperated and encoded the input texts for each genre into trigram word vectors that pointed to a target word. To generate words I would use the trained model to predict next words and chain that to create new lyrics.
An anonymous online chat application powered using websockets and the Async powers of Golang to create go workers to handle incoming chat traffic from many rooms concurrently
3Dvation is a fully featured social network application including user authentication, post sharing, and file downloading for use by 3d printing enthusiasts. Built with Node, React, Express, and MySQL
An application to automate the process of searching for and collecting historical articles. Utilizes: Python, Pandas, Selenium, and Scrapy. Reduced the time intensive process of research by 2+ weeks. Increased research efficiency by eliminating the need for a large team of Research Assistants
Vindici.co is the official home page of the creative design agency vindici. This website was built with HTML, Javascript, and SASS
SQL Interactive is a web app designed to help software engineers starting out to understand the basics of relational databases and SQL. It also allows them to get practice with SQL with a live SQL playground and 9 challenges.
A video Game written in GMS Language that serves as a warning against the negative effects of climate
change.
(MAC users: to play game change system preferences to allow apps from anywhere or game will be unable
to run)


Classes are a great way to keep objects seperated and to keep code maintainable. Each class has a set of instructions to let it interact with other objects. Some of these objects are wrapped up inside the class itself. It is a good idea to keep your methods within these classes to keep objects functionality seperated and ordered.
Let's build a class that can tell us how hungover we might get based on the amount of sleep and drinks we have had
We will want to build a class that has two arguments sleep and drinks. In the arguements we set default values so that when creating a new instance of the class we do not have to put in the arguments they will be set for us.
if we use our terminal IRB or Pry we can see that the instance of the person class now has to instant vairables


Usuario:
Clave:
Ingresar
Info box
×
This is done totally without JavaScript. Just HTML and CSS.
This is done totally without JavaScript. Just HTML and CSS.


Buses will arrive in front of the George Sherman Union. Walk to the building where the buses park and go up the main staircase.
Buses will depart at 4:00 PM to Toronto, Waterloo, and Rutgers.
Take the Silver Line to South Station.
At South Station, take the Red Line toward Alewife and get off Park Street.
At Park Street, take the Green Line - B Branch toward Boston College and get off Boston University Central Station.
Walk to Boston University Central Station and take the Green Line to Park Street.
At Park Street, take the Red Line to South Station.
At South Station, take the Silver Line to Logan International Airport.


This filter includes/excludes jobs based on their parameters.
Options
- Name:
-
Regular expression that needs to match the parameter name
in order for this filter to match the job.
See the full list of available patterns.
Leave this field blank if you want to match any name.
- Value:
-
Regular expression that needs to match the parameter value
in order for this filter to match the job.
See the full list of available patterns.
Leave this field blank if you want to match any value.
- Description:
-
Regular expression that needs to match the parameter description
in order for this filter to match the job.
See the full list of available patterns.
Leave this field blank if you want to match any description.
- Match type:
-
Whether to add or remove jobs from this view. There's two kinds of match types:
- Include matched/unmatched: adds additional jobs to this view.
- Exclude matched/unmatched: removes jobs from this view that have been included by previous filters.
Note
This filter works with the following parameter types: String, Boolean, File, Choice, and Validating String.


[gecode-users] element constraint
Guido Tack
tack at ps.uni-sb.de
Sat Nov 7 13:25:12 CET 2009
Well, I don't really understand your model. What's an incrementation?
The only way I can imagine how you want your model to work is to just
split the element constraint in two. I.e., have two arrays a0 and a1
of integers (or IntVars), such that <a0[i], a1[i]> is the edge i, and
then use element(a0,b,d0); element(a1,b,d1) to constrain the two
IntVars d0 and d1 to be equal to the edge.
Cheers,
Guido
frank lemoine wrote:
> hello christian and Guido,
>
> thank's Guido for the approaches you give it to me, i see cp(map)
> it's very interesting but it's also very far from my level in
> gecode. the idea of using a boolean variable is very useful and i
> use it but i still have some troubling :
>
> my constraint it's about checking for an edge represented by two
> variable if it's present in a set possible edge and it should work
> on the element constraint like this element (*this, a ,b ,c) so that:
>
> a is the set of possible edge (set of edges each one is represented
> by two int variables)
> b incrementation
> d candidat edge (represented by two int varaibless)
>
> but in c From what I know we can just put one single variable so i
> can't describe an edge
>
> i hope this expression will be more explicit.
>
> Hamza
> From: tack at ps.uni-sb.de
> Date: Thu, 5 Nov 2009 11:52:22 +0100
> CC: users at gecode.org
> To: benouna84 at live.fr
> Subject: Re: [gecode-users] element constraint
>
> Hi,
>
> frank lemoine wrote:
> thank you christian for tips about the element constraint i run it,
> it's a very usefull but still i had some difficulties i don't know
> if gecode provide a solution for representing two intvar by a single
> intvar.
>
> let this constaint element (home, a,b,c)
>
> i have two integer variables represented by Intvar, i want to use a
> variable Intvar in c that can represent the link between this two
> varaibles (an edge for example)
> the goal is to check if this pair is in a the set of all pairs in a
>
> I'm not sure you can use IntVars the way you describe the problem.
> Do you want to have one variable for each node that describes the
> set of edges incident to the node? Then you'll have to use set
> variables instead of integer variables. Of course, if every node
> has exactly one incident edge, IntVars are fine. A different
> approach is to use n*n Boolean variables if you have n nodes, one
> for each edge, representing that the graph contains the edge or
> not. It really depends on what other constraints you want to put on
> the graph.
> Maybe the literature on graph variables (simply google for CP Graph)
> or tree constraints will help you get an idea.
>
> Cheers,
> Guido
>
>
> Nouveau Windows 7 : Trouvez le PC qui vous convient. En savoir plus.
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20091107/2d08f7af/attachment.htm>
More information about the gecode-users
mailing list


class Switch – switch object¶
A Switch object is used to control a push-button switch.
Usage:
sw = pyb.Switch() # create a switch object
sw.value() # get state (True if pressed, False otherwise)
sw() # shorthand notation to get the switch state
sw.callback(f) # register a callback to be called when the
# switch is pressed down
sw.callback(None) # remove the callback
Example:
pyb.Switch().callback(lambda: pyb.LED(1).toggle())
Methods¶
-
Switch.
__call__
()¶ Call switch object directly to get its state:
True
if pressed down,False
otherwise.
-
Switch.
value
()¶ Get the switch state. Returns
True
if pressed down, otherwiseFalse
.
-
Switch.
callback
(fun)¶ Register the given function to be called when the switch is pressed down. If
fun
isNone
, then it disables the callback.


---
layout: post
date: 2012-01-23
time: "09:00:00"
authors: ["Greg Wilson"]
title: Revising the Curriculum
tags: ["Content"]
---
I've been thinking some more about what the foundation and core of Software Carpentry actually are (and not just because Jon Pipitone keeps pestering me to do so). My last attempt had a foundation of seven principles and dozen topics in the core. I think I can slim that down even further; in fact, I think three big principles form the foundation of computational thinking:
- It's all just data, whose meaning depends on interpretation. This subsumes the notions that programs are a kind of data (which is the basis of things as diverse as functional programming and version control), and that we should separate models from views (because the most efficient ways for people and computers to interpret data are different). It doesn't really include the distinction of copy vs. reference, but I'm going to lump it in here because that idea doesn't seem big enough to deserve a heading of its own.
- Programming is a human activity. The only way to build large programs (or even small ones) is to create, compose, and re-use abstractions, because our brains can only understand a few things at a time. Similarly, good technique (specifically version control, testing, task automation, and some rules for collaborating, be they agile or sturdy) is necessary because everyone is tired, bored, or out of their depth at least once in a while.
- Better algorithms are better than better hardware. Computational complexity determines what's doable and what isn't, and no aspect of program performance makes sense without some understanding of it.
I also think we can reduce the core topics to just nine, though I can already hear protests from the back of the room about some of the omissions. I got this list by asking, "What's the minimum I think a graduate student needs to know to contribute to the computational work in a typical lab?" My answer is:
- The Unix shell
- Includes: basic commands (from
ls
and cd
to sort
and grep
); files and directories; the pipe-and-filter model.
- Because: it's still the workhorse of scientific computing (and is experiencing a resurgence as cloud computing becomes more popular).
- Illustrates: "lots of little pieces loosely joined" is a good way to introduce modularity and tool-based computing; it lets us talk the human time vs. machine time tradeoff.
- Omissions:
find
; shell scripts (particularly for
loops); SSH.
- Version control
- Includes: update/edit/commit; merge (with rollback as a special case).
- Because: it's a key technique.
- Illustrates: the idea of metadata; programming as a human activity (the hour-long red-green-refactor-commit cycle).
- Omissions: branching; distributed version control.
- The common core of programming
- Includes: variables; loops; conditionals; lists; functions; libraries; memory model (aliasing).
- Because: we can't teaching validation, associative data structures, or program design without this common core.
- Illustrates: programming as a human activity (programs must be readable, testable, etc.).
- Omissions: object-oriented programming; matrix programming.
- Validation
- Includes: structured unit tests; test-driven development; defensive programming; error handling; data validation.
- Because: defense in depth is key to building large programs, and trustworthy programs of any scale.
- Illustrates: trustworthy programs come from good technique.
- Omissions: testing floating-point code (since we don't really know how to).
- Program construction
- Includes: piecewise refinement; refactoring; design for test; first-class functions; using a debugger.
- Because: knowing the syntax of a programming language doesn't tell you how to create a program.
- Illustrates: creating and composing abstractions; interface vs. implementation.
- Omissions: structured documentation.
- Associative data structures
- Includes: sets (as a prelude); dictionaries; why keys must be immutable.
- Because: useful in so many places.
- Illustrates: how the right algorithms and data structures make programs more efficient.
- Omissions: implementation details.
- Databases
- Includes: select; sort; filter; aggregate; null; join; accessing a database from a program.
- Because: useful in many contexts.
- Illustrates: separation of models and views; a different model of computation
- Omissions: sub-queries; object-relational mapping; database design.
- Note: we could illustrate many of the same ideas with spreadsheets, but they're not as easy to connect to programs.
- Development methodologies
- Includes: agile practices (the usual Scrum+XP mix); sturdy (plan-driven) lifecycles.
- Because: ties many other lessons together.
- Illustrates: good technique makes good programs.
- Omissions: code review.
If we use a two-day workshop to start, and follow up over six weeks with one lesson per week, I think we can cover:
|
Topic |
Bootcamp |
Online |
| 1. |
Unix shell |
ls and cd ;
files and directories |
sort and grep ; pipes |
| 2. |
Version control |
update/edit/commit; merge |
rollback |
| 3. |
Core programming |
all of it (but see below) |
not needed (but see below) |
| 4. |
Validation |
unit tests; TDD |
defensive programming; error handling;
data validation |
| 5. |
Program construction |
One extended example;
one demo of a debugger |
More examples; design for test;
first-class functions |
| 6. |
Associative data structures |
none |
everything |
| 7. |
Databases |
none |
everything |
| 8. |
Development methodologies |
overview of agile |
sturdy (plan-driven) lifecycle;
evidence-based software engineering |
Topic #3, core programming, is the hardest to manage. If people have programmed in Python before, it can be a quick review (or omitted altogether). If they've programmed in some other interactive language, it can also be covered pretty quickly, but if they've never programmed before, or took one freshman course ten years ago, there's no way to teach them enough to make a difference in half a day. Even if there was, the other learners would undoubtedly be bored. The only solutions I can see are to restrict participation to people who can already do a simple exercise in some language, or to run one day of pre-bootcamp training for non- or weak programmers. Neither option excites me...
Coming back to content, this plans means that we'll leave out a lot of useful things:
- Spreadsheets: lots of scientists use spreadsheets badly, but while we'd like to show them how to do so well, the only one they actually use, Excel, isn't open source or cross platform, and it's much harder to build programs around spreadsheets than around databases.
- Make: is very hard to motivate unless people are working with compiled languages—we've tried showing people how to build data pipelines using Make, but it's too clumsy to be compelling. Plus, Make's syntax makes a hard problem worse...
- Systems programming: knowing how to walk directory trees and/or run sub-processes is useful, but we think people can pick these up on their own once they've mastered the core.
- Matrix programming: really important to some people, irrelevant to others, and the people it's important to will probably have seen the ideas in something like MATLAB before we get them.
- Multimedia programming (images, audio, and video): people can learn basic image manipulation on their own; audio and video are harder, mostly due to a lack of documentation, but they aren't important enough to enough people to belong in our core.
- Regular expressions: are a great way to illustrate the idea that programs are data, and are very useful, but everything in the core seems more important, and it'll be hard enough to get through all that in the time we have. This is probably the one I most regret taking out...
- HTML/XML: there are lots of excellent tutorials on writing HTML, and while XML processing is a good way to introduce recursion (and, if XPath is included, to talk about programs as data once again), I believe once again that it's not important enough to displace any of the material in the core.
- Object-oriented programming: is probably the omission that raises the most eyebrows. We can introduce it fairly naturally when talking about design for test (more specifically, about interface vs. implementation), but in practice, most people get along fine using lists, dictionaries, and the classes that come with the standard library without creating new classes of their own. Plus, showing people how to do OOP properly takes a lot more time than just showing them how to declare a class and give it methods.
- Desktop GUIs: an excellent way to introduce reactive (event-driven) programming and program frameworks, but is less important than it was ten years ago (most people would rather have a web interface these days).
- Web programming: the only thing we can teach people in the time we have is how to create security vulnerabilities.
- Security: the principles are easy to teach, but translating them into practice requires more knowledge (especially of things like web programming) than we can assume our learners have.
- Visualization: everybody wants it, but nobody can agree what it means. Should we show people how to use a specific library to create 3D vector flows? Or the principles of visual design so that they can make nicer 2D charts? And no matter what we teach, will they actually learn enough to make a difference?
- Performance and parallelism: the most important lesson, which is in the core, is that the right data structures and algorithms can speed programs up more than any amount of code tuning. Everything after that is either inextricably tied to the specifics of a particular langauge implementation (performance tuning), or offers no low-hanging fruit (parallelism). The one exception is job-level parallelism, which could be included in the material on the Unix shell if an appropriate cross-platform tool could be found.
- C/C++, Fortran, C#, or Java: more to introduce fixed typing and compilation, but these are relatively low priority topics.
We're going to start implementing this plan (or some derivative of it) at the beginning of February, to be ready for workshops starting at the end of that month. We'd welcome feedback; in particular, have we taken something out of the core that you think is more important than something that's in, and that could be taught in the time that's actually available? If you have thoughts, please let us know.


ExygySocialShare Module
Description
Easily add social sharing to your iOS and Android Titanium apps.
Share to Facebook, Twitter or Google+ (more networks coming soon!).
Very simple implementation. Choose to use the "native" sharing user experience or share via a webview.
If sharing natively, the plugin will take care of gracefully falling back to a webview if the native
apps or OS requirement are not supported by the users device. Questions? We offer support to all paid customers!
Email us at<EMAIL_ADDRESS>Accessing the android Module
To access this module from JavaScript, you would do the following:
var socialShare = require("com.exygy.socialshare");
The socialShare variable is a reference to the Module object.
ExygySocialShare.function
Only one function is available and necessary
socialShare.share(options);
provider: social network name ("facebook", "twitter" or "google+") (note: in "google+", the "+" is important)
message: optional - pre fill the post
url: optional - url to include in the post
app_id: - Google+ on iOs only. Need to be specified for Google+ SDK.
interface:
iOs:
Facebook: optional - "facebook_sdk", "iOS" or "web view" - default: "facebook_sdk"
Twitter: optional - "twitter" or "webview" - default: "twitter"
Google+: optional - "google_sdk" or "webview" - default: "google_sed"
Android:
Facebook: optional - "facebook_sdk" or "web view" - default: "facebook" - Note: on Android, "ios" == "facebook_sdk"
Twitter: optional - "twitter" or "webview" - default: "twitter"
Google+: optional - "google_sdk" or "webview" - default: "google_sdk"
Note: the plugin if the necessary apps are not installed or if the app is not set properly, the plugin will fall
down to whatever interface is available
IMPORTANT: To use the Facebook SDK on iOS:
The info.plist file of your project needs to be modified following Facebook instruction:
https://developers.facebook.com/docs/getting-started/facebook-sdk-for-ios/ (Section 5 - last Paragraph)
"Add FacebookAppID and FacebookDisplayName to the Info.plist file.
Create an array key called URL types with a single array sub-item called URL Schemes. Give this a single item with your app ID prefixed with fb. This is used to ensure the application will receive the callback URL of the web-based OAuth flow. "
If the info.plist file is not set up properly, the module won't be able to open the Facebook SDK sharing dialog.
Usage
var socialShare = require("com.exygy.socialshare");
options = {
provider: "facebook",
url: "http://exygy.com",
interface: "ios"
}
socialShare.share(options);
Author
Exygy - Pierre Hunault
Email us at<EMAIL_ADDRESS>License
This software is licensed under Apache License Version 2.0, January 2004


About... Currently pursuing my Masters degree in Geography and Environmental Studies. Interests...Pacific Northwest area, dam removals, social and cultural interactions with the environment.
Education...Beloit College, Bachelor's degree in Anthropology, Minor in Latin American Environmental Studies 1997 Work Experience...attach resume link
Portfolio / Research Projects: coming soon.


Cyclones in Australia Since 1990
Toggle navigation
Home
(current)
Plots
API
Machine Learning
About Us
Cyclone Plots
Abele
Select Cyclone
CYC Type Over Duration
Central Pressure Over Duration
Max Wind Speed Over Duration
Central Pressure Vs Max Wind Speed