Package Api Documentation for mlconjug¶
API Reference for the classes in mlconjug3.mlconjug.py¶
MLConjug Main module.
-
mlconjug3.mlconjug.
extract_verb_features
(verb, lang, ngram_range)[source]¶ - Custom Vectorizer optimized for extracting verbs features.The Vectorizer subclasses sklearn.feature_extraction.text.CountVectorizer .As in Indo-European languages verbs are inflected by adding a morphological suffix, the vectorizer extracts verb endings and produces a vector representation of the verb with binary features.To enhance the results of the feature extration, several other features have been included:The features are the verb’s ending n-grams, starting n-grams, length of the verb, number of vowels, number of consonants and the ratio of vowels over consonants.
- Parameters
verb – string. Verb to vectorize.
lang – string. Language to analyze.
ngram_range – tuple. The range of the ngram sliding window.
- Returns
list. List of the most salient features of the verb for the task of finding it’s conjugation’s class.
-
class
mlconjug3.mlconjug.
Conjugator
(language='fr', model=None)[source]¶ Bases:
object
This is the main class of the project.The class manages the Verbiste data set and provides an interface with the scikit-learn pipeline.If no parameters are provided, the default language is set to french and the pre-trained french conjugation pipeline is used.The class defines the method conjugate(verb, language) which is the main method of the module.- Parameters
language – string. Language of the conjugator. The default language is ‘fr’ for french.
model – mlconjug3.Model or scikit-learn Pipeline or Classifier implementing the fit() and predict() methods. A user provided pipeline if the user has trained his own pipeline.
-
conjugate
(verb, subject='abbrev')[source]¶ - This is the main method of this class.It first checks to see if the verb is in Verbiste.If it is not, and a pre-trained scikit-learn pipeline has been supplied, the method then calls the pipeline to predict the conjugation class of the provided verb.Returns a Verb object or None.
- Parameters
verb – string. Verb to conjugate.
subject – string. Toggles abbreviated or full pronouns. The default value is ‘abbrev’. Select ‘pronoun’ for full pronouns.
- Returns
Verb object or None.
-
class
mlconjug3.mlconjug.
DataSet
(verbs_dict)[source]¶ Bases:
object
This class holds and manages the data set.Defines helper methodss for managing Machine Learning tasks like constructing a training and testing set.- Parameters
verbs_dict – A dictionary of verbs and their corresponding conjugation class.
-
class
mlconjug3.mlconjug.
Model
(vectorizer=None, feature_selector=None, classifier=None, language=None)[source]¶ Bases:
object
This class manages the scikit-learn pipeline.The Pipeline includes a feature vectorizer, a feature selector and a classifier.If any of the vectorizer, feature selector or classifier is not supplied at instance declaration, the __init__ method will provide good default values that get more than 92% prediction accuracy.- Parameters
vectorizer – scikit-learn Vectorizer.
feature_selector – scikit-learn Classifier with a fit_transform() method
classifier – scikit-learn Classifier with a predict() method
language – language of the corpus of verbs to be analyzed.
API Reference for the classes in mlconjug3.PyVerbiste.py¶
PyVerbiste.
-
class
mlconjug3.PyVerbiste.
ConjugManager
(language='default')[source]¶ Bases:
object
This is the class handling the mlconjug3 json files.
- Parameters
language – string. | The language of the conjugator. The default value is fr for French. | The allowed values are: fr, en, es, it, pt, ro.
-
_load_verbs
(verbs_file)[source]¶ Load and parses the verbs from the json file.
- Parameters
verbs_file – string or path object. Path to the verbs json file.
-
_load_conjugations
(conjugations_file)[source]¶ Load and parses the conjugations from the json file.
- Parameters
conjugations_file – string or path object. Path to the conjugation json file.
-
_detect_allowed_endings
()[source]¶ - Detects the allowed endings for verbs in the supported languages.All the supported languages except for English restrict the form a verb can take.As English is much more productive and varied in the morphology of its verbs, any word is allowed as a verb.
- Returns
set. A set containing the allowed endings of verbs in the target language.
-
is_valid_verb
(verb)[source]¶ - Checks if the verb is a valid verb in the given language.English words are always treated as possible verbs.Verbs in other languages are filtered by their endings.
- Parameters
verb – string. The verb to conjugate.
- Returns
bool. True if the verb is a valid verb in the language. False otherwise.
-
class
mlconjug3.PyVerbiste.
Verbiste
(language='default')[source]¶ Bases:
mlconjug3.PyVerbiste.ConjugManager
This is the class handling the Verbiste xml files.
- Parameters
language – string. | The language of the conjugator. The default value is fr for French. | The allowed values are: fr, en, es, it, pt, ro.
-
_load_verbs
(verbs_file)[source]¶ Load and parses the verbs from the xml file.
- Parameters
verbs_file – string or path object. Path to the verbs xml file.
-
static
_parse_verbs
(file)[source]¶ Parses the XML file.
- Parameters
file – FileObject. XML file containing the verbs.
- Returns
OrderedDict. An OrderedDict containing the verb and its template for all verbs in the file.
-
_load_conjugations
(conjugations_file)[source]¶ Load and parses the conjugations from the xml file.
- Parameters
conjugations_file – string or path object. Path to the conjugation xml file.
-
_parse_conjugations
(file)[source]¶ Parses the XML file.
- Parameters
file – FileObject. XML file containing the conjugation templates.
- Returns
OrderedDict. An OrderedDict containing all the conjugation templates in the file.
-
static
_load_tense
(tense)[source]¶ Load and parses the inflected forms of the tense from xml file.
- Parameters
tense – list of xml tags containing inflected forms. The list of inflected forms for the current tense being processed.
- Returns
list. List of inflected forms.
-
_detect_allowed_endings
()¶ - Detects the allowed endings for verbs in the supported languages.All the supported languages except for English restrict the form a verb can take.As English is much more productive and varied in the morphology of its verbs, any word is allowed as a verb.
- Returns
set. A set containing the allowed endings of verbs in the target language.
-
get_conjug_info
(template)¶ Gets conjugation information corresponding to the given template.
- Parameters
template – string. Name of the verb ending pattern.
- Returns
OrderedDict or None. OrderedDict containing the conjugated suffixes of the template.
-
get_verb_info
(verb)¶ Gets verb information and returns a VerbInfo instance.
- Parameters
verb – string. Verb to conjugate.
- Returns
VerbInfo object or None.
-
is_valid_verb
(verb)¶ - Checks if the verb is a valid verb in the given language.English words are always treated as possible verbs.Verbs in other languages are filtered by their endings.
- Parameters
verb – string. The verb to conjugate.
- Returns
bool. True if the verb is a valid verb in the language. False otherwise.
-
class
mlconjug3.PyVerbiste.
VerbInfo
(infinitive, root, template)[source]¶ Bases:
object
This class defines the Verbiste verb information structure.
- Parameters
infinitive – string. Infinitive form of the verb.
root – string. Lexical root of the verb.
template – string. Name of the verb ending pattern.
-
class
mlconjug3.PyVerbiste.
Verb
(verb_info, conjug_info, subject='abbrev', predicted=False)[source]¶ Bases:
object
This class defines the Verb Object.
- Parameters
verb_info – VerbInfo Object.
conjug_info – OrderedDict.
subject – string. Toggles abbreviated or full pronouns. The default value is ‘abbrev’. Select ‘pronoun’ for full pronouns.
predicted – bool. Indicates if the conjugation information was predicted by the model or retrieved from the dataset.
-
iterate
()[source]¶ Iterates over all conjugated forms and returns a list of tuples of those conjugated forms.
- Returns
list. List of conjugated forms.
-
class
mlconjug3.PyVerbiste.
VerbFr
(verb_info, conjug_info, subject='abbrev', predicted=False)[source]¶ Bases:
mlconjug3.PyVerbiste.Verb
This class defines the French Verb Object.
-
_load_conjug
()[source]¶ - Populates the inflected forms of the verb.Adds personal pronouns to the inflected verbs.
-
conjugate_person
(key, persons_dict, term)¶ Creates the conjugated form of the person specified by the key argument. :param key: string. :param persons_dict: OrderedDict :param term: string. :return: None.
-
iterate
()¶ Iterates over all conjugated forms and returns a list of tuples of those conjugated forms.
- Returns
list. List of conjugated forms.
-
-
class
mlconjug3.PyVerbiste.
VerbEn
(verb_info, conjug_info, subject='abbrev', predicted=False)[source]¶ Bases:
mlconjug3.PyVerbiste.Verb
This class defines the English Verb Object.
-
_load_conjug
()[source]¶ - Populates the inflected forms of the verb.Adds personal pronouns to the inflected verbs.
-
conjugate_person
(key, persons_dict, term)¶ Creates the conjugated form of the person specified by the key argument. :param key: string. :param persons_dict: OrderedDict :param term: string. :return: None.
-
iterate
()¶ Iterates over all conjugated forms and returns a list of tuples of those conjugated forms.
- Returns
list. List of conjugated forms.
-
-
class
mlconjug3.PyVerbiste.
VerbEs
(verb_info, conjug_info, subject='abbrev', predicted=False)[source]¶ Bases:
mlconjug3.PyVerbiste.Verb
This class defines the Spanish Verb Object.
-
_load_conjug
()[source]¶ - Populates the inflected forms of the verb.Adds personal pronouns to the inflected verbs.
-
conjugate_person
(key, persons_dict, term)¶ Creates the conjugated form of the person specified by the key argument. :param key: string. :param persons_dict: OrderedDict :param term: string. :return: None.
-
iterate
()¶ Iterates over all conjugated forms and returns a list of tuples of those conjugated forms.
- Returns
list. List of conjugated forms.
-
-
class
mlconjug3.PyVerbiste.
VerbIt
(verb_info, conjug_info, subject='abbrev', predicted=False)[source]¶ Bases:
mlconjug3.PyVerbiste.Verb
This class defines the Italian Verb Object.
-
_load_conjug
()[source]¶ - Populates the inflected forms of the verb.Adds personal pronouns to the inflected verbs.
-
conjugate_person
(key, persons_dict, term)¶ Creates the conjugated form of the person specified by the key argument. :param key: string. :param persons_dict: OrderedDict :param term: string. :return: None.
-
iterate
()¶ Iterates over all conjugated forms and returns a list of tuples of those conjugated forms.
- Returns
list. List of conjugated forms.
-
-
class
mlconjug3.PyVerbiste.
VerbPt
(verb_info, conjug_info, subject='abbrev', predicted=False)[source]¶ Bases:
mlconjug3.PyVerbiste.Verb
This class defines the Portuguese Verb Object.
-
_load_conjug
()[source]¶ - Populates the inflected forms of the verb.Adds personal pronouns to the inflected verbs.
-
conjugate_person
(key, persons_dict, term)¶ Creates the conjugated form of the person specified by the key argument. :param key: string. :param persons_dict: OrderedDict :param term: string. :return: None.
-
iterate
()¶ Iterates over all conjugated forms and returns a list of tuples of those conjugated forms.
- Returns
list. List of conjugated forms.
-
-
class
mlconjug3.PyVerbiste.
VerbRo
(verb_info, conjug_info, subject='abbrev', predicted=False)[source]¶ Bases:
mlconjug3.PyVerbiste.Verb
This class defines the Romanian Verb Object.
-
_load_conjug
()[source]¶ - Populates the inflected forms of the verb.Adds personal pronouns to the inflected verbs.
-
conjugate_person
(key, persons_dict, term)¶ Creates the conjugated form of the person specified by the key argument. :param key: string. :param persons_dict: OrderedDict :param term: string. :return: None.
-
iterate
()¶ Iterates over all conjugated forms and returns a list of tuples of those conjugated forms.
- Returns
list. List of conjugated forms.
-


--- layout: default title: "404: Not found" ---
It looks like you tried to access something that does not exist. If you came here via a hyperlink, please report where the link was and where it was pointing to back to me.
If you were really hoping to find some information here, please take a look above at the navigation and try and find whatever you were looking for there.
Yes, this is a 404 page, but do not despair. I attached a funny flash animation below to entertain you.
{% assign file = '/51.swf' %} {% assign width = '620' %} {% assign height = '350' %} {% include flash.html %}


WebAuthn Demo App
Welcome, {{name}}!
This device does not support User Verifying Platform Authenticator. You can't register a credential.
Public key credentials:
Add credential
Reauthenticate
Logout


{% extends "exam.html" %} {% block title %} Q1 {% endblock %} {% block head %} {{ super() }}
static/exam.css
.static/exam.css
) and use it to style the
exam template (file templates/exam.html
). Modify the exam template to include
the exam stylesheet in the document head.
static
folder) as the first menu item in your menu.
This should work as the Home menu item, to go back to the web site home (route /
).
code
, em
and strong
elements to be different
from the default style. The exact style is for you to decide here (but choose something that makes sense and
doesn't make the site unreadable).
head
and title
elements. Also
add a contents div
, and a corresponding Jinja2 block for it. The menu should appear on all
the pages.
templates/q1.html
to templates/q4.html
) to extend
the exam template. The title
and contents
blocks should be redefined in the 4 question
templates.
app.py
to add routes for the 4 question templates (templates/q1.html
to templates/q4.html
). Put your code where indicated in
the TODO comments. The links to the questions in exam.html
should work properly
when running the application.


The Stranded Island of Fantasia
You were killed by the enemy. Restart the game!
Restart Game
Menu Page


--- layout: archive title: Zulip Chat Archive permalink: /stream/113489-new-members/topic/VS.20Code.20terminal.20popping.20up.html ---
When typing in VS Code I constantly have the terminal window popping up with all error messages. It makes it impossible to work... I had this problem before and cannot remember how to fix it. Does anybody know how to fix this?
I've never seen this, what are the error messages?
When you type the Output terminal with lean error messages pops up (if it was closed) and the cursor moves to the terminal. The terminal contains a bunch of these messages (they are all the same):
LEAN ASSERTION VIOLATION
File: /home/travis/build/leanprover/lean/src/frontends/lean/elaborator.cpp
Line: 3167
Task: /home/cp/Git/finite_fields/src/finite_field.lean: zmod_ring_hom
m_ctx.match(e, *val2)
I now changed this function zmod_ring_hom
and now I dont get the problem anymore, nor can I recreate it...
Well, assertion violations are probably bad, but ignoring that. Are you using a debug version of Lean? (lean --v
will tell you.) I thought assertions are only checked in debug.
Nope Release: Lean (version 3.4.2, nightly-2018-08-23, commit b13ac127fd83, Release).
Can the problem be 3.4.2?
At some point in the past, everybody was seeing assertion violations. But then they disappeared (for me)
You only need to search for "assertion violation" on this zulip. No need to run a debug version
I still see them occasionally, but have not tried to pin one down for a while.
Usually they occur when working with half-written structures, with weird syntax violations.
Yes it was while writing a structure
Then I just hope that it just does not happen again haha
Ah, it looks like there are two levels of assertions, most of them are only checked in debug mode but some are checked in release.
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


To find out more about your sessions, please sign in:
StatusCode: {{error.statusCode}}
Error: {{error.error}}
Message: {{error.message}}


Name: Simon James Lives: Norfolk, England Goals: Aspirations to be a software developer
Now live on GitHub pages
Current projects
Freecodecamp
HTML, CSS and Javascript book
Bootstrap
Previous projects
All still in progress


--- layout: next-page title: Next Fest Opening party ---
A summer celebration benefiting Sundance Institute and its artists
Thursday, August 10
7:30 p.m. Screening
9:30 p.m. Party
The Theatre at Ace Hotel, 929 S. Broadway, Los Angeles, CA
Join us for our opening night celebration at Sundance NEXT FEST, a summer festival where movies, music, and mischief collide. The evening will kick off the festival with a special 35mm screening of Quentin Tarantino’s cult classic Reservoir Dogs, followed by an outdoor party with music, drinks, food trucks, games, and more—all while benefiting Sundance Institute and the artists we support year-round.
Presented by Acura.
Premium Party & Screening Ticket Package—$500 (Tax-Exempt $60 )
Party & Screening Ticket—$150 (Tax-Exempt $80 )
Sponsor an Artist—$500 (Tax-Exempt $500)
Support the Artist Fund
For questions or additional information on the NEXT FEST After Dark Party, please contact<EMAIL_ADDRESS>or<PHONE_NUMBER>. For a printable version of the invitation, click here.


thestevenbell's blog
I'm a full-stack web developer and hardware/IoT maker in Atlanta, Georgia specializing the MEAN stack and Rails. Graduate of General Assembly full-time web design immersive.
--- layout: default ---
I'm a full-stack web developer and hardware/IoT maker in Atlanta, Georgia specializing the MEAN stack and Rails. Graduate of General Assembly full-time web design immersive.


Steven Bender
About |
Contact |
Portfolio
Portfolio
Hangman
RPG Game
Trivia Game
Rutgers info Widget
Rock Paper Scissors
Connect with Me


This is only useful if the Tileset grid size is different from the layer grid size.
This auto-layer will use the INTGRID layer above to apply its rules.
Selecting a Tileset above will enable Auto-Layer capabilities on this layer. This allows to render automatically tiles based on the IntGrid values (eg. adding "grass" tiles above cells with "walls" value).


{% extends "includes/base.html" %} {% load static %} {% block title %}Analytics | Siphon{% endblock %} {% block css %} {% endblock %} {% block content %} {% include "includes/header.html" with title="Analytics" %}
Each label on the x-axis is a Monday representing the previous week up to midnight on that date.


Rell Integration¶
In the bootstrap project, rell/src
directory is configurated to be the rell project’s root module. rell/src/lib/ft3
directory contains the FT3 module.
We also provided a rell/src/module.rell
file with some template code which could serve as an entry point for your dapp, although you are free to choose any module structure to your liking.
Defining dapp_account entity¶
The account
entity provided by .lib.ft3.account
module can be used for account management. But your dapp might need to record more information about the user, like username, email address, etc. We can add an an entity to record those information.
An example dapp’s account could be defined as:
import acc: .lib.ft3.account;
entity dapp_account {
key account: acc.account;
key first_name: text;
key last_name: text;
index age: integer;
}
In this user model, there is no public key or user ID. Those details are provided by acc.account
.
acc.account
has an id
property which uniquely identifies an account, and access is controlled by acc.account_auth_descriptor
which include user’s public key.
The underlying structure of acc.account
and acc.account_auth_descriptor
is explained in Account Management.
After dapp_account
entity is defined, the next step is to define operation used to create an instance of dapp_account
:
operation create_dapp_account(
firstname: text,
lastname: text;
age: integer;
user_auth: acc.auth_descriptor
) {
val account_id = acc.create_account_with_auth(user_auth);
create dapp_account (
first_name = firstname,
last_name = lastname,
age,
acc.account @ { account_id }
);
}
query get_dapp_accounts() {
return dapp_account @? {} ( id = dapp_account.account.id, first_name = .first_name, last_name = .last_name, age = .age);
}
Restart the node for changes to take effect. Because we have changed database structure, we need to add -W
option to delete the database and add new dapp_account
table:
postchain/bin/run-node.sh <dapp_name> -W
Important
Make sure to update your client’s blockchainRID config with the newly generated blockchainRID
On the client side, operation can be called using ft3-lib
(or postchain-client
):
import DirectoryService from './lib/directory-service';
import { util } from 'postchain-client';
import { blockchainRID } from '../configs/constants';
import {
op,
Blockchain,
SingleSignatureAuthDescriptor,
FlagsType,
User
} from 'ft3-lib';
const keyPair = util.makeKeyPair();
const user = new User(
keyPair,
new SingleSignatureAuthDescriptor(
keyPair.pubKey,
[FlagsType.Account, FlagsType.Transfer]
)
);
const blockchain = await Blockchain.initialize(
blockchainRID,
new DirectoryService()
);
const session = blockchain.newSession(user);
await session.call(op(
'create_dapp_account',
'John',
'Doe',
30,
user.authDescriptor
));
We can check if create_dapp_account
operation is executed successfully using get_dapp_accounts
query we created:
const rest = pcl.restClient.createRestClient(nodeApiUrl, blockchainRID, 5)
const gtx = pcl.gtxClient.createClient(
rest,
Buffer.from(
blockchainRID,
'hex'
),
[]
);
const allDappAccoounts = await gtx.query('get_dapp_accounts');
Modules¶
In this section, we will go through some of the built-in utilities that FT3 modules provide.
It should be noted that the built-in operations and queries all have matching interface in ft3-lib
javascript library.
Account Module¶
import acc: .lib.ft3.account;
Functions:
function create_account_with_auth (auth_descriptor): byte_array
Create a new FT3 account using the provided ft3.account.auth_descriptor
auth_descriptor
: Theauth_descriptor
used to create this account.return:
account.id
(equal toauth_descriptor.hash()
)
function auth_and_log(account_id: byte_array, auth_descriptor_id: byte_array, required_flags: list<text>): account
Authorize given auth_descriptor for required authorization flags, and apply the rate limiter constrains configurated in config.template.xml
. This is meant to be the default authorization mechanism for operations.
account_id
: id of the accountauth_descriptor_id
: is equal toauth_descriptor.hash()
required_flags
: list of required authorization flags (see Account Management)return: the account instance
function require_auth (account, descriptor_id: byte_array, required_flags: list<text>)
Authorize given auth_descriptor, but does not apply rate limiter’s constrains.
function _add_auth_descriptor (account, auth_descriptor)
function _delete_auth_descriptor(auth_descriptor: account_auth_descriptor)
function _delete_all_auth_descriptors_exclude(account, auth_descriptor_id: byte_array)
Utilities for managing auth_descriptors.
Operations:
operation delete_auth_descriptor (account_id: byte_array, auth_descriptor_id: byte_array, delete_descriptor_id: byte_array)
operation delete_all_auth_descriptors_exclude(account_id: byte_array, auth_descriptor_id: byte_array)
operation add_auth_descriptor (account_id: byte_array, auth_id: byte_array, new_desc: acc.auth_descriptor)
Queries:
query get_account_auth_descriptors(id: byte_array)
query get_account_by_id(id: byte_array)
query get_account_by_auth_descriptor(auth_descriptor)
query get_accounts_by_participant_id(id: byte_array)
query get_accounts_by_auth_descriptor_id(descriptor_id: byte_array)
Core Module¶
import core: .lib.ft3.core;
Functions:
function register_asset (name, issuing_chain_rid: byte_array): asset
Register a new asset on the chain.
function _get_asset_balances(account_id: byte_array): list<(id:byte_array,name:text,amount:integer,chain_id:byte_array)>
Get asset balance of an account.
function ensure_balance(acc.account, asset): balance
Get account’s balance of an asset, or create one if it doesn’t exist.
struct xfer_input {
account_id: byte_array;
asset_id: byte_array;
auth_descriptor_id: byte_array;
amount: integer;
extra: map<text, gtv>;
}
struct xfer_output {
account_id: byte_array;
asset_id: byte_array;
amount: integer;
extra: map<text, gtv>;
}
function _transfer (inputs: list<xfer_input>, outputs: list<xfer_output>)
Perform an asset transfer from accounts described in xfer_input
to accounts in xfer_output
.
If xfer_output.extra
map contains a reg_auth_desc
key, then the value will be used as auth_descriptor
to create a new account (meaning you can create a new account then transfer asset to it immediately in one transaction).
Using the transaction function in Rell could look something like this:
function transfer_balance(from: user_account, //user_account being an entity with an acc.account attribute.
from_auth: acc.auth_descriptor
to: user_account, to_auth: acc.auth_descriptor,
amount:integer){
val input = ft3.xfer_input(account_id = from.account.id
asset_id = exampleToken.token.id,
auth_descriptor_id = from_auth,
amount = amount,
extra = map<text, gtv>()
);
val output = ft3.xfer_input(account_id = to.account.id,
asset_id = exampleToken.token.id,
auth_descriptor_id = to_auth,
amount = amount,
extra = map<text, gtv>()
);
val inputs = list<ft3.xfer_input>();
inputs.add(input);
outputs.add(output);
ft3._transfer(inputs, outputs);
}
Operations:
operation transfer (inputs: list<ft3.xfer_input>, outputs: list<ft3.xfer_output>)
Queries:
query get_asset_balances(account_id: byte_array)
query get_asset_balance(account_id: byte_array, asset_id: byte_array)
query get_asset_by_name(name)
query get_asset_by_id(asset_id: byte_array)
query get_all_assets()
query get_payment_history(account_id: byte_array, after_block: integer)


Frend is a digital tool that keeps your child safe from screen addiction during
their first discovery of
the
digital world.
Frend is a gamified app that turns your phone into your kid’s digital companion that
helps to moderate
screen
time and establish healthy device usage habits.
Download Frend for FREE to shelter your child from screen addiction. Upgrade when
you know it works.


Khloe Kardashian says she 'doesn't need a man' as she 'has love of her life'
Khloe Kardashian was joined by her sisters on The Real as they spoke candidly about their lives and Khloe opened up about her feelings on men and relationships
by James Brinsford, https://www.facebook.com/james.brinsfordKhloe Kardashian has opened up about her future relationships and had admitted that she 'doesn't want a man'.

The NBA star was allegedly in a clinch with Kylie Jenner's former BFF Jordyn Woods at a party and since that moment, Khloe has turned her back on looking for another man.
In fact, she has admitted that she is "so in love" with her daughter True, from her time with Tristan, that she doesn't need another to muscle in on her affections.
In a Kardashian takeover of The Real, Khloe was joined by her sisters Kourtney and Kim and they were soon spilling the beans on the daytime talk show.
Of course, Khloe was subjected to more questions about her love life and why she can't find the perfect man for everlasting love.
The show's host, Adrienne Bailon, is also a friend of the family but she didn't hold back in trying to extract the revelations that the viewers wanted.
Questioning Khloe, Adrienne asked: "You’ve been so open that you’re not in the headspace for dating right now.
"But, when you are ready, what kind of guy would you be looking for?"
It turns out there isn't 'a type' for Khloe and it is all irrelevant anyway as she is not even on the market for another relationship.
Khloe replied: "It’s not even the headspace, I just don’t know what the point of rushing is.
"If it’s natural, great. But, I’m just so in love with [daughter] True [Thompson] and I don’t feel incomplete or that I need to distract myself in any way."
Khloe went on to say that that it is down to 'type' to determined the next man in her life.
She continued: "I’m totally good and happy and I just love it. My think my biggest thing is not having any sort of type, like whoever I vibe and connect with is just what I want to do.
"I just don’t really have any pressure on it."
After her experience with Tristan, who also cheated on the reality star while she was in labour with True, it would seem that the Good American designer will be happily single for the time being.
Do you have a story to sell? Get in touch with us at<EMAIL_ADDRESS>or call us direct 0207 29 33033.


public class HIPPSCode extends java.lang.Object implements HIPPSCodeIF
| Modifier and Type | Field and Description |
|---|---|
protected char |
clinicalSeverity |
protected char |
functionalSeverity |
protected int |
groupingStep |
protected int |
hippsScoringEquation |
protected char |
nonRoutineSupplies |
protected char |
servicesUtilization |
protected int |
therapyNeedNumber |
protected java.lang.String |
timing |
DEFAULT_BLANK_VALUE
| Constructor and Description |
|---|
HIPPSCode()
This constructor creates a blank HIPPS code.
|
HIPPSCode(HomeHealthRecordIF record,
HomeHealthRecordValidatorIF validator,
PointsScoringEquationsIF clinicalScore,
PointsScoringEquationsIF functionalScore,
int nrsScore)
This method will populate the HIPPS code based on the parameters.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
determineClinicalSeverity(int equationValue) |
void |
determineFunctionalSeverity(int equationValue) |
protected void |
determineNrs(int nrsScore) |
protected void |
determineServiceDomain() |
protected boolean |
determineStepEquation() |
protected void |
evaluateRecord(HomeHealthRecordIF record,
PointsScoringEquationsIF clinicalScore,
PointsScoringEquationsIF functionalScore,
int nrsScore) |
char |
getClinicalSeverity()
gets the Clinical severity code
|
java.lang.String |
getCode()
gets the HIPPS code
|
char |
getFunctionalSeverity()
gets the Functional Severity code
|
int |
getGroupingStep()
gets the Grouping step
|
char |
getNonRoutineSupplies()
gets the NRS Supplied code
|
char |
getServicesUtilization()
gets the Services Utilization code
|
void |
setClinicalSeverity(char clinicalSeverity)
Sets the Clinical Severity character
|
void |
setFunctionalSeverity(char functionalSeverity)
Sets the Functional Severity character
|
void |
setGroupingStep(int groupingStep)
Sets the Grouping step number
|
void |
setNonRoutineSupplies(char nonRoutineSupplies)
Sets the Non Routine Supplies character
|
void |
setServicesUtilization(char servicesUtilization)
Sets the Services Utilization character
|
protected void |
setToBlank()
Sets the code to all blanks
|
java.lang.String |
toString() |
protected int groupingStep
protected int hippsScoringEquation
protected char clinicalSeverity
protected char functionalSeverity
protected char servicesUtilization
protected char nonRoutineSupplies
protected java.lang.String timing
protected int therapyNeedNumber
public HIPPSCode()
public HIPPSCode(HomeHealthRecordIF record, HomeHealthRecordValidatorIF validator, PointsScoringEquationsIF clinicalScore, PointsScoringEquationsIF functionalScore, int nrsScore)
record
- validator
- clinicalScore
- functionalScore
- nrsScore
- protected void evaluateRecord(HomeHealthRecordIF record, PointsScoringEquationsIF clinicalScore, PointsScoringEquationsIF functionalScore, int nrsScore)
public char getClinicalSeverity()
getClinicalSeverity
in interface HIPPSCodeIF
public void setClinicalSeverity(char clinicalSeverity)
setClinicalSeverity
in interface HIPPSCodeIF
clinicalSeverity
- public char getFunctionalSeverity()
getFunctionalSeverity
in interface HIPPSCodeIF
public void setFunctionalSeverity(char functionalSeverity)
setFunctionalSeverity
in interface HIPPSCodeIF
functionalSeverity
- public int getGroupingStep()
getGroupingStep
in interface HIPPSCodeIF
public void setGroupingStep(int groupingStep)
setGroupingStep
in interface HIPPSCodeIF
groupingStep
- public char getNonRoutineSupplies()
getNonRoutineSupplies
in interface HIPPSCodeIF
public void setNonRoutineSupplies(char nonRoutineSupplies)
setNonRoutineSupplies
in interface HIPPSCodeIF
nonRoutineSupplies
- public char getServicesUtilization()
getServicesUtilization
in interface HIPPSCodeIF
public void setServicesUtilization(char servicesUtilization)
setServicesUtilization
in interface HIPPSCodeIF
servicesUtilization
- public java.lang.String getCode()
getCode
in interface HIPPSCodeIF
protected final void setToBlank()
public final java.lang.String toString()
toString
in class java.lang.Object
protected boolean determineStepEquation()
protected void determineClinicalSeverity(int equationValue)
public void determineFunctionalSeverity(int equationValue)
protected void determineServiceDomain()
protected void determineNrs(int nrsScore)


My father was a St. Bernard, my mother was a collie, but I am a Presbyterian. This is what my mother told me, I do not know these nice distinctions myself.
To me they are only fine large words meaning nothing. My mother had a fondness for such; she liked to say them, and see other dogs loo...By and by, when I was older, she brought home the word Unintellectual, one time, and worked it pretty hard all the week at different gatherings, making much unhappiness and despondency; and it was at this time that I noticed that during that week she was asked for the meaning at eight different a...
When I was well grown, at last, I was sold and taken away, and I never saw her again. She was broken-hearted, and so was I, and we cried; but she comforted me as well as she could, and said we were sent into this world for a wise and good purpose, and must do our duties without repining, take our...
It was such a charming home!—my new one; a fine great house, with pictures, and delicate decorations, and rich furniture, and no gloom anywhere, but all the wilderness of dainty colors lit up with flooding sunshine; and the spacious grounds around it, and the great garden—oh, greensward, and nobl...
Read MoreOther times I lay on the floor in the mistress's work-room and slept, she gently using me for a foot-stool, knowing it pleased me, for it was a caress; other times I spent an hour in the nursery, and got well tousled and made happy; other times I watched by the crib there, when the baby was aslee...
Read MoreThe pain was cruel, but, no matter, I must not lose any time; he might come back at any moment; so I limped on three legs to the other end of the hall, where there was a dark little stairway leading up into a garret where old boxes and such things were kept, as I had heard say, and where people s...
Read More


Treebank Statistics: UD_Teko-TuDeT: POS Tags: PROPN
There are 25 PROPN
lemmas (4%), 32 PROPN
types (2%) and 48 PROPN
tokens (2%).
Out of 15 observed tags, the rank of PROPN
is: 4 in number of lemmas, 6 in number of types and 9 in number of tokens.
The 10 most frequent PROPN
lemmas: teko, Françoise, Polo, Trois-Sauts, Cayenne, Surinam, Bopea, Camopi, Channel, F.
The 10 most frequent PROPN
types: teko, Françoise, Polo, Trois-Sautskotɨ, tekokom, surinamapope, A, Bopea, Camopipori, Cayenneape
The 10 most frequent ambiguous lemmas: teko (PROPN 16, NOUN 2, VERB 1), a (DET 2, PART 1, PROPN 1)
The 10 most frequent ambiguous types: teko (PROPN 8, NOUN 1)
Morphology
The form / lemma ratio of PROPN
is 1.280000 (the average of all parts of speech is 2.023659).
The 1st highest number of forms (7) was observed with the lemma “teko”: teko, tekoam, tekoate, tekokom, tekokomãhã, tekorehe, tekoũwã.
The 2nd highest number of forms (2) was observed with the lemma “Cayenne”: Cayenneape, Cayenneawinẽ.
The 3rd highest number of forms (1) was observed with the lemma “Bopea”: Bopea.
PROPN
occurs with 7 features: Case (14; 29% instances), Number (6; 13% instances), Nmzr (2; 4% instances), Contrast (1; 2% instances), Foc (1; 2% instances), Polarity (1; 2% instances), Rel (1; 2% instances)
PROPN
occurs with 12 feature-value pairs: Case=Abl
, Case=All
, Case=Dat
, Case=Loc
, Case=Ref
, Case=Tra
, Contrast=Yes
, Foc=Yes
, Nmzr=Adv
, Number=Plur
, Polarity=Neg
, Rel=Cont
PROPN
occurs with 13 feature combinations.
The most frequent feature combination is _
(27 tokens).
Examples: teko, Françoise, Polo, A, Bopea, Channel, F., K., Nebʃa, Niwe
Relations
PROPN
nodes are attached to their parents using 5 different relations: nsubj (20; 42% instances), obl (12; 25% instances), root (8; 17% instances), nmod (7; 15% instances), obj (1; 2% instances)
Parents of PROPN
nodes belong to 3 different parts of speech: VERB (21; 44% instances), NOUN (19; 40% instances), (8; 17% instances)
35 (73%) PROPN
nodes are leaves.
7 (15%) PROPN
nodes have one child.
5 (10%) PROPN
nodes have two children.
1 (2%) PROPN
nodes have three or more children.
The highest child degree of a PROPN
node is 3.
Children of PROPN
nodes are attached using 10 different relations: cop (7; 35% instances), det (3; 15% instances), advmod (2; 10% instances), dep (2; 10% instances), amod (1; 5% instances), case (1; 5% instances), nmod (1; 5% instances), nsubj (1; 5% instances), parataxis (1; 5% instances), punct (1; 5% instances)
Children of PROPN
nodes belong to 8 different parts of speech: AUX (7; 35% instances), PRON (4; 20% instances), ADV (2; 10% instances), DET (2; 10% instances), PART (2; 10% instances), ADP (1; 5% instances), PUNCT (1; 5% instances), X (1; 5% instances)


Hello there, how you doing?
This is a website for Jason to learn coding from Github!
My favorite site is
My Second favorite site is
My Third favorite site is


COVIC Is
a broad multi-lingual, multi-cultural view of visualizations created during the global COVID-19 pandemic.
Classifies
articles and figures in a format that is available for teaching and research purposes.
Contains
a snapshot of information design practice during the pandemic period.
Illustrates
the range of qualitative and quantitative visualization possibilities.
Preserves
a persistent record of ephemeral online visualization artifacts.
Provides
a portrait of this moment of inflection accelerating the transition from print to online.
Represents
both a problem space — how can visualization practice be used to address this problem — and a solution space — the techniques being used at different times, in different languages, in different contexts.


schools species ˚.’ mosquito vectors mosquitoes Culex Anopheles dengue vector Cx. {border-style Cambodia Health px;} #ffffff;} Sciences Japanese relative virus Aedes JEV abundance potential Ae. Rural malaria ():–. Cambodia. collected number Dengue []. different An. diversity transmission Med Vectors considered encephalitis presence risk school Biology DENV Medicine Trop aegypti important mosquitoes, study traps Disease Life Peri-urban Plasmodium Viral World cases caught described px; {font-family (%), (), Cham JEV, Kampong Khmum Mansonia November Tboung Uranotaenia biodiversity children control distribution font-size genera primary rainy total vectors, virus, yes Cambodian February Fever Fig Lutzia MAL Mimomyia Mosquito Pathogens RRV adult classrooms data double; estimated importance present representing results role schools, schools. Armigeres August Diseases Health. Mosquitoes RVFV, Thailand arboviruses border-color border-width collection diseases dry endemic fever, high implemented incidence including original pathogens provinces, season, solid; spp. studies study, surveillance transmission. year years {font-style {font-weight (Diptera: (Fig (Table Aedes, Coquillettidia Diseases: Flaviviruses: Infectious Insect Lao Medical Ministry Nile Organisms Penh Phnom Public Vectors: Virus WNV, West areas biting bold classrooms, courier; density effect em; fever field identified large main majority month pt;} specific unidentified used using vectors.


NOTE: To use key pairs generated by OpenSSL
When you want to use a key pair which generated by OpenSSL, please
follow the instructions:
# generate secp256r1 curve EC key pair
# Note: openssl uses the X9.62 name prime256v1 to refer to curve secp256r1, so this will generate output
% openssl ecparam -genkey -name secp256r1 -out k.pem
# print private key and public key
% openssl ec -in k.pem -noout -text
Private-Key: (256 bit)
priv:
11:b5:73:7c:f9:d9:3f:17:c0:cb:1a:84:65:5d:39:
95:a0:28:24:09:7e:ff:a5:ed:d8:ee:26:38:1e:b5:
d6:c3
pub:
04:a0:15:32:a3:c0:90:00:53:de:60:fb:ef:ef:cc:
a5:87:93:30:15:98:d3:08:b4:1e:6f:4e:36:4e:38:
8c:27:11:be:f4:32:c5:99:14:8c:94:14:3d:4f:f4:
6c:2c:b7:3e:3e:6a:41:d7:ee:f2:3c:04:7e:a1:1e:
60:66:7d:e4:25
ASN1 OID: prime256v1
Please delete colons ':' and new lines for the private key and the public key
and fill "EC private key (hex)" and "EC public key (hex)" in above form and
choose proper curve name,
then you can use them for signing and verification.


Space Ipsum
What was most significant about the lunar voyage was not that man set foot on the Moon but that they set eye on the earth. We are all connected; To each other, biologically. To the earth, chemically. To the rest of the universe atomically.
Curious that we spend more time congratulating people who have succeeded than encouraging people who have not. If you could see the earth illuminated when you were in a place as dark as night, it would look to you more splendid than the moon.
If you could see the earth illuminated when you were in a place as dark as night, it would look to you more splendid than the moon.


Six years ago, the Assassin in White, a hireling of the inscrutable Parshendi, assassinated the Alethi king on the very night a treaty between men and Parshendi was being celebrated. So began the Vengeance Pact among the highprinces of Alethkar and the War of Reckoning against the Parshendi.
Now the Assassin is active again, murdering rulers all over the world of Roshar, using his baffling powers to thwart every bodyguard and elude all pursuers. Among his prime targets is Highprince Dalinar, widely considered the power behind the Alethi throne. His leading role in the war would seem reason enough, but the Assassin's master has much deeper motives.
 Now he must protect the king and Dalinar from every common peril as well as the distinctly uncommon threat of the Assassin, all while secretly struggling to master remarkable new powers that are somehow linked to his honorspren, Syl.
Brilliant but troubled Shallan strives along a parallel path. Despite being broken in ways she refuses to acknowledge, she bears a terrible burden: to somehow prevent the return of the legendary Voidbringers and the civilization-ending Desolation that will follow. The secrets she needs can be found at the Shattered Plains, but just arriving there proves more difficult than she could have imagined.
Meanwhile, at the heart of the Shattered Plains, the Parshendi are making an epochal decision.  The possible consequences for Parshendi and humans alike, indeed, for Roshar itself, are as dangerous as they are incalculable.
Jasnah Kholin pretended to enjoy the party, giving no indication that she intended to have one of the guests killed.


Welcome to
chat.io
!
Create a username and password OR login with your already existing credentials.
Chat Rooms
Lobby
Channel 1
Channel 2
menu
Settings
Inline Scripts
Logout
chat.io
keyboard_arrow_left
Have fun chatting!
message


Jersey Server
Register RxJerseyServerFeature
in resourceConfig
resourceConfig.register(RxJerseyServerFeature.class);
Or with configuration
RxJerseyServerFeature rxJerseyServerFeature = new RxJerseyServerFeature()
.register(AuthInterceptor.class);
resourceConfig.register(rxJerseyServerFeature);
Update your resource adding rx return type:
@Path("/")
public class HelloResource {
@GET
public Single<HelloEntity> getAsync() {
return Single.just(new HelloEntity());
}
public static class HelloEntity {
public String hello = "world";
}
}
Inteceptor
You can use RxJava enabled interceptors. Result of such interceptor will be ignored. Thrown or returned error would be redirected to jersey.
RxJava
public class SimpleInterceptor implements ObservableRequestInterceptor<Void> {
public Observable<Void> intercept(ContainerRequestContext requestContext) {
return Observable.empty();
}
}
RxJava 2
public class SimpleInterceptor implements CompletableRequestInterceptor {
public Completable intercept(ContainerRequestContext requestContext) {
return Observable.complete();
}
}
Important notes
RxJava
- It’s recommended to use
rx.Single
as return type (Representing single response entity). - Multiple elements emitted in
Observable
will be treated as error. - Empty
Observable
ornull
value inObservable
orSingle
will be treated as204: No content
. Completable
will be executed and204: No content
will be returned.
RxJava 2
- It’s recommended to use
io.reactivex.Maybe
which could be 0 or 1 item or an error. - Multiple elements emitted in
Observable
orFlowable
will be treated as error. - Empty
Observable
/Maybe
will be treated as204: No content
. Completable
will be executed and204: No content
will be returned.


@@include('common/head.html')
公益行动
@@include('common/main-nav.html')
Join us and witness the strength of a ray of spring breeze
Public action
Spring project
Spring activity
Talent Education
Love files
Join
Join us and become a volunteer
for a dream
Become a volunteer
Join us and become a donor
for a dream
Become a donor
Intern Recruitment
Project Manager
Career Opportunities
Profession cooperation
psychological
legal
Medical care
other
@@include('common/footer.html')


How long should this be put on hold?
Hold Cancel| Created 10-4-2014 |
Modified 10-11-2014 |
Task Is Open |
Tasked is a To-do list app with several features to help make it more useful. Those features include:
Tasks currently support two markup features in their description.
Check Box: This is a simple box that can either be checked or unchecked.
Horizontal Bar: a dividing bar, needs a newline after three -
| Form Input | Entry Display | ||||||
|---|---|---|---|---|---|---|---|
| [x] Get mail --- [] Check email |
|
Completed Tasks moved to the Completed tab of the List screen.
Completing a Task:
To complete a Task, starting from the List screen, Click on the Task you want to complete.
In the Task's display screen. press the "Complete" button at the bottom of the screen.
Press the "Complete" button in the resulting Popup dialog to confirm completion.
The Task will now only appear under the Completed Tasks tab.
Reopening a Task:
To reopen a Task, starting from the List screen, Click on the Task you want to reopen.
In the Task's display screen. Press the "Reopen" button at the bottom of the screen.
Press the "Reopen" button in the resulting Popup dialog to confirm Reopening.
The Task will now appear under the Current Tasks tab.
Tasks on hold are temporarily or permenently moved to the "On Hold" tab of the List screen.
Putting a Task on Hold:
Starting from the List screen, Click on the Task you want to put on hold.
In the Task's display screen. press the "Hold" button at the bottom of the screen.
In the resulting Popup dialog, set the duration of the hold, then press "Hold" to confirm.
The Task will now only appear under the "On Hold" Tasks tab, until the duration of the hold has expired.
Ending a Hold on a Task:
To end a Task's hold, starting from the List screen, Click on the Task you want to end the hold on.
In the Task's display screen. Press the "End Hold" button at the bottom of the screen.
Press the "End Hold" button in the resulting Popup dialog to confirm Reopening.
The Task will now appear under the Current Tasks tab.
A Persistent Task is one that automatically Reopens itself on a specified interval.
It is meant for Tasks that you want to do once every week, month, or year.
A task can be made persistent from the form used to create new Tasks, or the edit form. The process is the same from each.
Check the "Persistent Task" checkbox. This will cause other options to appear.
Set the day you want the task to start persisting from.
For example, if you want to do something every Sunday, set the start date to a Sunday.
Set the Interval. For example, a weekly Task would be 1 weeks.
Save these settings by pressing "Save".
Deleting a Task erases all record of that task from the app's memory.
Deleting Individual Tasks:
To delete a specific Task, starting from the List screen, Click on the Task you want to delete.
In the Task's display screen, press the "Delete" button at the bottom of the screen.
Press the "Delete" button in the resulting Popup dialog to confirm deletion.
Deleting All Entries:
Go to the Options page at the top right corner of the screen.
The last option in the options page is "Delete All Tasks", press it and press "Delete" on the resulting popup.
You can search from the List screen.
The search bar is just below the Tasked state tabs and just above the list of Tasks.
Searches currently only search by Task titles.
Searches still apply when switching which Tasked State tab you're looking under.
From the List screen,
make sure the "Sortable" checkbox at the end of the screen, then drag and drop the Tasks into place.
If the checkbox is not shown on the screen, taping the screen should make it appear.
From the List screen,
make sure the "Sortable" checkbox at the end of the screen, then drag and drop the Tasks into place.
If the checkbox is not shown on the screen, taping the screen should make it appear.
On the Options page, press the "Save to File" button.
This will save a file to "Tasked/Tasked.txt" on your device.
It is hoped that a file dialog that lets you navigate and choose where to save this file can be implemented some day.
On the Options page, press the "Load from File" button.
This will load a file from "Tasked/Tasked.txt" on your device.
It is hoped that a file dialog that lets you navigate and choose what file to load can be implemented some day.
Warning: This will erase all existing Tasks and replace them with the ones from the file.
This app was Created by Ouroboros Productions of OuroborosProductions.org
and licensed under the MIT license.
Software used as part of this app includes the following:
Copyright (c) 2015 OuroborosProductions.org
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


You have one large file with all your JavaScript for one page.
It uses some libraries and "common" code, but you don't know what.
The code is tightly coupled with events, DOM manipulation, business logic and Ajax calls all together.
It's time to tear it apart.
Get a good editor with JavaScript syntax higlighting, autocompletion and linting support.
Example: Visual Studio Code with ESLint plugin.
The linter is your friend and helps you from yourself.
Do you have many linting errors? -fix them. Maybe the editor can fix them automatically for you.
Make sure you have proper indentation, it makes the code easier to read.
'use strict' enables strict mode, which helps you identify possible collitions in variable names in different scopes and forces variables to be declared. The use of undeclared variables are potentially dangerous, because they may have been initialized outside your scope, even your file, and changing it may yield side effects.
A closure helps you not bleed variables that should be private to the file to other parts of the application.
From now on, all functionality that should be exposed outside this file should be hooked on a namespace.
From now on, all external dependencies should be given as parameter(s) to the closure.
'use strict';
(function(global) { //start of closure
//declare local variables and functionality here
function privateFunction() {
}
function exposedFunction() {
privateFunction();
}
global.myNamespace = { //expose your functionality here
exposedFunction: exposedFunction
};
}(this)) //end of closure.
// 'this' normally refers to 'window' in a browser.
// When using a testing framework, it refers to its global namespace.
Linters and test frameworks reports errors on undeclared variables.
Add a comment at the top of the file to tell the linter and developers what global dependencies you have
/* globals jQuery */
'use strict';
(function($) { //start of closure
//jQuery is now available as a local variable $
}(jQuery)) //end of closure.
//This is where your external referenced dependency is injected
If you have more than one backend, make one for each backend.
The service file contains all the Ajax calls you may use so that you in your business logic can have a one-line verbal call rather than 10 lines of configuration and setup of each request.
The service is injected as a dependency to the files that needs it. (See step 2)
Remember to add 'use strict()' & a closure.
/* globals jQuery */
'use strict';
this.myNamespace = this.myNamespace || {};
(function(myNamespace, $) { //start of closure
var baseURI = 'http://api.example.com/'
function getUsers() {
return $.get(baseURI + 'users/');
}
function addUser(user) {
//set up the post and perform it here.
}
myNamespace.myBackend = {
getUsers: getUsers,
addUser: addUser
};
}(this.myNamespace, jQuery));
/* globals */
'use strict';
this.myNamespace = this.myNamespace || {};
(function(myBackend) { //start of closure
var users = [];
function onUsersRetrieved(userList) {
users.splice(0, userList.length, userList);
}
function getUsers() {
myBackend
.getUsers()
.done(onUsersRetrieved);
}
}(this.myNamespace.myBackend));


Welcome to the Monroe County History
and Genealogy Website
Click
here for more about this website
Click here to go to the MCHS
website
Click here to go to the MCC
of OGS website
|
CDs of important Monroe County
record books are now available. Each
page of dozens of Monroe
County record books
have been photographed and made into CDs.
For a current list of available CDs click here.
|
MAKING OF MONROE
COUNTY, OHIO
by R.E. Harrington
(You can search any file or page on this web site by
following the steps found by clicking on Search.)
History
Prior to the Formation of Monroe
County:
Until
the early 1800s, essentially no one lived in what is now Monroe County, Ohio
-- not even Indians. It is true that
American Indians inhabited the North American continent long before the
Europeans began to arrive. However,
their population was sparse consisting of a number of tribes distributed over a
vast wilderness. They subsisted on meat
that they hunted with bows and arrows, spears, and traps. The Indians were also farmers in that they
planted corn, beans, and squash. They
lived in small villages of usually no more than a few hundred individuals. Being surrounded by vast areas of wilderness,
they had no concept of owning land as the Europeans knew it.
Then
came the British and French who had been fighting each other in Europe and on the seas for centuries. Through early contact with the Indians of the
St. Lawrence River and the Great Lakes area
the French had discovered a rich resource in the form of animal pelts that was
available by trading with the Indians.
So, the primary interest of the French was to establish a partnership
and trade with the Indians. For this
purpose, they cultivated the friendship of the six tribes who lived in what is
now upper New York
State. These tribes became known as the six nations
or the Iroquois League. The French built
trading posts and provided the Indians with blankets, guns, gunpowder, cooking
utensils, axes and tomahawks, whisky, cloth, and other European
commodities. In exchange they took
animal pelts and skins for leather that were in great demand in Europe.
The
French encouraged more and more trapping and exploitation of the animal
population for furs and leather. The
Indians of the Iroquois League were only too glad to comply because animal
pelts were the money with which they could buy the white man's goods that over
the decades had gradually become necessities for their newer way of life. Trade was the only source of such commodities
as metals, guns, gunpowder and whisky.
Eventually,
the population of animals diminished to the point that they were insufficient
for the Indians of the Iroquois League to meet their trading requirements. Again, the French came to their Indian
partners' "rescue" by encouraging and helping them to become
aggressors of their neighboring tribes.
So the Iroquois League moved westward into new hunting and trapping
areas along the Great Lakes. In this process, they eradicated the Erie Indian Tribe and under the tutorage of the French,
appointed themselves as the leading tribe over all other tribes in what would
become known as the Northwest Territory. Several of the tribes submitted to the administrative
domination by the Iroquois League, but a number of others such as the Shawnee and Miami
did not.
Farther
south on the North American continent the British were interested in settling
and farming the land. While the British
also traded with the Indians for animal pelts, the major income from their
colonies came from food, tobacco and taxes imposed on the expanding
population. This policy encouraged the
expansion of settlements and the colonies grew ever westward as more settlers
came and the demand for land increased.
For nearly a century the land east of the Allegheny
Mountains was sufficient for the growing population. The King of England
had established the Allegheny Mountains as the
dividing line between settlers and the Indian lands, a boundary that was
honored by the settlers for several decades.
By
the middle of the 1700s the relationship between France
and England
on the American continent had deteriorated even further. To support the French trading enterprises to
the north in 1749 the French sent a military expedition that claimed most of
the area that we now call the Northwest Territory. In so doing their claim included the lands of
the Shawnee, Cherokee, Miami, Mingo, and other tribes. The British viewed these claims as a trespass
on their Pennsylvania and Virginia colonies. In addition, the British had established
their own trading posts among the Shawnee
and other Indian tribes in this area.
When the French arrived these British traders were told to leave.
These
new claims of the French to the Ohio
country fanned the flames of antagonism that led to the French and Indian
War. The Indians viewed the squabble
between the French and British as being between two white tribes from across
the ocean. Most of the Indian tribes preferred to remain neutral in the
squabble. However, the French were the trading partners of the Iroquois
League who had become dependent on trade for their survival and
prosperity. So, eventually they agreed
to join with the French in their war with the British.
France did a poor job supporting
their colonial forces in America
both militarily and in terms of providing supplies to trade with the
Indians. As the sources of trade
supplies dried up for the French, caused in no small part by the British, the
French traders began gouging and cheating the Indians. Deliberately playing to this French weakness,
the British offered better deals and in effect bought much of the Indians'
allegiance away from the French. This
had the effect of reducing military pressure on the British although the
hostility of the Indians over the encroachment by settlers still existed. Eventually the British prevailed in the
French and Indian War and in 1760 they were victorious in forcing the French to
withdraw from North American. As a result, the Indians found themselves
trading with the British instead of the French. Having won the French and
Indian War, the British laid claim to all the Northwest
Territory. This was one of
the terms of the Treaty of Paris
of 1763 that was made between the British and French but without the
participation of the Indians. With the French expelled from North America, the
King of England, in an
effort to appease the Indians, ordered that all of the land between the Great
Lakes and the Ohio River would be Indian land
and was not to be settled.
By
this time the land between the Atlantic Ocean and the Allegany Mountains
had become filled with farms and new land was needed for settlement. Settlers began to spill across the Allegheny
Mountains from Pennsylvania and Virginia. In addition, surveyors were being hired to
survey land in the upper Ohio
Valley with an eye to
future settlement. This encroachment of
the whites into the Indian hunting land cause justifiable concern among the
Indians that the lands of the Ohio Valley would soon be settled as the land east of the Allegheny Mountains had been.
In
an effort to accommodate the need for new land, the British convened a council
at Fort Stanwix with
the Iroquois League in 1768. They did
not invite the tribes who inhabited the Ohio Valley. From the Iroquois League they
"bought," for 10,000 worth of goods, the area to the west
of the Allegheny Mountains and south and east of the Ohio
River. In retrospect, it
seems clear that this negotiation with the Iroquois League was a ruse to claim
that the land had been bought, as opposed to being taken by force. Needless to say, the Indian tribes such as
the Shawnee, Cherokees, and Miami who claimed the area as their homes and
hunting grounds did not recognize the transaction.
For
the Indians who lived on and used the lands "purchased" by the
British of the Stanwix Treaty, the problem was the
continuing encroachment of settlers. To
some of these tribes the conflict between the French and British had been an
opportunity to push the settlers back across the Allegheny
Mountains. Indeed, the
French had encouraged this goal to help enlist the Indian forces to their side
during the French and Indian War. But
with the British being the winning side in the French and Indian War, the
problem of encroachment of settlers took on a more serious and sinister
complexion.
The King's order to reserve the land north of the Ohio
River as Indian land stood for only a short period. The ruse of the British buying land from Indians
who did not own it was repeated several times.
Over the next two decades, the situation went from bad to worse with
both the whites and Indians becoming increasingly suspicious of the
other. Before long, this led to a state of open but undeclared war
between the white settlers and the Indians.
The Indians' objective remained that of forcing the whites to return
east of the Allegheny Mountains. Attacks were mostly relatively small
hit-and-run skirmishes in which both the whites and Indians committed
horrendous atrocities. Several times the whites were nearly driven from
the lands west of the Allegheny Mountains
where they were settling.
To make matters worse for the settlers, in 1776 the Americans declared their
independence from England. This precipitated the American Revolutionary
War that involved several years of war between England and the eastern
colonies. The new American government that was formed was weak. It had no money and was ill prepared to
provide protection to the settlers on the western frontier. As a result,
the undeclared war between the whites moving into the Ohio Valley
and the Indians who felt that they owned the land continued with disastrous
results for both sides, but mostly for the whites. [Capt.
John Baker, John Wetzel,]
As
the war between England and
the future United States,
reached a conclusion attention could be focused on the Indian problems at the
western frontier. The problem was that
the new American government was broke and tired of war. The result was a period of about a decade of
aggressive Indian attacks on the settlers.
The new Federal Government built forts and staffed them with minimal
troops but at best these were shelters for settlers if they had advanced notice
of Indian raids.
Even
though the Revolutionary War had been concluded in the east with the surrender
of British Major General Charles Cornwallis to George Washington at Yorktown, the
British still held key forts in places like Fort Detroit, Fort Niagara, and
Fort Miami. They also continued to
operate trading posts with the Indians.
And while there was at least a pretense of observing the British
surrender while terms of the peace treaty were being worked out, these Canadian
and fort commanders continued the war by sponsoring the Indians as their
surrogate armies. From these positions
they continued to serve as military suppliers and advisors to the Indians and
encouraged them to continue attacks on the settlers in the Ohio Valley.
Several futile efforts were made by the white settlers to muster an effective
resistance. However, the armies used for
these efforts were largely collections of unorganized and untrained militia
from among the settlers. The Indians
with the help of the British effectively repelled most of these missions,
frequently with great loss of life among the militia. The Indians took refuge in what is now Central Ohio and were essentially immune from attacks by the
whites. [Maj. Gen. Arthur St. Clair]
During
this long and bloody period, war parties of Indians would leave their villages
and follow established trails to the Ohio River or they would canoe down one of
the rivers leading to the Ohio River. There they would lay in wait for boats to
come down-river with passengers and stores intended for the settlements or
forts. They would attack the boats, kill
or capture the crew, confiscate the cargo, and return to their villages. This became a profitable activity for the
marauding Indians although it was not without risk for the warriors. The fate of prisoners could range from being
adopted into the Indian tribe, to being sold to the British, to being killed
and scalped, or to be horribly tortured to death for reasons known only to the
captors. [Crow
Sisters, - Johnson Brothers, - Battle of Captina, - Drumm Family Massacre]
Many
of the war parties would cross the Ohio River and set upon settlers' cabins
located in Virginia. The outcome would likely be about the same as
for the boats that they attacked on the river.
They would loot the cabins of anything that they found of value and
could carry.  An
objective was to terrorize other settlers into returning east of the Allegheny Mountains.
The
horrendous, inhuman acts were not confined to the Indians. Whites frequently engaged in similar
activities, some motivated by revenge, others perhaps intended to dissuade the
Indians from their terrorist ways. The
result became almost a one-upmanship contest of who could be the more cruel.
Most
people who were killed by an enemy on the frontier were scalped. A major factor in this practice was to
collect a bounty that had been placed on victims. The British, for example, paid the Indians a
bounty for each scalp taken. These were
bought by the British and stored. In
these wanton acts of murder even the unborn was not exempt. [Scalp shipment]
The
land that would eventually become Monroe
County was on one of the main routes
followed by Indian war parties intent on waylaying boats or crossing into Virginia. Trails that ran along Sunfish and Captina Creeks were used for these purposes.
Finally,
after years of terrorist activities that resulted in white settlers and Indians
alike being massacred, the Federal Government mustered the resources to
assemble, equip and train an effective army on the western frontier. Under professional military leadership for
the first time, General Anthony Wayne marched an army of 2,500 trained men
north to do battle with the Indian tribes.
When the encounter between the Indians and whites finally occurred at
Fallen Timber, the effectiveness of St. Clair's army was hardly tested. It served its purpose, however. The Indians were sufficiently impressed that
they capitulated and most of the tribes sued for peace. The conclusion of this last major
confrontation resulted in the Treaty of Greenville
in 1795. [Greenville
Treaty]
All
of the Indian tribes had not signed the Greenville
Treaty, however, so even after the Treaty, attacks on some white settlements
continued but they were sporadic and claimed fewer casualties. Effective, organized resistance by the
Indians was never again achieved even though they tried; particularly, through
the efforts of Tecumseh.
Many details of the history of this period have been omitted in the brief
narrative above. But, it is not the purpose of this discussion to detail
the history of the Northwestern
Territory. Suffice
it to say that following the Greenville Treaty
of 1795 the flow of settlers increased dramatically, particularly into the
region north of the Ohio River. The Greenville
Treaty had established a new boundary between the settlers and Indian
lands. The Indian lands were reduced to
what is now the northern half of the State of Ohio
and lands west of Ohio.
The Indians moved farther north and west making way for the new wave of
settlers.
On
March 1, 1803 Ohio became the seventeenth
state in the United States. The Northwestern Territorial Government was
ended by the organization of the Ohio State Government on that date, as called for by the
provisions of the Ohio constitution framed at Chillicothe.
Ten years before the Greenville
Treaty, and 28 years before it became a county, Monroe
County was part of a block of land
that became known as The Seven
Ranges. The new
American Government established the Seven
Ranges to provide land to
pay soldiers and officers who had fought in the Revolutionary War. The
Government also intended to sell this land to individuals as a way of raising
money. The Seven Ranges
included all or major parts of what are now the counties of Carroll, Jefferson,
Harrison, Belmont, and Monroe. It also
included small parts of the counties of Columbiana, Tuscarawa,
Guernsey, Nobel, and Washington.
In order to have a method to identify and locate the individual land parcels, a
method of surveying was established in 1785 that became known as the Federal
Survey System. The Seven Ranges
were the first public lands to be surveyed using this system. This method is essentially a grid of squares,
six miles on each side, that could be overlaid on a map of the region much like
the system of latitude and longitude that is used on a worldwide basis.
The system is still in use today. [Federal Survey System]
Using the Federal Survey System, soldiers of the Revolutionary War could be
given acreage in the form of "warrants." The owner of a warrant
could either settle on the land described by his warrant or sell the warrant if
he could find a buyer. The difficulty for the warrant holder, however,
was that at the time these warrants were issued in the late 1700s, the Indians
still thought that all the land north of the Ohio River
belonged to them. And since the war between the settlers and Indians was
raging, it was frequently worth a would-be settler s life to try to claim and
settle on land covered by the warrant.
Another
consideration was that most of the land in the southern part of The Seven Ranges
is hilly and on average a lot less desirable for farming than much of the other
land found in Ohio.
As a result, the land sold slowly and settlement of Monroe County
lagged behind the settlement of some of the choicest farmlands farther
down-river and in the center and northern part of the State.
Some of the lands in The Seven Ranges were offered for sale in New
York in 1787-9 and some in Philadelphia
and Pittsburgh
in 1796. Some of the land sold at these
sales, but not much. It was not until
the land offices were established in July 1, 1800 that sales picked up.
Monroe County, Ohio is formed:
Monroe County was organized as a
county of Ohio by an act of the Ohio legislature on
January 29, 1813. Although established in 1813, its borders were modified
several times through 1851. It was named
for James Monroe who was then the United States Secretary of State (1811 -
1817) and later became the fifth president of the United States (1817 - 1825). The greatest extent of the County, east and
west, is twenty-six and a half miles, by twenty-two miles north and south. It contains 470 square miles.
By
the time that Monroe County became an Ohio county in 1813, it was beginning to be
actively settled. From a relatively slow start during the first decade of
1800 the population increased rapidly during the years between 1820s and
1850s.
By
the late 1820s Monroe
County began to see a
rush of settlers eager to buy land and begin farming. Many came directly from Europe
enticed by the opportunity to own their own land in an environment largely free
of the politics and demands of government.
They came with their own religious biases but in most cases, not because
of them. Both the Protestant and
Catholic settlers brought their respective churches' customs and organizations
and it is to the record keeping systems of these churches that we are indebted
as major resources of data and information to help reconstruct much of what we
know about these settlers who are our Monroe County ancestors.
Many
of our ancestors arrived in the decades between 1830 and 1850. Most bought farms and began their
families. It was the settlers of this
period that established the familial tone of the County with many of the
current residents being descendants of these early families. Many of the farms where they settled were
bought from holders of those early deeds or warrants. In some cases,
these farms already had houses and other improvements on them, but most did
not.
In
1850 Monroe County reached it peak in
population. Over the next 60 years the
population remained about constant at around 25,000 people. This undoubtedly reflected the facts that the
available farms had become saturated with large, stable families that limited
further growth. Then, after about two
generations the original families began to age and with no more land available
and the coming of the automobile and railroad that made travel easy, the
younger population began to move elsewhere to seek their future. Over the decades of 1910 through the 1940s
the population of the County steadily declined to the present level of about
15,000. This new stabilized population
level reflects the relatively older community and the fact that the County offers
little opportunity other than farming as careers to younger people.
It
would be a serious oversight not to take note of the oil boom that occurred in Monroe County
at the turn of the 20th century. Oil had
been discovered in the late 1890s on both sides of the Ohio
River. This discovery
attracted developers, speculators, wildcatters and many others to Monroe County. Villages such as Lewisville, Graysville, Rinard Mills, and
elsewhere nearly burst at their seams as they tried to accommodate the sudden
burgeoning, albeit temporary, populations.
Oil brought jobs and money and unprecedented requirements for hotels,
restaurants, general stores, saw mills, saloons, livery stables and many other
supply and service oriented businesses.
Farmers became able to supplement their incomes by working in the oil
fields. Many of the young men entering
the work force for the first time had another option besides farming. All these factors combined to maintain the
higher population level through the decade of 1900. But as the oil boom fever passed and the
industry converted from exploration and drilling to production and maintenance,
most of which was done by the indigenous population, the County began to resume
much of its original familial flavor.
The difference was that the industry of the County had experienced a
change. Families who had settled as
farmers were now farmers and oil field workers.
Some of this vocational flavor can still be seen today in Monroe County. But, it is more likely to be seen by those
doing genealogy and peering into the past 100 years.
Use the
Back-arrow at the top of this webpage to return to the Previous Page.
|
CDs of important
Monroe County record books are now
available. Each page of dozens of Monroe County record books have been
photographed and made into CDs. For a
current list of available CDs click
here.
|
Last
modified 1 March 2011 by reh


react-form-generator
react-form-generator is a pure (state-less) React component, that generates complex forms from declarative metadata.
Contents
- Basic 1.1. Simple form - a minimal working API 1.2. Simple validation 1.3. Default values and initial form validation 1.4. Simple events routing
- Intermediate 2.1. Standard layouts 2.2. Complex validation 2.3. Event routing 2.4 On-blur validation 2.5 Dynamic forms 2.6 Dynamic validators 3 Advanced 3.1 Adding custom validator 3.2 Adding custom primitive 3.3 Adding custom layout
Basic
Simple form - a minimal working API.
Let's start from building the simple form:
To see our form, go to the tab "Result". In the tab "HTML", you can see some basic metadata, that Generator uses to render form.
window.meta = {
"fields": {
"field1": {
"renderer": "text",
"defaultValue": "test read-only value",
"isReadOnly": true
},
"field2": {
"renderer": "text"
}
},
"layout": {
"grid": {
"css": "container demo-form",
"rows": [{
"css": "row",
"cells": [{
"css": "col-xs-12 col-sm-12 col-md-10",
"content": [{
"renderer": "default",
"rendererSpecific": {
"fieldID": "field1",
"label": "Field #1:",
"css": {
"wrapper": "row",
"inner": "",
"label": "col-xs-2 col-sm-2 col-md-2",
"field": "col-xs-10 col-sm-10 col-md-10"
}
}
}]
}]
},
...]
}
}
}
At the top level, our metadata consists of two sections: fields
and
layout
. The fields
sections describes logical model of generated
form, and layout
section describes ... well, layout.
Logical model includes some essential information about each of fields: type (text, checkbox, etc.), visibility, readonly-ness, validation rules and other.
Layout describes form's presentation: how to draw each of fields in the page, where to drive field's label, field's errors of validation and so on.
Layout system is grid-based. If you are familiar with bootstrap's grid system, then you know, what I mean.
Simple validation
in progress
Default values and initial form validation
in progress
Simple events routing
in progress
Intermediate
in progress


?AMERICAN
GRASSES
FROM
THE
U.
S.
NATIONAL
HERBARIUM,
SMITHSONIAN
INSTITUTION
New
York
Botanical
Garden
ibcmmi
47.
Panicum
condensum
Nash
As
described
by
Hitchcock
&
Chase,
North
American
Species
of
Panicum
(Contr.
U.
S.
Nat.
Herb.
IS:
102.
1910)
Jamaica:
Black
River
Swamp,
near
the
town
of
Black
River.—Growing
in
water
0.5
meter
deep;
culms
erect.
Collector,
A.
S.
Hitchcock
October
22,1912
This
specimen
should
be
cited,
“Amer.
Gr.
Nat.
Herb.
no.
47.”
1604941
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


Orientation data have a spherical normal distribution when the
frequency of data decreases in all directions in the same manner, i.e.
statistically the data are distributed with circular symmetry. This
distribution is defined as
x0, y0, z0 = location of the mean. mean and mode have the same location. k is the concentration parameter.
The density function is:
(Fisher (1953)). Θ = angle of dip, α = azimuth.


Once downloaded, unpack the compressed folder to see the structure of (the compiled) TestMP. You'll see a structure like this:
testmp/
|-- bin/ # contains the scripts for startup & maintenance.
|-- conf/ # contains the configuration file.
|-- data/ # contains the database files.
|-- lib/ # contains the TestMP client libraries.
|-- log/ # contains the generated log files.
|-- webapp/ # contains the wars of WebConsole and DataStore.
|-- README.md
It's not forced but recommended that you set the TESTMP_HOME environment variable, of which the value is the path to the testmp/, if you hope to launch TestMP outside such directory.
Before running TestMP, you also need to have Java Runtime Environment (Version 6 or the above) installed, and make sure the JAVA_HOME is set correctly.
You will find most TestMP configurations in the conf/testmp.properties:
# The locale setting of webconsole and reports
locale=en_US
# The launching url of the datastore each for test case, data, and environment.
testCaseStoreUrl=http://localhost:10081/DataStore.do
testDataStoreUrl=http://localhost:10082/DataStore.do
testEnvStoreUrl=http://localhost:10083/DataStore.do
# The number of threads for running tasks.
executionThreadNum=10
# The timeout of task execution. 0 means no timeout.
executionTimeout=0
# The time gap (in seconds) between two refreshings of the task schedule.
scheduleRefreshingTimeGap=1800
# The maximum latency (in seconds) to trigger a scheduled task, or ignore it.
taskTriggerMaxLatency=600
# The default recipient list and subject of the test metrics report.
testMetricsReportRecipients=
testMetricsReportSubject=
# The default recipient list and subject of the test env status report.
envStatusReportRecipients=
envStatusReportSubject=
# The default SMTP settings to sending the report.
smtpSettingHost=
smtpSettingPort=25
smtpSettingUser=
smtpSettingPass=
smtpSettingSTARTTLS=true
Currently TestMP supports UI languages of US English (the default) and Chinese. Change the locale to zh_CN if you want to change the language to Chinese.
While most of the other settings can be left to their default values, testCaseStoreUrl, testDataStoreUrl, testEnvStoreUrl may need to be modified if the default listening ports have been occupied or they are launched remotely.
It's also possible to make these urls the same to share only one datastore. But in practice it will not be efficient and may cause confusion.
The settings of *ReportRecipients, *ReportSubject, and smtpSetting* are for your convenience. You can always input/modify them manually on the TestMP Web Console.
Now we're ready to startup the TestMP!
On Windows
cd TESTMP_HOME/bin
startup.bat [port]
On Linux / Mac
cd TESTMP_HOME/bin
./startup.sh [port]
The argument port is optional. If it is not given, the Web Console will defaultly use 10080 as the listening port. Then you may see the output like this:
launching testCaseStore on 10081
launching testDataStore on 10082
launching testEnvStore on 10083
launching TestMP web console on 10080
...
2013-07-04 14:26:55.634:INFO:oejs.AbstractConnector:Started SelectChannelConnector@<IP_ADDRESS>:10080
which meanse the datastores for test case, data, and environment, and the web console are successfully and fully launched.
Open your favorite browser, enter "http://thenameoripofyourhost:10080" in the address bar and click Go. You see the the welcome page on the TestMP Web Console? Congratulations!
By binding automation test cases to TestMP, the test case document can be instantly updated and shown on the TestMP Web Console each time the test cases run, besides several measures as follows.
Test Measures:
robustness - a score between [0.0 - 1.0] that measures the function quality covered by the test case.
robustness trend - the trend of the robustness change: always good, always bad, upgrading, or degrading.
average test time - the average time consumed by running a test case, which is evaluated from its run history.
test time volatility - a score reflecting the run stability of test case. The higher volatility, the lower stability.
And the test run will also be recorded in the run history (a queue of which the capacity can be configured) for future reference.
To bind automation test cases to TestMP, you need to put lib/*.jar on the class path of your automation test. If you use Maven to build your automation, an alternate way is to add the dependency below:
<dependency>
<groupId>org.testmp</groupId>
<artifactId>testsync</artifactId>
<version>1.0.1</version>
</dependency>
TestMP currently supports binding to TestNG or JUnit tests. For JUnit test, at least junit version 4.9 is required, and please make the test case or its parent inherited from TestSyncForJUnit; For TestNG test, no additional step is needed.
The two code snippets below show examples about how to add document to test case with Annotation @TestDoc:
TestNG
public class TestSyncForTestNGTest {
@Test(groups = { "P0", "sanity test" })
@TestDoc(
project = "project name",
name = "test case name",
description = "test case description")
public void testSomething() {
// test steps
}
}
JUnit
public class TestSyncForJUnitTest extends TestSyncForJUnit {
@TestDoc(
project = "project name",
name = "test case name",
description = "test case description",
groups = { "P0", "prod" })
@Test
public void testSomething() throws Exception {
// test steps
}
}
@TestDoc has four attributes, of which the meaning is intuitive, and all of them are not required:
project defaults to the simple class name of the test case.
name defaults to the the test method name.
description defaults to be empty.
groups defaults to be empty.
For TestNG, the groups attribute in its @Test annotation can be automatically found and merged to @TestDoc
Pass the JVM arguments below when running the test (according to how you run the automation):
testCaseStoreUrl - specify the datastore of test case.
updateTestDocument - whether to automatically update the test document.
updateTestMeasures - whether to automatically update the test measures.
runHistoryCapacity - the fixed length of the queue contains test run records.
Example:
-DupdateTestDocument=true -DupdateTestMeasures=true -DtestCaseStoreUrl=http://<IP_ADDRESS>:10081/DataStore.do
Only testCaseStoreUrl is required. You should refer its value to the same setting in the conf/testmp.properties, and may need to replace its host name with the remote accessing address if it's specified as "localhost".
updateTestDocument and updateTestMeasures default to false to avoid unintended updates, like when debuging the test case. runHistoryCapacity defaults to 30.
Then after the test run completes, you should be able to find the corresponding record on the TestMP WebConsole, like below:
Open the TestMP Web Console, and select the "Test Case" tab. By clicking the Filter button, and specifying the conditions, you can filter out the test cases that to be included in the test metrics report. Otherwise all the test cases shown on the page will be evaluated.
Clicking the Report button will generate the test metrics report waiting for signoff, which includes metrics for each project as follows:
Total Tests - the number of test cases selected from this project.
Groups (tags) - the number different groups involved in this test.
Robustness - the distribution of different quality robustness status that is evaluated from the test case's run history.
Effectiveness - reflecting whether the test is effective to find real bugs and minimize the number of false alarmings.
Efficiency - reflecting whether the test ran fast and stably enough.
You mark each project as "Accept" or "Refuse" based on the metrics, and click the Signoff button to get the final report. Now it's ready to send the report to the stakeholders.
Click the Send button at the bottom of the report, and you'll see the "Send Report" window. To save the effort of filling the Email and SMTP fields again and again, you can set the default input in conf/testmp.properties.
TestMP provides an object-oriented test data service. The test data is stored at the server side instead of hard-coded in the automation code or data files of XML or the other formats. Each data can have one or more tags to describe itself, which is useful when you want some data having certain tags.
You will use a group of APIs to access the datastore to find / get the data in need. And by giving the class type, the returned data can be automatically converted to an object of such type.
To access the datastore, you need to put the lib/datastore-client-*.jar and its dependencies on the class path of your automation test. If you use Maven to build your automation, an alternate way is to add the dependency below:
<dependency>
<groupId>org.testmp</groupId>
<artifactId>datastore-client</artifactId>
<version>1.0.0</version>
</dependency>
Then initialize a DataStoreClient instance as below:
DataStoreClient client = new DataStoreClient(testDataStoreUrl);
The testDataStoreUrl is required. You should refer its value to the same setting in the conf/testmp.properties, and may need to replace its host name with the remote accessing address if it's specified as "localhost".
Then all the data-related accessing methods wrapped in the client can be used through this instance, referring to the api doc.
For example, we have some data of types like below, which are expected to be used in the automation test.
class BaseOrder {
Customer customer;
Provider provider;
Integer productId;
BaseOrder(customer, provider, productId);
}
class SingleOrder extends BaseOrder {
Integer count;
String shipDate;
SingleOrder(customer, provider, productId, count, shipDate);
}
class MultiOrder extends BaseOrder {
Integer total;
Integer[] countPerOrder;
String[] shipDatePerOrder;
MultiOrder(customer, provider, productId, total, countPerOrder, shipDatePerOrder);
}
BaseOrder baseOrder = new BaseOrder(c1, p, 82814);
SingleOrder singleOrder1 = new SingleOrder(c1, p, 82814, 5, "2013-08-14");
SingleOrder singleOrder2 = new SingleOrder(c1, p, 82815, 2, "2013-08-14");
MultiOrder multiOrder = new MultiOrder(c1, p, 82815, 2, {3, 3}, {"2013-08-31", "2013-09-02"});
There are several ways to add these data to the datastore:
Open the "Test Data" tab of TestMP Web Console, and click the New button.
Input the data represented as JSON into the Properties field;
Input tags you want to attach to the data into the Tags field. E.g. SINGLE, MULTI, COUNT > 3, etc
Use the bin/load.sh (bin/load.bat for Windows) script.
Put all the data into a file of JSON format, like below:
[
{"tags":["BASE"],"data":{"customer":{/*obj c1*/}, "provider":{/* obj p */}, "productId":82814}},
{"tags":["SINGLE", "SNIPPET"],"data":{"count":5, "shipDate":"2013-08-14"}},
{"tags":["SINGLE"],"data":{"customer":{/*obj c1*/}, "provider":{/* obj p */}, "productId":82815, "count":2, "shipDate":"2013-08-14"}},
{"tags":["MULTI"],"data":{"customer":{/*obj c1*/}, "provider":{/* obj p */}, "productId":82815, "total":2, "countPerOrder":[3, 3], "shipDatePerOrder":["2013-08-31", "2013-09-02"]}}
]
Then run the command under TESTMP_HOME:
bin/load.sh testdata the_path_to_your_data_file
Wrap the data as a DataInfo<T>, and call the client API addData.
DataInfo<BaseOrder> d1 = new DataInfo<BaseOrder>();
d1.setTags(Arrays.asList(new String[]{"BASE"}));
d1.setData(baseOrder);
DataInfo<SingleOrder> d2 = new DataInfo<SingleOrder();
d3.setTags(Arrays.asList(new String[]{"SINGLE", "SNIPPET"}));
d3.setData(singleOrder1);
DataInfo<SingleOrder> d3 = new DataInfo<SingleOrder();
d3.setTags(Arrays.asList(new String[]{"SINGLE"}));
d3.setData(singleOrder2);
DataInfo<MultiOrder> d4 = new DataInfo<MultiOrder>();
d5.setTags(Arrays.asList(new String[]{"MULTI"}));
d5.setData(multiOrder);
List<Integer> IDs = client.addData(d1, d2, d3, d4);
This method is not intended to be used directly by the user, but can be leveraged in your scripts.
To find / get all the MULTI orders, you call the client APIs findDataByTag / getDataByTag:
List<Integer> dataIdList = client.findDataByTag("MULTI");
/* or */
List<DataInfo<MultiOrder>> dataInfoList = client.getDataByTag(MultiOrder.class, "MULTI");
for (DataInfo<MultiOrder> dataInfo : dataInfoList) {
MultiOrder order = dataInfo.getData();
System.out.println("MultiOrder: " + order);
}
To find / get all the SINGLE order of which the product ID is 82815, you call the client APIs findData / getData:
HashMap<String, Object> props = new HashMap<String, Object>();
props.put("provider", p);
List<Integer> dataIdList = client.findData(new String[]{"SINGLE"}, props);
/* or */
List<DataInfo<SingleOrder>> dataInfoList = client.getData(SingleOrder.class, new String[]{"SINGLE"}, props);
for (DataInfo<SingleOrder> dataInfo : dataInfoList) {
SingleOrder order = dataInfo.getData();
System.out.println("SingleOrder: " + order);
}
And you can get any data generally as a Map:
HashMap<String, Object> props = new HashMap<String, Object>();
props.put("provider", p);
List<Integer> dataIdList = client.findDataByProperty(props);
/* or */
List<DataInfo<Map>> dataInfoList = client.getDataByProperty(Map.class, props);
for (DataInfo<Map> dataInfo : dataInfoList) {
Map order = dataInfo.getData();
System.out.println("Order from p: " + order);
}
It's also possible to get data by ID or a range of IDs by calling client APIs getDataById and getDataByRange.
To reduce the duplicate input of data properties, TestMP allows the user to merge two or more data (snippets) together:
Integer baseOrderId = client.findDataByTag("BASE").get(0);
Integer singleOrderSnippetId = client.findDataByTag("SINGLE", "SNIPPET").get(0);
DataInfo<SingleOrder> dataInfo = client.mergeData(SingleOrder.class, baseOrderId, singleOrderSnippetId);
SingleOrder order = dataInfo.getData();
The update and deletion of test data can be done on the Web Console by double clicking the record or clicking the remove icon at the end of the record. Or you can use the tag and property replated client APIs, referring to the api doc.
Typically a test process involves several test environments at different stages including component (unit), integration, and production, and an environment builds on one or more real or virtual hosts.
You may have built or are going to create scripts to solve various environment-replated problems, like deploying packages, checking the build validity, configuring the environment, launching the automation, etc.
TestMP help you organize, schedule, visualize, and monitor these local / remote scripts, to facilitate the test environment & process management.
At first, there are some related terms:
Environment - a concept about the hardware / software context in which the test is performed.
Host - one or more devices that comprise the hardware part on which a test environment is built.
Task - a concept about a group of executions on selected hosts belonging to an environment, usually with a certain purpose.
Execution - a concept about a script / command running against a specified host, which will generate some results on the end.
Adding an environment to TestMP is intuitive: open the "Test Environment" tab and click the New button. Then input the environment's name and optionally give a url of the reference page on which the environment detail can be found.
Then you can define tasks for this environment: click the Tasks icon of this environment record; on the pop-up window, click the New button; Then input the task name, and optionally set the schedule if you hope it run repeatly and expectedly. The schedule syntax is unix-like but a little different.
By default, the schedule will take effect at most in 600 seconds. You can configure it in the conf/testmp.properties.
A task can have multiple executions at the same time: click the Executions icon of the task record to open the window. Each execution has the following fields:
on/off - enable or disable such execution.
Host - the host on which the execution is expected to run.
Working Directory - the current directory for the execution.
Command - the actual command to be executed.
RetCode - the returned code of the execution's last run.
Trace - the output of the last execution, which can be refreshed if the last run is still in progress.
When adding a new execution record, by default, its Host will be set to "localhost", the host on which TestMP is running. If you want it to be another, you'll need to firstly register that host.
Click the Hosts button on the "Test Environment" tab. For each added new host, the hostname, username, and password are required to setup the SSH connection.
For connection failures, you may want to make sure the host administrator has enabled the "password" authentication method for its SSH configuration.
Besides scheduling the tasks, you can launch them at any time by clicking the Run button of the task record.
By clicking the Report button on the "Test Environment" tab, you will get a summary report about the status of all the test environments shown in list, just like below:
and you can send it as email to the people who are interested in this.