This post is the third of a three parts series of articles about Developing behavior-driven tests for JEE web applications with Jbehave
- Part-1: Terminology, Tools and the ‘Volcano’ stories
- Part-2: Writing Stories and Java Implementation
- Part-3: Automate the tests and generate reports
Part 3 - Automate the tests and generate reports
Previously, we implemented the step cases in a Java code. In this part we’ll learn how to automate them and generate informative reports at the end of the run.
Identify implementation methods
You may recall we mentioned that Jbehave registered the Java implementation methods on start up. But how does it identify an implementation step?
Basically, these methods would have to override the configuration() method, which is part of the jbehave library. We have however, let ‘thucydides’ work for us. The ‘thucydides-core’ library (that comes with the ‘jbehave-plugin’), provides the ‘ThucydidesJUnitStories’ class. This identifies the ‘.story’ files and the links for the Java implementations. All we need is to have a Java class that inherits from it in the Java implementation root package:
import net.thucydides.jbehave.ThucydidesJUnitStories;
public class ApiBDDTestSuite extends ThucydidesJUnitStories {}
Final project structure:
Running the tests
At this point, we can run the tests as Junit.
Running the tests manually
In order for the black-box tests to pass, we need to have a server up and running. To run the tests with the IDE, right click on the ‘jbehave’ package.
In this fashion, we can run the tests quickly, debugging them and the server.
Automate the tests with Jetty(Maven plugin)
What we really want is to test the Volcano server as part of the maven build, the ‘maven compile’ task. In this case, we need maven to start a Volcano HTTP server, run the tests, and get Volcano down.
Eclipse Jetty is an open-source project providing an HTTP server and javax.servlet container We’ll use a Jetty maven-plugin, to start a Volcano server on which the tests will be running.
The maven plugin should be configured as follows:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
<httpConnector>
<port>8083</port>
</httpConnector>
<scanIntervalSeconds>0</scanIntervalSeconds>
<stopKey>stopApiTestEnv</stopKey>
<stopPort>9999</stopPort>
<jvmArgs>-Xms1024m -Xmx2048m -XX:PermSize=256M -XX:MaxPermSize=512M</jvmArgs>
<contextHandlers>
<contextHandler implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
<war>${project.basedir}/../volcano_core/target/volcano_core-1.2-SNAPSHOT.war</war>
<contextPath>/volcano</contextPath>
</contextHandler>
</contextHandlers>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
Note that:
-
The server’s port needs to be available, you may want to declare a different port from the default that your server is using.
-
The memory you declare allocated with the jvmargs needs to be enough to get the server up
-
In ‘contextHandlers’ we provide the web application archive to be used. If you have multiple web modules in your project that need to be tested, provide them all.
-
In the executions section we tell jetty to start before the tests are executed and stop afterwards. If we don’t explicitly ask that, then the jetty would stay up.
Test Summary Reports
Test Summary Reports are an important deliverable. They are needed to reflect test results in a clear way, allowing them to be analyzed quickly.
Jbehave storyReporter supports many report formats and will generate the reports for each step and story automatically after the tests have been completed in the /target/jbehave folder.
We’ll use another Thucydides maven plugin to generate some better-looking reports:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.2</version>
<configuration>
<reportPlugins>
<plugin>
<groupId>net.thucydides.maven.plugins</groupId>
<artifactId>maven-thucydides-plugin</artifactId>
<version>${thucydides.version}</version>
</plugin>
</reportPlugins>
</configuration>
</plugin>
This will generate various reports automatically at the end of the Maven run, in /target/site.
The ‘index.html’ file that has been created is the most comprehensive, interactive report:
A click on the ‘change password’ test (story) for example, would provide some additional data on each step result.
You can zoom in with a click on the various test components to get results and statistics.
Wrapping up
Behavior Driven Development is a methodology for developing software through example-based communication among developers, QAs, and project managers.
With Jbehave, this means writing Given-When-Then scenarios to illustrate examples in a plain text, which links to Java implementation methods.
As part of our mission to create Blackbox tests in a BDD fashion for the Volcano application, we’ve covered some test cases, discussed design and challenges, and reviewed some post-compilation reports.
The complete code can be found in my GitHub.


Larkhall woman electronically tagged for brandishing a knife
Kayleigh Patrick admitted shouting abuse, making threats and brandishing a blade.
by Hamilton Advertiser, https://www.dailyrecord.co.uk/authors/hamilton-advertiser/A Larkhall woman brandished a knife during a disturbance at her home. Kayleigh Patrick, 24, of Nevison Street, was electronically tagged for 50 days at Hamilton Sheriff Court this week.
She admitted shouting abuse, making threats and brandishing a blade at other persons at her then home in Tweed Street, Larkhall, on May 12 last year.
The tag means she’s prevented from leaving her home between 8pm and 7am each day.


Detailed course offerings (Time Schedule) are available for
GEN ST 101 University Learning Skills (1-3, max. 3)
Introduction to university culture. Practice in skills necessary for academic success, including note-taking, test-taking, writing, active learning, and time and stress management. Academic planning. Introduction to university resources.
View course details in MyPlan: GEN ST 101
GEN ST 105 Introduction to Liberal Studies (1-10, max. 10)
Designed to increase the academic proficiencies of new freshmen entering the University. Includes coursework in the liberal arts and sciences and related work in writing, speaking, and mathematics. Introduces students to computing and campus culture. Credit/no-credit only.
View course details in MyPlan: GEN ST 105
GEN ST 160 Discovery Seminar in the Humanities (5) VLPA
Small intensive seminar focusing on the visual, literary, and performing arts taught during Early Fall Start led by faculty representing a wide spectrum of academic disciplines and interests. Offered: A.
View course details in MyPlan: GEN ST 160
GEN ST 161 Discovery Seminar in Individuals and Society (5) I&S
Small intensive seminar focusing on individuals and society taught during Early Fall Start led by faculty representing a wide spectrum of academic disciplines and interests. Offered: A.
View course details in MyPlan: GEN ST 161
GEN ST 162 Discovery Seminar in the Natural World (5) NW
Small intensive seminar focusing on the natural world taught during Early Fall Start led by faculty representing a wide spectrum of academic disciplines and interests. Offered: A.
View course details in MyPlan: GEN ST 162
GEN ST 197 Freshman Seminar (1-3, max. 3)
Small-group discussion with faculty representing a wide spectrum of academic disciplines. Topics and approaches vary. Instructor may introduce research techniques or findings, concentrate on readings in his/her area of interest, or illustrate problems and alternatives related to the study of a particular academic discipline. Credit/no-credit only. Offered: AWSp.
View course details in MyPlan: GEN ST 197
GEN ST 199 The University Community (1-2, max. 2)
Introduces students to various aspects of the University of Washington community. Includes exploration of university resources and opportunities, and academically related skill development. Credit/no-credit only. Offered: A.
View course details in MyPlan: GEN ST 199
GEN ST 297 Undergraduate Seminar (1-3, max. 3)
Small-group discussion with faculty representing a wide spectrum of academic disciplines. Topics include faculty's research techniques or findings, concentrated reading in his/her area of interest, or illustrated problems and alternative related to the study of a particular academic discipline. Class structure varies based on instructor. Credit/no-credit only. Offered: AWSp.
View course details in MyPlan: GEN ST 297
GEN ST 300 Colloquium on Education, Learning, and Society (1, max. 3) I&S
Creates a learning community among Education minor students and their instructors. Students learn from researchers and practicing educators about current pedagogical projects and theories. Fosters self-reflexive projects to build understanding of learning pathways.
View course details in MyPlan: GEN ST 300
GEN ST 340 Community Fieldwork: Law (1-5, max. 5)
Credit/no-credit only.
View course details in MyPlan: GEN ST 340
GEN ST 341 Community Fieldwork: Law (1-5, max. 5)
Credit/no-credit only.
View course details in MyPlan: GEN ST 341
GEN ST 342 Community Fieldwork: Health (1-5, max. 5)
Credit/no-credit only.
View course details in MyPlan: GEN ST 342
GEN ST 343 Community Fieldwork: Health (1-5, max. 5)
Credit/no-credit only.
View course details in MyPlan: GEN ST 343
GEN ST 344 Community Fieldwork: Social Services (1-5, max. 5)
Credit/no-credit only.
View course details in MyPlan: GEN ST 344
GEN ST 345 Community Fieldwork: Social Services (1-5, max. 5)
Credit/no-credit only.
View course details in MyPlan: GEN ST 345
GEN ST 346 Community Fieldwork: Education (1-5, max. 5)
Credit/no-credit only.
View course details in MyPlan: GEN ST 346
GEN ST 347 Community Fieldwork: Education (1-5, max. 5)
Credit/no-credit only.
View course details in MyPlan: GEN ST 347
GEN ST 348 Community Fieldwork: Special Topics (1-5, max. 5)
Credit/no-credit only.
View course details in MyPlan: GEN ST 348
GEN ST 349 Community Fieldwork: Special Topics (1-5, max. 5)
Credit/no-credit only.
View course details in MyPlan: GEN ST 349
GEN ST 350 Independent Fieldwork (1-6, max. 18)
Independent fieldwork in community agencies, apprenticeships, internships, as approved for College of Arts and Sciences credit. Faculty sponsor and internship supervisor are required. Credit/no-credit only. Offered: AWSpS.
View course details in MyPlan: GEN ST 350
GEN ST 391 Supervised Study in Selected Fields (*, max. 15)
Special supervised study in a field represented in the College of Arts and Sciences. Faculty supervisor required. Offered: AWSpS.
View course details in MyPlan: GEN ST 391
GEN ST 470 Undergraduate Peer Instructor Practicum (1-3, max. 12)
Provides instruction in group leadership and promotion of values and methods of learning within a university setting. For Peer Instructors in the FIG and TRIG programs. Credit/no-credit only. Offered: AWSpS.
View course details in MyPlan: GEN ST 470


Here is a place for my work! I'm a 21 year old student in Glasgow studying Psychology, but in my spare time I like to paint and sketch. Hit the links up top to have a look! :)
Some examples:


Increase the configured CPU value
Increase the configured timeout value
Increase the configured memory value
Increase the configured concurrency value
blocks
layers
aliases
handlers
in sequence
both of these answers
neither of these answers
in parallel
aws lambda invoke --function ReturnBucketName outputfile.txt
aws lambda execute --function-name ReturnBucketName outputfile.txt
aws lambda invoke --function-name ReturnBucketName outputfile.txt
aws lambda execute --function ReturnBucketName outputfile.txt
AWS Trace
CloudStack
CloudTrail
AWS X-Ray
Create configuration files and deploy them using AWS CodePipeline.
Create CloudFormation templates and deploy them using AWS CodeBuild
Create configuration file and deploy using AWS CodeBuild
Create CloudFormation templates and deploy them using AWS CodePipeline.
API Gateway
S3
SAS
CLoudTrail
Use S3 metrics and CloudWatch alarms
Create custom metrics within your Lambda code.
Create custom metrics within your CloudWatch code.
Use Lambda metrics and CloudWatch alarms.
an SSL certificate
a bitmask
an AWS KMS key
an HTTP protocol
binaries.
all of these answers
executables
Shell scripts
MVC
virtual
stateless
protocol
by uploading a .zip file
all of these answers
by editing inline
from an S3 bucket
CLoudWatch logs
DynamoDB logs
S3 logs
Lambda logs.
CodeStack
ElasticStack
Mobile Hub
CodeDeploy
proportionally
equally
periodically
daily
resources and users
resources and conditions
events and users
events and conditions
logging streams
rotating streams
logging events
advancing log groups
create a Lambda
be an event source
assign an IAM role
delete a Lambda
Create a Lambda function with a custom runtime and reference the function in your Lambda
Create a Lambda layer with a custom runtime and reference the layer in your lambda
You cannot use Lambda in this situation
Create a Lambda function with a custom runtime
the execution policy
the Lambda configuration
the Lambda nodes
the IAM user
department:Sales,department:Sales
department:Sales,department:sales
aws:demo;aws:demo
aws:demo;aws:DEMO
**\_\_**
.neither of these answers
UDP/IP
TCP/IP
both of these answers
automatically
none of these answers
manually
ad hoc
stream and record sizes
stream and shard sizes
batch and record sizes
batch and shard sizes
Place each subnet in a VPC. Associate all subnets to your Lambda.
Place all subnets in a VPC. Associate all subnets to your Lambda.
Configure your Lambda to be available to multiple VPCs.
Configure all application VPCs to be peered.
number of function calls
amount of code run
compute time
amount of infrastructure used
Author a Lambda from scratch.
Use a blueprint.
Use a .zip deployment package.
Use the serverless app repository.
/tmp
/default
/temp
/ds
Delete the function.
Set the function concurrent execution limit to 0 while you update the code.
Reset the function.
Set the function concurrent execution limit to 100 while you update the code.
Overprovision memory to run your functions faster and reduce your costs. Do not overprovision your function timeout settings.
Overprovision memory and your function timeout settings to run your functions faster and reduce your costs.
Do not overprovision memory. Overprovision your function timeout settings to run your functions faster and reduce costs.
Do not overprovision memory. Do not overprovision your function timeout settings to run your functions faster and reduce costs.
removing log groups
none of these answers
creating log groups
updating log groups
DynamoDB tables
key-value pairs
S3 buckets
none of these answers
S3
API Gateway
X-Ray
DynamoDB
aliases
blocks
handlers
layers
binaries
executables
all of these answers
shell scripts
in the Lambda function code
in a Lambda environment variable
in the Lambda tags
in another S3 bucket
Deploy the Lambda.
Export the function
none of these answers
Configure a test event.
Fleece
NPM
none of these answers
Pod
CloudTrail
CloudWatch
CloudFormation
LogWatch
a table definition
queue isolation
STS Write
an SNS topic
POST
"All object create events"
PUT
COPY
Lambda configuration from logging code
Lambda handler from logging code
Lambda handler from core logic
Lambda configuration from core logic


Things to show profiency at:
- Injection with an interface
- Consume and display data from a service.
- Communicate between sibling services.
- Overriding behavior of an third party library in TypeScript.
- Hierarchical Modules
- Route Activation for Security
- Example of Observables
- Async Await Examples/Chaining dependent data
- Optional parameters in a route.
- Precidence in routes.
- Dynamic Forms
- Extending objects with new properties
- Inheritance
- Generics
- NgIf v NgShow
- Ng2 Directive usage
- Child component access
- Accessing DOM elements.


Disable scheduling for multiple candidate revisions.
If we have 3 branches:
----A--.---.--- B
\-----C
jenkins would try to build (B) and (C).
This behaviour disables this and only builds one of them.
It is helpful to reduce the load of the Jenkins infrastructure when the
SCM system like Bitbucket or GitHub should decide what commits to build.


Code Coverage |
|||||||||
Lines |
Functions and Methods |
Classes and Traits |
|||||||
| Total | |
56.25% |
171 / 304 |
|
42.98% |
49 / 114 |
|
31.43% |
11 / 35 |
| Console | |
100.00% |
4 / 4 |
|
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
| Exceptions | |
100.00% |
3 / 3 |
|
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
| Http | |
41.91% |
57 / 136 |
|
26.67% |
16 / 60 |
|
0.00% |
0 / 16 |
| Policies | |
42.86% |
3 / 7 |
|
33.33% |
1 / 3 |
|
0.00% |
0 / 1 |
| Providers | |
93.18% |
41 / 44 |
|
88.89% |
8 / 9 |
|
80.00% |
4 / 5 |
| Repositories | |
52.53% |
52 / 99 |
|
33.33% |
9 / 27 |
|
0.00% |
0 / 6 |
| Address.php | |
100.00% |
2 / 2 |
|
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
| Customer.php | |
100.00% |
2 / 2 |
|
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
| Order.php | |
100.00% |
4 / 4 |
|
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
| OrderItem.php | |
100.00% |
2 / 2 |
|
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
| Product.php | n/a |
0 / 0 |
n/a |
0 / 0 |
n/a |
0 / 0 |
|||
| User.php | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |


- Dedicated Previous and Next links, so the reader can quickly find these 2 common actions at similar locations on each page.
- A clearly marked current page number.
- Always visible first and last page number. Combined with the current page number, this gives the reader a sense of how many pages they’ve read and how many there are to go.
- A configurable number of adjacent pages.
- Ellipses when there are more pages than can be displayed.
- Bulma CSS styles.
Like so:
Here’s what I came up with:
 {{ $paginator := .Paginator }}  {{ $adjacent_links := 1 }}  {{ $max_links := (add (mul $adjacent_links 2) 1) }}  {{ $lower_limit := 1 }} {{ $upper_limit := $paginator.TotalPages }} {{ $include_lower_ellipsis := false }} {{ $include_upper_ellipsis := false }} {{ if gt $paginator.TotalPages (add $max_links 2) }}  {{ if ge $paginator.PageNumber $adjacent_links }} {{ $lower_limit = sub $paginator.PageNumber $adjacent_links }}  {{ if lt (sub $paginator.TotalPages $lower_limit) $max_links }} {{ $lower_limit = add 1 (sub $paginator.TotalPages $max_links) }} {{ end }}  {{ if gt (sub $lower_limit 1) 1 }} {{ $include_lower_ellipsis = true }} {{ end }} {{ end }}  {{ if gt (sub $paginator.TotalPages $paginator.PageNumber) $adjacent_links }} {{ $upper_limit = add $paginator.PageNumber $adjacent_links }}  {{ if le $upper_limit $max_links }} {{ $upper_limit = $max_links }} {{ end }}  {{ if gt (sub $paginator.TotalPages $upper_limit) 1 }} {{ $include_upper_ellipsis = true }} {{ end }} {{ end }} {{ end }}  {{ if gt $paginator.TotalPages 1 }}
  {{ if $paginator.HasPrev }} Previous {{ else }} Previous {{ end }} {{ if $paginator.HasNext }} Next page {{ else }} Next page {{ end }}
 {{ range $paginator.Pagers }}  {{ if or (or (eq .PageNumber 1) (eq .PageNumber $paginator.TotalPages)) (and (ge .PageNumber $lower_limit) (le .PageNumber $upper_limit)) }}
{{ .PageNumber }}  {{ if or (and (eq .PageNumber 1) (eq $include_lower_ellipsis true)) (and (eq .PageNumber $upper_limit) (eq $include_upper_ellipsis true)) }}
… {{ end }} {{ end }} {{ end }}

 {{ end }}
Note this code is available on github (along with the code for the rest of this site).
The biggest stylistic difference from Glenn McComb’s version is that the adjacent pages are pre-computed outside the loop. I doubt there’s any performance difference as both versions are still O(n) but it did shorten the code somewhat.
I noticed a couple of things about the go template language while developing. For one, go template expressions can’t stretch across multiple lines. This forced the complicated boolean logic to stretch quite wide.
The go template language is also missing slice expressions (i.e. a[2:5]
). Had these existed I would
have attempted to range only over the adjacent links and reduce the algorithm to O(m) (where m is the number of
adjacent links). It’s possible to get around this in regular usage of go templates by adding a custom
mkSlice function but Hugo does not
allow custom go template functions.
Oh well, the performance implications are minimal.


{% extends "layouts/default.html" %} {% block content %} {% include "includes/search.html" %}
Looks like there's no robot photos for this team yet.
{% if team_number %} Add Pit Photos {% else %} Add Pit Photos {% endif %} {% endif %}There are no district statistics available.
{% endif %}{{event_statuses[event.key].overall_status_str | safe}}
There are no event statistics available.
{% endif %}There is no data on this team.
{% endif %}
{% autoescape false %}
{{match_report.notes | replace("\n", "
")}}
{% endautoescape %}
Looks likes there's no match reports for this team yet.
{% include "includes/add_match_report_button.html" %} {% endif %}
{% autoescape false %}
{{pit_report.drivetrain_notes | replace("\n", "
")}}
{% endautoescape %}
{% autoescape false %}
{{pit_report.personnel_notes | replace("\n", "
")}}
{% endautoescape %}
{% autoescape false %}
{{pit_report.notes | replace("\n", "
")}}
{% endautoescape %}
Looks like there's not pit reports for this team yet.
{% include "includes/add_pit_report.html" %} {% endif %}


Today, I have something very special planned for you. I just got back from a galaxy far far away, where i visited a old temple. there i found this crazy object that spits out wierd things. so far i have seen 2 things that happen as I tested putting a small number into the object. it also asks for a name. wierd. will you help me test this object. maybe we can find out what everything will come out of it. Again welcome to my Neighborhood and please help. This could be something that can be our ownly hope to help the federation save the galaxy. there is a suprise if you find the right input.


My Profile
Messages
Send
People to follow
Welcome
Apply as a Employee
Please select your Sequrity Question
What is your Birthdate?


A 4 Star hotel has a larger range of facilities available and the design is high quality. All service standards are aimed towards pleasing the guest. These hotels are usually located near city centres and are equipped with dining areas, exclusive facilities such as in-house gyms and swimming pools.


PanVol / Solo
Tone.PanVol
combines panning and volume control into one component.
Tone.Solo
allows you to selectively solo the connected audio.


Trait that when mixed into a fixture.Suite
ensures the
configMap
passed to runTest
is passed along
as a fixture into each test.
A sister trait to org.scalatest.FeatureSpec
that can pass a fixture object into its tests.
A sister trait to org.scalatest.FlatSpec
that can pass a fixture object into its tests.
A sister trait to org.scalatest.FreeSpec
that can pass a fixture object into its tests.
A sister trait to org.scalatest.FunSpec
that can pass a fixture object into its tests.
A sister trait to org.scalatest.FunSuite
that can pass a fixture object into its tests.
A sister trait to org.scalatest.PropSpec
that can pass a fixture object into its tests.
Suite
that can pass a fixture object into its tests.
A sister trait to org.scalatest.WordSpec
that can pass a fixture object into its tests.
FixtureFeatureSpec has been deprecated and will be removed in a future
release of ScalaTest. Please change any uses of org.scalatest.fixture.FixtureFeatureSpec
to a corresponding use of org.scalatest.fixture.FeatureSpec
.
FixtureFlatSpec has been deprecated and will be removed in a future
release of ScalaTest. Please change any uses of org.scalatest.fixture.FixtureFlatSpec
to a corresponding use of org.scalatest.fixture.FlatSpec
.
FixtureFreeSpec has been deprecated and will be removed in a future
release of ScalaTest. Please change any uses of org.scalatest.fixture.FixtureFreeSpec
to a corresponding use of org.scalatest.fixture.FreeSpec
.
FixtureFunSuite has been deprecated and will be removed in a future
release of ScalaTest. Please change any uses of org.scalatest.fixture.FixtureFunSuite
to a corresponding use of org.scalatest.fixture.FunSuite
.
FixturePropSpec has been deprecated and will be removed in a future
release of ScalaTest. Please change any uses of org.scalatest.fixture.FixturePropSpec
to a corresponding use of org.scalatest.fixture.PropSpec
.
FixtureSpec has been deprecated and will be removed in a future
release of ScalaTest. Please change any uses of org.scalatest.fixture.FixtureSpec
to a corresponding use of org.scalatest.fixture.FunSpec
.
FixtureSuite has been deprecated and will be removed in a future
release of ScalaTest. Please change any uses of org.scalatest.fixture.FixtureSuite
to a corresponding use of org.scalatest.fixture.Suite
.
FixtureWordSpec has been deprecated and will be removed in a future
release of ScalaTest. Please change any uses of org.scalatest.fixture.FixtureWordSpec
to a corresponding use of org.scalatest.fixture.WordSpec
.
MultipleFixtureFeatureSpec has been deprecated and will be removed in a future version of ScalaTest. Please use FixtureFeatureSpec with ConfigMapFixture instead.
MultipleFixtureFlatSpec has been deprecated and will be removed in a future version of ScalaTest. Please use FixtureFlatSpec with ConfigMapFixture instead.
MultipleFixtureFreeSpec has been deprecated and will be removed in a future version of ScalaTest. Please use FixtureFreeSpec with ConfigMapFixture instead.
MultipleFixtureFunSuite has been deprecated and will be removed in a future version of ScalaTest. Please use FixtureFunSuite with ConfigMapFixture instead.
MultipleFixturePropSpec has been deprecated and will be removed in a future version of ScalaTest. Please use FixturePropSpec with ConfigMapFixture instead.
MultipleFixtureSpec has been deprecated and will be removed in a future version of ScalaTest. Please use FixtureSpec with ConfigMapFixture instead.
MultipleFixtureWordSpec has been deprecated and will be removed in a future version of ScalaTest. Please use FixtureWordSpec with ConfigMapFixture instead.


A Dart app which snaps to blocks of content (panels) when the user scrolls. You can nest sets of panels as you will see throughout this demo page.
Each following panel will explain a specific feature of PanelSnap.
http://github.com/ringstaff/dart-panelsnap
Ported from Guido Bouman's JQUERY.PANELSNAP
(Scroll down to see more.)
<html> <body> <section> ... </section> <section> ... </section> <section> ... </section> <script type="application/dart"> import 'dart:html'; import 'package:panelsnap/panelsnap.dart'; void main() { new PanelSnap(document.body); } </script> <script src="packages/browser/dart.js"></script> </body> </html>
new PanelSnap(querySelector('.panel_container')) ..menu = false ..menuSelector = 'a' ..panelSelector = 'section' ..namespace = '.panelSnap' ..onSnapStart = () {} ..onSnapFinish = () {} ..onActivate = () {} ..directionThreshold = 50 ..slideSpeed = 400;


11
1 Then Zophar the Naamathite answered and said,
2 "Should not such a multitude of words be answered?

When you mock our teaching, will no one make you feel ashamed?
4 For you say to God, 'My beliefs are pure,
I am blameless in your eyes.'
5 But, oh, that God would speak
and open his lips against you;
6 that he would show you the secrets of wisdom!
For he is great in understanding.
Know then that God demands from you less than your iniquity deserves.
7 Can you understand God by searching for him?
Can you comprehend the Almighty perfectly?
8 The matter is as high as heaven; what can you do?
It is deeper than sheol; what can you know?
9 Its measure is longer than the earth,
and wider than the sea.
10 If he passes through and shuts anyone up,
if he calls anyone to judgment, then who can stop him?
11 For he knows false people;
when he sees iniquity, does he not notice it?
12 But foolish people have no understanding;
they will get it when a wild donkey gives birth to a man.
13 But suppose that you had set your heart right
and had reached out with your hands toward God;
14 suppose that iniquity were in your hand, but that then you put it far away from you,
and did not let unrighteousness live in your tents.
15 Then you would certainly lift up your face without a sign of shame;
indeed, you would be steadfast and would not fear.
16 You would forget your misery;
you would remember it only like waters that have flowed away.
17 Your life would be brighter than the noonday;
though there were darkness, it would become like the morning.
18 You would be secure because there is hope;
indeed, you would find safety about you and would take your rest in safety.
19 Also you would lie down in rest, and none would make you afraid;
indeed, many would seek your favor.
20 But the eyes of wicked people will fail;
they will have no way to flee;
their only hope will be a last gasp of life."


It seems that no entity with IRI "[[this]]"
in any subject, predicate or object position is known in the knowledge graph. Also no static application page with this identifier can be found.
Click on the edit button () in the top right of this page (only visibile if the respective ACL permissions are being granted to you) to create a new, static application page with this identifier.


Education |
|
|
Yale University, School of Forestry & Environmental Studies, New Haven, CT Masters of Environmental Management
|
5/18 |
|
University of Washington, Seattle, WA Certificate in Statistical Analysis with R Programming |
09/14 – 06/15 |
|
Western Washington University , Bellingham, WA Bachelors of Science, Environmental Science with Chemistry minor |
09/07 – 06/11 |
Experience |
|
|
Metabolic – Green Chemistry Intern, Amsterdam, Netherlands Designed theoretical framework and coded statistical scoring for software that predicts environmental impact and toxicity of chemical mixtures; project evolved into its own company Developed process flow diagram that evaluated lifecycle impacts of diverting steel gas exhaust for chemical production in report funded by a steel company, chemical manufacturer, and power generator |
05/17 – 08/17 |
|
Data-Driven Yale – Student Researcher for Dr. Hsu, New Haven, CT Led winning team in international UN Competition researching air pollution’s effect on credit card spending Programmed methods to compare pollution and equity in an index comparing 20 global cities |
07/16 – Present |
|
Landau Associates, Inc. – Senior Staff Environmental Scientist, Seattle, WA Supervised teams of up to 8 coworkers and subcontractors investigating subsurface contamination investigations Coordinated and managed client relationships onsite in restricted industrial settings Trained new employees in sampling of air, groundwater, sediment, and soil using standardized methods with strict chain of custody protocols under demanding environmental conditions |
04/12 – 01/16 |
|
Woods Hole Research Center – Student Researcher, Cherskiy, Siberia Awarded fellowship studying climate change and permafrost thaw in the Siberian tundra |
05/11 – 06/11 |
|
The Planet Magazine – Science Editor, Bellingham, WA Edited over 60 stories for scientific accuracy and general audience readability in award-winning publication |
09/10 – 06/11 |
|
WWU Chemistry Department – Student Researcher for Dr. O’Neil, Bellingham, WA Synthesized molecules with hazardous and explosive materials |
03/09 – 06/10 |
Leadership |
|
|
WWU Huxley College Dean’s Advisory Board – Advisor, Seattle, WA Selected for lifelong appointment to advisory board to contribute to Huxley’s College’s strategic vision |
06/13 – Present |
|
Air & Waste Mgt Assoc, PNW Int’l Section (A&WMA PNWIS) – Board Committee Member, Seattle, WA Chaired fossil fuel exports in the Pacific Northwest meeting of over 100 professionals on the regulatory demands, environmental impacts, safety concerns, and business considerations Organized four “Environmental Challenge” competitions for up to 60 students in each challenge |
10/11 – 01/16 |
|
Students for Renewable Energy – Vice President, Bellingham, WA Led effort to establish a "Sustainable Action Fund" that annually awards $300K in student grants |
09/07 – 06/11 |
Awards |
|
|
United Nations – Data for Climate Action Thematic Award Winner, COP 23, Bonn, Germany |
11/17 |
|
A&WMA PNWIS – Young Professional of the Year, Spokane, WA |
10/14 |
|
WWU Sustainable Action Fund – $167K grant for an on–campus solar panel array, Bellingham, WA |
05/11 |
|
A&WMA – First Place in the Environmental Challenge International, Calgary, AB |
06/10 |


|
MoveToCode
|
Creator for making prefab instances More...
Public Member Functions | |
| override GameObject | Instantiate () |
| Creates a GameObject for the GameObjectPool. More... | |
| Public Member Functions inherited from Microsoft.MixedReality.Toolkit.Utilities.GameObjectManagement.GameObjectCreator | |
| virtual void | PrepareForRecycle (GameObject obj) |
| Called when the GameObject is about to be recycled by the GameObjectPool. More... | |
| virtual void | PrepareForUse (GameObject obj) |
| Called before the GameObject's position and rotation are set (as well as its active state) by the GameObjectPool when GetGameObject is called. More... | |
Public Attributes | |
| GameObject | Prefab |
| The prefab to instantiate More... | |
Creator for making prefab instances
|
virtual |
Creates a GameObject for the GameObjectPool.
The position and rotation of the GameObject is set by the GameObjectPool when GetGameObject is called.
Implements Microsoft.MixedReality.Toolkit.Utilities.GameObjectManagement.GameObjectCreator.
| GameObject Microsoft.MixedReality.Toolkit.Utilities.GameObjectManagement.GenericPrefabInstanceCreator.Prefab |
The prefab to instantiate


Nyzo version 475 (commit on GitHub) is the first of two updates to allow the mesh to be reopened for new verifiers.
Shortly after the launch of the Nyzo blockchain, interest in the project resulted in rapid growth of the list of verifiers waiting to join. The design of the Nyzo verifier software at this time caused the computational demands of in-cycle verifiers to grow proportionally to the size of the waiting-verifiers list, and the magnitude of that growth was such that it was causing an unacceptable burden on in-cycle verifiers.
While the decentralized nature of Nyzo prevented us from truly closing the mesh to new verifiers, we were able to hide new verifiers from the nyzo.co website, and we were able to instruct the official Nyzo verifiers to ignore messages from verifiers that joined after a cutoff date. We were neither happy about nor proud of this solution, and some users figured out how to work around it, adding one or more lines to the trusted_entry_points file to contact verifiers that the Nyzo team did not control.
"Closing" the mesh did, however, reduce the rate at which new verifiers were started. This reduced rate gave us time to implement design improvements that effectively decoupled computational load of in-cycle verifiers from the size of the pool of verifiers waiting to join the cycle. This version, along with version 476, implement those improvements.
In BlockFileConsolidator, consolidation is no longer performed as soon as the last block in a 1000-block range is frozen. Instead, consolidation is performed when that block falls behind the retention edge. This was done to improve the efficiency of the initialization process when the verifier is restarted. Loading of blocks from individual files is more efficient than loading of blocks from consolidated files.
Deletion of the individual file for the Genesis block was eliminated. This block will always be required by the BlockManager.
In BlockManager, the verifierInCurrentCycle set has been replaced with currentCycleList and currentCycleSet. The list is used when an ordered collection is needed, and the set is used when ordering is unimportant.
The currentCycleEndHeight field stores the block height of the last element in currentCycleList. The cycleComplete field tracks whether the BlockManager has been tracking the blockchain long enough to have full knowledge of the current cycle.
A main() method was added for testing the initialization process.
In the getTrailingEdgeHeight() accessor, recalculation of the trailing edge height is now performed if the current value is negative. This ensures that a valid value is returned as soon as sufficient block information is available.
In the getRetentionEdgeHeight() accessor, a value of -1 is now returned when the trailing edge height is -1. This does not affect behavior, but it makes more sense than returning a value of -25 when the value cannot be calculated. Also, when the the trailing edge is close to 0, the retention edge is limited to no less than 0. This does not affect behavior, either, and is only to improve display.
In frozenBlockForHeight(), the HistoricalBlockManagerMap fallback was eliminated. Delivering blocks behind the retention edge was an unnecessary burden on verifiers.
Two TODO comments were removed after testing. Until commit a24f170884c05679e4634d7cc7bbb7e760273f65, the Nyzo verifier did not have a BalanceListManager, instead storing balance lists as properties on blocks. Introduction of the BalanceListManager was necessary to control memory usage, but it required extensive testing to ensure that balance lists were available when they were needed for processing.
The one-argument overload of BlockManager.freezeBlock() retrieves the previous block and passes information about it to the other overload of the method. This other overload now accepts another argument, the list of cycle verifiers, and the one-argument method provides a null value for this.
The three-argument overload of BlockManager.freezeBlock() was modified to accept four arguments. The new argument, cycleVerifiers, is used in some cases as a lightweight alternative to allow the verifier to know the membership the current cycle when it would otherwise be unable due to a short time tracking the blockchain.
Two notifications were removed from this method, also.
In BlockManager.loadBlockFromFile(), blocks are no longer loaded from consolidated files. Loading blocks from individual files is much more efficient than loading blocks from consolidated files. When a single block from a file is needed, many more from the same file are typically needed. So, when a single block is needed from a consolidated file, the entire file is extracted, and the block is loaded from the individual file.
In BlockManager.initialize(), a check was added to prevent entry into the initialization code if initialization has already completed. This causes the diff to show substantial changes due to indentation differences.
Further into the method, there are more indentation changes, and loading of blocks from consolidated files has been eliminated.
Blocks are loaded from individual files as before. To attempt to have cycle information available as often as possible, blocks are loaded behind the frozen edge until the cycle information for the frozen edge can be calculated or until a missing block is encountered.
Loading of blocks between the trailing edge and frozen edge has been eliminated, replaced with the loading of blocks starting at the frozen edge and stepping backward, described above. The remaining changes in the method are indentation differences due to the !initialized condition now wrapping the entire method.
The BlockManager.loadBalanceListFromFileForHeight() method now extracts consolidated files if their contents are needed. The updated consolidation logic should prevent blocks from ever needing to be used after consolidation, but this extraction pattern for blocks and balance lists assures elimination of performance issues due to loading data from consolidated files.
The BlockManager.extractConsolidatedFile() method produces individual block files from consolidated block files. This is roughly the inverse of the function of the BlockFileConsolidator.
As blocks are no longer read directly from consolidated files, the BlockManager.findHighestConsolidatedFileStartHeight() method is no longer needed.
BlockManager.setFrozenEdge() now accepts a list of cycle verifiers as its second argument. This is a backup for situations when the list of verifiers cannot be calculated from available blocks. The list is passed to the updateVerifiersInCurrentCycle() method for the calculation.
Also, the trailingEdgeHeight is now set to -1L whenever the frozen edge's cycle information is not available.
The currentCycleList replaces the currentCycleLength field as the source of the value for the currentCycleLength() method.
The BlockManager.verifiersInCurrentCycleList() method provides the identifiers of the verifiers in the current cycle in an ordered list. The BlockManager.verifiersInCurrentCycleSet() method, a renaming of BlockManager.verifiersInCurrentCycle(), returns the same information as an unordered set.
The BlockManager.verifierInCurrentCycle() method uses the set that was renamed from verifiersInCurrentCycle to currentCycleSet.
The BlockManager.updateVerifiersInCurrentCycle() method now accepts the supplemental bootstrapCycleVerifiers argument. This list of cycle verifiers, provided by BootstrapResponseV2, can be used by a verifier in the absence of sufficient block history to know what verifiers are in the current cycle.
The first part of this method attempts to determine the verifiers in the current cycle through examination of blocks.
If the standard (block-based) calculation of cycle verifiers was unsuccessful, an alternate calculation using either the BlockManager.currentCycleList or bootstrapCycleVerifiers is performed instead.
If either of the calculations succeeds, the values are stored in the class fields.
In BlockVoteManager, a minimumVoteInterval was added to limit the rate at which votes are flipped. A receipt timestamp is stored on votes to ensure that enforcement is based on local timestamps, not on timestamps set by the sender. If the interval between receipt timestamps of votes is less than the specified minimum, the vote is discarded.
When retrieving the verifiersInCurrentCycle from BlockManager, the updated method name is used.
The ChainInitializationManager no longer uses the BootstrapVoteTally class, so it was deleted.
In ChainInitializationManager, the hashVotes map, which stored BootstrapVoteTally objects keyed on height, has been replaced with the bootstrapResponses map, which stores BootstrapResponseV2 objects keyed on verifier identifier.
The ChainInitializationManager.processBootstrapResponseMessage() method previously retrieved and modified BootstrapVoteTally objects based on the bootstrap response. Now, it stores the BootstrapResponseV2 in a map, using the verifier's identifier as the key.
The ChainInitializationManager.frozenEdgeHeight() method was replaced with ChainInitializationManager.winningResponse(). The old method provided a hash and height derived from the BootstrapVoteTally objects in the hashVotes map. The new method performs a count of BootstrapResponseV2 objects in the bootstrapResponses map. The BootstrapResponseV2 object contains both the hash and height of the frozen edge, like the previous result. It also provides the list of cycle verifiers used by the BlockManager in the alternate cycle calculation.
The ChainInitializationManager.fetchChainSection() method was replaced with ChainInitializationManager.fetchBlock(). The new method only needs to fetch a single block and balance list. This, combined with the list of cycle verifiers from the BootstrapResponseV2, allows a verifier to start tracking the blockchain. The request is performed in a loop that continues until a valid block and balance list are available.
When the BlockResponse is received in the fetchBlock() method, its block is checked against the winning bootstrap response to ensure the correct block was sent.
The method waits up to 5 seconds for the response to the block request.
If a good response was received, the block is frozen. The list of cycle verifiers from the bootstrap response is also provided to the freezeBlock() method.
In MeshListener.start(), an error is now printed and UpdateUtil.terminate() is called if an exception is thrown.
In MeshListener.response(), the response to the BootstrapRequest1 message was removed. Responding to this message was a considerable burden and a large part of why temporary closure of the mesh was necessary.
Later in MeshListener.response(), the call to NodeManager.updateNode() was removed from the process of responding to MessageType.NewBlock9 messages. This call was initially added to help keep information about the cycle current. It is being removed to prepare for introduction of the sentinel.
A response to BootstrapRequestV2_35 was added to replace BootstrapRequest1.
A response to the private NewVerifierTallyStatusRequest414 message was added. The response provides the verifier's tally of votes from the NewVerifierVoteManager.
The Message.broadcast() method previously sent messages to all nodes. This design allowed out-of-cycle nodes to follow the consensus process and track the blockchain just as in-cycle nodes could. However, this was too much of a burden on in-cycle nodes as the list of out-of-cycle nodes grew. While the cycle grows at a strictly controlled rate, out-of-cycle nodes can be added as quickly as operators choose to start them.
The broadcast() method was modified to only send messages to in-cycle nodes and a small number of out-of-cycle verifiers at the top of the voting list.
To further reduce the burden on in-cycle verifiers, if a BlockVote19 message is received from an out-of-cycle verifier, a response is no longer provided.
In Message.processContent(), conditions for BootstrapRequest1 and BootstrapResponse2 were removed. Conditions for BootstrapRequestV2_35, BootstrapResponseV2_36, and NewVerifierTallyStatusResponse415 were added.
In MessageQueue, three static fields were added. The shouldPrintZeroOnRemoval field is used to avoid showing that the message queue emptied unless its size was significantly large. The inBadState field marks when the MessageQueue is suspected to be stalled. The lastMessageStatus field is used in conjunction with inBadState to try to help diagnose problems with the queue.
The MessageQueue.blockThisThreadUntilClear() method sleeps on the calling thread until the queue has cleared. If the MessageQueue is filled with messages faster than those messages can be removed, message-processing time increases and the system stops functioning properly. This method is called before sending new messages to avoid clogging the queue.
In MessageQueue.add(), print statements were added to periodically show as the queue grows in size. If the queue passes a certain size, the shouldPrintZeroOnRemoval field is set to true so another message will be shown when the queue empties.
In MessageQueue.next(), print statements were added to show status as the queue shrinks in size.
In MessageQueue.start(), statements were added to provide insight into queue stalls. The lastMessageStatus field is set in this method to indicate the last processing state the queue tried to perform.
In the MessageType enumeration, values were added for the bootstrap version 2 and new-verifier tally messages. The values for the version-1 bootstrap messages were removed.
In NewVerifierQueueManager.updateVote(), a condition was added to only update the vote if this verifier is in cycle.
A method call in NewVerifierQueueManager.calculateVote() was updated for the renamed BlockManager.verifiersInCurrentCycleSet() method.
A method call in NewVerifierVoteManager.removeOldVotes() was also updated for the renamed BlockManager.verifiersInCurrentCycleSet() method.
Creation of the vote-count map was encapsulated in the NewVerifierVoteManager.voteTotals() method. This allows the logic, which was previously inline in the NewVerifierVoteManager.topVerifiers() method, to be reused by the NewVerifierTallyStatusResponse.
The NewVerifierVoteManager.topVerifiers() method has been modified to use the NewVerifierVoteManager.voteTotals() method and the renamed BlockManager.verifiersInCurrentCycleSet() method.
At the end of NewVerifierVoteManager.topVerifiers(), setting of the top new field on the status response was eliminated. The NewVerifierTallyStatusResponse provides a detailed look into the vote tally, so this field is no longer needed.
In NodeManager, the nodeJoinRequestTimestamps map was added to limit the frequency at which node-join messages are sent to other nodes.
In NodeManager.updateNode(), the types of messages registered were reduced in preparation for the sentinel.
Using the nodeJoinRequestTimestamps map, a minimum interval of 60 seconds between messages to each node is now imposed in NodeManager.sendNodeJoinMessage(). Most of the differences in this method are due to indentation changes.
In UnfrozenBlockManager, the disconnectedBlocks map was added to allow a verifier to store blocks past the frozen edge when they cannot yet be registered normally. The lastBlockVoteTimestamp is used to ensure that this verifier does not change its vote more frequently than is allowed by the minimum vote interval. The attemptToRegisterDisconnectedBlocks() method tries to register blocks from the disconnectedBlocks map into the primary map.
In UnfrozenBlockManager.registerBlock(), blocks more than one past the frozen edge for which a balance list cannot be derived are added to the disconnectedBlocks map.
The BlockVoteManager.minimumVoteInterval is enforced in UnfrozenBlockManager.updateVote().
In UnfrozenBlockManager.castVote(), the lastBlockVoteTimestamp is set to help enforce the minimum vote interval. Votes are now only broadcast from in-cycle verifiers and during the Genesis cycle, when all verifiers are considered in-cycle.
In UnfrozenBlockManager.attemptToFreezeBlock(), the lastBlockVoteTimestamp is reset to 0 when a block is frozen.
In UnfrozenBlockManager.fetchMissingBlock(), a message was added to indicate receipt of a block response.
To reduce network traffic, in UnfrozenBlockManager.requestMissingBlocks(), requests are now limited to only the height one past the local frozen edge.
In the static block of Verifier, printing of the verifier's identifier was added after loading of the private seed. This allows the operator to ensure that the seed was read properly.
To eliminate any possible concerns of odd behavior due to multiple concurrent accesses, the Verifier.loadPrivateSeed() method is now synchronized.
In Verifier.start(), starting of the MeshListener was moved earlier in the process to allow the verifier to start receiving messages sooner. Several print statements were added to allow an operator to observe initialization progress.
Later in the Verifier.start() method, sending of the old bootstrap messages was removed, and a condition was added to bypass the bootstrap process completely after restarts with obviously short downtime.
The new bootstrap process uses the new BootstrapRequestV2_35 message. It also uses the MessageQueue.blockThisThreadUntilClear() method to avoid backing up the queue, and the processBootstrapResponseMessage() method is now encapsulated in ChainInitializationManager.
The ChainInitializationManager.winningResponse() provides the consensus BootstrapResponseV2 object, which encapsulates the height, hash, and cycle list of the consensus frozen edge.
If a consensus bootstrap response is determined, the verifier considers its own current state and its distance from this consensus response to determine whether the frozen edge should be reinitialized or the local state should be kept.
Premature termination of the verifier was eliminated. The new bootstrap process will not reach this point without satisfactory initialization. This code diff appears more substantial than it is due to indentation changes.
In Verifier.loadGenesisBlock(), a null argument was added to the BlockManager.freezeBlock() method call. This argument is for the new list of cycle verifiers provided by the bootstrap response, and it is irrelevant for the Genesis block.
The Verifier.processBootstrapResponseMessage() method, which processed the original bootstrap responses, was removed. An equivalent method was added to ChainInitializationManager.
In Verifier.verifierMain(), a call to MessageQueue.blockThisThreadUntilClear() was added at the beginning of the loop to avoid backing up the MessageQueue. A dead block of code related to reinitialization after an IP address change was removed. Before attempting to freeze a block, an attempt is now made to register disconnected blocks.
In the BlockResponse constructor, responses are now limited to 10 blocks or fewer, but the maximum size of the response was raised from 50,000 bytes to 1,000,000 bytes.
In BlockVote, the receiptTimestamp field was added to ensure a minimum time interval between block votes from a verifier.
The entire BootstrapResponse class was deleted. The image below only shows the beginning of the class, but the entire class was removed.
The BootstrapResponseV2 class replaces the BootstrapResponse class. It encapsulates a height for the frozen edge, a hash for the frozen edge, and a list of identifiers of verifiers in the current cycle.
The no-argument constructor populates the object with values representing the current state of the verifier. It is used for responding to requests. The three-argument constructor populates the object with the argument values. It is used for reconstructing responses from other verifiers.
Accessors are provided for all fields of BootstrapResponseV2.
The BootstrapResponseV2.getByteSize() and BootstrapResponseV2.getBytes() methods are implemented as would be expected for this class. All fields are serialized.
The BootstrapResponseV2.fromByteBuffer() method is similarly predictable. It reads all the fields from a ByteBuffer and returns a BootstrapResponseV2 object containing the values.
The BootstrapResponseV2.toString() method displays the frozen-edge height, frozen-edge hash, and the size of the list of cycle verifiers.
The NewVerifierTallyStatusResponse provides information about the state of new-verifier voting. It is a debug (private) response, so it is only produced in response to self-signed requests. To simplify the code, at some expense to messaging efficiency, it is implemented as a MultilineTextResponse. The constructor that takes a Message argument builds a response based on the current state of this verifier.
The NewVerifierTallyStatusResponse constructor that takes a List<String> argument is used to reconstruct a response from a different verifier.
The getLines() accessor fulfills the MultilineTextResponse interface.
The NewVerifierTallyStatusResponse.getByteSize() and NewVerifierTallyStatusResponse.getBytes() methods are used for serialization. A single value denotes the number of String objects in the list, and each String object is serialized with a length value followed by the bytes of the String.
NewVerifierTallyStatusResponse.fromByteBuffer() deserializes NewVerifierTallyStatusResponse objects. The line count is read to determine how many String objects to read, and each String is added to a List as it is read.
NewVerifierTallyStatusResponse.toString() displays the number of lines in the response list.


Coronavirus disease 2019 (COVID-19) is defined as illness caused by a novel coronavirus called severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2; formerly called 2019-nCoV), which was first identified amid an outbreak of respiratory illness cases in Wuhan City, Hubei Province, China.
Symptoms of COVID-19 are variable, ranging from mild symptoms to severe illness. Common symptoms include headache, loss of smell and taste, nasal congestion and runny nose, cough, muscle pain, sore throat, fever, diarrhoea, and breathing difficulties. People with the same infection may have different symptoms, and their symptoms may change over time. Three common clusters of symptoms have been identified: one respiratory symptom cluster with cough, sputum, shortness of breath, and fever; a musculoskeletal symptom cluster with muscle and joint pain, headache, and fatigue; a cluster of digestive symptoms with abdominal pain, vomiting, and diarrhoea. In people without prior ear, nose, and throat disorders, loss of taste combined with loss of smell is associated with COVID-19.
Most people (81%) develop mild to moderate symptoms (up to mild pneumonia), while 14% develop severe symptoms (dyspnoea, hypoxia, or more than 50% lung involvement on imaging) and 5% of patients suffer critical symptoms (respiratory failure, shock, or multiorgan dysfunction).At least a third of the people who are infected with the virus do not develop noticeable symptoms at any point in time. These asymptomatic carriers tend not to get tested and can spread the disease. Other infected people will develop symptoms later, called "pre-symptomatic", or have very mild symptoms and can also spread the virus.
Plasma therapy is a medical procedure that uses the blood of a recovered patient to create antibodies on those infected individuals. Medically known as convalescent plasma therapy, this treatment uses antibodies found in the blood taken from a recovered Covid-19 patient. It is then used to treat those with severe SARS-CoV-2 infection to aid recovery.
A convalescent plasma therapy uses antibodies (a type of protein i.e produced by plasma) from patients who have completely recovered from COVID-19 infection. Here is how this procedure will fight coronavirus in your body.
Firstly, a doctor will recommend a convalescent plasma treatment that is suitable for your blood type. Here’s how you need to prepare before treatment and what you must do after treatment.
Your healthcare professional will assess your health before you undergo the treatment. This procedure involves a health care member who will insert an intravenous/ IV tube into a vein on your arms.
The recovered plasma from a recovered infected person will be attached to the IV tube and supplied to you in drips. It takes 2hours for the procedure to be completed.
You will be monitored by your healthcare specialist and you will have to make frequent visits to the hospital for further assessment by the doctor. Depending on your overall health, your healthcare specialist will decide if you require further hospitalisation or not.


Date revealed for West Bridgford Christmas Lights Switch-On - and Santa's coming to visit
There will be fireworks and a Christmas market for people to enjoy
by Matthew BunnStreet performers, fireworks and a festive market will all be on offer in West Bridgford next weekend as the town's Christmas Lights Switch-On takes place.
Councillor Christine Jeffreys, Mayor of West Bridgford , will turn on the lights during the event on Saturday, November 23.
Bridgford Road, Central Avenue and Gordon Road will all be illuminated by the lights until January.
Councillor Jeffreys said: "Such events are a great opportunity to showcase everything our local economy has to offer and we as a council are keen to promote the successful businesses across Rushcliffe at this busy time of year.
“I would encourage everyone to come along and support their local businesses and traders for this fabulous start to the festive season."
The switch-on itself will take place at 5pm but there will be lots of festivities taking place throughout the day.
Seasonal entertainment will be on offer from 10am with performers, local singers and a Christmas market on the croquet lawn. Stalls will also be set up by young entrepreneurs in Gordon Road from 12noon.
Elsewhere, children and their parents can meet Santa Claus at his Gordon Road grotto from 12.30-2pm and 3-4pm, while a Frozen-themed snowflake trail will also happen at 4pm.
A fireworks display will follow the switch-on.
Get the most important news straight in your inbox before 9am every day - sign up to Nottinghamshire Live's newsletter. No complicated forms to fill out, just enter your email address in the black box at the top of this page.


;****************************** ;* S/geoBExportS ;* Screen mode generation ;****************************** .if Pass1 .noeqin .noglbl .include GEOSequates LineNum = $8879 .eqin .glbl .endif .psect ExScrn: lda ExSel beq 11$ ; see if this was selected cmp #3 beq 11$ ldx #0 ; a non-disk exit, so say OK 10$: rts 11$: ldb ScnRTSF,#0 ldw A1,#DataStart 12$: cpw A1,EndOData ; see if there ARE any screen things.. bge 16$ ldy #0 lda (A1),y cmp #1 blt 13$ ; see if its a screen code cmp #20 blt 14$ 13$: jsr NxtScrn bra 12$ 14$: ldw A2,#CTxt1 ; start the write jsr WkBox ldb LastPatt,#$ff ; load an invalid pattern jsr ScnGStr ; first put bitmaps and graphicsstrings bne 10$ jsr ScnCBox ; then put clickbox table bne 10$ lda ScnRTSF bne 15$ jsr i_PutWString ; end with something good .word Scn24 15$: jmp GWPage ; close this last screen page 16$: ldx #0 ; non-disk exit, no pics rts NxtScrn: cpw A1,EndOData bge 10$ ldy #2 ; go onto the next thing lda (A1),y sta Temp ; so get the increment bytes iny lda (A1),y sta Temp+1 ; and the high increment byte adw Temp,A1 ; add it in! 10$: rts ScnGStr: ldw A1,#DataStart ; prepare to cycle through entries ldb DataMode,#0 ; not in any mode jsr i_PutWString ; start with something good .word Scn17 11$: cpw A1,EndOData bne 12$ ldx #0 ; just in case of a non-disk exit lda DataMode beq 99$ ; any tables to close, close now... jsr ScnGCMod 99$: rts ; this is the way we exit... 12$: ldy #1 lda (A1),y ; snag the pattern first sta IPatt dey ; get the next data code lda (A1),y sta ThisCode ; store the code for later cmp #20 ; 0-20 are screen codes ble 14$ 13$: jsr NxtScrn ; skip ahead by A1 bra 11$ ; and go up to check the next one 14$: tay ; put the code in .y lda ModeTab,y ; see if we are changing modes cmp #3 ; not doing clickboxes yet beq 13$ ; so go to next thing... sta NewMode ; save new mode temporarily lda DataMode beq 15$ ; if in a non-mode, skip to open cmp NewMode ; but if the same, just continue beq 16$ ; just a continue, so go down jsr ScnGCMod ; close the current mode bne 18$ 15$: mvb NewMode,DataMode ; we are now in this mode jsr ScnGOMod bne 18$ 16$: cbi DataMode,#1 ; one is a graphicsstring line bne 17$ jsr ScnGPut beq 13$ ; done, so go to next thing rts 17$: cbi DataMode,#2 bne 13$ ; only doing gstrings and bitmaps.. jsr ScnGBmp beq 13$ 18$: rts ModeTab: .byte 255,1,255,1,1,1,2,3,255,255,255 ; 0-10 .byte 255,255,255,255,255,255,255,255,255,255; 11-20 ScnCBox: jsr CountClks ; this will count boxes, and load A1 lda ClkCount beq 10$ ; none? so exit cbi LineNum,#47 ; want at least 20 lines for clickboxes blt 11$ jsr GWPage beq 11$ ; errors are bad though 10$: rts 11$: jsr i_PutWString ; display big old clickbox intro .word Scn21 bne 10$ ldb ScnRTSF,#1 jsr i_PutWString .word Gen01 bne 10$ ; put .byte for # boxes, and Zeroes lda ClkCount jsr PutHexBc bne 10$ ; thats the # click boxes lda #0 jsr PutHexBc bne 99$ ; and low byte of mouse col lda #0 jsr PutHexBc bne 99$ ; and high byte of mouse col lda #0 jsr PutHexB bne 99$ ; and the row byte jsr i_PutWString .word Scn22 beq 12$ ; and the comment ends it 99$: rts 12$: lda #7 jsr LookinFor ; look for code 7, clickboxes 15$: beq 99$ jsr ScnGBmp ; does most of the work for us! jsr i_PutWString .word Scn23 bne 99$ ; put the damn .word for routine jsr KeepLookin bra 15$ ScnGOMod: cbi DataMode,#1 ; check for gfxstring open bne 20$ cbi LineNum,#57 ; want at least 10 lines for gstring blt 10$ jsr GWPage bne 11$ 10$: jsr i_PutWString ; put the graphics string .word Scn01 11$: rts 20$: cmp #2 ; is it bitmap mode? beq 21$ ldx #0 ; clickbox or other, a non-disk exit rts 21$: jsr i_PutWString ; put the bitmap thing .word Scn02 rts ScnGCMod: lda DataMode beq 11$ ; exit happily, though null cmp #1 ; only need to close mode 1 bne 10$ jsr i_PutWString ; dats all! .word Scn03 rts 10$: ldx #0 ; for non-disk exits 11$: rts ScnGPut: cbi ThisCode,#5 blt 50$ ; strings are their own beast jmp ScnGTPut 50$: cmp #3 bne 10$ ; lineboxes can be tricky cbi IPatt,#$ff ; so check its pattern beq 10$ ; if they aren't solid line jmp ScnGFPut ; put the FRectangle 10$: jsr i_PutWString ; first put MOVEPENTO .word Scn04 beq 12$ 11$: rts 12$: ldb ScnXYtmp,#4 jsr ScnXYHex ; put MOVEPENTO digits bne 11$ jsr i_PutWString ; put MOVEPENTO comment .word Scn05 bne 11$ lda ThisCode ; get the code AGAIN cmp #4 bne 13$ cpb IPatt,LastPatt ; check if a pattern is necessary beq 13$ ; if its not necc, skip sta LastPatt ; BUT DAMMIT, IT IS jsr i_PutWString ; put NEWPATTERN .word Scn14 bne 11$ lda LastPatt jsr PutHexB ; put the pattern code bne 11$ jsr i_PutWString ; and put the NEWPATTERN comment .word Scn15 bne 11$ 13$: ldw A3,#ScnGTab ; now do the real deal lda ThisCode ; get the code back jsr ScnGHlp ; and show its main data bne 11$ ldb ScnXYtmp,#7 jsr ScnXYHex ; put the digits bne 11$ ldw A3,#ScnGCTab ; now do the comment lda ThisCode ; get the code back jsr ScnGHlp ; and show its comment! bne 11$ rts ; whew! ScnGTab: .word 0,Scn06,0,Scn08,Scn10,Scn12 ScnGCTab: .word 0,Scn07,0,Scn09,Scn11,Scn13 ScnGFPut: jsr ScnGCMod ; end this mode (should be gfxstring) beq 11$ 10$: rts 11$: jsr i_PutWString ; put the i_FrameRectangle .word Scn16 bne 10$ jsr i_PutWString ; put .byte .word Gen01 bne 10$ ldy #6 lda (A1),y ; get top margin jsr PutHexBc ; put it, and the comma beq 13$ 12$: rts 13$: ldy #9 lda (A1),y jsr PutHexBc ; and the bottom margin bne 12$ ; put it, and the comma ldy #4 lda (A1),y ; and the left low byte jsr PutHexBc ; put it, and the comma bne 12$ ldy #5 lda (A1),y ; and the left high byte jsr PutHexBc ; put it, and the comma bne 12$ ldy #7 lda (A1),y jsr PutHexBc ; and the right low byte, with comma bne 12$ ldy #8 lda (A1),y ; and the right high byte jsr PutHexBc bne 12$ lda IPatt jsr PutHexB bne 12$ ldb DataMode,#0 ; go to a non-mode jsr i_PutWString ; and end the line .word Gen02 rts ScnGTPut: ldw A3,#ScnGTab ; now do the text code lda ThisCode ; get the code back jsr ScnGHlp ; and start it off right beq 11$ 10$: rts 11$: ldy #4 lda (A1),y ; get left low byte jsr PutHexBc ; and the comma bne 10$ ldy #5 lda (A1),y ; get left high byte jsr PutHexBc ; and the comma bne 10$ ldy #9 lda (A1),y ; get left low byte sec sbc #2 ; adjust for the underline jsr PutHexBc ; and show it, and its comma beq 13$ 12$: rts 13$: jsr PutTPatt bne 12$ jsr i_PutWByte ; put the open quote .byte 34 bne 12$ mvw A1,A2 avw #10,A2 jsr PutWString ; display the happy string bne 12$ ldb DataMode,#0 ; go to a non-mode ldw A3,#ScnGCTab ; now do the comment lda ThisCode jmp ScnGHlp ; and show its comment! PutTPatt: ldb TDex,#2 ; start with bit three on pattern match ldb TDex+1,#0 ; counter for the table 14$: lda TDex ; grab the pattern mask and IPatt ; check to see if this bit is set beq 15$ ldy TDex+1 lda PattTab,y ; grab the pattern char off table jsr PutHexBc ; display it, and its comma bne 99$ 15$: inc TDex+1 ; increment table counter asl TDex ; and move pattern mask left bcc 14$ ; keep going until all checked ldx #0 99$: rts PattTab: .byte 27,27,26,25,18,24,14,27,27,27 ScnGBmp: ldb DataMode,#0 ; go back to a non-mode jsr i_PutWString ; put the .word .word Scn18 beq 10$ rts 10$: mvw A1,PSAdd ; put this picture on stack, get num jsr PStackAdd jsr PutHexBn ; output num bne 99$ jsr i_PutWString ; the right way to end a line .word Gen02 bne 99$ jsr i_PutWString ; prepare to put column .word Gen01 bne 99$ ldy #4 lda (A1),y jsr PutHexBc ; put the digit, and the comma bne 99$ ldy #5 lda (A1),y jsr PutHexBc ; put the row byte, and the comma bne 99$ ldy #6 lda (A1),y jsr PutHexBc ; put the width byte, and the comma bne 99$ ldy #7 lda (A1),y jsr PutHexB ; put the height byte bne 99$ jsr i_PutWString ; put the comment .word Scn20 99$: rts ScnXYHex: ldy ScnXYtmp ; start is her lda (A1),y jsr PutHexBc ; put the COL lb, then a comma beq 11$ 10$: rts 11$: inc ScnXYtmp ldy ScnXYtmp lda (A1),y ; then put COL hb, then a comma jsr PutHexBc bne 10$ inc ScnXYtmp ldy ScnXYtmp lda (A1),y ; then put ROW byte, but no comma jmp PutHexB rts ScnGHlp: asl a ; get correct string to display tay ; table in A3, index in .a lda (A3),y ; read pointer from table sta A2L ; and save it iny lda (A3),y ; get the rest of the pointer sta A2H jmp PutWString ; now make use of it CountClks: ldw A1,#DataStart ldb ClkCount,#0 lda #7 jsr LookinFor 10$: beq 15$ inc ClkCount jsr KeepLookin bra 10$ 15$: ldw A1,#DataStart rts ;**** Screen Mode output strings Scn01: .byte 9,"jsr",9,"$c1a8",9,"; i_GraphicsString",13,0 Scn02: .byte 9,"jsr",9,"$c1ab",9,"; i_BitmapUp",13,0 Scn03: .byte 9,".byte",9,"$00",9,"; end of table",13,0 Scn04: .byte 9,".byte",9,"$01,",0 Scn05: .byte 9,"; MOVEPENTO Xl,Xh,Y",13,0 Scn06: .byte 9,".byte",9,"$02,",0 Scn07: .byte 9,"; LINETO Xl,Xh,Y",13,0 Scn08: .byte 9,".byte",9,"$07,",0 Scn09: .byte 9,"; FRAME_RECTO Xl,Xh,Y",13,0 Scn10: .byte 9,".byte",9,"$03,",0 Scn11: .byte 9,"; RETANGLETO Xl,Xh,Y",13,0 Scn12: .byte 9,".byte",9,"$06,",0 Scn13: .byte 34,",27,0",13,0 Scn14: .byte 9,".byte",9,"$05,",0 Scn15: .byte 9,"; NEWPATTERN",13,0 Scn16: .byte 9,"jsr",9,"$c1a2",9,"; i_FrameRectangle",13,0 Scn17: .byte "DrwScn:",0 Scn18: .byte 9,".word Bitmap",0 Scn19: .byte "Bitmap",0 Scn20: .byte 9,"; col, row, width, height",13,0 Scn21: .byte 9,"lda",9,"#[(ClkBoxes)",13 .byte 9,"sta",9,"$02",9,"; R0L",13 .byte 9,"lda",9,"#](ClkBoxes)",13 .byte 9,"sta",9,"$03",9,"; R0H",13 .byte 9,"jsr",9,"$c15a",9,"; DoIcons - start click boxes",13 .byte 9,"rts",9,9,"; exit from screen routine",13 .byte "ClkBoxes:",0 Scn22: .byte 9,"; # clkboxes, mouse Xl,Xh,Y",13,0 Scn23: .byte 9,".word _",9,"; routine to execute on click",13,0 Scn24: .byte 9,"rts",9,9,"; exit from screen routine",13,0 .ramsect ;** Screen Mode TDex: .block 2 ; index for text styles, and count ClkCount: .block 1 ; the total number of clickboxes Look4: .block 1 ; byte for looking for to look for IPatt: .block 1 ; pattern for current thing ScnXYtmp: .block 1 ; temporary storage for hex XY index DPtr: .block 2 ; pointer to current data item DataMode: .block 1 ; current work item (gstring, open, ..) NewMode: .block 1 ; for saving the work going into LastPatt: .block 1 ; the last pattern used ScnRTSF: .block 1 ; flag as to whether screen was rtsd


| Top |
Functions
| NcmFitState * | ncm_fit_state_new () |
| NcmFitState * | ncm_fit_state_ref () |
| void | ncm_fit_state_free () |
| void | ncm_fit_state_clear () |
| void | ncm_fit_state_set_all () |
| void | ncm_fit_state_reset () |
| void | ncm_fit_state_realloc () |
| void | ncm_fit_state_set_ls () |
| void | ncm_fit_state_set_niter () |
| guint | ncm_fit_state_get_niter () |
| void | ncm_fit_state_set_m2lnL_prec () |
| gdouble | ncm_fit_state_get_m2lnL_prec () |
| void | ncm_fit_state_set_params_prec () |
| gdouble | ncm_fit_state_get_params_prec () |
| guint | ncm_fit_state_get_data_len () |
Properties
| guint | data-len | Read / Write / Construct |
| int | dof | Read / Write / Construct |
| guint | fparam-len | Read / Write / Construct |
| guint | func-eval | Read |
| guint | grad-eval | Read |
| gboolean | is-best-fit | Read |
| gboolean | is-least-squares | Read / Write / Construct |
| guint | niters | Read |
Functions
ncm_fit_state_new ()
NcmFitState * ncm_fit_state_new (guint data_len
,guint fparam_len
,gint dof
,gboolean is_least_squares
);
Instantiates a new NcmFitState.
ncm_fit_state_ref ()
NcmFitState *
ncm_fit_state_ref (NcmFitState *fstate
);
Increases the reference count of fstate
by one.
ncm_fit_state_free ()
void
ncm_fit_state_free (NcmFitState *fstate
);
Decreases the reference count of fstate
by one.
ncm_fit_state_clear ()
void
ncm_fit_state_clear (NcmFitState **fstate
);
Decreases the reference count of *fstate
by one, and sets the pointer *fstate
to NULL.
ncm_fit_state_set_all ()
void ncm_fit_state_set_all (NcmFitState *fstate
,guint data_len
,guint fparam_len
,gint dof
,gboolean is_least_squares
);
Sets all the properties of fstate
.
ncm_fit_state_reset ()
void
ncm_fit_state_reset (NcmFitState *fstate
);
Resets the NcmFitState to its initial state.
ncm_fit_state_realloc ()
void
ncm_fit_state_realloc (NcmFitState *fstate
);
Reallocates the NcmFitState to its current state.
ncm_fit_state_set_ls ()
void ncm_fit_state_set_ls (NcmFitState *fstate
,NcmVector *f
,NcmMatrix *J
);
FIXME
ncm_fit_state_set_m2lnL_prec ()
void ncm_fit_state_set_m2lnL_prec (NcmFitState *fstate
,gdouble prec
);
FIXME
ncm_fit_state_set_params_prec ()
void ncm_fit_state_set_params_prec (NcmFitState *fstate
,gdouble prec
);
FIXME
Property Details
The “data-len”
property
“data-len” guint
Data length.
Owner: NcmFitState
Flags: Read / Write / Construct
Default value: 0
The “dof”
property
“dof” int
Degrees of freedom.
Owner: NcmFitState
Flags: Read / Write / Construct
Default value: 0
The “fparam-len”
property
“fparam-len” guint
Free parameters length.
Owner: NcmFitState
Flags: Read / Write / Construct
Default value: 0
The “func-eval”
property
“func-eval” guint
Number of function evaluations.
Owner: NcmFitState
Flags: Read
Default value: 0
The “grad-eval”
property
“grad-eval” guint
Number of gradient evaluations.
Owner: NcmFitState
Flags: Read
Default value: 0
The “is-best-fit”
property
“is-best-fit” gboolean
Is a best fit state.
Owner: NcmFitState
Flags: Read
Default value: FALSE
The “is-least-squares”
property
“is-least-squares” gboolean
Is a least squares fit state.
Owner: NcmFitState
Flags: Read / Write / Construct
Default value: FALSE
The “niters”
property
“niters” guint
Number of interations.
Owner: NcmFitState
Flags: Read
Default value: 0


|
Class Summary |
| ColumnCount |
Simple wrapper for a byte buffer and a counter. |
| DebugPrint |
|
| DeleteCompare |
Class that provides static method needed when putting deletes into memstore |
| ExplicitColumnTracker |
This class is used for the tracking and enforcement of columns and numbers
of versions during the course of a Get or Scan operation, when explicit
column qualifiers have been asked for in the query. |
| GetDeleteTracker |
This class is responsible for the tracking and enforcement of Deletes
during the course of a Get operation. |
| GetDeleteTracker.Delete |
Internal class used to store the necessary information for a Delete. |
| HLog |
HLog stores all the edits to the HStore. |
| HLog.HLogEntry |
Utility class that lets us keep track of the edit with it's key
Only used when splitting logs |
| HLogKey |
A Key for an entry in the change log. |
| HRegion |
HRegion stores data for a certain region of a table. |
| HRegionServer |
HRegionServer makes a set of HRegions available to clients. |
| KeyValueHeap |
Implements a heap merge across any number of KeyValueScanners. |
| LogFlusher |
LogFlusher is a Chore that wakes every threadWakeInterval and calls
the HLog to do an optional sync if there are unflushed entries, and the
optionalFlushInterval has passed since the last flush. |
| LruHashMap<K extends HeapSize,V extends HeapSize> |
The LruHashMap is a memory-aware HashMap with a configurable maximum
memory footprint. |
| LruHashMap.Entry<K extends HeapSize,V extends HeapSize> |
Entry to store key/value mappings. |
| MemStore |
The MemStore holds in-memory modifications to the Store. |
| MinorCompactingStoreScanner |
A scanner that does a minor compaction at the same time. |
| QueryMatcher |
This is the primary class used to process KeyValues during a Get or Scan
operation. |
| ReadWriteConsistencyControl |
Manages the read/write consistency within memstore. |
| ReadWriteConsistencyControl.WriteEntry |
|
| ScanDeleteTracker |
This class is responsible for the tracking and enforcement of Deletes
during the course of a Scan operation. |
| ScanQueryMatcher |
A query matcher that is specifically designed for the scan case. |
| ScanWildcardColumnTracker |
Keeps track of the columns for a scan if they are not explicitly specified |
| Store |
A Store holds a column family in a Region. |
| StoreFile |
A Store data file. |
| StoreFileGetScan |
Use to execute a get by scanning all the store files in order. |
| WildcardColumnTracker |
This class is used for the tracking and enforcement of columns and numbers
of versions during the course of a Get or Scan operation, when all available
column qualifiers have been asked for in the query. |


--- layout: home search_exclude: true image: images/logo.png --- I'm a software engineer. I love to build cool things with latest technologies and share my learnings from them. # Posts


Rules: Battle Tactics
Selections: 0. Coruscating Flames, 0. Shroud of Warpflame, 5. Fold Reality, Arcane Bolt, Baleful Sword, General, Mystic Shield, Staff of Tzeentch
Categories: CHAOS, DAEMON, TZEENTCH, MONSTER, HERO, WIZARD, LORD OF CHANGE, Behemoth, Leader, General, Artefact
Artefact: Shroud of Warpflame, Command Abilities: Beacon of Sorcery, Command Trait: Coruscating Flames, Lord of Change Wounds Suffered: 00-03, 04-06, 07-09, 10-12, 13+, Magic: Lord of Change, Spell: Arcane Bolt, Fold Reality, Infernal Gateway, Mystic Shield, Unit: Lord of Change, Unit Abilities: Fly, Mastery of Magic, Spell-eater, Spell-thief, Weapon: Baleful Sword, Staff of Tzeentch
| Artefact | Artefact Details | Ref |
|---|---|---|
| Shroud of Warpflame | Roll a dice each time you allocate a wound or mortal wound inflicted by a melee weapon to the bearer. On a 3+, the attacking unit suffers 1 mortal wound. |
| Command Abilities | Command Ability Details | Ref |
|---|---|---|
| Beacon of Sorcery | You can use this command ability at the start of your hero phase. If you do so, pick 1 friendly model with this command ability. Until your next hero phase, you can add 1 to casting and unbinding rolls for friendly TZEENTCH DAEMON WIZARDS while they are wholly within 18" of that model. The same unit cannot benefit from this command ability more than once per turn. |
| Command Trait | Command Trait Details | Ref |
|---|---|---|
| Coruscating Flames | Subtract 1 from hit rolls for attacks made with missile weapons that target friendly ETERNAL CONFLAGRATION DAEMON units wholly within 12" of this general. |
| Lord of Change Wounds Suffered | Move | Staff of Tzeentch | Infernal Gateway | Ref |
|---|---|---|---|---|
| 00-03 | 12" | 1+ | 3+ | |
| 04-06 | 10" | 2+ | 4+ | |
| 07-09 | 9" | 3+ | 4+ | |
| 10-12 | 8" | 4+ | 4+ | |
| 13+ | 7" | 5+ | 5+ |
| Magic | Cast/Unbind | Spells Known | Ref |
|---|---|---|---|
| Lord of Change | 2/2 | Arcane Bolt, Mystic Shield, Infernal Gateway |
| Spell | Casting Value | Range | Description | Ref |
|---|---|---|---|---|
| Arcane Bolt | 5 | 12" | If successfully cast, at the start of any 1 phase before your next hero phase, you can pick 1 enemy unit within range and visible to the caster. That unit suffers 1 mortal wound. If that unit is within 3" of the caster, it suffers D3 mortal wounds instead of 1. | |
| Fold Reality | 7 | If successfully cast, pick 1 friendly TZEENTCH DAEMON unit wholly within 18" of the caster and visible to them, and roll a dice. On a 1, that unit is destroyed. On a 2+, you can return a number of slain models equal to that roll to that unit. Set up the models one at a time within 1" of a model from that unit that has not been returned in that phase. The models can only be set up within 3" of an enemy unit if the friendly unit was within 3" of that enemy unit before any models were returned. | ||
| Infernal Gateway | 7 | If successfully cast, pick 1 enemy unit within 18" of the caster that is visible to them and roll 9 dice. That unit suffers 1 mortal wound for each roll that is equal to or greater than the Infernal Gateway value shown on the caster’s damage table. | ||
| Mystic Shield | 5 | 12" | If successfully cast, pick 1 friendly unit wholly within range and visible to the caster. Add 1 to save rolls for attacks that target that unit until your next hero phase. |
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Lord of Change | * | 14 | 10 | 4+ |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Fly | This unit can fly. | |
| Mastery of Magic | When this model makes a casting, unbinding or dispelling roll, you can change the lowest D6 to match the highest D6. | |
| Spell-eater | Once per turn, in your hero phase, you can pick 1 endless spell within 18" of this model. That endless spell is dispelled. | |
| Spell-thief | If this model successfully unbinds an enemy spell with an unbinding roll of 9+, this model can attempt to cast that spell, if it is possible for it to do so, for the rest of the battle. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Baleful Sword | Melee | 1" | 2 | 4+ | 2+ | -2 | 3 | |
| Staff of Tzeentch | Melee | 3" | 4 | 3+ | * | - | 2 |
Selections: 1. Bolt of Tzeentch, Arcane Bolt, Mystic Shield, The Trickster's Staff
Categories: CHAOS, DAEMON, HORROR, TZEENTCH, HERO, WIZARD, THE CHANGLING, Leader, 9 or less wounds Leader, Unique
Magic: The Changeling, Spell: Arcane Bolt, Bolt of Tzeentch, Mystic Shield, Unit: The Changeling, Unit Abilities: Arch-deceiver, Puckish Misdirection, Weapon: The Trickster’s Staff
| Magic | Cast/Unbind | Spells Known | Ref |
|---|---|---|---|
| The Changeling | 2/2 | Arcane Bolt, Mystic Shield. In addition, while this model is within 9" of an enemy Wizard, it knows any spells on that Wizard’s warscroll that are possible for this model to cast. |
| Spell | Casting Value | Range | Description | Ref |
|---|---|---|---|---|
| Arcane Bolt | 5 | 12" | If successfully cast, at the start of any 1 phase before your next hero phase, you can pick 1 enemy unit within range and visible to the caster. That unit suffers 1 mortal wound. If that unit is within 3" of the caster, it suffers D3 mortal wounds instead of 1. | |
| Bolt of Tzeentch | 7 | If successfully cast, pick 1 enemy unit within 18" of the caster and visible to them. That unit suffers D6 mortal wounds. This spell cannot be cast more than once per turn, even though it appears in both the Lore of Change and the Lore of Fate. | ||
| Mystic Shield | 5 | 12" | If successfully cast, pick 1 friendly unit wholly within range and visible to the caster. Add 1 to save rolls for attacks that target that unit until your next hero phase. |
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| The Changeling | 5" | 5 | 10 | 5+ |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Arch-deceiver | At the start of the first battle round, after armies have been set up but before the first turn begins, you can remove this model from the battlefield. If you do so, at the end of your first movement phase, you must set this model up again anywhere within your opponent’s territory more than 3" from any enemy units. | |
| Puckish Misdirection | In the enemy hero phase, you can pick 1 enemy unit within 9" of this model. If you do so, until your next hero phase, subtract 1 from hit rolls for attacks made by that unit and half the Move characteristic of that unit (rounding up). |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| The Trickster’s Staff | Melee | 2" | 3 | 3+ | 3+ | -1 | D3 |
Selections: 3 Flamers [175pts], Flaming Maw, Warpflame
Categories: CHAOS, DAEMON, TZEENTCH, FLAMER, Other, Battleline
Unit: Flamers of Tzeentch, Unit Abilities: Capricious Warpflame, Fly, Pyrocaster, Touched by Fire, Weapon: Flaming Maw, Warpflame
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Flamers of Tzeentch | 9" | 2 | 10 | 5+ |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Capricious Warpflame | Add 1 to hit rolls for attacks made by this unit if the target unit has 10 or more models. | |
| Fly | This unit can fly. | |
| Pyrocaster | 1 model in this unit can be a Pyrocaster. Add 1 to the Attacks characteristic of that model’s missile weapon. | |
| Touched by Fire | Roll a dice each time you allocate a wound or mortal wound to this unit that was inflicted by a melee weapon. On a 5+, the attacking unit suffers 1 mortal wound. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Flaming Maw | Melee | 1" | 2 | 5+ | 3+ | - | 1 | |
| Warpflame | Missile | 18" | 3 | 4+ | 3+ | - | D3 |
Selections: 10 Pink Horrors [215pts], Hornblowers, Icon Bearers, Magical Flames, Split and Split Again, Taloned Hands
Categories: CHAOS, DAEMON, TZEENTCH, WIZARD, Battleline, HORROR
Horror Table: 01, 02, 03, 04, Unit: Horrors of Tzeentch, Unit Abilities: Champion, Hornblowers, Icon Bearers, Split and Split Again, Weapon: Magical Flames, Taloned Hands
| Horror Table | Horror Colour | Magical Flames | Taloned Hands | Petty Vengeance Roll | Ref |
|---|---|---|---|---|---|
| 01 | Iridescent | 6 | 2 | 3+ | |
| 02 | Pink | 3 | 1 | 4+ | |
| 03 | Blue | 2 | 1 | 5+ | |
| 04 | Brimstone | 1 | 2 | 6+ |
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Horrors of Tzeentch | 5" | 1 | 10 | 6+ |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Champion | 1 Pink Horror model in this unit can be an Iridescent Horror instead. | |
| Hornblowers | 1 in every 10 Pink Horrors in this unit can be a Pink Horror Hornblower instead. Add 1 to save rolls for this unit while it includes any Pink Horror Hornblowers. | |
| Icon Bearers | 1 in every 10 Pink Horrors in this unit can be a Pink Horror Icon Bearer instead. At the start of your hero phase, if you have a Disciples of Tzeentch army, roll 1 dice for each Pink Horror Icon Bearer in this unit. For each 3+, you receive 1 Fate Point. | |
| Split and Split Again | Each time an Iridescent Horror or Pink Horror in this unit is slain by a wound or mortal wound, it does not count as having been slain but you must immediately remove it from play and replace it with 2 Blue Horrors that are added to its unit. Each time a Blue Horror in this unit is slain by a wound or mortal wound, it does not count as having been slain but you must immediately remove it from play and replace it with 1 Brimstone Horrors model that is added to its unit. ADDING AND REMOVING HORRORS Replacement models that are added to this unit must be set up one at a time within 1" of the position that was occupied by the model they are replacing. Replacement models that are added to this unit can only be set up within 3" of an enemy unit if a model from this unit is already within 3" of that enemy unit. Replacement models added to this unit can take it above its maximum size. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Magical Flames | Missile | 12" | * | 5+ | 4+ | - | 1 | |
| Taloned Hands | Melee | 1" | * | 4+ | 4+ | - | 1 |
Selections: 10 Pink Horrors [215pts], Hornblowers, Icon Bearers, Magical Flames, Split and Split Again, Taloned Hands
Categories: CHAOS, DAEMON, TZEENTCH, WIZARD, Battleline, HORROR
Horror Table: 01, 02, 03, 04, Unit: Horrors of Tzeentch, Unit Abilities: Champion, Hornblowers, Icon Bearers, Split and Split Again, Weapon: Magical Flames, Taloned Hands
| Horror Table | Horror Colour | Magical Flames | Taloned Hands | Petty Vengeance Roll | Ref |
|---|---|---|---|---|---|
| 01 | Iridescent | 6 | 2 | 3+ | |
| 02 | Pink | 3 | 1 | 4+ | |
| 03 | Blue | 2 | 1 | 5+ | |
| 04 | Brimstone | 1 | 2 | 6+ |
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Horrors of Tzeentch | 5" | 1 | 10 | 6+ |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Champion | 1 Pink Horror model in this unit can be an Iridescent Horror instead. | |
| Hornblowers | 1 in every 10 Pink Horrors in this unit can be a Pink Horror Hornblower instead. Add 1 to save rolls for this unit while it includes any Pink Horror Hornblowers. | |
| Icon Bearers | 1 in every 10 Pink Horrors in this unit can be a Pink Horror Icon Bearer instead. At the start of your hero phase, if you have a Disciples of Tzeentch army, roll 1 dice for each Pink Horror Icon Bearer in this unit. For each 3+, you receive 1 Fate Point. | |
| Split and Split Again | Each time an Iridescent Horror or Pink Horror in this unit is slain by a wound or mortal wound, it does not count as having been slain but you must immediately remove it from play and replace it with 2 Blue Horrors that are added to its unit. Each time a Blue Horror in this unit is slain by a wound or mortal wound, it does not count as having been slain but you must immediately remove it from play and replace it with 1 Brimstone Horrors model that is added to its unit. ADDING AND REMOVING HORRORS Replacement models that are added to this unit must be set up one at a time within 1" of the position that was occupied by the model they are replacing. Replacement models that are added to this unit can only be set up within 3" of an enemy unit if a model from this unit is already within 3" of that enemy unit. Replacement models added to this unit can take it above its maximum size. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Magical Flames | Missile | 12" | * | 5+ | 4+ | - | 1 | |
| Taloned Hands | Melee | 1" | * | 4+ | 4+ | - | 1 |
Categories: Allegiance
Selections: The Eternal Conflagration
Categories: TZEENTCH, Coalition: Beasts of Chaos, Coalition: Slaves to Darkness
Battle Trait: Locus of Change, Masters of Destiny, Summon Daemons of Tzeentch, Twisters of Materiality, Command Abilities: Infernos of Mutation, Fate Point Summoning Table - Unit: 01. 1 Lord of Change, 02. 1 Fateskimmer, 03. 10 Pink Horrors of Tzeentch, 04. 1 Burning Chariot of Tzeentch, 05. 3 Flamers of Tzeentch, 06. 1 Changecaster, 07. 1 Exalted Flamer of Tzeentch, 08. 1 Fluxmaster, 09. 10 Blue Horrors of Tzeentch, 10. 10 Brimstone Horrors of Tzeentch, 11. 3 Screamers of Tzeentch
| Battle Trait | Battle Trait Details | Ref |
|---|---|---|
| Locus of Change | Subtract 1 from hit rolls for attacks made with melee weapons that target friendly TZEENTCH DAEMON units that are wholly within 12" of a friendly TZEENTCH DAEMON HERO. | |
| Masters of Destiny | Each Destiny Dice spent only allows you to replace a single dice roll. If you want to replace a 2D6 roll (such as a casting roll or charge roll), you must spend 2 Destiny Dice. In addition, any rolls that have been replaced count as unmodified rolls and cannot be rerolled. They also cannot be modified, with the following two exceptions: - If you spend a Destiny Dice to replace a save roll, the result of that Destiny Dice is modified by the Rend characteristic of the attack as normal. - If you spend a Destiny Dice to replace a battleshock test, the result of that Destiny Dice is modified by the number of models slain from that unit as normal. |
|
| Summon Daemons of Tzeentch | You can summon units of TZEENTCH DAEMONS to the battlefield if you collect enough Fate Points. Each time a casting roll (made by friend or foe) is successful and the spell is not unbound, you receive 1 Fate Point. Once per turn, at the end of your movement phase, you can spend Fate Points to summon 1 unit from the list opposite to the battlefield and add it to your army. Each unit you summon costs a number of Fate Points as shown on the list, and you can only summon a unit if you have enough Fate Points to do so. Summoned units must be set up wholly within 12" of a friendly TZEENTCH HERO and more than 9" from any enemy units. Immediately after you have set up the summoned unit, subtract its cost from the total number of Fate Points you have. |
|
| Twisters of Materiality | Improve the Rend characteristic of friendly ETERNAL CONFLAGRATION units’ Warpflame, Billowing Warpflame and Magical Flames missile weapons by 1. |
| Command Abilities | Command Ability Details | Ref |
|---|---|---|
| Infernos of Mutation | You can use this command ability in the shooting phase. If you do so, pick 1 friendly ETERNAL CONFLAGRATION DAEMON unit wholly within 12" of a friendly ETERNAL CONFLAGRATION DAEMON HERO. If the unmodified hit roll for any attack made by that unit’s Warpflame, Billowing Warpflame or Magical Flames missile weapons is 6, subtract 2 from the Bravery characteristic of the target unit until the end of that battle round. A unit cannot benefit from this command ability more than once per turn. |
| Fate Point Summoning Table - Unit | Cost | Ref |
|---|---|---|
| 01. 1 Lord of Change | 30 | |
| 02. 1 Fateskimmer | 24 | |
| 03. 10 Pink Horrors of Tzeentch | 20 | |
| 04. 1 Burning Chariot of Tzeentch | 18 | |
| 05. 3 Flamers of Tzeentch | 18 | |
| 06. 1 Changecaster | 12 | |
| 07. 1 Exalted Flamer of Tzeentch | 12 | |
| 08. 1 Fluxmaster | 12 | |
| 09. 10 Blue Horrors of Tzeentch | 10 | |
| 10. 10 Brimstone Horrors of Tzeentch | 10 | |
| 11. 3 Screamers of Tzeentch | 10 |
Selections: 2000 Points - Battlehost
Categories: Game Options, Battlehost
Selections: Prized Sorcery
Categories: Game Options, Grand Strategy
Grand Strategy: Prized Sorcery
| Grand Strategy | Description | Ref |
|---|---|---|
| Prized Sorcery | When the battle ends, you complete this grand strategy if there are any WIZARDS from your starting army on the battlefield. |
Categories: ENDLESS SPELL, Malign Sorcery
Spell: Summon Tome of Eyes, The Parchment Curse, Unit Abilities: Linked, Transfixed by Countless Eyes
| Spell | Casting Value | Range | Description | Ref |
|---|---|---|---|---|
| Summon Tome of Eyes | 5 | 1" | If successfully cast, set up this endless spell within range and visible to the caster, and more than 1" from all other models, other endless spells and invocations. Only DISCIPLES OF TZEENTCH WIZARDS can attempt to summon this endless spell. A WIZARD in a garrison cannot attempt to summon this endless spell, and if this endless spell is summoned, the WIZARD that summoned it cannot join a garrison until this endless spell has been removed from play |
|
| The Parchment Curse | 8 | 18" | If successfully cast, pick 1 enemy unit within range and visible to the caster, and roll a dice. On a 3+, that unit suffers D3 mortal wounds. In addition, for each model slain by those mortal wounds, subtract 1 from the Bravery characteristic of that model’s unit (to a minimum of 1) for the rest of the battle. |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Linked | After the model that summoned this endless spell has moved, remove this endless spell from the battlefield and set it up again within 1" of that model and more than 1" from all other models, other endless spells and invocations. If the model that summoned this endless spell is removed from play, then this endless spell is removed from play. | |
| Transfixed by Countless Eyes | You can re-roll casting rolls for the model that summoned this endless spell while this endless spell is on the battlefield. |
Battle Tactics:
Broken Ranks: When you reveal this battle tactic, pick 1 Battleline unit from your opponent’s starting army on the battlefield. You complete this battle tactic if that unit is destroyed during this turn. If that unit was destroyed by an attack made by a friendly MONSTER or an ability of a friendly MONSTER, score 1 additional victory point.
Conquer: When you reveal this battle tactic, pick 1 objective marker on the battlefield that your opponent controls. You complete this battle tactic if you control that objective marker at the end of this turn.
Slay the Warlord: You complete this battle tactic if the model chosen to be your opponent’s general is slain during this turn. If that model was destroyed by an attack made by a friendly MONSTER or an ability of a friendly MONSTER, score 1 additional victory point.
Ferocious Advance: When you reveal this battle tactic, pick 3 different units from your starting army on the battlefield. You complete this battle tactic if all of the units you picked run in the following movement phase and finish that run within 3” of each other. If all 3 of those units are MONSTERS, score 1 additional victory point.
Bring It Down!: When you reveal this battle tactic, pick 1 enemy MONSTER on the battlefield. You complete this battle tactic if that unit is destroyed during this turn. If that enemy MONSTER was destroyed by an attack made by a friendly MONSTER or an ability of a friendly MONSTER, score 1 additional victory point.
Aggressive Expansion: When you reveal this battle tactic, pick 2 objective markers on the battlefield that are not wholly within your territory. You complete this battle tactic if you control both objective markers at the end of this turn.
Monstrous Takeover: When you reveal this battle tactic, pick 1 MONSTER from your starting army on the battlefield. You complete this battle tactic if that MONSTER is contesting an objective marker that you control at the end of this turn, and that objective marker is not contested by an enemy MONSTER.
Savage Spearhead: You complete this battle tactic if there are 2 or more units from your starting army wholly within your opponent’s territory at the end of this turn. If 2 or more of those units are MONSTERS, score 1 additional victory point.
()
Created with BattleScribe


{% extends "nhs-layout.html" %} {% block content %} {% include "includes/phase_banner_alpha.html" %} Sign in Enter your Government Gateway credentials to sign in. You received these when you created your HMRC online account. Errors exist on this page, fix them. User ID Some error message Password Some error message Sign in Problems signing in Don’t have a Government Gateway account Forgotten user ID Forgotten password Forgotten user ID and password {% endblock %}
Enter your Government Gateway credentials to sign in. You received these when you created your HMRC online account.
Errors exist on this page, fix them.


|
Android SDK |
Public Member Functions | |
| void | setGwId (String gwId) |
| void | setGwOnline (Boolean gwOnline) |
| void | setIconUrl (String iconUrl) |
| void | setGwName (String gwName) |
| void | setDevName (String devName) |
| void | setDevOnline (Boolean devOnline) |
| void | setDevId (String devId) |
| void | setChecked (boolean checked) |
| void | setProductId (String productId) |
| String | getGwId () |
| Boolean | isGwOnline () |
| String | getIconUrl () |
| String | getGwName () |
| String | getDevName () |
| Boolean | isDevOnline () |
| String | getDevId () |
| boolean | isChecked () |
| String | getProductId () |
| String | toString () |
Describes a group single device information entity that responds to business data.
|
inline |
Get device id.
|
inline |
Get device name.
|
inline |
Get gateway id.
|
inline |
Get gateway name.
|
inline |
Get device icon url.
|
inline |
Get product id.
|
inline |
Device selected status in the group.
|
inline |
Get device online status, combine local online and cloud online status.
|
inline |
Get gateway online status.
|
inline |
Set whether the device is selected in the group.
| checked | the status of whether the device is selected in a group |
|
inline |
Set device id.
| devId | device id |
|
inline |
Set device name.
| devName | device name |
|
inline |
Set device online status, combine local online and cloud online status.
| devOnline | the value of the device online status |
|
inline |
Set gateway id.
| gwId | gateway id |
|
inline |
Set gateway name.
| gwName | gateway name |
|
inline |
Set the online state of the device in the gateway.
| gwOnline | the online state of the device in the gateway |
|
inline |
Set device icon url.
| iconUrl | device icon url |
|
inline |
Set product id.
| productId | same product ID, same Schema information |
|
inline |