Introduction
This guide summarizes the functionality of INCEpTION from the user’s perspective.
| It is assumed that you plan to test the INCEpTION standalone version or an already existing server installation of INCEpTION. For information on how to set up INCEpTION for a group of users on a server, please refer to the Administrator Guide. |
All materials, including this guide, are available via the INCEpTION homepage.
System Requirements
Browser |
Chrome or Safari |
Java Runtime Environment |
version 8 or higher |
Java Runtime Environment |
version 8 or higher |
Apache Tomcat |
version 8.5 or higher (Servlet API 3.1.0) |
MySQL Server |
version 5 or higher |
Workflow
The following image shows an exemplary workflow of an annotation project with INCEpTION.
First, the projects need to be set up. In more detail, this means that users are to be added, guidelines need to be provided, documents have to be uploaded, tagsets need to be defined and uploaded, etc. The process of setting up and administrating a project are explicitly described in Projects.
After the setup of a project, the users who were assigned with the task of annotation annotate the documents according to the guidelines. The task of annotation is further explained in Annotation. The work of the annotators is managed and controlled by monitoring. Here, the person in charge has to assign the workload. For example, in order to prevent redundant annotation, documents which are already annotated by several other annotators and need not be annotated by another person, can be blocked for others. The person in charge is also able to follow the progress of individual annotators. All these tasks are demonstrated in Monitoring in more detail. The person in charge should not only control the quantity, but also the quality of annotation by looking closer into the annotations of individual annotators. This can be done by logging in with the credentials of the annotators.
After at least two annotators have finished the annotation of the same document by clicking on Done, the curator can start his work. The curator compares the annotations and corrects them if needed. This task is further explained in Curation.
The document merged by the curator can be exported as soon as the curator clicked on Done for the document. The extraction of curated documents is also explained in Projects.
Installation
Run as Java application
All-in-one version which does not require a database server or servlet container to be set up.
|
By default, INCEpTION creates and uses an embedded database. It is not recommended to use the application in such a configuration for production use. Instead, please use a database server when using it in production. For more information, please refer to the Administrator Guide. |
Get the stand-alone JAR from the downloads page and start it simply with a double-click in your file manager. The application stores its data in a folder called .inception
(_dot inception) within your home folder,
Optional configuration
Alternatively, you can start INCEpTION from the command line, in particular if you wish to provide it with additional memory (here 1 GB) or if you want it to store its data in a different folder.
java -Xmx1g -Dinception.home=/my/inception/home -jar inception-app-standalone-XXX.jar
Mind to replace /my/inception/home
with path of a folder where the application can store its data.
By default the server starts on port 8080 and you can access it via a browser at http://localhost:8080
after you started it. You can add the parameter -Dserver.port=9999
at the end of the command line to start the server on port 9999 (or choose any other port).
INCEpTION uses Spring Boot. If you need to set additional parameters of the embedded webserver of the stand-alone version, please refer to the Spring Boot embedded container documentation.
Upgrade
This section describes how to upgrade the standalone version of INCEpTION using an embedded database. For further information on how to upgrade INCEpTION, in particular the WAR version when using a MySQL database or older versions of INCEpTION, please refer to the Administrator Guide.
Make a backup
Before any upgrade, make a copy of your INCEpTION home folder.
| If INCEpTION is configured to use an external database, e.g. MySQL, make a backup of this database as well. See the Administrator Guide for further information. |
Version 3.2.x to 3.3.0
-
When upgrading from 3.2.x or earlier to 3.3.0 or later, Automation projects break.
Version 2.3.1 to 3.0.0
-
The access permissions of the super admin have changed. Super admins can no longer access annotation, curation, and monitoring pages for all projects. They can only access them if they are annotators, admins, or curators in the respective projects. However, they still have full access to the project settings of all projects and can simply give themselves the missing permissions. After an upgrade to 3.0.0, all super admins who require project permissions on existing projects should assign these permissions to themselves. This also applies when importing old projects. For new projects, the creator of the project always starts with annotator, curator, and project admin permissions. If these permissions are not required by the project creator, they should be removed after project creation.
Logging in
Upon opening the application in the browser, the login screen opens. Please enter your credentials to proceed.
| When INCEpTION is started for the first time, a default user called admin with the password admin is automatically created. Be sure to change the passwort for this user after logging in (see User Management). |
Main Menu
After login, you will be presented with the overview screen. This screen can be reached at any time from within the GUI by clicking on the Home link in the left upper corner.
Here, you can navigate to one of the currently seven options:
-
Annotation - The page to perform annotations
-
Curation - Compare and merge annotations from multiple users (only for curators)
-
[sect_correction] - Correcting automatic annotation (under development)
-
[sect_automation] - Creating automatically annotated data
-
Projects - Set up or change annotation projects (only for administrators)
-
Monitoring - Allows you to see the projects, their progress and change documentstatus (only for administrators and curators)
-
User Management - Allows you to manage the rights of users
Please click on the functionality you need. The individual functionalities will be explained in further chapters.
Annotation
| This functionality is only available to annotators, project managers, and administrators. Annotators and project managers only see projects in which they hold the respective roles. |
Opening a Document
When navigating to the Annotation page, a dialogue opens that allows you to select a project, and a document within the project. If you want to open a different project or document later, click on Open to open the dialog.
Projects appear as folders, and contain the documents of the project. Double-click on a document to open it for annotation. Document names written in black show that the document has not been opened by the current user, blue font means that it has already been opened, whereas red font indicates that the document has already been marked as done.
Navigation
Sentence numbers on the left side of the annotation page show the exact sentence numbers in the document.
The arrow buttons first page, next page, previous page, last page, and go to page allow you to navigate accordingly. The Prev. and Next buttons in the Document frame allow you to go to the previous or next document on your project list. You can also use the following keyboard assignments in order to navigate only using your keyboard.
| Key | Action |
|---|---|
HOME |
jump to first sentence |
END |
jump to last sentence |
PAGE DOWN |
move to the next page, if not in the last page already |
PAGE UP |
move to previous page, if not already in the first page |
SHIFT+PAGE DOWN |
go to next document in project, if available |
SHIFT+PAGE UP |
go to previous document in project, if available |
A click on the Help button displays the Guidelines for the tool and The Annotator’s Guide to NER-Annotation. When you are finished with annotating or curating a document, please click on the Done button, so that the document may be further processed. If the button above the Done is a cross symbol, it means the documents have already been finished. If the symbol has a tick, it is still open.
Annotation of spans works by selecting the span, or double-clicking on a word. This activates the Actions-box on the right, where you can choose a layer. One can also type in the initial letters and chose the needed layer. After having chosen a layer, the drop-down menu inside the Features-box displays the features you can use during the annotation. The tag can be selected out of the drop-down menu inside the Features-box which contains the tags of the chosen layer.
To change or delete an annotation, double-click on the annotation (span or link annotations). The Actions-box is now activated. Changes and Deletions are possible via the respective buttons.
Link annotations (between POS tags) are created by selecting the starting POS-tag, then dragging the arrow to connect it to its target POS tag. All possible targets are highlighted.
Creating annotations
To create annotations, you have mainly two options:
-
select a span of text to create a span annotation
-
click on an existing span annotation and drag an arc to another span annotation
The definition of layers is covered in section Layers.
Spans
To create an annotation over a span of text, click with the mouse on the text and drag the mouse to create a selection. When you release the mouse, the selected span is activated and highlighted in orange. The annotation detail editor is updated to display the text you have currently selected and to offer a choice on which layer the annotation is to be created. As soon as a layer has been selected, it is automatically assigned to the selected span. To delete an annotation, select a span and click on Delete. To deactivate a selected span, click on Clear.
Depending on the layer behavior configuration, spans annotations can have any length, can overlap, can stack, can nest, and can cross sentence boundaries.
For example, for NE annotation, select the options as shown below (red check mark):
NE annotation can be chosen from a tagset and can span over several tokens within one sentence. Nested NE annotations are also possible (in the example below: "Frankfurter" in "Frankfurter FC").
Lemma annotation, as shown below, is freely selectable over a single token.
POS can be chosen over one token out of a tagset.
To create a zero-length annotation, hold SHIFT and click on the position where you wish to create the annotation. To avoid accidental creations of zero-length annotations, a simple single-click triggers no action by default. The lock to token behavior cancels the ability to create zero-length annotations.
A zero-width span between two tokens that are directly adjacent, e.g. the full stop at the
end of a sentence and the token before it (end. ) is always considered to be at the end of the
first token rather than at the beginning of the next token. So an annotation between d and .
in this example would rendered at the right side of end rather than at the left side of . .
|
To improve the speed of POS-annotation, select forward annotation in the Actions box on the left side of your screen. This allows you to select POS-tags via the keys of your keyboard. Pushing a key several times successively proposes every POS-tag starting with the respective letter inside the Features box. Pressing a key whose letter does not represent the beginning of any tag leads to the first tag in the tagset. Once a POS-tag has been selected, pushing space and Enter keys automatically assigns the POS-tag to the token in focus and the next token can be annotated as described. Note that the Enter key will not work for the Safari browser. Also the Forward annotation works only for span annotations with 1) tagset and 2) a layer with only one feature.
Co-reference annotation can be made over several tokens within one sentence. A single token sequence has several co-ref spans simultaneously.
Relations
To create a relation annotation, click on a span annotation and drag the mouse to another span annotation. While you drag, an arc is drawn. It is not possible to create arbitrary relation annotations. In order to create one, a corresponding relation layer needs to be defined between the source and target spans.
Depending on the layer behavior configuration, relation annotations can stack, can cross each other, and can cross sentence boundaries.
To create a relation from a span to itself, press the SHIFT key before starting to drag the mouse and hold it until you release the mouse button.
To abort the creation of an annotation, hold the CTRL key when you release the mouse button.
| Currently, there can be at most one relation layer per span layer. Relations between spans of different layers are not supported. |
| Not all arcs displayed in the annotation view are belonging to chain or relation layers. Some are induced by Link Features. |
When moving the mouse over an annotation with outgoing relations, the info popup includes the yield of the relations. This is the text transitively covered by the outgoing relations. This is useful e.g. in order to see all text governed the head of a particular dependency relation. The text may be abbreviated.
Chains
A chain layer includes both, span and relation annotations, into a single structural layer. Creating a span annotation in a chain layer basically creates a chain of length one. Creating a relation between two chain elements has different effects depending on whether the linked list behavior is enabled for the chain layer or not. To enable or disable the linked list behaviour, go to Layers in the Projects Settings mode. After choosing Coreference, linked list behaviour is displayed in the checkbox and can either be marked or unmarked.
To abort the creation of an annotation, hold CTRL when you release the mouse button.
| Linked List | Condition | Result |
|---|---|---|
disabled |
the two spans are already in the same chain |
nothing happens |
disabled |
the two spans are in different chains |
the two chains are merged |
enabled |
the two spans are already in the same chains |
the chain will be re-linked such that a chain link points from the source to the target span, potentially creating new chains in the process. |
enabled |
the two spans are in different chains |
the chains will be re-linked such that a chain link points from the source to the target span, merging the two chains and potentially creating new chains from the remaining prefix and suffix of the original chains. |
Primitive Features
Supported primitive features types are string, boolean, integer, and float. Boolean features are displayed as a checkbox that can either be marked or unmarked. Integer and float features are displayed using a number field. String features are displayed using a text field or - in case they have a tagset - using a combobox.
Link Features
Link features can be used to link one annotation to others. Before a link can be made, a slot with a role must be added. Enter the role label in the text field and press the add button to create the slot. Next, click on field in the newly created slot to arm it. The field’s color will change to indicate that it is armed. Now you can fill the slot by double-clicking on a span annotation. To remove a slot, arm it and then press the del button.
Choosing Layers
-
Choose one of the predefined layers in the Actions box on the right side of the screen.
The Actions box always shows the presently activated layer, the Features box shows the layer of the activated instance. Subsequently, the settings of the two boxes can differ. To change settings during the annotation process, cancel the previously selected layer by clicking on Clear in the Action box and choose a new layer.
Settings
Once the document is opened, a default of 5 sentences is loaded on the annotation page. The Settings button will allow you to specify the settings of the annotation layer.
Next to Annotation layers, you to select the annotation layer which is displayed during annotation. This is useful to reduce clutter if there are many annotation layers. Mind that hiding a layer which has relations attached to it will also hide the respective relations. E.g. if you disable POS, then no dependency relations will be visible anymore.
The Remember layer checkbox controls if the annotation layer selected in the Actions box. It will work as main layer during the annotation process. Only instances of this layer will be created, even if an annotation in another layer is selected. If necessary, it is possible to change active instances. Still, if a new instance is selected, the main layer is automatically activated.
The Sidebar size controls the width of the sidebar containing the annotation detail edtior and actions box. In particular on small screens, increasing this can be useful. The sidebar can be configured to take between 10% and 50% of the screen.
The Number of sentences controls how many sentences are visible in the annotation area. The more sentences are visible, the slower the user interface will react.
The Auto-scroll setting controls if the annotation view is centered on the sentence in which the last annotation was made. This can be useful to avoid manual navigation.
If Use the same color for all tags in a layer is chosen, annotations are colored per layer. If this option is off, then annotations are colored by their labels (all annotations with the same label also have the same color). Mind that there is a limited number of colors such that eventually colors will be reused.
Export
Annotations are always immediately persistent in the backend database. Thus, it is not necessary to save the annotations explicitly. Also, losing the connection through network issues or timeouts does not cause data loss. To obtain a local copy of the current document, click on export button. The following frame will appear:
Choose your preferred format. Please take note of the facts that the plain text format does not contain any annotations and that the files in the binary format need to be unpacked before further usage. For further information the supported formats, please consult the corresponding chapter Formats.
The document will be saved to your local disk, and can be re-imported via adding the document to a project by a project administrator. Please export your data periodically, at least when finishing a document or not continuing annotations for an extended period of time.
Recommendation
If you have configured one or more recommenders in the Project Settings, you will see recommendations like in the screenshot below. Clicking Reset in the Workflow area will remove all predictions, however it will also remove all hand-made annotations. Predictions made by a specific recommender can be deleted by removing the corresponding recommender in the Project Settings .
Active Learning
Active learning is a family of methods which seeks to optimize the learning rate of classification algorithms by intelligently soliciting labels from a human user for which the system only has low confidence. This means that recommenders can make better suggestions with less user interactions, allowing the user to perform quicker and more accurate annotations.
Once the recommenders are set in the Project Settings, and assuming the project contains documents for annotation and enough annotations for recommenders to generate recommendations, one can now switch to the annotation page. The recommendations should be shown above the tokens:
One can now click the active learning icon on the left side and the Active Learning sidebar shows up . One can now select the layer like POS layer for annotation and click Start for starting an active learning session:
The Active Learning sidebar will then start showing recommendations, one by one, according to the uncertainty sampling learning strategy. For every recommendation, it shows the related text, the suggested annotation, the confidence score and a delta that represents the difference between the given score and the closest score calculated for another suggestion made by the same recommender to that text. The recommendation is also highlighted in the central annotation editor.
One can now Accept, Reject or Skip this recommendation in the Active Learning sidebar:
The acceptance, rejection or skipping will be recorded and displayed in the learning history of the Active Learning sidebar. After a suggestion is accepted, the text is annotated with that recommended annotation. If the user rejects a suggestion, the recommendation is deleted. Finally, if the user skips a suggestion, that recommendation will continue being shown in the central annotation editor. Eventually, it could be shown again at the end of the active learning session, when there are no more undealt suggestions.
After the user takes an action on the current suggestion, the next recommendation will then show up in the sidebar, and the central annotation editor will jump to its corresponding location (which could sometimes be in another document).
The learning history contains a log of all the actions that were taken by the user regarding the suggestions given by the recommenders (acceptances, rejections and skippings). Any entry in the learning history can be deleted by clicking the corresponding trash bin icon. If this learning history is a valid acceptance, after the learning record is deleted, a confirmation dialogue box pops up to confirm whether to delete the annotation too.
The user may finish the current active learning session whenever he wants. If there are pending
suggestions, they might be shown in the next active learning session that he starts.
Curation
| This functionality is only available to project managers (managers of existing projects), curators, and administrators. Curators and project managers only see projects in which they hold the respective roles. |
When navigating to the Curation Page, the procedure for opening projects and documents is the same as in Annotation. The navigation within the document is also equivalent to Annotation.
No curatable documents |
Red |
Curatable documents |
Green |
New |
Black |
Annotation in progress |
Black |
Curation in progress |
Blue |
Curation finished |
Red |
In the left frame of the window, named Sentences, an overview of the chosen document is displayed. Sentences are represented by their number inside the document. Sentences containing a disagreement between annotators are colored in red. Click on a sentence in order to select it and to to edit it in the central part of the page.
The center part of the annotation page is divided into the Annotation pane which is a full-scale annotation editor and contains the final data from the curation step. Below it are multiple read-only panes containing the annotations from individual annotators. Clicking on an annotation in any of the annotator’s panes transfers the respective annotation to the Annotation pane.
When a document is opened for the first time in the curation page, the application analyzes agreements and disagreemens between annotators. All annotations on which all annotators agree are automatically copied to the Annotation pane. Any annotations on which the annotators disagree are skipped.
The annotator’s panes are color-coded according to their relation with the contents of the Annotation pane and according to the agreement status. If the annotations were the same, they are marked grey in the lower panes. If the annotations are disparate, the markings are dark blue in the lower frames. By default, they are not taken into the merged file. If you choose one annotation to be right by clicking on it, the chosen annotation will turn green in the frame of the corresponding annotator. Also, the annotation will say USE next to the classification.
Note that the Annotation pane is not color-coded. It uses whatever coloring strategy is configured in the Settings dialog.
The annotations which were not chosen to be in the merged file are marked dark blue. The annotations which were wrongly classified are marked in red.
Grey |
all annotators agree |
Blue |
disagreement requiring curation; annotators disagree and there is no corresponding annotation in the upper Annotation pane yet |
Green |
accepted; matches the corresponding annotation in the upper Annotation pane |
Red |
rejected; different to the corresponding annotation in the upper Annotation pane |
Monitoring
| This functionality is only available to project managers (managers of existing projects), curators, and administrators. Curators and project managers only see projects in which they hold the respective roles. |
As an administrator, you are able to observe the progress and document status of projects you are responsible for. Moreover, you are able to see the time of the last login of every user and observe the agreement between the annotators. After clicking on Monitoring in the main menu, the following page is displayed:
In the right frame, the overall progress of all projects is displayed. In the left frame one sees all projects, that one has an administrator role in. By clicking on one of the projects on the left, it may be selected and the following view is opened:
The percentual progress out of the workload for individual annotators may be viewed as well as the number of finished documents.
Below the document overview, a measuring for the inter-annotator-agreement can be selected by opening the Measure dropdown menu. Three different units of measurement are possible: Cohen’s kappa as implemented in DKPro Statistics, Fleiss' kappa and Krippendorff’s alpha. Below the Measure dropdown menu, an export format can be chosen. Currently, only CSV format is possible.
Above the Measure dropbdown menu, the Feature box allows the selection of layers for which an agreement shall be computed. Doubleclicking on a layer starts the computation of the agreement and an outline is shown to the left side of the box:
Document Status
The following table will explain the different symbols which explain the status of a document for a user and the described task.
| Symbol |
|---|
Meaning |
Annotation has not started yet |
Document not available to user |
Annotation is in progress |
Annotation is complete |
Curation is in progress |
You can also alter the document status of annotators. By clicking on the symbols you can change between Done and In Progress. You can also alter between New and Locked status. The second column of the document status frame displays the status of the curation.
As there is only one curator for one document, curation is not divided into individual curators.
Scrolling down, two further frames become visible. The left one, named Layer, allows you to chose a layer in which pairwise kappa agreement between annotators will be calculated.
Agreement
Agreement can be inspected on a per-feature basis and is calculated pair-wise between all annotators across all documents.
The first time a feature is selected for agreement inspection, it takes a moment to calculate the differences between the annotated documents. Switching between different features subsequently is much faster.
Agreement is calculated in two steps:
-
Generation of positions and configuration sets - all documents are scanned for annotations and annotations located at the same positions are collected in configuration sets. To determine if two annotations are at the same position, different approaches are used depending on the layer type. For a span layer, the begin and end offsets are used. For a relation layer, the begin and end offsets of the source and target annotation are used. Chains are currently not supported.
-
Calculation of pairwise agreement - based on the generated configuration sets, agreement is calculated. There are two cases where a configuration set may be omitted from the pairwise agreement calculation:
-
one of the users did not make an annotation at the position;
-
one or both of the users did not assign a value to the feature on which agreement is calculated at the position.
-
The lower part of the agreement matrix displays how many configuration sets were used to calculate agreement and how many were found in total. The upper part of the agreement matrix displays the pairwise Cohen’s kappa scores.
The agreement calculations considers an unset feature (with a null
value) to be equivalent to a
feature with the value of an empty string. Empty strings are considered valid labels and are not
excluded from agreement calculation.
Annotations for a given position are considered complete when both annotators have made an
annotation. Unless the agreement measure supports null
values (i.e. missing annotations),
incomplete annotations are implicitly excluded from the agreement calculation. If the agreement
measure does support incomplete annotations, then excluding them or not is the users' choice.
| Feature value annotator 1 | Feature value annotator 2 | Agreement | Complete |
|---|---|---|---|
|
|
yes |
yes |
|
|
no |
yes |
no annotation |
|
no |
no |
empty |
|
no |
yes |
empty |
empty |
yes |
yes |
null |
empty |
yes |
yes |
empty |
no annotation |
no |
no |
| Multiple interpretations in the form of stacked annotations are not supported in the agreement calculation! This also includes relations for which source or targets spans are stacked. |
Projects
| This functionality is only available to project managers (managers of existing projects), project creators (users with the ability to create new projects), and administrators. Project managers only see projects in which they hold the respective roles. Project creators only see projects in which they hold the project manager role. |
This is the place to specify/edit annotation projects. You can either select one of the existing projects for editing, or click Create Project to add a project.
Although correction and automation projects function similarly, the management differs after the creation of the document. For further description, look at the corresponding chapters [sect_automation] and [sect_correction].
Only admins are allowed to create projects. Click on Create Project to create a new project.
After doing so, a new pane is displayed, where you can name and describe your new project. It is also important to chose the kind of project you want to create. You have the choice between annotation, automation, and correction. Please do not forget to save.
After saving the details of the new project, it can be treated like any other already existing one. Also, a new pane with many options to organize the project is displayed.
To delete a project, click on it in the frame Details. The project details are displayed. Now, click on Delete.
The pane with the options to organize and edit a project, as described above, can also be reached by clicking on the desired project in the left frame.
By clicking on the tabs, you can now set up the chosen project.
Users
After clicking on Users, you are displayed a new pane in which you can add new users by clicking on the button Add User. After doing so, you get a list of users in the system which can be added to the project. By making a tick in front of the login, you can chose a new user.
Please do not forget to save after choosing all members of the project. Close the pane by clicking on Cancel. The rights of users created like this are that of an annotator. If you want to expand the user’s status, you can do so by clicking on the user and then on Change Permission. The following frame will pop up.
After ticking the wished permissions, click on Update. To remove a user, click on the login and then Remove User.
Documents
To add or delete documents, you have to click on the tab Documents in the project pane. Two frames will be displayed. In the first frame you can import new documents.
Choose a document by clicking on Choose Files. Please mind the format, which you have to choose above. Then click on Import Document. The imported documents can be seen in the frame below. To delete a document from the project, you have to click on it and then click on Delete in the right lower corner.
Layers
All annotations belong to an annotation layer. Each layer has a structural type that defines if it is a span, a relation, or a chain. It also defines how the annotations behave and what kind of features it carries.
Creating a custom layer
This section provides a short walkthrough on the creation of a custom layer. The following sections act as reference documentation providing additional details on each step. In the following example, we will create a custom layer called Sentiment with a feature called Polarity that can be negative, neutral, or positive.
-
Create the layer Sentiment
-
Go to the Layers tab in your project’s settings and press the Create layer button
-
Enter the name of the layer in Layer name: Sentiment
-
Choose the type of the layer: Span
-
Enable Allow multiple tokens because we want to mark sentiments on spans longer than a single token.
-
Press the Save layer button
-
-
Create the feature Polarity
-
Press the New feature button
-
Choose the type of the feature: uima.cas.String
-
Enter the name of the feature: Polarity
-
Press Save feature
-
-
Create the tagset Polarity values
-
Go to the Tagsets tab and press Create tagset
-
Enter the name of the tagset: Polarity values
-
Press Save tagset
-
Press Create tag, enter the name of the tag: negative, press Save tag
-
Repeat for neutra and positive
-
-
Assign the tagset Polarity values to the feature Polarity
-
Back in the Layers tab, select the layer: Sentiment and select the feature: Polarity
-
Set the tagset to Polarity values
-
Press Save feature
-
Now you have created your first custom layer.
Built-in layers
INCEpTION comes with a set of built-in layers that allow you to start annotating immediately. Also, many import/export formats only work with these layers as their semantics are known. For this reason, the ability to customize the behaviors of built-in layers is limited and it is not possible to extend them with custom features.
| Layer | Type | Enforced behaviors |
|---|---|---|
Chunk |
Span |
Lock to multiple tokens,
no stacking,
no sentence boundary crossing |
Coreference |
Chain |
(no enforced behaviors) |
Dependency |
Relation over POS, |
No stacking,
no sentence boundary crossing |
Lemma |
Span |
Locked to token offsets,
no stacking,
no sentence boundary crossing |
Named Entity |
Span |
(no enforced behaviors) |
Part of Speech (POS) |
Span |
Locked to token offsets,
no stacking,
no sentence boundary crossing |
The coloring of the layers signal the following:
| Color | Description |
|---|---|
green |
built-in annotation layer, enabled |
blue |
custom annotation layer, enabled |
red |
disabled annotation layer |
To create a custom layer, select Create Layer in the Layers frame. Then, the following frame will be displayed.
Properties
| Property | Description |
|---|---|
Layer name |
The name of the layer (obligatory) |
Description |
A description of the layer. This information will be shown in a tooltip when the mouse hovers over the layer name in the annotation detail editor panel. |
Enabled |
Whether the layer is enabled or not. Layers can currently not be deleted, but they can be disabled. |
| When a layer is first created, only ASCII characters are allowed for the layer name because the internal UIMA type name is derived from the initial layer name. After the layer has been created, the name can be changed arbitrarily. The internal UIMA type name will not be updated. The internal UIMA name is e.g. used when exporting data or in constraint rules. |
Technical Properties
In the frame Technical Properties, the user may select the type of annation that will be made with this layer: span, relation, or chain.
| Property | Description |
|---|---|
Internal name |
Internal UIMA type name |
Type |
The type of the layer (obligatory, see below) |
Attach to layer
(Relations) |
Determines which span layer a relation attaches to. Relations can only be created between annotations of this span layer. |
The layer type defines the structure of the layer. Three different types are supported: spans, relations, and chains.
| Type | Description | Example |
|---|---|---|
Span |
Continous segment of text delimited by a start and end character offset. The example shows two spans. |
|
Relation |
Binary relation between two spans visualized as an arc between spans. The example shows a relation between two spans. |
|
Chain |
Directed sequence of connected spans in which each span connects to the following one. The example shows a single chain consisting of three connected spans. |
For relation annotations the type of the spans which are to be connected can be chosen in the field Attach to layer. Here, only non-default layers are displayed. To create a relation, first the span annotation needs to be created.
| Currently for each span layer there can be at most one relation layer attaching to it. |
| It is currently not possible to create relations between spans in different layers. For example if you define span layers called Men and Women, it is impossible to define a relation layer Married to between the two. To work around this limitation, create a single span layer Person with a feature Gender instead. You can now set the feature Gender to Man or Woman and eventually define a relation layer Married to attaching to the Person layer. |
Behaviours
| Behavior | Description |
|---|---|
Read-only |
The layer may be viewed but not edited. |
Lock to token offsets
(span, chain) |
Annotation boundaries are forced to coincide with token boundaries. If the selection is smaller than a token, the annotation is expanded to the next larger token covering the selection. If the selection covers multiple tokens, the annotation is reduced to the first covered token. |
Allow multiple tokens
(span, chain) |
Like Lock to token offsets except that the annotation may cover multiple tokens. If this is enabled, then Lock to token offsets is automatically disabled. |
Allow stacking |
Allow multiple annotations in this layer to be made at exactly the same position. If this option is disabled, a new annotation made at the same location as an existing annotation will replace the existing annotation. |
Allow crossing sentence boundary
(chain) |
Allow annotations to cross sentence boundaries. |
Behave like a linked list |
Controls what happens when two chains are connected with each other. If this option is disabled, then the two entire chains will be merged into one large chain. Links between spans will be changed so that each span connects to the closest following span - no arc labels are displayed. If this option is enabled, then the chains will be split if necessary at the source and target points, reconnecting the spans such that exactly the newly created connection is made - arc labels are available. |
| In order to create sub-token annotations, both Lock to token offsets and Allow multiple tokens need to be disabled. |
Features
In this section, features and their properties can be configured.
| When a feature is first created, only ASCII characters are allowed for the feature name because the internal UIMA name is derived from the initial layer name. After the feature has been created, the name can be changed arbitrarily. The internal UIMA feature name will not be updated. The internal UIMA name is e.g. used when exporting data or in constraint rules. |
| Property | Description |
|---|---|
Internal name |
Internal UIMA feature name |
Type |
The type of the feature (obligatory, see below) |
Name |
The name of the feature (obligatory) |
Description |
A description that is shown when the mouse hovers over the feature name in the annotation detail editor panel. |
Enabled |
Features cannot be deleted, but they can be disabled |
Show |
Whether the feature value is shown in the annotation label. If this is disabled, the feature is only visible in the annotation detail editor panel. |
Remember |
Whether the annotation detail editor should carry values of this feature over when creating a new annotation of the same type. This can be useful when creating many annotations of the same type in a row. |
Tagset
(String) |
The tagset controlling the possible values for a string feature. |
The following feature types are supported.
| Type | Description |
|---|---|
uima.cas.String |
Textual feature that can optionally be controlled by a tagset. It is rendered as a text field or as a combobox if a tagset is defined. |
uima.cas.Boolean |
Boolean feature that can be true or false and is rendered as a checkbox. |
uima.cas.Integer |
Numeric feature for integer numbers. |
uima.cas.Float |
Numeric feature for decimal numbers. |
uima.tcas.Annotation
(Span layers) |
Link feature that can point to any arbitrary span annotation |
other span layers
(Span layers) |
Link feature that can point only to the selected span layer. |
| Please take care that when working with non-custom layers, they have to be ex- and imported, if you want to use the resulting files in e.g. correction projects. |
Tagsets
To administer the tagsets, click on the tab Tagsets in the project pane.
To administer one of the existing tagsets, select it by a click. Then, the tagset characteristics are displayed.
In the Frame Tagset details, you can change them, export a tagset, save the changes you made on it or delete it by clicking on Delete tagset. To change an individual tag, you select one in the list displayed in the frame Tags. You can then change its description or name or delete it by clicking Delete tag in Tag details. Please do not forget to save your changes by clicking on Save tag. To add a new tag, you have to click on Create tag in Tag details. Then you add the name and the description, which is optional. Again, do not forget to click Save tag or the new tag will not be created.
To create an own tagset, click on Create tagset and fill in the fields that will be displayed in the new frame. Only the first field is obligatory. Adding new tags works the same way as described for already existing tagsets. If you want to have a free annotation, as it could be used for lemma or meta information annotation, do not add any tags.
To export a tagset, choose the format of the export at the bottom of the frame and click Export tagset.
Constraints
To import a constraints file, go to Project and click on the particular project name. On the left side of the screen, a tab bar opens. Choose Constraints. You can now choose a constraint file by clicking on Choose Files. Then, click on Import. Upon import, the application checks if the constraints file is well formed. If they conform to the rules of writing constraints, the constraints are applied.
Guidelines
To add or delete guidelines, which will be accessible by users in the project, you have to select the tab Guidelines. Two new frames will be displayed. To upload guidelines, click on Choose files in the first frame – Add guideline document, select a file from your local disc and then click Import guidelines.
Uploaded guidelines are displayed in the second frame – Guideline documents. To delete a guideline document, click on it and then on Delete in the right lower corner of the frame.
Import
| This functionality is only available to administrators. |
Projects are associated with the accounts of users that act as project managers, annotators, or curators. When importing a previously exported project, you can choose to automatically generate missing users (enabled by default). If this option is disabled, projects still maintain their association to users by name. If the respective user accounts are created manually after the import, the users will start showing up in the projects.
| Generated users are disabled and have no password. They must be explicitly enabled and a password must be set before the users can log in again. |
Export
Two modes of exporting projects are supported:
-
Export the whole project for the purpose of creating a backup, of migrating it to a new INCEpTION version, of migrating to a different INCEpTION instance, or simply in order to re-import it as a duplicate copy.
-
Export curated documents for the purpose of getting an easy access to the final annotation results. If you do not have any curated documents in your project, this export option is not offered.
The format of the exported annotations is selected using the Format drop-down field. When AUTO is selected, the file format corresponds to the format of the source document. If there is no write support for the source format, the file is exported in the WebAnno TSV3 format instead.
| Some browsers automatically extract ZIP files into a folder after the download. Zipping this folder and trying to re-import it into the application will generally not work because the process introduces an additional folder level within the archive. The best option is to disable the automatic extraction in your browser. E.g. in Safari, go to Preferences → General and disable the setting Open "safe" files after downloading. |
When exporting a whole project, the structure of the exported ZIP file is as follows:
-
<project ID>.json - project metadata file
-
annotation
-
<source document name>
-
<user ID>.XXX - file representing the annotations for this user in the selected format.
-
-
-
annotation_ser
-
<source document name>
-
<user ID>.ser - serialized CAS file representing the annotations for this user
-
-
-
curation
-
<source document name>
-
CURATION_USER.XXX - file representing the state of curation in the selected format.
-
CORRECTION_USER.XXX - correction project: original document state, automation project automatically generated suggestions
-
-
-
curation_ser
-
<source document name>
-
CURATION_USER.ser - serialized UIMA CAS representing the state of curation
-
CORRECTION_USER.ser - correction project: original document state, automation project automatically generated suggestions
-
-
-
log
-
<project ID>.log - project log file
-
-
source - folder containing the original source files
The files under annotation and curation are provided for convenience only. They are
ignored upon import.
|
Currently, it is not possible to choose a specific format for bulk-exporting annotations. However, this mailing list post describes how DKPro Core can be used to transform the UIMA CAS formats into alternative formats.
Recommendation
Recommenders provide annotation support by predicting potential labels. These can be either accepted or rejected by the user. The recommenders learn from this interaction to further improve the quality of predictions.
After clicking on Recommendation, you are displayed a new pane in which you can add new recommenders by clicking on the button Create. You have to select the layer, feature and the classification tool. The recommenders are trained every time you create, update or delete an annotation; and evaluated every second time. During recommender evaluation the f-score of each recommender is calcultated, and recommenders with a lower f-score than their threshold will not be selected for the next training step. By making a tick on the checkbox next to Always active or leaving the threshold at 0, you can choose to skip f-score evaluation to ensure that the recommender runs at all times.
Please do not forget to save after configuring a recommender. Close the pane by clicking on Cancel. If you want to edit a recommender, you can do so by clicking on the recommender and save after editing.
To remove a recommender, click on the recommender and then on Delete. This will also remove all predictions by this recommender.
ClassificationTool types
-
String Matcher
-
This recommender projects the annotations already made to tokens with the same text.
-
-
Multi-Token Sequence Classifier (OpenNlp Name Finder)
-
This recommender makes predictions based on the Apache OpenNlp library.
-
-
Token Sequence Classifier (OpenNlp POS Tagger)
-
This recommender assigns part-of-speech tags, like NN(noun) or JJ(adjective) based on the Apache OpenNlp library. The tag set used by the english pos model is the Penn Treebank tag set. This recommender is specifically for the POS layer.
-
-
Named Entity Linker
-
A recommender specific to the
identifier
feature of the Named Entity layer. It predicts the 3 highest ranked candidate entities for each each token annotated as Named Entity.
-
Constraints
Constraints reorder the choice of tags based on the context of an annotation. For instance, for a given lemma, not all possible part-of-speech tags are sensible. Constraint rules can be set up to reorder the choice of part-of-speech tags such that the relevant tags are listed first. This speeds up the annotation process as the annotator can choose from the relevant tags more conveniently.
The choice of tags is not limited, only the order in which they are presented to the annotator. Thus, if the project manager has forgotten to set up a constraint or did possible not consider an oddball case, the annotator can still make a decision.
A constraint set consists of two components:
-
import statement
-
scopes
-
Import statements* are composed in the following way:
import <fully_qualified_name_of_layer> as <shortName>;
It is necessary to declare short names for all fully qualified names because only short names can be used when writing a constraint rule. Short names cannot contain any dots or special characters, only letters, numbers, and the underscore.
| If you are not sure what the fully qualified name of a layer is, you can look it up going to Layers in Project settings. Click on a particular layer and you can view the fully qualified name under Technical Properties. |
Scopes consist of a scope name and one or more rules that refer to a particular annotation layer and define restrictions for particular conditions. For example, it is possible to reorder the applicable tags for a POS layer, based on what kind of word the annotator is focusing on.
While scope names can be freely chosen, scope rules have a fixed structure. They consist of conditions and restrictions, separated by an arrow symbol (→
).
Conditions consist of a path and a value, separated by an equal sign (=
). Values always have to be embraced by double-quotes. Multiple conditions in the same rule are connected via the &
-operator, multiple restrictions in the same rule are connected via the |
-operator.
Typically a rule’s syntax is
<scopeName> {
<condition_set> -> <restriction_set>;
}
This leads to the following structure:
<scopeName> {
<rule_1>;
...
<rule_n>;
}
Both conditions and restrictions are composed of a path and a value. The latter is always enclosed in double quotes.
<path>="<value>"
A condition is a way of defining whether a particular situation in INCEpTION is based on annotation layers and features in it.
A condition set consists of one or more conditions. They are connected with logical AND as follows.
<condition> & <condition>
A restriction set defines a set of restrictions which can be applied if a particular condition set is evaluated to true. As multiple restrictions inside one rule are interpreted as conjunctions, they are separated by the |
-operator”.
<restriction> | <restriction>
A path is composed of one or more steps, separated by a dot. A step consists of a feature selector and a type selector.
Type selectors are only applicable while writing the condition part of a rule. They comprise a layer operator @
followed by the type (Lemma, POS, etc).
Feature selectors consist of a feature name, e.g.
pos.PosValue
Navigation across layers is possible via
@<shortLayerName>
Hereby all annotations of type <shortLayerName>
at the same position as the current context are found.
Conditional features
Constraints can be used to set up conditional features, that is features that only become available in the UI if another feature has a specific value. Let’s say that for example you want to annotate events and only causing events should additionally offer a polarity feature, while for caused events, there should be no way to select a polarity.
Sticking with the example of annotating events, conditional features can be set up as following:
-
Go to the Layer tab of the project settings
-
Create a new tagset called Event category and add the tags causing and caused
-
Create a new tagset called Event polarity and add the tags positive and negative
-
Create a new span layer called Event
-
Add a string feature called category and assign the tagset Event category
-
Save the changes to the category feature
-
Add a string feature called polarity and assign the tagset Event polarity
-
Enabled the checkbox Hide Un-constraint feature on the polarity feature
-
Save the changes to the polarity feature
-
Create a new text file called
constraints.txt
with the following contents .
import webanno.custom.Event as Event; Event { category="causing" -> polarity="positive" | polarity="negative"; }
-
Import
constraints.txt
in the tab Constraints in the project settings.
When you now annotate an Event in this project, then the polarity feature is only visible and editable if the category of the annotation is set to causing.
| It is important that both of the features have tagsets assigned - otherwise the conditional effect will not take place. |
Constraints for slot features
Constraints can be applied to the roles of slot features. This is useful, e.g. when annotating predicate/argument structures where specific predicates can only have certain arguments.
Consider having a span layer SemPred
resembling a semantic predicate and bearing a slot feature arguments
and a string feature senseId
. We want to restrict the possible argument roles based on the lemma associated with the predicate. The first rule in the following example restricts the senseId
depending on the value of a Lemma
annotation at the same position as the SemPred
annotation. The second rule then restricts the choice of roles for the arguments based on the senseId
.
Note that some role labels are marked with the flag (!)
. This is a special flag for slot features and indicates that slots with these role labels should be automatically displayed in the UI ready to be filled. This should be used for mandatory or common slots and saves time as the annotator does not have to manually create the slots before filling them.
SemPred {
// Rule 1
@Lemma.value = "ask" -> senseId = "Questioning" | senseId = "Request" | senseId = "XXX";
// .. other lemmata
// Rule 2
senseId = "Questioning" ->
// core roles
arguments.role = "Addressee" (!) | arguments.role = "Message" (!) | arguments.role = "Speaker" (!) |
// non-core roles
arguments.role = "Time" | arguments.role = "Iterations";
// .. other senses
}
Constraints language grammar
// Basic structure ---------------------------------------
<file> ::= <import>* | <scope>*
<scope> ::= <shortLayerName> "{" <ruleset> "}"
<ruleset> ::= <rule>*
<import> ::= "import" <qualifiedLayerName>
"as" <shortLayerName>
<rule> ::= <conds> "->" <restrictions> ";"
// Conditions --------------------------------------------
<conds> ::= <cond> | <cond> "&" <conds>
<cond> ::= <path> "=" <value>
<path> ::= <featureName> | <step> "." <path>
<step> ::= <featureName> | <layerSelector>
<layerSelector> ::= <layerOperator>? <shortLayerName>
<layerOperator> ::= "@" // select annotation in layer X
// Restrictions ------------------------------------------
<restrictions> ::= <restriction> |
<restriction> "|" <restrictions>
<restriction> ::= <restrictionPath> "=" <value>
( "(" <flags> ")" )
<restrictionPath> ::= <featureName> |
<restrictionPath> "." <featureName>
<flags> ::= "!" // core role
User Management
| This functionality is only available to administrators. |
After selecting this functionality, a frame which shows all users is displayed. By selecting a user, a frame is displayed on the right.
Now you may change his role or password, specify an e-mail address and dis- or enable his account by placing the tick.
| Disabling an account prevents the user from logging in. The user remains associated with any projects and remains visible in on the Monitoring page. |
To create a new user, click on Create in the left frame. This will display a similar frame as the one described in the last paragraph. Here you have to give a login-name to the new user.
In both cases, do not forget to save your changes by pressing the Save button.
-
User roles
Role |
Description |
ROLE_USER |
User. Required to log in to the application. Removal of this role from an account will prevent login even for users that additionally hold the ROLE_ADMIN! |
ROLE_ADMIN |
Administrator. Can manage users and has access to all other functionalities. |
ROLE_PROJECT_CREATOR |
Project creator. Can create new projects. |
ROLE_REMOTE |
Remote API access. Currently experimental and undocumented. Do not use. |
Formats
| Format | Read | Write | Custom Layers | Description |
|---|---|---|---|---|
yes |
yes |
no |
POS, chunks |
|
yes |
yes |
no |
Named entities |
|
yes |
yes |
no |
Lemma, POS, dependencies (basic) |
|
yes |
yes |
no |
Lemma, POS, dependencies (basic) |
|
yes |
yes |
no |
Lemma, POS, dependencies (basic & enhanced), surface form |
|
Plain text |
yes |
yes |
no |
No annotations |
yes |
no |
no |
Lemma, POS, dependencies (basic), coreference, named entities |
|
TEI CPH dialect |
yes |
no |
no |
|
WebAnno TSV 1 |
yes |
no |
no |
|
WebAnno TSV 2 |
yes |
no |
yes |
token, multiple token, and arc annotations supported. No chain annotation is supported. no sub-token annotation is supported |
yes |
yes |
yes |
||
yes |
yes |
yes |
UIMA Binary CAS |
|
yes |
yes |
yes |
UIMA XMI CAS |
WebAnno TSV 3.2 File format
In this section, we will discuss the WebAnno TSV (Tab Separated Value) file format version 3.2. The format is similar to the CoNNL file formats with specialized additions to the header and column representations. The file format inhabits a header and a body section. The header section present information about the different types of annotation layers and features used in the file. While importing the WebAnno TSV file, the specified headers should be first created in to the running WebAnno project. Otherwise, the importing of the file will not be possible.
The body section of the TSV file presents the document and all the associated annotations including sentence and token annotations.
Encoding and Offsets
TSV files are always encoded in UTF-8. However, the offsets used in the TSV file are based on UTF-16. This is important when using TSV files with texts containing e.g. Emojis or some modern non-latin Asian, Middle-eastern and African scripts.
WebAnno is implemented in Java. The Java platform internally uses a UTF-16 representation for text. For this reason, the offsets used in the TSV format currently represent offsets of the 16bit units in UTF-16 strings. This is important if your text contains Unicode characters that cannot be represented in 16bit and which thus require two 16bit units. For example a token represented by the Unicode character 😊 (U+1F60A) requires two 16bit units. Hence, the offset count increased by 2 for this character. So Unicode characters starting at U+10000 increase the offset count by 2.
#Text=I like it 😊 .
1-1 0-1 I _
1-2 2-6 like _
1-3 7-9 it _
1-4 10-12 😊 *
1-5 13-14 . _
| Since the character offsets are based on UTF-16 and the TSV file itself is encoded in UTF-8, first the text contained in the file needs to be transcoded from UTF-8 into UTF-16 before the offsets can be applied. The offsets cannot be used for random access to characters directly in the TSV file. |
File Header
WebAnno TSV 3.2 file starts with the following header marker
#FORMAT=WebAnno TSV 3.2
Layers are marked by the #
character followed by T_SP=
for span types (including slot features), T_CH=
for chain layers, and T_RL=
for relation layers. Every layer is written in new line, followed by the features in the layer.
If all layer type exists, first, all the span layers will be written, then the chain layer, and finally the relation layers.
Features are separated by the |
character and only the short name of the feature is provided.
#T_SP=webanno.custom.Pred|bestSense|lemmaMapped|senseId|senseMapped
Here the layer name is webanno.custom.Pred and the features are named bestSense, lemmaMapped, senseId, senseMapped.
Slot features start with a prefix ROLE_
followed by the name of the role and the link. The role feature name and the link feature name are separated by the _
character.
The target of the slot feature always follows the role/link name
#T_SP=webanno.custom.SemPred|ROLE_webanno.custom.SemPred:RoleSet_webanno.custom.SemPredRoleSetLink|uima.tcas.Annotation|aFrame
Here the name of the role is webanno.custom.SemPred:RoleSet and the name of the role link is webanno.custom.SemPredRoleSetLink and the target type is uima.tcas.Annotation.
Chain layers will have always two features, referenceType and referenceRelation.
#T_CH=de.tudarmstadt.ukp.dkpro.core.api.coref.type.CoreferenceLink|referenceType|referenceRelation
Relation layers will come at last in the list and the very last entry in the features will be the type of the base (governor or dependent) annotations with a prefix BT_
.
#T_RL=de.tudarmstadt.ukp.dkpro.core.api.syntax.type.dependency.Dependency|DependencyType|BT_de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.POS
Here, the relation type de.tudarmstadt.ukp.dkpro.core.api.syntax.type.dependency.Dependency
has a feature DependencyType
and the relation is between a base type of de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.POS
.
File Body / Annotations
In this section we discuss the different representations of texts and annotation in WebAnno TSV3format
Reserved Characters
Reserved characters have a special meaning in the TSV format and must be are escaped with the backslash (\
) character if they appear in text or feature values. Reserved characters are the following:
\,[,],|,_,->,;,\t,\n,*
The way that TSV is presently defined/implemented, it kind of considers → as a single
"character"… and it is also escaped as a single unit, i.e. → becomes -> . It is something to
be addressed in a future iteration of the format.
|
Sentence Representation
Sentence annotations are presented following the text marker #Text=
, before the token
annotations. All text given here is inside the sentence boundaries.
#Text=Bell , based in Los Angeles , makes and distributes electronic , computer and building products .
The text of an imported document is reconstructed from the sentence annotations. Additionally, the offset information of the sentence tokens are taken into account to determine whether padding needs to be added between sentences. The TSV format can presently not record text that occurs in between two sentences.
If a sentence spans multiple lines, the text is split at the line feed characters (ASCII 12) and
multiple #Text=
lines are generated. Note that carriage return characters (ASCII 13) are kept
as escaped characters (\r
).
#Text=Bell , based in Los Angeles , makes and distributes
#Text=electronic , computer and building products .
Token and Sub-token Annotations
Tokens represent a span of text within a sentence. Tokens cannot overlap, although then can be directly adjacent (i.e. without any whitespace between them). The start offset of the first character of the first token corresponds to the start of offset of the sentence.
Token annotation starts with a sentence-token
number marker followed by the begin-end offsets
and the token itself, separated by a TAB characters.
1-2 4-8 Haag
Here 1
indicates the sentence number, 2
indicates the token number (here, the second token
in the first sentence) and 4
is the begin offset of the token and 8
is the end offset of the
token while Haag
is the token.
Sub-token representations are affixed with a .
and a number starts from 1 to N.
1-3 9-14 plays
1-3.1 9-13 play
1-3.2 13-14 s
Here, the sub-token play
is indicated by sentence-token number 1-3.1
and the sub-token s
is
indicated by 1-3.2
.
While tokens may not overlap, sub-tokens may overlap.
1-3 9-14 plays
1-3.1 9-12 pla
1-3.2 11-14 ays
Span Annotations
For every features of a span Annotation, annotation value will be presented in the same row as the token/sub-token annotation, separated by a TAB character. If there is no annotation for the given span layer, a _
character is placed in the column. If the feature has no/null annotation or if the span layer do not have a feature at all, a *
character represents the annotation.
#T_SP=de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.POS|PosValue
#T_SP=webanno.custom.Sentiment|Category|Opinion
1-9 36-43 unhappy JJ abstract negative
Here, the first annotation at column 4, JJ
is avalue for a feature PosValue of the layer de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.POS. For the two features of the layer webanno.custom.Sentiment (Category and Opinion), the values abstract
and negative
are
presented at column 5 and 6 resp.
Disambiguation IDs
Within a single line, an annotation can be uniquely identified by its type and stacking index. However, across lines, annotation cannot be uniquely identified easily. Also, if the exact type of the referenced annotation is not known, an annotation cannot be uniquely identified. For this reason, disambiguation IDs are introduced in potentially problematic cases:
-
stacked annotations - if multiple annotations of the same type appear in the same line
-
multi-unit annotations - if an annotations spans multiple tokens or sub-tokens
-
un-typed slots - if a slot feature has the type
uima.tcas.Annotation
and may thus refer to any kind of target annotation.
The disambiguation ID is attached as a suffix [N]
to the annotation value. Stacked annotations are separated by |
character.
#T_SP=de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.POS|PosValue
#T_SP=de.tudarmstadt.ukp.dkpro.core.api.ner.type.NamedEntity|value
1-1 0-3 Ms. NNP PER[1]|PERpart[2]
1-2 4-8 Haag NNP PER[1]
Here, PER[1]
indicates that token 1-1
and 1-2
have the same annotation (multi-token annotations) while PERpart[2]
is the second (stacked) annotation on token 1-1
separated by |
character.
| On chain layers, the number in brackets is not a disambiguation ID but rather a chain ID! |
Slot features
Slot features and the target annotations are separated by TAB character (first the feature column then the target column follows). In the target column, the sentence-token
id is recorded where the feature is drawn.
Unlike other span layer features (which are separated by |
character), multiple annotations for a slot feature are separated by the ;
character.
 _ _ _ _
Here, for example, at token 2-2
, we have three slot annotations for feature Roles
that are seller
, goods
, and buyer
. The targets are on token 2-1 `, `2-3[4]
, and 2-6
respectively which are on annotations of the layer webanno.custom.Lu
which are bob
, clock
and john
.
Chain Annotations
In the Chain annotation, two columns (TAB separated) are used to represent the referenceType
and the referenceRelation
. A chain ID is attached to the referenceType
to distinguish to which of the chains the annotation belongs. The referenceRelation
of the chain is represented by the relation value followed by →
and followed by the CH-LINK
number where CH
is the chain number and LINK
is the link number (the order the chain).
 _ _
In this example, token 1-3
is marked as pr[1]
which indicates that the referenceType is pr
and it is part of the chain with the ID 1
. The relation label is coref
and with the CH-LINK
number 1-2
which means that it belongs to chain 1
and this is the second link in the chain.
Relation Annotations
Relation annotations comes to the last columns of the TSV file format. Just like the span annotations, every feature of the relation layers are represented in a separate TAB. Besides, one extra column (after all feature values) is used to write the token id from which token/sub-token this arc of a relation annotation is drawn.
#T_SP=de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.POS|PosValue
#T_RL=de.tudarmstadt.ukp.dkpro.core.api.syntax.type.dependency.Dependency|DependencyType|BT_de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.POS
1-1 0-3 Ms. NNP SUBJ 1-3
1-2 4-8 Haag NNP SBJ 1-3
1-3 9-14 plays VBD P|ROOT 1-5|1-3
1-4 15-22 Elianti NNP OBJ 1-3
1-5 23-24 . . _ _
In this example (say token 1-1
), column 4 (NNP
) is a value for the feature PosValue
of the de.tudarmstadt.ukp.dkpro.core.api.lexmorph.type.pos.POS layer. Column 5 (SUBJ
) records the value for the feature DependencyType of the de.tudarmstadt.ukp.dkpro.core.api.syntax.type.dependency.Dependency relation layer, where as column 6 (1-3
) shows from which governor (VBD
) the dependency arc is drawn.
For relations, a single disambiguation ID is not sufficient. If a relation is ambiguous, then
the source ID of the relation is followed by the source and target disambiguation ID separated
by an underscore (_
). If only one of the relation endpoints is ambiguous, then the other one
appears with the ID 0
. E.g. in the example below, the annotation on token 1-5
is ambiguous,
but the annotation on token 1-1
is not.
#FORMAT=WebAnno TSV 3.2
#T_SP=de.tudarmstadt.ukp.dkpro.core.api.ner.type.NamedEntity|value
#T_RL=webanno.custom.Relation|value|BT_de.tudarmstadt.ukp.dkpro.core.api.ner.type.NamedEntity
#Text=This is a test .
1-1 0-4 This * _ _
1-2 5-7 is _ _ _
1-3 8-9 a _ _ _
1-4 10-14 test _ _ _
1-5 15-16 . *[1]|*[2] * 1-1[0_1]
Troubleshooting
If the tool is kept open in the browser, but not used for a long period of time, you will have to log in again. For this, press the reload button of your browser.
If the tool does not react for more than 1 minute, please also reload and re-login.
We are collecting error reports to improve the tool. For this, the error must be reproducible: If you find a way how to produce the error, please open an issue and describe it.


C-like mode
C++ example
Objective-C example
Java example
Scala example
Kotlin mode
Ceylon mode
Simple mode that tries to handle C-like languages as well as it
can. Takes two configuration parameters: keywords
, an
object whose property names are the keywords in the language,
and useCPP
, which determines whether C preprocessor
directives are recognized.
MIME types defined: text/x-csrc
(C), text/x-c++src
(C++), text/x-java
(Java), text/x-csharp
(C#),
text/x-objectivec
(Objective-C),
text/x-scala
(Scala), text/x-vertex
x-shader/x-fragment
(shader programs),
text/x-squirrel
(Squirrel) and
text/x-ceylon
(Ceylon)


Boost Atom development with
A curated list of favorite programming packages.
Easily install packages to fully complement your favorite programming platform and development experience.
{{ bundle.description }}
Open a terminal and issue the following command for Atom's package manager to install:


$KMD Weekly TF
Look at volume over the last two weeks! More then when we were at All time highs. Komodo is going to go on an absolute tear soon, extremely strong Fundamental coin too but look that chart, just beautiful. Really does feel like 2017 today. $ALTS


A singleton object representing the device capabilities and specific events
- Source:
- device.js, line 8
Members
-
<static, readonly> accelerationX :Number
-
contains the g-force acceleration along the x-axis.
Type:
- Number
- Source:
- device.js, line 330
-
<static, readonly> accelerationY :Number
-
contains the g-force acceleration along the y-axis.
Type:
- Number
- Source:
- device.js, line 340
-
<static, readonly> accelerationZ :Number
-
contains the g-force acceleration along the z-axis.
Type:
- Number
- Source:
- device.js, line 350
-
<static, readonly> alpha :Number
-
Device orientation Alpha property. Gives angle based on the rotation of the phone around its z axis. The z-axis is perpendicular to the phone, facing out from the center of the screen.
Type:
- Number
- Source:
- device.js, line 380
-
<static, readonly> android :Boolean
-
equals to true if the device is an Android platform
Type:
- Boolean
- Source:
- device.js, line 272
-
<static, readonly> android2 :Boolean
-
equals to true if the device is an Android 2.x platform
Type:
- Boolean
- Source:
- device.js, line 281
-
<static, readonly> beta :Number
-
Device orientation Beta property. Gives angle on tilting a portrait held phone forward or backward
Type:
- Number
- Source:
- device.js, line 370
-
<static, readonly> BlackBerry :Boolean
-
equals to true if the device is a BlackBerry platform
Type:
- Boolean
- Source:
- device.js, line 299
-
<static, readonly> gamma :Number
-
Device orientation Gamma property. Gives angle on tilting a portrait held phone left or right
Type:
- Number
- Source:
- device.js, line 360
-
<static, readonly> hasAccelerometer :Boolean
-
Browser accelerometer capabilities
Type:
- Boolean
- Source:
- device.js, line 190
-
<static, readonly> hasDeviceOrientation :Boolean
-
Browser device orientation
Type:
- Boolean
- Source:
- device.js, line 199
-
<static, readonly> hasFullscreenSupport :Boolean
-
Browser full screen support
Type:
- Boolean
- Source:
- device.js, line 208
-
<static, readonly> hasPointerLockSupport :Boolean
-
Browser pointerlock api support
Type:
- Boolean
- Source:
- device.js, line 217
-
<static, readonly> iOS :Boolean
-
equals to true if the device is an iOS platform
Type:
- Boolean
- Source:
- device.js, line 263
-
<static, readonly> isFullscreen :Boolean
-
Returns true if the browser/device is in full screen mode.
Type:
- Boolean
- Source:
- device.js, line 686
-
<static, readonly> isMobile :Boolean
-
equals to true if a mobile device
(Android | iPhone | iPad | iPod | BlackBerry | Windows Phone | Kindle)Type:
- Boolean
- Source:
- device.js, line 253
-
<static, readonly> Kindle :Boolean
-
equals to true if the device is a Kindle platform
Type:
- Boolean
- Source:
- device.js, line 308
-
<static, readonly> language :String
-
a string representing the preferred language of the user, usually the language of the browser UI. (will default to "en" if the information is not available)
Type:
- String
- Source:
- device.js, line 391
- See:
-
<static, readonly> localStorage :Boolean
-
Browser Local Storage capabilities
(this flag will be set to false if cookies are blocked)Type:
- Boolean
- Source:
- device.js, line 180
-
<static, readonly> maxTouchPoints :Number
-
Return the maximum number of touch contacts of current device.
Type:
- Number
- Source:
- device.js, line 235
-
<static, readonly> nativeBase64 :Boolean
-
Browser Base64 decoding capability
Type:
- Boolean
- Source:
- device.js, line 226
-
<static, readonly> orientation :Number
-
The device current orientation status.
0 : default orientation
90 : 90 degrees clockwise from default
-90 : 90 degrees anti-clockwise from default
180 : 180 degrees from defaultType:
- Number
- Source:
- device.js, line 317
-
<static, readonly> sound :Boolean
-
Returns true if the browser/device has audio capabilities.
Type:
- Boolean
- Source:
- device.js, line 707
-
<static, readonly> touch :Boolean
-
Touch capabilities
Type:
- Boolean
- Source:
- device.js, line 244
-
<static, readonly> ua :Boolean
-
Browser User Agent
Type:
- Boolean
- Source:
- device.js, line 169
-
<static, readonly> wp :Boolean
-
equals to true if the device is a Windows Phone platform
Type:
- Boolean
- Source:
- device.js, line 290
Methods
-
<static> exitFullscreen()
-
Exit fullscreen mode. Requires fullscreen support from the browser/device.
- Source:
- device.js, line 433
-
<static> getPixelRatio()
-
return the device pixel ratio
- Source:
- device.js, line 445
-
<static> getStorage(type)
-
return the device storage
Parameters:
Name Type Argument Default Description type
String <optional>
"local" - Source:
- device.js, line 467
Returns:
me.save object -
<static> requestFullscreen(element)
-
Triggers a fullscreen request. Requires fullscreen support from the browser/device.
Parameters:
Name Type Argument Default Description element
Object <optional>
default canvas object the element to be set in full-screen mode. - Source:
- device.js, line 403
Example
// add a keyboard shortcut to toggle Fullscreen mode on/off me.input.bindKey(me.input.KEY.F, "toggleFullscreen"); me.event.subscribe(me.event.KEYDOWN, function (action, keyCode, edge) { // toggle fullscreen on/off if (action === "toggleFullscreen") { if (!me.device.isFullscreen) { me.device.requestFullscreen(); } else { me.device.exitFullscreen(); } } });
-
<static> turnOffPointerLock()
-
Exits pointer lock. Works on supported devices & browsers
- Source:
- device.js, line 558
-
<static> turnOnPointerLock()
-
Enters pointer lock, requesting it from the user first. Works on supported devices & browsers Must be called in a click event or an event that requires user interaction. If you need to run handle events for errors or change of the pointer lock, see below.
- Source:
- device.js, line 515
Example
document.addEventListener("pointerlockchange", pointerlockchange, false); document.addEventListener("mozpointerlockchange", pointerlockchange, false); document.addEventListener("webkitpointerlockchange", pointerlockchange, false); document.addEventListener("pointerlockerror", pointerlockerror, false); document.addEventListener("mozpointerlockerror", pointerlockerror, false); document.addEventListener("webkitpointerlockerror", pointerlockerror, false);
-
<static> unwatchAccelerometer()
-
unwatch Accelerometor event
- Source:
- device.js, line 604
-
<static> unwatchDeviceOrientation()
-
unwatch Device orientation event
- Source:
- device.js, line 642
-
<static> vibrate(pattern)
-
the vibrate method pulses the vibration hardware on the device,
If the device doesn't support vibration, this method has no effect.
If a vibration pattern is already in progress when this method is called, the previous pattern is halted and the new one begins instead.Parameters:
Name Type Description pattern
Number | Array.<Number> pattern of vibration and pause intervals - Source:
- device.js, line 656
Example
// vibrate for 1000 ms navigator.vibrate(1000); // or alternatively navigator.vibrate([1000]); // vibrate for 50 ms, be still for 100 ms, and then vibrate for 150 ms: navigator.vibrate([50, 100, 150]); // cancel any existing vibrations navigator.vibrate(0);
-
<static> watchAccelerometer() → {Boolean}
-
watch Accelerator event
- Source:
- device.js, line 570
Returns:
false if not supported by the device- Type
- Boolean
-
<static> watchDeviceOrientation() → {Boolean}
-
watch the device orientation event
- Source:
- device.js, line 626
Returns:
false if not supported by the device- Type
- Boolean


RayCollide()
语法
Result = RayCollide(x, y, z, DestinationX, DestinationY, DestinationZ)概要
Casts a ray between the first point and the second point, and checks if an entity is colliding the ray. This function relies on the physic engine, which needs to be activated with EnableWorldPhysics() before using this command. Only entities with bodies will react to the ray. To get the position about the collide point, use PickX(), PickY() and PickZ(). The normals values at the collide point are available with NormalX(), NormalY() and NormalZ().
参数
x, y, z The first point coordinates, in world unit. DestinationX, DestinationY, DestinationZ The second point coordinates, in world unit.
返回值
Returns the entity number if the ray has collided with one, or -1 if no collision has occurred.
参阅
NormalX(), NormalY(), NormalZ()
已支持操作系统
所有


新聞原文轉自 : www.zscaler.com
In our ongoing effort to hunt malware, the Zscaler ThreatLabz team came across a highly suspicious app on the U.S. Google Play Store that has been downloaded between one and five million times since 2014. Upon analysis, we found it to be an SMS-based Spyware, which can steal and relay a victim's location to an attacker in real time.
在我們努力打擊惡意軟體的過程中， Zscaler ThreatLabz 的團隊，在美國發現了一個高度可疑的應用程式。自從 2014 以來，在 Google Play Store 有著一百五十萬的下載量。在我們分析這個軟體後，我們找到關於 SMS 的間諜程式，它可以即時偷或轉發受害者的位址給攻擊者。
The app, which claimed to give users access to the latest Android software updates, was being used to spy on a user’s exact geolocation, which could have been used for any number of malicious reasons.
這個宣稱能讓使用者更新 Android 最新版本的 App，可能已多次被出於惡意的理由利用來監控用戶的實際位置。
Google has removed the app from the store since Zscaler reported it to the Google security team.
Google 安全團隊在收到 Zscaler 的回報後，已經移除了這應用程式。
Basic Details:
Name : System Update
Downloads : 1,000,000 - 5,000,000
關於此程式細節：
名稱 : System Update
下載量 : 1,000,000 - 5,000,000
The app portrays itself as a “System Update.” After reading the app reviews, it became clear that several users were misled by the app, thinking that it would provide them with latest Android release.
因為此應用程式自己叫做 “System Update”，在看過介紹後，讓幾位使用者誤會是 Android 放出的版本。
Many users were unhappy with the app and conveyed their concerns.
很多使用者對此應用程式覺得不高興。
In addition to the reviews, there were other indicators that raised our suspicions. They included:
- The Google Play Store page for this particular app was showing blank screenshots, which is not common.
- There was no proper description for the app.
看到這些評論後，有一些評論引起我們懷疑，例如：
- 當打開 Google Play Store 的頁面後，顯示出空白的截圖，這不正常。
- 沒有正確描述這個應用程式
Techincal Details:
技術細節
The app portrays itself as a System Update and its description on the Google Play Store states, “This application updates and enables special location features,” but there is no mention of its remote spying capabilities.
這應用程式說自己是系統更新跟在 Google Play Sotre 的頁面介紹自己說 “這應用程式的更新跟開啟特別關於位置的功能”，但是這邊沒有寫到關於遠端 spying 的功能
As soon as the user tries to start up the app, it abruptly quits with the message: "Unfortunately, Update Service has stopped." At this point, the app has the ability to hide itself from the main screen.
在一些使用者嘗試開啟此應用程式後，有會被閃退，並且跳出視窗說 “更新程式失敗”。在這頁面中，這應用程式可以把自己藏在主要的桌面中。
Despite the error message, the spyware sets up an Android service and broadcast receiver:
- MyLocationService: Fetches last known location
- IncomingSMS (Receiver): Scans for incoming SMS messages
儘管有這錯誤訊息中，但這間諜軟體仍可以設定啟動 Android 的服務跟 broadcast receiver 服務：
- MyLocationService : 可以知道目前位置
- IncomingSMS (Receiver)：掃描進來的 SMS 訊息（簡訊）
MyLocationService
Main task of MyLocationService is to fetch the user’s last known location and set it up in Shared Preferences. Shared Preferences is one of the many ways Android stores an application’s data.
MyLocationService
MyLocationService 這 task 主要是讓 user 拿到目前的位置跟設定 Shared Preferences 。 Shared Preferences 其中一種取得 Android stores 裡資料的方法。
Incoming SMS
Incoming SMS
This piece of code is designed to look for incoming SMS messages with a particular syntax, in which the message should be more than 23 characters and should contain “vova-” in the SMS body. It also scans for a message containing “get faq.”
這部分的 code 會去掃進來的 SMS 訊息看看有沒有特殊語法，當內容大於 23 個字元的內容，內容應該會 “vova-” 在 SMS 訊息裡面，它也會去會掃內容裡面有沒有 “get faq.”
Once the spyware has been installed on the victim’s device, an attacker can send an SMS message “get faq” and this spyware will respond with a set of commands.
一但間諜軟體安裝在受害者的機器，攻擊者就可以傳送簡訊 “get faq”，間諜軟體就會回應這個命令
'User Manual' in the above screenshot contains the text as shown below :
'User Manual' 在上述所說掃描內容，實際狀況如下：
As seen in instructions above, an attacker could also set a location alert when victim’s battery is running low. The attacker could set a password for this spyware, but it can also be accessed with the default password (default password: Vova).
在上述的說明中，攻擊者可以設定當受害者電量太低時，傳送警報位置。攻擊者也可以設定密碼在這間諜軟體中，但是它也可用預設密碼。（預設密碼為： Vova）
Once a phone number and password are set, the spyware starts a process designed to send the device location to attacker. This functionality is shown in screenshot below:
一但手機號跟密碼被設定，間諜軟體可以開始傳送一個設備位置給攻擊者。這功能是下面這段截圖
The SMS-based behavior and exception generation at the initial stage of startup can be the main reason why none of the antivirus engines on VirusTotal detected this app at the time of analysis.
此動作跟異常行為由於是基於 SMS，在一開始啟動與初始化時，例如 VirusTotal 等病毒分析器，會無法判斷出此有問題的軟體。
This app has evaded Google's detection for a long time, which is apparent because we can see that the app was last updated in December 2014. But this time lapse does not mean the app or its functionality are dead. We came across a Remote Access Trojan named "DroidJack," which uses the exact code from the app in this analysis for stealing a victim's location.
此應用程式已經規避 Google 檢測已經很長一段時間了，很顯然的，這因為我們可以看到此應用程式最後的上傳時間是 2014 年十二月。但是這段時間並不代表這應用程式已經失效。我們遇到一個叫 "DoridJack" 的遠端木馬，它就用這個段 code ，來分析受害者的位置。
Screenshot below shows the exact code snippet found in DroidJack :
關於 DroidJack 分析的片段：
Conclusion
結論
There are many apps on the Google Play Store that act as a spyware; for example, those that spy on the SMS messages of one’s spouse or fetch the location of children for concerned parents. But those apps explicitly state their purpose, which is not the case with the app we analyzed for this report. It portrayed itself as a system update, misleading users into thinking they were downloading an Android System Update.
在 Google Play Store 上，很多應用程式可以當成 Spyware ; 例如監視配偶簡訊或父母取得小孩的位置。但是這些應用程式應該明確表示功能，而不是像在此篇分析報告中。它們把自己介紹為 System Update，讓使用者誤會確實為自己安裝系統更新。
Zscaler ThreatLabZ conducts ongoing research into new and evolving mobile malware to protect Zscaler customers worldwide.
Zscaler ThreatLabZ 團隊正在不斷研究關於 mobile 病毒不斷發展的新技術，來保護全球 Zscaler 客戶的安全。


Project Name: giFT
Submission Date: December 1, 2001
Last Update: March 3, 2002
Maintainer: eelco
The easiest way to get the latest version of giFT/OpenFT is through CVS. Actually, at the moment, there is no other way :)
Go to the directory you want to download the sources to (/usr/src or ~/cvs?) and do (the $ is used to indicate this is a shell command):
$ cvs -z3 -d:pserver:anonymous@cvs.gift.sf.net:/cvsroot/gift co giFT
This will download everything you need...
To update, enter the directory where all the giFT sources are (/usr/src/giFT or ~/cvs/giFT?) and run:
$ cvs update -d
All changed files will be updated. It's important you keep your version up to date, since giFT is still in development, and things tend to change rapidly.
To install giFT/OpenFT enter the newly created giFT directory and do:
$ ./autogen.sh
This will generate and execute a 'configure' file... if everything goes well (if not, see 2.1), you can do:
$ su -c 'make install' (if you're not root, or) $ make install
... to compile and install giFT, the OpenFT library and the GTK GUI giFT-fe
Not everybody wants to install the GTK client, for example if you want to run giFT on a server. If you do have the GTK libs, you can use './autogen.sh --disable-gtk-client'. But if you don't got those libs you need to copy the file 'm4/gtk.m4' to 'acinclude.m4' first.
Lots of people seem to have problems running ./autogen.sh. You need a few programs (and certain versions!) installed to run it successfully. These programs are:
If things still don't work (for example you get 'AM' errors) you could also try to download a recent (mostly most recent) version of giFT at http://wideview.33lc0.net/gift/. Grab the latest giFT-YYMMDD.tgz (year, month, day) file. I included my 'Makefile's (generated on a Debian 3.0 system). The(/my) defaults will probably work for most users.
Running giFT is easy:
$ giFT
That'll start the daemon and load all protocols (currently only OpenFT). The daemon will report all kind of status things, but you'll probably only need them when giFT crashes :)
You can also check out some info about the nodes you're connected to and files you share with your browser at localhost:1216, or another port you configured to be your nodepage.
To search for and download files you'll (probably) need a graphical user interface (GUI). At the moment, there are a few available. If you want to write your own, please check the Interface Protocol Documentation.
This used to be a large part of this guide, but then giFT-setup came, saw and won. It handles the configuration for giFT, OpenFT, giFT-fe and you can/must even configure your 'share paths' with it.
Before you run giFT you should configure it. You can do this by using our nifty 'giFT-setup' script. The program is self explanatory, so just run it after installing giFT:
$ giFT-setup
Ah yeah, the ever popular 'nodes' file... Since a lot of questions in our IRC channel were asked because of this file, it gets a special section here.
Information about OpenFT nodes will be saved in the file ~/.giFT/OpenFT/nodes. This information is vital if you want to connect to the network, so for now a default node is hardcoded in the giFT source.
If you have problems connection to OpenFT, please try to remove the nodes file and restart giFT. A new file (with the default node(s)) will be made. When the default node is down, there probably is a reason for that, so try again later.
But if you can't stand it, and just want to connect, you can always drop in our IRC channel and ask (politely!) for a nodes file.
A complete new section for all things I don't know where to fit :-)
Since OpenFT works with HTTP, it also generates an Apache style 'access.log'. With some tweaking you can make beautiful overviews and graphs with your favorite log analyser / statistics generator. You can find the file in your .giFT directory: ~/.giFT/access.log.


The Hydraulic and Water Resources Engineering Division functions within the Department
of Civil Engineering of the University of Moratuwa. The staff
are actively involved in teaching and research at the undergraduate
and postgraduate levels and also provide consultancy services
to the industry. The Division comprises a Water Resources Group
and a Coastal Engineering group with many staff having obtained postgraduate
qualifications from leading universities abroad.
Phone:
+94-11-265-0567
Fax:
+94-11-264-5422
e-mail:
sslh@civil.mrt.ac.lk


Home
About
Kanban v1.0
Kanban
Kanban is the simplest method of agile
Add a User Story
Backlog
Guestbook
{{greeter.greeting()}}


Wales keep automatic qualification dream alive with victory in Azerbaijan
First-half goals from Kieffer Moore and Harry Wilson secured a comfortable victory.
Wales kept alive their hopes of automatic Euro 2020 qualification with a comfortable 2-0 victory over Azerbaijan in Baku.
First-half goals from Kieffer Moore and Harry Wilson gave Wales a first away win in 13 months on what was a satisfying night for manager Ryan Giggs.
Wigan striker Moore put Wales into a 10th-minute lead – his second goal in four appearances – before Wilson ended a 13-month wait to get on an international scoresheet with the simplest of headers.
The Wales defence was seldom troubled and key men Gareth Bale and Aaron Ramsey both had game time after injury and before Tuesday’s final qualifier against Hungary.
Wales had been guaranteed the cushion of a play-off spot in March by Sweden winning in Romania on Friday.
But Wales had their sights set on automatic qualification – and almost certainly needed closing wins against Azerbaijan and Hungary to do so.
Wales were boosted by the availability of Bale, the Real Madrid forward declaring himself fit after over a month out with a calf problem.
But Giggs did not risk Ramsey from the start, and chose Ethan Ampadu and the inexperienced Joe Morrell – who impressed in replacing the suspended Joe Allen – to protect the back four.
Azerbaijan had not won at home for 12 months and were without a victory in European qualifying.
But the Azeri had drawn with Croatia at home in September and Giggs had highlighted the danger of underestimating opponents ranked 111th in the world – 87 places below Wales.
Azerbaijan goalkeeper Salahat Agayev saved from Wilson and Morrell in the opening nine minutes as Wales started at a good tempo and on the front foot.
But Agayev was helpless when Wilson sent his corner to the far post and the 6ft 5ins Moore towered above two defenders on the line to head home from close range.
Moore almost prospered further as Agayev sprinted from his line to save with his legs and then held a header after Bale had beaten two defenders with disdain.
Azerbaijan’s attacking raids were rare and done without conviction, Wayne Hennessey comfortably holding efforts from Gara Garayev and Araz Abdullayev.
Wales doubled their lead after 34 minutes when Daniel James was fed down the left and the Manchester United winger cut inside and on to his right foot.
James’ stinging effort hit both crossbar and post before bouncing up for Wilson to slot the rebound, his first international goal since an October 2018 winner against the Republic of Ireland in Dublin.
Azerbaijan wanted a penalty when Dmitri Nazarov’s struck Tom Lockyer on the arm five minutes before the interval.
But German referee Deniz Aytekin was not interested and booked Nazarov for dissent.
It was a cold night in Baku and Bale came out for the start of the second half wearing a pair of gloves.
The question was how long Giggs would keep his talisman on the pitch due to the close proximity of the Hungary showdown and Bale being a booking away from missing that game.
Wilson went close again and Wales had the ball in the net again five minutes after the restart, but Lockyer’s header was disallowed for an Ethan Ampadu push on Agayev.
Bale was replaced just before the hour with Ramsey making a welcome return as Wales saw the game out with ease.


| Class and Description |
|---|
| AnnotatedCommit
An annotated commit contains information about how it was looked up, which may be useful for
functions like merge or rebase to provide context to the operation.
|
| Blame |
| Blame.FlagT |
| Blame.Hunk
Structure that represents a blame hunk.
|
| Blame.Options |
| Blob |
| Branch.BranchType |
| Branch.Iterator |
| Buf |
| CAutoCloseable
Base bridge that manages raw c pointer, use this when resources carried in an object are shorter
than the object itself
|
| CAutoReleasable
Base class that auto release native pointers, use this when the pointer carried in an object has
the same life cycle as the object.
|
| Cert |
| Checkout.NotifyCb |
| Checkout.NotifyT |
| Checkout.Options
Checkout options structure
|
| Checkout.PerfdataCb |
| Checkout.ProcessCb |
| Checkout.StrategyT |
| Commit |
| Config
Memory representation of a set of config files
|
| Config.ConfigLevel |
| Config.Entry |
| Config.ForeachCb |
| Cred |
| Diff |
| Diff.Delta
Description of changes to one entry.
|
| Diff.DeltaT
What type of change is described by a git_diff_delta?
|
| Diff.File |
| Diff.FindOptions
Control behavior of rename and copy detection
|
| Diff.FormatEmailFlagT
Formatting options for diff e-mail generation
|
| Diff.FormatEmailOptions
Options for controlling the formatting of the generated e-mail.
|
| Diff.FormatT
Possible output formats for diff data
|
| Diff.Hunk
Structure describing a hunk of a diff.
|
| Diff.Line
Structure describing a line (or data span) of a diff.
|
| Diff.OptionFlag |
| Diff.Options
Flags for diff options.
|
| Diff.PatchidOptions |
| Diff.Stats |
| Diff.StatsFormatT |
| GitException.ErrorClass
Error classes
|
| GitException.ErrorCode |
| GitFeature
Combinations of these values describe the features with which libgit2 was compiled
|
| GitObject
Generic git object:
Commit , Tag , Tree or Blob |
| GitObject.Type |
| IBitEnum |
| Index |
| Index.AddOption |
| Index.Callback |
| Index.Capability |
| Index.Conflict
A set of Entry that represents a conflict.
|
| Index.ConflictIterator |
| Index.Entry |
| Mailmap |
| Merge.AnalysisPair
POJO contains analysis result from
Merge::analysis and Merge::analysisForRef |
| Merge.AnalysisT
The results of `git_merge_analysis` indicate the merge opportunities.
|
| Merge.FileFavorT
Merge file favor options for `git_merge_options` instruct the file-level merging
functionality how to deal with conflicting regions of the files.
|
| Merge.FileFlagT
File merging flags
|
| Merge.FileInput
The file inputs to `git_merge_file`.
|
| Merge.FileOptions
options for merging a file
|
| Merge.FileResult |
| Merge.FlagT
Flags for `git_merge` options.
|
| Merge.Options
Merging options
|
| Merge.PreferenceT
The user's stated preference for merges.
|
| Note |
| Note.CommitCreateResult
result of adding note for an object from a commit
|
| Note.Iterator |
| Odb |
| Odb.ExpandId |
| Odb.RStream |
| Odb.Stream |
| OdbBackend |
| OdbObject |
| OdbObject.Header |
| OdbObject.Type |
| Oid
An Oid is a 20 bytes array (each byte coded 32bit), or a 40 hex characters string (16 bit coded)
|
| Patch |
| Patch.HunkInfo
the information about a hunk in a patch
|
| Patch.LineStats |
| Proxy.Options |
| Rebase |
| Rebase.Operation |
| Rebase.OperationT
Type of rebase operation in-progress after calling `git_rebase_next`.
|
| Rebase.Options
Rebase options
|
| Refdb |
| Reference |
| Reference.ForeachNameCb |
| Reference.Format |
| Reference.Iterator |
| Reference.ReferenceType |
| Refspec |
| Remote |
| Remote.AutotagOptionT |
| Remote.Callbacks |
| Remote.CreateFlags
Remote creation options flags
|
| Remote.CreateOptions |
| Remote.CredAcquireCb |
| Remote.Direction
Direction of the connection.
|
| Remote.FetchOptions |
| Remote.PackProgressCb |
| Remote.PushNegotiationCb |
| Remote.PushOptions |
| Remote.PushTransferProgressCb |
| Remote.PushUpdate |
| Remote.TransferProgressCb |
| Remote.TransportCb |
| Remote.TransportCertificateCheckCb |
| Remote.TransportMessageCb |
| Remote.UpdateReferenceCb |
| Remote.UpdateTipsCb |
| Repository |
| Repository.FetchHeadForeachCb |
| Repository.Identity |
| Repository.InitOptions |
| Repository.Item |
| Repository.MergeheadForeachCb |
| Repository.OpenFlag |
| Repository.State |
| Revparse.ExtReturn |
| Revparse.Mode |
| Revparse.Revspec |
| Revwalk |
| Revwalk.HideCb
This is a callback function that user can provide to hide a commit and its parents.
|
| Signature |
| SortT
Flags to specify the sorting which a revwalk should perform.
|
| Status.Entry |
| Status.Options |
| Status.OptT
Flags to control status callbacks
|
| Status.StatusList |
| Status.StatusT
Status flags for a single file.
|
| Submodule |
| Submodule.IgnoreT
Submodule ignore values
|
| Submodule.RecurseT
Options for submodule recurse.
|
| Submodule.StatusT
Return codes for submodule status.
|
| Submodule.UpdateOptions |
| Submodule.UpdateT
Submodule update values
|
| Tag |
| Tag.ForeachCb
Callback used to iterate over tag names, return non-zero to terminate iteration.
|
| TransferProgress |
| Transport
Data structure to communicate with a remote.
|
| Tree |
| WriteStream |
Copyright © 2020. All rights reserved.


Wickedblocks
Log in to your account
Email Address
Password
Forgot Password?
Log In
Log in with Google
Need an account?
Sign Up


Toggle navigation
About Us
How it works
IT Hiring from the right perspective
We help companies search, match, verify and hire Developers from CEE Region
Start hiring