- GET #index
- assigns all analyses as @analyses1.08512s
- GET #show
- assigns the requested analysis as @analysis0.07148s
- GET #new
- assigns a new analysis as @analysis0.03784s
- with valid params
- creates a new Analysis0.07508s
- assigns a newly created analysis as @analysis0.06919s
- redirects to the created analysis0.07037s
- with invalid params
- assigns a newly created but unsaved analysis as @analysis0.07579s
- re-renders the 'new' template0.07347s
- DELETE #destroy
- destroys the requested analysis0.08347s
- redirects to the analyses list0.07803s
- GET #index
- assigns all assumptions as @assumptions (PENDING: Add a hash of attributes valid for your model)
- GET #show
- assigns the requested assumption as @assumption (PENDING: Add a hash of attributes valid for your model)
- GET #new
- assigns a new assumption as @assumption0.03842s
- GET #edit
- assigns the requested assumption as @assumption (PENDING: Add a hash of attributes valid for your model)
- with valid params
- creates a new Assumption (PENDING: Add a hash of attributes valid for your model)
- assigns a newly created assumption as @assumption (PENDING: Add a hash of attributes valid for your model)
- redirects to the created assumption (PENDING: Add a hash of attributes valid for your model)
- with invalid params
- assigns a newly created but unsaved assumption as @assumption (PENDING: Add a hash of attributes invalid for your model)
- re-renders the 'new' template (PENDING: Add a hash of attributes invalid for your model)
- with valid params
- updates the requested assumption (PENDING: Add a hash of attributes valid for your model)
- assigns the requested assumption as @assumption (PENDING: Add a hash of attributes valid for your model)
- redirects to the assumption (PENDING: Add a hash of attributes valid for your model)
- with invalid params
- assigns the assumption as @assumption (PENDING: Add a hash of attributes valid for your model)
- re-renders the 'edit' template (PENDING: Add a hash of attributes valid for your model)
- DELETE #destroy
- destroys the requested assumption (PENDING: Add a hash of attributes valid for your model)
- redirects to the assumptions list (PENDING: Add a hash of attributes valid for your model)
- GET #index
- assigns all datasets as @datasets0.06200s
- GET #show
- assigns the requested dataset as @dataset0.04252s
- GET #new
- assigns a new dataset as @dataset0.04181s
- GET #edit
- assigns the requested dataset as @dataset0.04071s
- with valid params
- creates a new Dataset0.04748s
- assigns a newly created dataset as @dataset0.04793s
- redirects to the created dataset0.05491s
- with invalid params
- assigns a newly created but unsaved dataset as @dataset (PENDING: Add a hash of attributes invalid for your model)
- re-renders the 'new' template (PENDING: Add a hash of attributes invalid for your model)
- with valid params
- updates the requested dataset (PENDING: Add a hash of attributes valid for your model)
- assigns the requested dataset as @dataset0.04428s
- redirects to the dataset0.04181s
- with invalid params
- assigns the dataset as @dataset (PENDING: Add a hash of attributes invalid for your model)
- re-renders the 'edit' template (PENDING: Add a hash of attributes invalid for your model)
- DELETE #destroy
- destroys the requested dataset0.04357s
- redirects to the datasets list0.03989s
- GET #index
- returns http success0.02766s
- GET #index
- assigns all models as @models (PENDING: Add a hash of attributes valid for your model)
- GET #show
- assigns the requested model as @model (PENDING: Add a hash of attributes valid for your model)
- GET #new
- assigns a new model as @model0.03370s
- GET #edit
- assigns the requested model as @model (PENDING: Add a hash of attributes valid for your model)
- with valid params
- creates a new Model (PENDING: Add a hash of attributes valid for your model)
- assigns a newly created model as @model (PENDING: Add a hash of attributes valid for your model)
- redirects to the created model (PENDING: Add a hash of attributes valid for your model)
- with invalid params
- assigns a newly created but unsaved model as @model (PENDING: Add a hash of attributes invalid for your model)
- re-renders the 'new' template (PENDING: Add a hash of attributes invalid for your model)
- with valid params
- updates the requested model (PENDING: Add a hash of attributes valid for your model)
- assigns the requested model as @model (PENDING: Add a hash of attributes valid for your model)
- redirects to the model (PENDING: Add a hash of attributes valid for your model)
- with invalid params
- assigns the model as @model (PENDING: Add a hash of attributes valid for your model)
- re-renders the 'edit' template (PENDING: Add a hash of attributes valid for your model)
- DELETE #destroy
- destroys the requested model (PENDING: Add a hash of attributes valid for your model)
- redirects to the models list (PENDING: Add a hash of attributes valid for your model)
- GET #index
- assigns all preferences as @preferences (PENDING: Add a hash of attributes valid for your model)
- GET #show
- assigns the requested preference as @preference (PENDING: Add a hash of attributes valid for your model)
- GET #new
- assigns a new preference as @preference0.05680s
- GET #edit
- assigns the requested preference as @preference (PENDING: Add a hash of attributes valid for your model)
- with valid params
- creates a new Preference (PENDING: Add a hash of attributes valid for your model)
- assigns a newly created preference as @preference (PENDING: Add a hash of attributes valid for your model)
- redirects to the created preference (PENDING: Add a hash of attributes valid for your model)
- with invalid params
- assigns a newly created but unsaved preference as @preference (PENDING: Add a hash of attributes invalid for your model)
- re-renders the 'new' template (PENDING: Add a hash of attributes invalid for your model)
- with valid params
- updates the requested preference (PENDING: Add a hash of attributes valid for your model)
- assigns the requested preference as @preference (PENDING: Add a hash of attributes valid for your model)
- redirects to the preference (PENDING: Add a hash of attributes valid for your model)
- with invalid params
- assigns the preference as @preference (PENDING: Add a hash of attributes valid for your model)
- re-renders the 'edit' template (PENDING: Add a hash of attributes valid for your model)
- DELETE #destroy
- destroys the requested preference (PENDING: Add a hash of attributes valid for your model)
- redirects to the preferences list (PENDING: Add a hash of attributes valid for your model)
- QueryAssumptionResultsController
- with valid params
- updates the requested query_assumption_result (PENDING: Add a hash of attributes valid for your model)
- assigns the requested query_assumption_result as @query_assumption_result0.07269s
- with invalid params
- assigns the query_assumption_result as @query_assumption_result0.04267s
- re-renders the 'edit' template0.03619s
- ResearchQuestionsController
- GET #index
- assigns all research_questions as @research_questions (PENDING: Add a hash of attributes valid for your model)
- GET #show
- assigns the requested research_question as @research_question (PENDING: Add a hash of attributes valid for your model)
- GET #new
- assigns a new research_question as @research_question0.03289s
- GET #edit
- assigns the requested research_question as @research_question (PENDING: Add a hash of attributes valid for your model)
- with valid params
- creates a new ResearchQuestion (PENDING: Add a hash of attributes valid for your model)
- assigns a newly created research_question as @research_question (PENDING: Add a hash of attributes valid for your model)
- redirects to the created research_question (PENDING: Add a hash of attributes valid for your model)
- with invalid params
- assigns a newly created but unsaved research_question as @research_question (PENDING: Add a hash of attributes invalid for your model)
- re-renders the 'new' template (PENDING: Add a hash of attributes invalid for your model)
- with valid params
- updates the requested research_question (PENDING: Add a hash of attributes valid for your model)
- assigns the requested research_question as @research_question (PENDING: Add a hash of attributes valid for your model)
- redirects to the research_question (PENDING: Add a hash of attributes valid for your model)
- with invalid params
- assigns the research_question as @research_question (PENDING: Add a hash of attributes valid for your model)
- re-renders the 'edit' template (PENDING: Add a hash of attributes valid for your model)
- DELETE #destroy
- destroys the requested research_question (PENDING: Add a hash of attributes valid for your model)
- redirects to the research_questions list (PENDING: Add a hash of attributes valid for your model)
- GET #index
- assigns all users as @users (PENDING: Add a hash of attributes valid for your model)
- GET #show
- assigns the requested user as @user (PENDING: Add a hash of attributes valid for your model)
- GET #new
- assigns a new user as @user0.06597s
- GET #edit
- assigns the requested user as @user (PENDING: Add a hash of attributes valid for your model)
- with valid params
- creates a new User (PENDING: Add a hash of attributes valid for your model)
- assigns a newly created user as @user (PENDING: Add a hash of attributes valid for your model)
- redirects to the created user (PENDING: Add a hash of attributes valid for your model)
- with invalid params
- assigns a newly created but unsaved user as @user (PENDING: Add a hash of attributes invalid for your model)
- re-renders the 'new' template (PENDING: Add a hash of attributes invalid for your model)
- with valid params
- updates the requested user (PENDING: Add a hash of attributes valid for your model)
- assigns the requested user as @user (PENDING: Add a hash of attributes valid for your model)
- redirects to the user (PENDING: Add a hash of attributes valid for your model)
- with invalid params
- assigns the user as @user (PENDING: Add a hash of attributes valid for your model)
- re-renders the 'edit' template (PENDING: Add a hash of attributes valid for your model)
- DELETE #destroy
- destroys the requested user (PENDING: Add a hash of attributes valid for your model)
- redirects to the users list (PENDING: Add a hash of attributes valid for your model)
- creating a new analysis
- should be logged in0.85674s
- new analysis
- should find field input fields2.05802s
- should select attributes and create a new analysis2.09146s
- should not allow an empty analysis to be created0.99257s
- with 2 possible models at the beginning and as3 not holding
- should contain possible models1.54137s
- should have 1 open query assumptions and 2 possible models1.56005s
- "No" on first query2.62292s
- Yes on first query and only one remainign (so no second answer)3.48003s
- with all 3 models beeing possible at the beginning
- Yes on first query, then CD2_explain on AS23.94441s
- Yes on first query, then CD2_predict on AS23.81235s
- show analysis with a test query plot
- should show 1 possible model3.44773s
- should have 1 open query assumptions and 1 possible models2.19804s
- "No" on first query3.70289s
- "YES" on first query4.22769s
- creating a new preference
- should show reseach question selection firt0.81558s
- creating a new research question
- should require a name0.24349s
- should require a name0.40474s
- phantomJs
- should be of version 2.0.0 or higher0.05510s
- AnalysesHelper
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/helpers/analyses_helper_spec.rb (PENDING: Not yet implemented)
- AssumptionsHelper
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/helpers/assumptions_helper_spec.rb (PENDING: Not yet implemented)
- DatasetsHelper
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/helpers/datasets_helper_spec.rb (PENDING: Not yet implemented)
- HomeHelper
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/helpers/home_helper_spec.rb (PENDING: Not yet implemented)
- ModelsHelper
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/helpers/models_helper_spec.rb (PENDING: Not yet implemented)
- PreferencesHelper
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/helpers/preferences_helper_spec.rb (PENDING: Not yet implemented)
- QueryAssumptionResultsHelper
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/helpers/query_assumption_results_helper_spec.rb (PENDING: Not yet implemented)
- RScriptValidatorHelper
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/helpers/r_script_validator_helper_spec.rb (PENDING: Not yet implemented)
- ResearchQuestionsHelper
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/helpers/research_questions_helper_spec.rb (PENDING: Not yet implemented)
- UsersHelper
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/helpers/users_helper_spec.rb (PENDING: Not yet implemented)
- As2Init
- should have 3 possible models0.12664s
- should have 3 possible models0.12521s
- should return all model rules as contradictions0.12198s
- ExtendedArgumentationFramework::DungSolver
- should return two preferred extension0.00563s
- should contain the preferred extension a1,a30.00698s
- should contain the preferred extension a1,a40.00480s
- ExtendedArgumentationFramework::Edge
- #succeeds_wrt
- should return the subject0.00155s
- should not be accepted w.r.t {a3}0.00131s
- should be accepted w.r.t {}0.00111s
- ExtendedArgumentationFramework::Framework
- #arguments
- should respond to #arguments0.00249s
- should contain exactly #<ExtendedArgumentationFramework::Argument:0x007ff2e1542a78 @name="a_1">, #<ExtendedArgumentationFramework::Argument:0x007ff2e1542a28 @name="a_2">, and #<ExtendedArgumentationFramework::Argument:0x007ff2e15429d8 @name="a_3">0.00127s
- #attacks
- should respond to #attacks0.00120s
- should contain exactly #<ExtendedArgumentationFramework::Edge:0x007ff2cc7b8bf0 @source=#<ExtendedArgumentationFramework::Argument:0x007ff2cc7b8ce0 @name="a_1">, @target=#<ExtendedArgumentationFramework::Argument:0x007ff2cc7b8c90 @name="a_2">>0.00109s
- #attacks_on_attacks
- should respond to #attacks_on_attacks0.00134s
- should contain exactly #<ExtendedArgumentationFramework::Edge:0x007ff2cc7db100 @source=#<ExtendedArgumentationFramework::Argument:0x007ff2cc7db1c8 @name="a_3">, @target=#<ExtendedArgumentationFramework::Edge:0x007ff2cc7db128 @source=#<ExtendedArgumentationFramework::Argument:0x007ff2cc7db268 @name="a_1">, @target=#<ExtendedArgumentationFramework::Argument:0x007ff2cc7db218 @name="a_2">>>0.00124s
- should only return the attacks_on_attacks of a given source0.00119s
- #edges
- should return attacks and attacks_on_attacks 0.00137s
- #parse
- should have 3 arguments0.00198s
- should match 3 arguments0.00140s
- should have 2 attack0.00129s
- should have one attack on attacks0.00127s
- should have one attack on attacks0.00133s
- should throw an error if no counterattack available0.00300s
- framework
- should have 9 arguments0.00206s
- should have 7 edges0.00169s
- should have 5 attacks on attacks0.00198s
- should return one preferred extension0.00138s
- ExtendedArgumentationFramework::Labelling
- for arguments
- should be inlabeled0.00154s
- should change label to out0.00122s
- should change label to undec0.00101s
- with all In labelling
- a should be legally labelled in0.00111s
- a should not be illegally labelled in0.00099s
- b should be illegally labelled in0.00104s
- b should not be legally labelled in0.00104s
- should not be admissible0.00132s
- with correct labelling
- a should be legally labelled in0.00121s
- a should not be legally labelled out0.00108s
- a should not be legally labelled undec0.00139s
- b should be legally labelled out0.00155s
- b should not be legally labelled in0.00135s
- should be admissible0.00136s
- b should not be legally labelled undec0.00117s
- #clone
- should equal0.00118s
- should not change properties0.00125s
- #clone
- should equal0.00132s
- with all In labelling
- a should be legally labelled in0.00129s
- a should not be illegally labelled in0.00133s
- b should be in in0.00130s
- b should not be legally in0.00161s
- b should be illegally labelled in0.00138s
- should label attack on attack in0.00124s
- should not label attack on attack out0.00132s
- should not label attack on attack undec0.00132s
- should not label attack in0.00148s
- should not label attack undec0.00136s
- should label attack out0.00109s
- should not be admissible0.00119s
- with correct labelling
- a should be legally labelled in0.00119s
- a should not be legally labelled out0.00117s
- a should not be legally labelled undec0.00132s
- b should be legally labelled in0.00141s
- b should not be legally labelled out0.00124s
- should be admissible0.00138s
- b should not be legally labelled undec0.00133s
- ExtendedArgumentationFramework::Solver
- with acceptability check
- should equal 60.00165s
- should equal 50.00150s
- should equal 110.00153s
- z1to5 should be an array of arguments0.00225s
- should be acceptable wrt. [z1,..z5]0.00572s
- should not be acceptable wrt. [z1]0.00208s
- with 3 models each attacking each other
- with CD1_heavy in place
- should return true for m2 0.00290s
- should return false for m1 and m3 0.00398s
- should return false for m10.00313s
- should return false for m3 0.00331s
- with CD1_mild in place
- should return not decidable for acceptable for any m_1 and m20.00687s
- should return not accceptable for m30.00468s
- with CD2_predict in place
- should return true for m2 0.00350s
- should return false for m1 and m30.00576s
- with CD2_explain in place
- should return true for m2 0.00380s
- should return false for m1 and m30.00393s
- chaining CD1_mild and CD2_predict
- should return m2 as only possible model0.00651s
- should return m2 as only possible model on second level0.00631s
- should declare m3 as not possible model0.00512s
- should declare m1 as not possible model0.00718s
- chaining CD2_predict and test
- should return m2 as only possible model on first level0.00332s
- should return m2 as only possible model 0.00325s
- chaining CD1_mild only
- should return m1 as undecided model0.00552s
- should return m2 as undec model0.00530s
- should return m3 as non possible model0.00508s
- chaining CD1_mild and TEST
- should return m1 as only possible model0.00665s
- should declare m3 as not possible model0.00492s
- should declare m2 as not possible model0.01111s
- new_user_waiting_for_approval
- renders the headers0.39589s
- renders the body0.04279s
- Analysis
- should respond to #private0.02869s
- should respond to #in_progress0.02907s
- should be truthy0.00114s
- should respond to #dataset0.02837s
- should respond to #research_question0.03364s
- should respond to #possible_models0.02702s
- should respond to #query_assumption_results0.02957s
- should validate that :research_question cannot be empty/falsy0.03226s
- should validate that :dataset cannot be empty/falsy0.03110s
- #start
- should eq 30.94505s
- should respond to #start0.94193s
- should trigger start0.09102s
- should create new QueryAssumptionResults0.90711s
- should create only one QueryAssumptionResults0.88672s
- should create a QueryAssumptionResults for a10.86394s
- should assign 2 possible models for now0.88847s
- assumptions in general
- should validate that :name cannot be empty/falsy0.00486s
- should not respond to #assumptions0.00160s
- should respond to #required_by0.00111s
- should respond to #models0.00108s
- should respond to #preference_arguments0.00133s
- assumptions and assumptions
- should be empty0.01103s
- small argumentation framework
- argument with no critical attacker should be critical true0.07326s
- argument with a critical false assumption attacker should be critical false0.29376s
- argument with a query critical false assumption attacker should be true as they should be ignored0.05443s
- should return the query_assumption0.06029s
- should return the query_assumption of a sub critical blank assumption0.07808s
- should not return the query_assumption of a sub non-critical blank assumption0.06547s
- should not return the query_assumption of a sub critical blank assumption that has a critical evaluating to false assumption0.07691s
- argument with a critical assumption attacker should be critical true0.29595s
- single argument should be critical true
- should respond to #evaluate0.00893s
- should be truthy0.04555s
- #get_all_parents
- should return empty for single assumption0.00985s
- should return only parent0.02483s
- should return itself if there is a circle0.02618s
- should be invalid with a circle0.03166s
- should be valid without a circle0.02111s
- general BlankAssumptions
- should respond to #assumptions0.00203s
- should respond to #assumptions0.00169s
- assumptions and assumptions
- should be empty0.01071s
- should be empty0.01138s
- attributes access
- should not respond to #name (PENDING: How to hide attributes in STI)
- should not respond to #description (PENDING: How to hide attributes in STI)
- should not respond to #required_dataset_fields (PENDING: How to hide attributes in STI)
- should not respond to #fail_on_missing (PENDING: How to hide attributes in STI)
- should not respond to #r_code (PENDING: How to hide attributes in STI)
- should not respond to #question (PENDING: How to hide attributes in STI)
- should not respond to #argument_inverted (PENDING: How to hide attributes in STI)
- general QueryAssumption
- should not respond to #assumptions0.00240s
- should respond to #required_by0.00144s
- assumptions and assumptions
- should be empty0.00861s
- general TestAssumption
- should respond to #required_by0.00181s
- should not respond to #assumptions0.00148s
- assumptions and assumptions
- should be empty0.01106s
- Dataset
- should respond to #user0.01476s
- should respond to #columns0.01479s
- should respond to #data_file0.01353s
- should respond to #data0.01671s
- parsing a file
- should parse the columns0.01817s
- should be valid0.01599s
- should have the right columns0.01779s
- should have the right rows0.01701s
- should call update_dataset_test_assumption_results0.02102s
- should call update on the dataset_result0.26545s
- DatasetTestAssumptionResult
- should respond to #dataset0.24194s
- should respond to #test_assumption0.23877s
- validation
- should allow nil for result0.23724s
- test_assumption reference
- should be possible to add TestAssumptions0.23762s
- should not be possible to add Assumptions0.24006s
- with test assumption
- should return the test assumption0.22762s
- should trigger update method on change of dataset0.02543s
- #update
- should trigger evaluate on test_assumpiton0.23476s
- ModelOrder
- should be valid0.11784s
- should respond to #preference_argument0.12675s
- should respond to #models0.10804s
- should respond to #index0.11700s
- should be able to delete0.10626s
- Model
- should respond to [:name, :description]0.01441s
- should respond to #analyses0.01158s
- should respond to #research_questions0.01067s
- should respond to #assumptions0.01108s
- Plot
- should validate filename (PENDING: Todo: implement tests for plots)
- PossibleModel
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/models/possible_model_spec.rb (PENDING: Not yet implemented)
- PreferenceArgument
- should be valid0.08816s
- should respond to #model_orders0.08411s
- should respond to #models0.08202s
- should respond to #models_grouped0.08028s
- should respond to #assumption0.08558s
- should respond to #preference0.08106s
- should be able to delete0.09062s
- Preference
- should be valid0.16010s
- should respond to #research_question0.15259s
- should respond to #stage0.15787s
- should respond to #user0.15476s
- should respond to #name0.15306s
- should respond to #int_name0.15558s
- should respond to #preference_arguments0.15450s
- should respond to #global0.18174s
- should be able to delete0.17552s
- with cd1
- should equal 20.21677s
- should return the right rules0.26009s
- should return the right rules for one assumption only0.28643s
- should return the right rules for one assumption only0.23003s
- stage 1-10 registered for statisticians only
- a statistician
- should be allowed to set stage to 10.21527s
- should not be allowed to set stage to 100.19191s
- a clinician
- should not be allowed to set stage to 10.18649s
- should not be allowed to set stage to 100.18229s
- a statistician
- should be allowed to set global0.18441s
- should not be allowed to set stage to 100.17166s
- a clinician
- should not be allowed to set it0.17192s
- QueryAssumptionResult
- should respond to #dataset0.04229s
- should respond to #query_assumption0.03992s
- should respond to #analysis0.04006s
- validation
- should allow nil for result0.04080s
- query_assumption reference
- should be possible to add QueryAssumptions0.04674s
- should not be possible to add Assumptions0.04685s
- only one per analysis and assumption
- should be invalid to have a second query_assumption0.08583s
- QueryTestAssumptionPlot
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/models/query_test_assumption_plot_spec.rb (PENDING: Not yet implemented)
- Reason
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/models/reason_spec.rb (PENDING: Not yet implemented)
- ResearchQuestion
- should respond to #analyses0.00187s
- should respond to #name0.00140s
- should respond to #description0.00130s
- should respond to #preferences0.00136s
- should validate that :name is case-sensitively unique0.01596s
- should be able to delete0.00505s
- TestAssumption
- should be valid0.01529s
- should trigger update on dataset_test_assumption_result0.26493s
- check if the columns in the dataset are present
- should succeed0.01820s
- should not succeed if the columns are not present0.01719s
- should not succeed if there are columns in both but the assumption requires one more0.01463s
- should succeed if there are columns in both0.01556s
- check required dataset fields
- should assign empty array (PENDING: write specs)
- User
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/models/user_spec.rb (PENDING: Not yet implemented)
- GET /users
- works! (now write some real specs)0.13195s
- GET /analyses
- works! (now write some real specs)0.10846s
- #new /analyses
- should be success0.11261s
- should render form0.11205s
- should ask for a research question0.11165s
- should ask for a dataset0.11335s
- GET /assumptions
- works! (now write some real specs)0.10404s
- GET /datasets
- works! (now write some real specs)0.09339s
- GET /models
- works! (now write some real specs)0.10439s
- GET /preferences
- works! (now write some real specs)0.09247s
- QueryAssumptionResults
- Write specs (PENDING: Not yet implemented)
- GET /research_questions
- works! (now write some real specs)0.09388s
- routing
- routes to #index0.00169s
- routes to #new0.00139s
- routes to #show0.00137s
- routes to #edit0.00153s
- routes to #create0.00154s
- routes to #update via PUT0.00148s
- routes to #update via PATCH0.00127s
- routes to #destroy0.00129s
- routing
- routes to #index0.00165s
- routes to #new0.00194s
- routes to #show0.00142s
- routes to #edit0.00139s
- routes to #create0.00120s
- routes to #update via PUT0.00117s
- routes to #update via PATCH0.00117s
- routes to #destroy0.00116s
- routing
- routes to #index0.00118s
- routes to #new0.00183s
- routes to #show0.00164s
- routes to #edit0.00155s
- routes to #create0.00126s
- routes to #update via PUT0.00128s
- routes to #update via PATCH0.00143s
- routes to #destroy0.00151s
- routing
- routes to #index0.00132s
- routes to #new0.00139s
- routes to #show0.00133s
- routes to #edit0.00128s
- routes to #create0.00114s
- routes to #update via PUT0.00121s
- routes to #update via PATCH0.00116s
- routes to #destroy0.00116s
- routing
- routes to #index0.00124s
- routes to #new0.00115s
- routes to #show0.00104s
- routes to #edit0.00123s
- routes to #create0.00128s
- routes to #update via PUT0.00131s
- routes to #update via PATCH0.00130s
- routes to #destroy0.00123s
- QueryAssumptionResultsController
- routing
- routes to #index0.00121s
- routes to #new0.00124s
- routes to #show0.00116s
- routes to #edit0.00117s
- routes to #create0.00117s
- routes to #update via PUT0.00115s
- routes to #update via PATCH0.00133s
- routes to #destroy0.00190s
- ResearchQuestionsController
- routing
- routes to #index0.00139s
- routes to #new0.00141s
- routes to #show0.00149s
- routes to #edit0.00140s
- routes to #create0.00120s
- routes to #update via PUT0.00125s
- routes to #update via PATCH0.00136s
- routes to #destroy0.00143s
- routing
- routes to #index0.00136s
- routes to #new0.00161s
- routes to #show0.00206s
- routes to #edit0.00195s
- routes to #create0.00241s
- routes to #update via PUT0.00202s
- routes to #update via PATCH0.00171s
- routes to #destroy0.00162s
- admin/users/edit
- renders the edit user form0.11259s
- admin/users/index
- renders a list of users0.07637s
- admin/users/new
- renders new user form0.02982s
- admin/users/show
- renders attributes in <p>0.03968s
- analyses/index
- renders a list of analyses0.11156s
- analyses/new
- renders new analysis form0.04622s
- analyses/show
- renders attributes in <p>0.27119s
- BlankAssumption
- renders the edit assumption form0.16947s
- QueryAssumption
- renders the edit assumption form0.11871s
- TestAssumption
- renders the edit assumption form0.12580s
- assumptions/index
- renders a list of assumptions0.05179s
- BlankAssumption
- renders the edit assumption form0.07217s
- QueryAssumption
- renders the edit assumption form0.04808s
- TestAssumption
- renders the edit assumption form0.05599s
- assumptions/show
- renders attributes in <p>0.17351s
- datasets/edit
- renders the edit dataset form0.06070s
- datasets/index
- renders a list of datasets0.05508s
- datasets/new
- renders new dataset form0.02981s
- datasets/show
- renders attributes in <p>0.06296s
- home/index.html.haml
- add some examples to (or delete) /Users/sebastianzillessen/MEGA/Uni/00_KCL/05_MSc Project/small_data_analyst/spec/views/home/index.html.haml_spec.rb (PENDING: Not yet implemented)
- models/edit
- renders the edit model form0.10480s
- models/index
- renders a list of model names0.06455s
- models/new
- renders new model form0.05197s
- models/show
- renders attributes in <p>1.10257s
- preferences/edit
- renders the edit preference form0.39893s
- preferences/index
- renders a list of preferences0.41387s
- preferences/new
- renders new preference form (PENDING: add test)
- preferences/show
- renders attributes in <p>0.29705s
- query_assumption_results/update
- renders attributes in <p> (PENDING: write specs)
- research_questions/edit
- renders the edit research_question form0.06879s
- research_questions/index
- renders a list of research_questions0.04857s
- research_questions/new
- renders new research_question form0.04261s
- research_questions/show
- renders attributes in <p>0.20565s


add_control.Rd
Adds flow control timeseries to a HS
object. Control
conditions should cover the entire timeseries in HS
.
add_control(HS, timeseries, riverIDs, control = "set")
| HS | An |
|---|---|
| timeseries | a data frame with observations. |
| riverIDs | A vector of riverID of the river segments of the columns in obs. |
| control | Type of control, see details. |
Returns the HS
object with added list column
observation_ts
.
Available control schemes are
set: set input flow at a river segment (override routing). Useful e.g. for boundary conditions or dams.
add: increase runoff at a river segment.
subtract: lower runoff at a river segment.
multiply: modify runoff.


{% extends "layout_1_column.html" %} {% block title %}
You seem to be trying to access something that doesn't belong to you. Find your way back home.


This directory contains third-party software that may be useful for debugging.
The "ofp-tcpdump.patch" patch adds the ability to parse OpenFlow messages to tcpdump. These instructions assume that tcpdump 4.3.0 is going to be used, but it should work with other versions that are not substantially different. To begin, download tcpdump and apply the patch:
wget http://www.tcpdump.org/release/tcpdump-4.3.0.tar.gz
tar xzf tcpdump-4.3.0.tar.gz
ln -s tcpdump-4.3.0 tcpdump
patch -p0 < ofp-tcpdump.patch
Then build the new version of tcpdump:
cd tcpdump
./configure
make
Clearly, tcpdump can only parse unencrypted packets, so you will need to connect the controller and datapath using plain TCP. To look at the traffic, tcpdump will be started in a manner similar to the following:
sudo ./tcpdump -s0 -i eth0 port 6653
The "-s0" flag indicates that tcpdump should capture the entire packet. If the OpenFlow message is not received in its entirety, "[|openflow]" will be printed instead of the OpenFlow message contents.
The verbosity of the output may be increased by adding additional "-v" flags. If "-vvv" is used, the raw OpenFlow data is also printed in hex and ASCII.


Passing the whole System.Web.HttpContext
to your method as a parameter create hard dependency on the HTTPContext and makes testing really hard ( mocking HTTPContext itself).


{# Similar to EmbeddedFormset but includes links for sorting by column #}
Showing the first 100 Units. Use sort and filters to find specific Units.


Test
Paragraph emph and strong or code
.
This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line.
here is a bold (bold) claim
here is an italics (italics) claim
here is super test
here is sub test
here is a code \.
contains ` backtick
(two `` backtick
) claim
here --- mdash --- dash
here -- ndash -- dash
HTML bold element
HTML italic element
HTML emphasis element
HTML strong element
HTML superscript element
HTML subscript element


Chapter 6 Toolbox Ecosystem
6.1 Overview
Welcome to the OHI Toolbox, the engine behind all OHI assessments. The Toolbox is an ecosystem of R scripts and data files, organized in folders and sub-folders. The information in your repository will interact with an R
package called ohicore
, which does the core operations to calculate OHI scores.
In this chapter, we will learn how the Toolbox is structured - where you would store data, modify models, make calculations, as well as record decision-makings. The Toolbox ecosystem introduced here is the same in any assessment. So, if you would like to explore your own repository or an existing repository such as the Gulf of Guayaquil assessment you can navigate through those repositories in the same way.
This tutorial will take roughly 30 minutes.
Let’s get started!
6.2 Prerequisites
We will explore these files together on your own computer, but we will not be calculating scores in this chapter. If you will be using the Toolbox, please clone the repository to your computer with the following steps. You can clone either the toolbox-demo or your assessment’s repository. If you will not be calculating scores, you do not need to clone anything; please follow along online at GitHub https://github.com/OHI-Science/toolbox-demo or with your assessment’s repository.
- Have up-to-date versions of
R
and RStudio and have RStudio configured with Git/GitHub - Fork the toolbox-demo repository into your own GitHub account by going to https://github.com/OHI-Science/toolbox-demo, clicking “Fork” in the upper right corner, and selecting your account
- Clone the toolbox-demo repo from your GitHub account into RStudio into a folder called “github” in your home directory (filepath “~/github”)
- Get comfortable: be set up with two screens if possible. You will be following along in RStudio on your own computer while also watching an instructor’s screen or following this tutorial.
Now you have set up your computer, let’s open the toolbox-demo
repository on your computer, and go from there.
You can also watch a video recording of the following, identified in the OHI Onboarding Book: http://ohi-science.org/onboarding/conduct.
6.3 Repository home folder (ex: toolbox-demo
)
When you first open the repository, you’ll encounter the following files and folders. Note: if you have a starter repository, you’ll have a prep
folder but not a scenario
folder (which is region2016
in the screenshot below).
Overall, all the main files you will see are either of the two file types:
- .csv files contain data inputs or configuration information.
- .R or .Rmd scripts are written in the programming language R and use data inputs for processing and calculations.
Among all the files on your screen, the most important files are:
prep
is a data preparation folder. This is where you will store raw and/or intermediate data, and the R scripts you create to explore and format those data, and make trial runs of different models. You will spend roughly the first half of your time during your assessment here.region2016
is the scenario folder. The scenario folder has the architecture of the OHI Toolbox that is needed to calculate scores. It contains all of the inputs needed to calculate OHI scores, and you will modify these inputs when conducting your assessment. By default it is named regionYEAR (e.g. cnc2016 for New Caledonia 2016) to indicate that the assessment is conducted at the region scale (province, state, district, etc.), based on input layers and goal models used in the most recent global assessment (e.g. 2016).README.md
file accompanys most folders or files, as you will discover. It is a place to take notes for yourself, your team, and thinking ahead to anyone interested in the future.
Let’s take a closer look at the prep
and region2016
folders.
6.4 Prep folder
Click on prep
and let’s see what is inside:
Within prep
, there is a sub-folder for each goal and subgoal, as well as pressures and resilience. These folders are meant to help you be organized and promote scripting for data preparation (this is important for reproducibility and repeatability). Note that some goals depend on the same data and thus data can be prepared into layers from one place instead of for each goal. This is the case for goals dependent on habitat data: CP, CS, HAB, and goals dependent on species data: SPP, ICO.
Click on the ‘CW’ folder. Within each goal folder, there are typically a .Rmd script and a sub-folder to contain data.
The CW_data_prep.Rmd
document is a script where you will explore your raw data, format the data, try different models, make graphs and maps, as well as document decision making. We will come back to this script in Chapter 7 to learn how to prepare data for calculations.
We use RMarkdown (.Rmd) files because they can be rendered as webpages (for example, CW_data_prep.html
in the same CW folder) and can help explain the data processing steps and motivation behind them in written language. Click ‘Knit’ from the RStudio editor or click on the .html
file from the file pane and select ‘View in web browser’, and you will see a clean, human-readable webpage that can be shared online and viewed by anyone.
Now we’ve walked through the prep folder, let’s take a look at the scenario folder. Click back to the main toolbox-demo
folder, and open the region2016
folder.
6.5 Scenario folder (ex: region2016
)
Again, this scenario folder contains all the data layers and scripts for you to calculate OHI scores. Let’s look into the sub-folders and see what they do.
6.5.1 layers folder & layers.csv
After you prepared your data layers in the prep
folder, you will save them in the layers
folder, and register them in layers.csv
. (You will learn how to do so in Chapter 7).
The layers
folder contains individual data layers as .csv files for each goal and subgoal, named in a specific manner for easy organization and recognition, as shown here.
layers.csv
is a data registry for all the data layers in the layers folder. It is also a directory for ohicore
to find the exact data layers for calculations. The file itself is spreadsheet that is best to be opened in a spreadsheet editor such as Microsoft Excel.
6.6 conf folder
The conf
folder includes important configuration files required to calculate OHI scores, as shown here. These are the model parameters that the Toolbox needs to calculate scores, along with your prepared data layers.
Most of the maneuvering in the Conduct phase of the assessment is done within this folder. There are both .R scripts and .csv files. We will investigate them in the order you will interact with them.
6.6.1 functions.R
functions.R
contains models to calculate goal status and trend for all goal and sub-goals. Much of your time will be spent here developing goal models to calculate status and trend with the data layers you prepared.
Each goal and sub-goal equation is stored as a separate function within the script, identified by a 2- or 3- letter code. These functions calculate the status and trend using prepared layers saved in the layers
folder and registered in layers.csv.
6.6.2 scenario_data_years.csv
This file organizes year information for each layer. OHI assessments use the most recent data available, but which year is most recent will vary from data set to data set. scenario_data_years.csv
acts like a registry to help keep track of all these years. When you calculate OHI scores, you will be explicit about the year your completed assessment will represent, and we call this the “scenario year”.
This file also makes it possible for the Toolbox to calculate repeated assessments.
This file has 3 columns: the layer_name
, the year your assessment represents, called the scenario_year
, and the most recent year of data, called data_year
.
Let’s have a look:
You can see that for each layer, the data_year
is associated with a scenario_year
. In the example above, the data from the ao_access
layer have never been updated so we use the same data year for each scenario year, which is therefore repeated in the data_year
column. But for the ao_need
layer, many years of data are available, but there is a lag time for which year of data corresponds to which scenario year.
6.6.3 pressures & resilience
There are four .csv files relating to pressures and resilience.
- pressures_categories.csv
- pressures_matrix.csv
- pressures_categories.csv
- pressures_matrix.csv
They are spreadsheets that are best opened with Excel.
Pressures and Resilience are two of the four dimensions used to evaluate each goal or sub-goal, along with goal status and trend that you calculate in functions.R
. More details on how to operate with these files are explained in future chapters.
pressures_categories.csv
This is a table to record the name of each pressures data layer, its category, and sub-category. Each data layer name is the same name that is saved in the layers folder and is registered in layers.csv. Each layer falls under one of two categories - ecological or social pressures, and one of several sub-categories to further represent the origin of the pressure (e.g. climate change, fishing, etc), which is also indicated by a prefix of each data layer name (for example: po_ for the pollution sub-category).
pressures_matrix.csv
This is a table that indicates which individual pressures (stressors) affect which goal, sub-goals, or components, and weights them from 1-3. A weight of 0 is shown as a blank. A higher weight indicates more negative impacts on that goal or component of the goal. These weights are relative to each row of the matrix (goal, sub-goal, or component). These weights are used in global assessments based on scientific literature and expert opinion, and you can modify the weightings if necessary for your assessment. The pressures matrix is the same as Table S25 in Halpern et al. 2012, with current and detailed information in the online OHI-Global supplemental information document.
Each pressure (column) of the pressures matrix is the layer name of the pressures layer file that is saved in the layers folder and is registered in layers.csv, matching what’s recorded in the pressures_categories.csv.
resilience_categories.csv
Similar to pressures_categories.csv, this file contains information on each resilience data layer, including its name, category, and sub-category. Each resilience layer’s name is the same as the data layer to be saved in the layers folder and is registered in layers.csv. In addition, it also includes information on category type - ecosystem, regulatory, or social, indicating the origin of the resilience layer.
Each resilience layer is also assigned a weight of 0-1, representing the level of resilience against pressures. Different from the values used in pressures matrix, the resilience weights depend on the level of information available.
resilience_matrix.csv
This is a table that indicates which individual resilience measures affect which goal, sub-goals, or components. The resilience matrix is the same as Table S26 from Halpern et al. 2012, with current and detailed information in the online OHI-Global supplemental information document.
6.6.4 goals.csv
goals.csv
is another spreadsheet file that is best opened in Excel.
goals.csv
has information about goals and sub-goals, and controls which goals are calculated, and how they are represented in figures. If a goal exists in this list, it will be calculated, and needs an accompanying function in functions.r
. You will likely only modify this file if you are removing or adding goals or sub-goals, or changing the weighting for how goals are combined.
Here are the columns within goals.csv
:
- order_color & order_hierarchy: the order to display in flower plots
- order_calculate: the order in which the goals and sub-goals are calculated for the overall Index scores
- goal & parent: indicates the relationship between sub-goals and supra-goals (i.e. goals - with sub-goals)
- weight: the relative weight of each goal to calculate overall Index scores
- preindex_function: indicate what parameters are called to calculate scores for goals and - sub-goals in functions.R
- postindex_function: indicate what parameters are called to calculate scores for supra-goals in functions.R
6.6.5 config.R
config.R
configures labeling and constants appropriately. You will only need to modify this file when working with goals that have categories (example: habitat types or economy sectors) that are affected differently by pressures and resilience measures.
6.6.6 conf folder recap
We have just explored the files in the conf
folder. To recap, the conf
folder contains important configuration files required to calculate OHI scores, including functions.R, scenario_data_years.csv, and pressures and resilience files. Now let’s take a step back to the region2016
folder, and check out what else is there.
6.7 calculate_scores.Rmd
Note: calculate_scores.Rmd
replaces three files that existed in previous versions of the Toolbox: calculate_scores.R
, configure_toolbox.R
, and install_ohicore.R
. We collapsed those three files into one .Rmd file to simplify the workflow, although they still function correctly as individuals if your repository has them as three separate files. You can find information about these three files below.
calculate_scores.Rmd
is the code and workflow to calculate OHI scores. It enables the information in your repository to interact with an R
package called ohicore
, which does the core operations to calculate OHI scores. This Rmd will install the ohicore
package at the beginning of your assessment, and then call it as a library after that.
Whenever you change any data in layers
, modify models in functions.R
, and make changes to pressures and resilience, you could run code from this file and see how the OHI scores change. Scores will be saved in scores.csv.
6.7.1 calculate_scores.R
Note: depreciated, see calculate_scores.Rmd section above. This script used to be inside the repository’s scenario folder.
calculate_scores.R
is a script you’ll come to use often. As the name tells us, it is a script to calculate OHI scores. Whenever you change any data inlayers
, modify models in functions.R
, and make changes to pressures and resilience, you could run this script and see how the OHI scores change.
This script runs everything required to calculate OHI scores using the prepared layers the layers folder that are registered in layers.csv. Scores will be saved in scores.csv.
6.7.2 configure_toolbox.R
Note: depreciated, see calculate_scores.Rmd section above. This script used to be inside the repository’s scenario folder.
This script does the pre-checks before running goal models and calculate scores. It loads ohicore
, calls all goal functions and data layers in the “conf” folder, and check that all data layers are registered properly. You are encouraged to use this script when you’re working on individual goal models. After you register data layers for a goal, or make any changes to the data layers, source this script before running model-specific functions in functions.R.
6.7.3 install_ohicore.R
Note: depreciated, see calculate_scores.Rmd section above. This script used to be inside the repository’s home folder.
ohicore
is the backbone software package of the Toolbox. It is a R
package of functions that contain all the core operations for the data and models that you provide for your assessment, and it will calculate OHI scores. You don’t need to interact with or see the inside of ohicore
yourself during the assessment, but you do need to install this software package once at the start of your assessment by running this script.
6.7.4 Recap
The OHI Toolbox is a ecosystem of data layers and scripts, contained in folders and their sub-folders.
The information in your repository will interact with an R
package called ohicore
, which does the core operations to calculate OHI scores. You will need to install this package at the beginning of your assessment, and then call it as a library after that.
As you begin your assessment, you will spend most of your time in prep
folder, where you upload, explore, and format your data layers to be saved in the scenario folder region2016
for the next step of calculations.
region2016
is a folder with all the data layers, files, and scripts you’ll need to calculate scores. There you will register finished data layers, modify goal models, modify pressures and resilience, calculate OHI scores, and make flowerplots.
Now we have walked thorugh the files, how do they fit into the OHI process? Below is a figure that summarizes how each file will be used in relation to the steps you would take in an assessment for future reference.


react-atom
?react-atom
in actionreact-atom
in CodeSandbox 🎮react-atom
provides a very simple way to manage state in React, for both global app state and for local component state: ✨Atom
s✨.
Atom
:import { Atom } from "@dbeining/react-atom";
const appState = Atom.of({
color: "blue",
userId: 1
});
deref
You can't inspect Atom
state directly, you have to deref
erence it, like this:
import { deref } from "@dbeining/react-atom";
const { color } = deref(appState);
swap
You can't modify an Atom
directly. The main way to update state is with swap
. Here's its call signature:
function swap<S>(atom: Atom<S>, updateFn: (state: S) => S): void;
updateFn
is applied to atom
's state and the return value is set as atom
's new state. There are just two simple rules for updateFn
:
To illustrate, here is how we might update appState
's color:
import { swap } from "@dbeining/react-atom";
const setColor = color =>
swap(appState, state => ({
...state,
color: color
}));
Take notice that our updateFn
is spreading the old state onto a new object before overriding color
. This is an easy way to obey the rules of updateFn
.
swap
You don't need to do anything special for managing side-effects. Just write your IO-related logic as per usual, and call swap
when you've got what you need. For example:
const saveColor = async color => {
const { userId } = deref(appState);
const theme = await post(`/api/user/${userId}/theme`, { color });
swap(appState, state => ({ ...state, color: theme.color }));
};
useAtom
✨ custom React hookuseAtom
is a custom React Hook. It does two things:
deref
), andIt looks like this:
export function ColorReporter(props) {
const { color, userId } = useAtom(appState);
return (

User {userId} has selected {color}

{/* `useAtom` hook will trigger a re-render on `swap` */}
<button onClick={() => swap(appState, setRandomColor)}>Change Color</button>

);
}
Nota Bene: You can also use a selector to subscribe to computed state by using the
options.select
argument. Read the docs for details.
react-atom
?`Atom.of`, `useAtom`, and `swap` will cover the vast majority of use cases.
Reducers? Actions? Thunks? Sagas? Nope, just `swap(atom, state => newState)`.
TheuseAtom
hook accepts an optionalselect
function that lets components subscribe to computed state. That means the component will only re-render when the value returned fromselect
changes.
React.useState
doesn't play nice with React.memo
useState
is cool until you realize that in most cases it forces you to pass new function instances through props on every render because you usually need to wrap thesetState
function in another function. That makes it hard to take advantage ofReact.memo
. For example:---
function Awkwardddd(props) { const [name, setName] = useState(""); const [bigState, setBigState] = useState({ ...useYourImagination }); const updateName = evt => setName(evt.target.value); const handleDidComplete = val => setBigState({ ...bigState, inner: val }); return ( <> <input type="text" value={name} onChange={updateName} /> <ExpensiveButMemoized data={bigState} onComplete={handleDidComplete} /> </> ); }
Every time
input
firesonChange
,ExpensiveButMemoized
has to re-render becausehandleDidComplete
is not strictly equal (===) to the last instance passed down.The React docs admit this is awkward and suggest using Context to work around it, because the alternative is super convoluted.
With
react-atom
, this problem doesn't even exist. You can define your update functions outside the component so they are referentially stable across renders.
const state = Atom.of({ name, bigState: { ...useYourImagination } }); const updateName = ({ target }) => swap(state, prev => ({ ...prev, name: target.value })); const handleDidComplete = val => swap(state, prev => ({ ...prev, bigState: { ...prev.bigState, inner: val } })); function SoSmoooooth(props) { const { name, bigState } = useAtom(state); return ( <> <input type="text" value={name} onChange={updateName} /> <ExpensiveButMemoized data={bigState} onComplete={handleDidComplete} /> </> ); }
react-atom
is written in TypeScript so that every release is published with correct, high quality typings.
Hooks will makeclass
components and their kind (higher-order components, render-prop components, and function-as-child components) obsolete.react-atom
makes it easy to manage shared state with just function components and hooks.
npm i -S @dbeining/react-atom
react-atom
has one bundled dependency, @libre/atom, which provides the Atom data type. It is re-exported in its entirety from @dbeining/atom
. You may want to reference the docs here.
react-atom
also has two peerDependencies
, namely<EMAIL_ADDRESS>and<EMAIL_ADDRESS>, which contain the Hooks API.
react-atom
in actionimport React from "react";
import ReactDOM from "react-dom";
import { Atom, useAtom, swap } from "@dbeining/react-atom";
//------------------------ APP STATE ------------------------------//
const stateAtom = Atom.of({
count: 0,
text: "",
data: {
// ...just imagine
}
});
//------------------------ EFFECTS ------------------------------//
const increment = () =>
swap(stateAtom, state => ({
...state,
count: state.count + 1
}));
const decrement = () =>
swap(stateAtom, state => ({
...state,
count: state.count - 1
}));
const updateText = evt =>
swap(stateAtom, state => ({
...state,
text: evt.target.value
}));
const loadSomething = () =>
fetch("https://jsonplaceholder.typicode.com/todos/1")
.then(res => res.json())
.then(data => swap(stateAtom, state => ({ ...state, data })))
.catch(console.error);
//------------------------ COMPONENT ------------------------------//
export const App = () => {
const { count, data, text } = useAtom(stateAtom);
return (

Count: {count}

Text: {text}

<button onClick={increment}>Moar</button>
<button onClick={decrement}>Less</button>
<button onClick={loadSomething}>Load Data</button>
<input type="text" onChange={updateText} value={text} />

{JSON.stringify(data, null, " ")}

);
};
ReactDOM.render(<App />, document.getElementById("root"));
react-atom
in CodeSandbox 🎮You can play with react-atom
live right away with no setup at the following links:
| JavaScript Sandbox | TypeScript Sandbox |
|---|---|
Please open an issue if you have any questions, suggestions for improvements/features, or want to submit a PR for a bug-fix (please include tests if applicable).


31 March 1998
Disease Outbreak Reported
Many countries in the Americas are experiencing unexpected outbreaks of cholera associated with extreme weather conditions brought by the arrival of the El Niño phenomenon.
During 1998, the following countries have already reported cholera outbreaks: Bolivia (La Paz, El Alto, Valles y Tropico de la Paz) 165 cases and 5 deaths; Honduras (La Mosquitia in Gracias a Dios Department ) 219 cases and 12 deaths; Ecuador (Loja Province) 11 cases and 1 death; Peru (various departments) 2863 cases and 16 deaths; Nicaragua (border area with Honduras) 3 suspected cases. It is expected that other countries in the region will report increased cholera incidence in the coming months.
Preventive and control measures are being taken by the Ministries of Health of the affected countries. However, as the epidemic enters its 8th year in the western hemisphere and with the added impact of El Niño, cholera will continue to challenge governments and health agencies; additional international resources for emergency preparedness and control measures will be needed this year. WHO/PAHO are working closely with countries in the region to reactivate cholera preparedness and response plans.


What do you need to do?
Send forecast
Send a forecast to the address we hold or ask extra security to change the address.
Enquiries
View a forecast at State Pension age, the pension accrued to date, COPE and the National Insurance record.
Send a forecast to the address we hold or ask extra security to change the address.
View a forecast at State Pension age, the pension accrued to date, COPE and the National Insurance record.


Across: 1. Company dusted off some live entertainment (5-2 6) 10. Company busted revolutionary turn or negotiated extraction (5) 11. It's clear this stuff is Criminal Law's rages (9) 12. They often force a reschedule of Cairo's transport sadly (15) 13. Left after ridiculous fuss: rest and relaxation needed when things get like this (9) 15. Heads of cartel hold impromptu meeting and finally smoke bong (5) 17. Last meal without entree or coffee perhaps (5) 18. Criminal is scalped and squeezes out (9) 19. Can't be done in mall, but men pee everywhere (15) 22. He studied and named elements of water and air; love is more complicated (9) 23. Some musicians combining voice, tied to even parts (5) 24. Ross gets mixed up with strangers who might offend (13) Down: 2. Powerful driver used for Hercules robot, 17 workings losing energy (9) 3. OTC? (In proper inns, regulated!) (15) 4. Well up with second last desires (5) 5. "Bones" calls vice out (9) 6. Musicians to call out errors (15) 7. A cord tangled in Roman symbol (5) 8. Seemly outputs wrecked with stormy attitude (13) 9. Stresses names differently, forming new judgements (13) 14. End gig fit, lively, bubbling with nervous energy (9) 16. Where is Havana Hill? Somewhere warm! (9) 20. Iran deviously obtaining vanadium alloy (5) 21. Odd ones out never raised, causing nervousness (5)


| v1.0 - The rewrite.
- Code of the program completely rewritten. Legacy code ported over to class based
system.
- Stake will now check the ROM that you load and see if it's PRG, CHR and mapper number
are correct for a Castlevania ROM. If it is not correct, it will refuse to load the
ROM.
- Stairs now utilise the pointers to the stairs data, in preparation for the stairs
adding system.
- User interface tweak to the Up, Down, Left, Right button. Now, they are BitBtn's,
with relevant bitmaps, and they are moved to the position where scrollbars would be.
- Upgraded to GR32 1.5.1.
- Uses Sire's stair, door, and entrance icons.
- Middle button of the mouse is now used for an extra currently selected tile. If you
don't have a middle button, Shift + Left Click is also provided.
- Stairs adding function coded. Hardcored to allow you to have only 50 stairs per stage.
Changeable via a constant, but a smart hacker may want to repoint something else in that
bank, so I may as well leave the space for them to do so.
- Stairs deleting function coded. Utilised through CTRL + Right click on a stair.
- Minor entrance and door bugs fixed.
- ROM properties statistics replaced by a value editor.
- ROM assembly hacks are replaced by SPF files.
- You now have to have the ROM closed to change the datafile.
- Stake now displays text in the tile selector which can tell you which tile is mapped
to which mouse button. You can turn this off, or change the colour of the text.
- Added an 8x8 Tile Editor. This is an extremely basic tile editor for what is
currently stored in the BG pattern table. Accessible via the middle clicking on the
TSA editor whilst hovering over the tile you want to edit.
v0.9 - First release. |


| Book of Mormon |
Annotations |
|
Jesus Christ did show himself unto the people of Nephi, as
the multitude were gathered together in the land Bountiful, and did minister
unto them; and on this wise did he show himself unto them.
Comprising chapters 11 through 26.
|
|
|
Chapter 11
|
|
|
1 And now it came to pass that there were a great
multitude gathered together, of the people of Nephi, round about the temple
which was in the land Bountiful; and they were marveling and wondering one
with another, and were showing one to another the great and marvelous change
which had taken place.
|
|
|
2 And they were also conversing about this Jesus Christ,
of whom the sign had been given concerning his death.
|
|
|
3 And it came to pass that while they were thus conversing
one with another, they heard a voice as if it came out of heaven; and they
cast their eyes round about, for they understood not the voice which they
heard; and it was not a harsh voice, neither was it a loud voice;
nevertheless, and notwithstanding it being a small voice it did pierce them
that did hear to the center, insomuch that there was no part of their frame
that it did not cause to quake; yea, it did pierce them to the very soul, and
did cause their hearts to burn.
|
|
|
4 And it came to pass that again they heard the voice, and
they understood it not.
|
|
|
5 And again the third time they did hear the voice, and
did open their ears to hear it; and their eyes were towards the sound
thereof; and they did look steadfastly towards heaven, from whence the sound
came.
|
|
|
6 And behold, the third time they did understand the voice
which they heard; and it said unto them:
|
|
|
7 Behold my Beloved Son, in whom I am well pleased,
in whom I have glorified my name—hear ye him.
|
3 Ne 11:7-8
So these folks, “were also conversing about this Jesus Christ” (verse 2) when
they hear a voice so amazing that, “it did pierce them to the very soul, and
did cause their hearts to burn.”
The voice tells them, “Behold my Beloved Son.”

Keep in mind that these are the more faithful inhabitants since the wicked
had just been destroyed.
|
|
8 And it came to pass, as they understood they cast their
eyes up again towards heaven; and behold, they saw a Man descending out of
heaven; and he was clothed in a white robe; and he came down and stood in the
midst of them; and the eyes of the whole multitude were turned upon him, and
they durst not open their mouths, even one to another, and wist not what it
meant, for they thought it was an angel that had appeared unto them.
|
Annotation for 3 Ne 11:7-8 above
|
|
9 And it came to pass that he stretched forth his hand and
spake unto the people, saying:
|
|
|
10 Behold, I am Jesus Christ, whom the prophets testified
shall come into the world.
|
|
|
11 And behold, I am the light and the life of the world;
and I have drunk out of that bitter cup which the Father hath given me, and
have glorified the Father in taking upon me the sins of the world, in the
which I have suffered the will of the Father in all things from the
beginning.
|
|
|
12 And it came to pass that when Jesus had spoken these
words the whole multitude fell to the earth; for they remembered that it
had been prophesied among them that Christ should show himself unto them
after his ascension into heaven.
|
More falling to the earth out of astonishment.
|
|
13 And it came to pass that the Lord spake unto them
saying:
|
|
|
14 Arise and come forth unto me, that ye may thrust your
hands into my side, and also that ye may feel the prints of the nails in my
hands and in my feet, that ye may know that I am the God of Israel, and the
God of the whole earth, and have been slain for the sins of the world.
|
|
|
15 And it came to pass that the multitude went forth, and
thrust their hands into his side, and did feel the prints of the nails in his
hands and in his feet; and this they did do, going forth one by one until
they had all gone forth, and did see with their eyes and did feel with their
hands, and did know of a surety and did bear record, that it was he, of
whom it was written by the prophets, that should come.
|
In 3 Ne 17:25 we learn that there were 2,500 persons in
this multitude, and this verse tells us all lined up to feel Jesus. If each
person took only 10 seconds on average to thrust their hands into his side
and feel the prints of the nails on his hands and his feet, this would have
taken 6.9 hours. On the one hand it seems like a mere 10 seconds each would
make the experience like a monotonous and tedious activity sort of like
assembly line work. On the other hand, even at 10 seconds per person, would
the nearly seven hours of everybody waiting as each person looked and touched
be worth the time?
|
|
16 And when they had all gone forth and had witnessed for
themselves, they did cry out with one accord, saying:
|
|
|
17 Hosanna! Blessed be the name of the Most High God! And
they did fall down at the feet of Jesus, and did worship him.
|
|
|
18 And it came to pass that he spake unto Nephi (for Nephi
was among the multitude) and he commanded him that he should come forth.
|
|
|
19 And Nephi arose and went forth, and bowed himself
before the Lord and did kiss his feet.
|
|
|
20 And the Lord commanded him that he should arise. And he
arose and stood before him.
|
|
|
21 And the Lord said unto him: I give unto you power that
ye shall baptize this people when I am again ascended into heaven.
|
3 Ne 11:21-26
In 3 Ne 7:23-25 we learn that in the 33rd year since the sign of the Savior’s
birth, Nephi and others he had ordained had already been baptizing those who
repented. But these verses would indicate that Nephi didn’t have the power to
baptize or know how to perform the ordinance until after Jesus appeared and
gave them this power and instructions. Which way is it?
Also of note is that the baptismal wording in “the most correct of any book
on earth” (Joseph Smith, Book of Mormon Introduction, sixth paragraph) is
different than the baptismal wording required today:
“Having authority given me of Jesus Christ, I baptize you in
the name of the Father, and of the Son, and of the Holy Ghost. Amen” (3 Ne
11:25).
vs.
“Having been commissioned of Jesus Christ, I baptize you in the
name of the Father, and of the Son, and of the Holy Ghost. Amen” (D&C
20:73).
|
|
22 And again the Lord called others, and said unto them
likewise; and he gave unto them power to baptize. And he said unto them: On
this wise shall ye baptize; and there shall be no disputations among you.
|
Annotation for 3 Ne 11:21-26 above
|
|
23 Verily I say unto you, that whoso repenteth of his sins
through your words, and desireth to be baptized in my name, on this wise
shall ye baptize them—Behold, ye shall go down and stand in the water, and in
my name shall ye baptize them.
|
Annotation for 3 Ne 11:21-26 above
|
|
24 And now behold, these are the words which ye shall say,
calling them by name, saying:
|
Annotation for 3 Ne 11:21-26 above
|
|
25 Having authority given me of Jesus Christ, I baptize
you in the name of the Father, and of the Son, and of the Holy Ghost. Amen.
|
Annotation for 3 Ne 11:21-26 above
|
|
26 And then shall ye immerse them in the water, and come
forth again out of the water.
|
Annotation for 3 Ne 11:21-26 above
|
|
27 And after this manner shall ye baptize in my name; for
behold, verily I say unto you, that the Father, and the Son, and the Holy
Ghost are one; and I am in the Father, and the Father in me, and the Father
and I are one.
|
|
|
28 And according as I have commanded you thus shall ye
baptize. And there shall be no disputations among you, as there have hitherto
been; neither shall there be disputations among you concerning the points of
my doctrine, as there have hitherto been.
|
|
|
29 For verily, verily I say unto you, he that hath the
spirit of contention is not of me, but is of the devil, who is the father of
contention, and he stirreth up the hearts of men to contend with anger, one
with another.
|
|
|
30 Behold, this is not my doctrine, to stir up the hearts
of men with anger, one against another; but this is my doctrine, that such
things should be done away.
|
|
|
31 Behold, verily, verily, I say unto you, I will declare
unto you my doctrine.
|
|
|
32 And this is my doctrine, and it is the doctrine which
the Father hath given unto me; and I bear record of the Father, and the
Father beareth record of me, and the Holy Ghost beareth record of the Father
and me; and I bear record that the Father commandeth all men, everywhere, to
repent and believe in me.
|
|
|
33 And whoso believeth in me, and is baptized, the same
shall be saved; and they are they who shall inherit the kingdom of God.
|
3 Ne 11:33-40
So according to this, Jesus declared “ye must repent, and become as a little
child, and be baptized in my name, or you can in nowise inherit the kingdom
of God . . . And whoso shall declare more or less than this, and establish it
for my doctrine, the same cometh of evil.”
Yet, some think the Church declared more or less than this when the Church said
it was “revealed” to the prophet that children of a parent in a same-sex marriage
should be forbidden from receiving any LDS priesthood ordinance including
baptism, according to President Russell M. Nelson (Deseret News and CBS News).
But then, the LDS Church announced in April 2019 that someone had repented of this revelation, so now these children can be baptized (Church News).
|
|
34 And whoso believeth not in me, and is not baptized,
shall be damned.
|
Annotation for 3 Ne 11:33-40 above
|
|
35 Verily, verily, I say unto you, that this is my
doctrine, and I bear record of it from the Father; and whoso believeth in me
believeth in the Father also; and unto him will the Father bear record of me,
for he will visit him with fire and with the Holy Ghost.
|
Annotation for 3 Ne 11:33-40 above
|
|
36 And thus will the Father bear record of me, and the
Holy Ghost will bear record unto him of the Father and me; for the Father,
and I, and the Holy Ghost are one.
|
Annotation for 3 Ne 11:33-40 above
|
|
37 And again I say unto you, ye must repent, and become as
a little child, and be baptized in my name, or ye can in nowise receive these
things.
|
Annotation for 3 Ne 11:33-40 above
|
|
38 And again I say unto you, ye must repent, and be
baptized in my name, and become as a little child, or ye can in nowise
inherit the kingdom of God.
|
Annotation for 3 Ne 11:33-40 above
|
|
39 Verily, verily, I say unto you, that this is my
doctrine, and whoso buildeth upon this buildeth upon my rock, and the gates
of hell shall not prevail against them.
|
Annotation for 3 Ne 11:33-40 above
|
|
40 And whoso shall declare more or less than this, and
establish it for my doctrine, the same cometh of evil, and is not built upon
my rock; but he buildeth upon a sandy foundation, and the gates of hell stand
open to receive such when the floods come and the winds beat upon them.
|
Annotation for 3 Ne 11:33-40 above
|
|
41 Therefore, go forth unto this people, and declare the
words which I have spoken, unto the ends of the earth.
|
|


Warriors, Lovers, and Adventurers
November 13th
Questions from Last Time
Chapter 75
In the meantime
Chapter 100
General Discussion


Create a mechanism by which the DOM and script can share access to the model data which drives the DOM's display.
HTMLElement and TextNode implement a read/write property called model
. It is the location in which the data which drives the display of a fragment of DOM resides.
model
is either its assigned value, or its parentNode
's value.model
value from their parent.null
.undefined
has the special meaning that the node is to inherit its model
value from its parentmodel
value is not read/write consistent. Reading its value immediately after setting may not return the same value.A model owner is the nearest ancestor node that has a model assigned to it.
dataSrc
attribute on <template> and/or a new <datasource> element.


]]>
Use ]]>
element to wrap individual chart elements
This component has {{chartsAttr.length}} properties:
{{attr.description}}
HTML
Import the [CovalentChartsModule] in your NgModule:
]]>
Use ]]>
element to control the x-axis
Use ]]>
element to control the left y-axis
Use ]]>
element to control the right y-axis
This component has {{axisAttrs.length}} properties:
{{attr.description}}
Use above propeties as attributes with ]]>
, ]]>
, or ]]>
elements
HTML
]]>
Use ]]>
element wrapped inside ]]>
element to create a Bar Chart.
This component has {{barChartAttrs.length}} properties:
{{attr.description}}
Use above propeties as attributes with ]]>
element
HTML
Data Sample of jsonData
]]>
Use ]]>
element wrapped inside ]]>
element to draw a single or multi line chart
This component has {{lineChartAttrs.length}} properties:
{{attr.description}}
Use above propeties as attributes with ]]>
element
HTML
Data Sample
]]>
Use ]]>
element wrapped inside ]]>
element to draw an area chart
This component has {{areaChartAttrs.length}} properties:
{{attr.description}}
Use above propeties as attributes with ]]>
element
HTML
Data Sample
HTML


PIE is Position Independent Executable. A "NO PIE" application tells the loader which virtual address it should use (and keeps its memory layout quite static). Combined with in-kernel ASLR, PIE applications have a more diverge memory organization, making attacks that rely on memory structure more difficult (ie, no jumping to shellcode, have to use bruteforce, RET, or calculate on the fly)
Attacks against this application know up-front how the virtual memory for this application is (partially organized).
Essentially, PIE is ASLR for the application only.


|
|
Tales of Inroads Against Poverty, Start of "Poverty Clock,"
Will Mark International Year For The Eradication Of Poverty
Nineteen ninety-six, the International Year for the Eradication of Poverty
(IYEP), provides a unique opportunity to acknowledge the daily efforts
made by women and men worldwide, in developed as well as developing countries,
to overcome poverty.
We are pleased to invite you to a special event at which witnesses to
anti-poverty success, from Zimbabwe, Bolivia and the U.S. (Harlem) will
speak and answer questions. The event, in support of the International
Year for the Eradication of Poverty, wil l take place on Wednesday, 17
January 1996, at 1:00 p.m. in the Visitors' Lobby of the UN Building.
The ceremony is organized by the UN Development Programme in collaboration
with the International Movement ATD Fourth World. In addition to first-hand
testimonials, UNDP's "Poverty Clock", which tallies the number
of people born into poverty each minute , will be turned on by UNDP Administrator
James Gustave Speth, to run throughout the year.
DATE: Wednesday 17 January 1996
TIME: 1:00 - 1:30 p.m.
VENUE: Visitors' Lobby, UN Building
For further information, please contact Elizabeth
Scott Andrews or Francois
Coutu, Division of Public Affairs, UNDP, Tel.:<PHONE_NUMBER> or (212)
906-5344.
"People against Poverty"
Venue: United Nations Visitors' Lobby
Date: 17 January 1996
Programme
12:55 p.m. Musician Jorge Cabrera (Ecuador) - zampoa, guitar and vocals.
1:00 p.m. Introductory remarks by Djibril Diallo, Director, Division
of Public Affairs, UNDP.
1:05 p.m. African presentation by Betty Bangira (Zimbabwe).
1:10 p.m. Latin American presentation by Luis Ticona Mamani (Bolivia).
1:15 p.m. Vice-President of International Movement ATD Fourth World,
Huguette Redegueld.
1:20 p.m. US presentation by Lenore Cola (New York).
1:25 p.m. Q and A session.
1:35 p.m UNDP Administrator James Gustave Speth.
1:40 p.m. Poverty Clock is turned on by Administrator.
1:45 p.m. Jorge Cabrera (zampoa, guitar and vocals).
Media opportunities for one-on-one interviews.
|