Source code for sparknlp.annotator.seq2seq.gpt2_transformer
# Copyright 2017-2022 John Snow Labs
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Contains classes for the GPT2Transformer."""
from sparknlp.common import *
[docs]class GPT2Transformer(AnnotatorModel, HasBatchedAnnotate, HasEngine):
"""GPT2: the OpenAI Text-To-Text Transformer
GPT-2 is a large transformer-based language model with 1.5 billion parameters, trained on a dataset of 8 million
web pages. GPT-2 is trained with a simple objective: predict the next word, given all of the previous words within
some text. The diversity of the dataset causes this simple goal to contain naturally occurring demonstrations of
many tasks across diverse domains. GPT-2 is a direct scale-up of GPT, with more than 10X the parameters and trained
on more than 10X the amount of data.
GPT-2 displays a broad set of capabilities, including the ability to generate conditional synthetic text samples of
unprecedented quality, where we prime the model with an input and have it generate a lengthy continuation. In
addition, GPT-2 outperforms other language models trained on specific domains (like Wikipedia, news, or books)
without needing to use these domain-specific training datasets. On language tasks like question answering, reading
comprehension, summarization, and translation, GPT-2 begins to learn these tasks from the raw text, using no
task-specific training data. While scores on these downstream tasks are far from state-of-the-art, they suggest
that the tasks can benefit from unsupervised techniques, given sufficient (unlabeled) data and compute.
Pretrained models can be loaded with :meth:`.pretrained` of the companion
object:
>>> gpt2 = GPT2Transformer.pretrained() \\
... .setInputCols(["document"]) \\
... .setOutputCol("generation")
The default model is ``"gpt2"``, if no name is provided. For available
pretrained models please see the `Models Hub
<https://sparknlp.org/models?q=gpt2>`__.
====================== ======================
Input Annotation types Output Annotation type
====================== ======================
``DOCUMENT`` ``DOCUMENT``
====================== ======================
Parameters
----------
task
Transformer's task, e.g. ``summarize:`` , by default ""
configProtoBytes
ConfigProto from tensorflow, serialized into byte array.
minOutputLength
Minimum length of the sequence to be generated, by default 0
maxOutputLength
Maximum length of output text, by default 20
doSample
Whether or not to use sampling; use greedy decoding otherwise, by default False
temperature
The value used to module the next token probabilities, by default 1.0
topK
The number of highest probability vocabulary tokens to keep for
top-k-filtering, by default 50
topP
Top cumulative probability for vocabulary tokens, by default 1.0
If set to float < 1, only the most probable tokens with probabilities
that add up to ``topP`` or higher are kept for generation.
repetitionPenalty
The parameter for repetition penalty, 1.0 means no penalty. , by default
1.0
noRepeatNgramSize
If set to int > 0, all ngrams of that size can only occur once, by
default 0
ignoreTokenIds
A list of token ids which are ignored in the decoder's output, by
default []
Notes
-----
This is a very computationally expensive module especially on larger
sequence. The use of an accelerator such as GPU is recommended.
References
----------
- `Language Models are Unsupervised Multitask Learners
<https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf>`__
- https://github.com/openai/gpt-2
**Paper Abstract:**
*Natural language processing tasks, such as question answering, machine translation, reading comprehension, and
summarization, are typically approached with supervised learning on taskspecific datasets. We demonstrate that
language models begin to learn these tasks without any explicit supervision when trained on a new dataset
of millions of webpages called WebText. When conditioned on a document plus questions, the answers generated by
the language model reach F1 on the CoQA dataset - matching or exceeding the performance of 3 out of 4 baseline
systems without using the 127,000+ training examples. The capacity of the language model is essential to the
success of zero-shot task transfer and increasing it improves performance in a log-linear fashion across tasks.
Our largest model, GPT-2, is a 1.5B parameter Transformer that achieves state of the art results on 7 out of 8
tested language modeling datasets in a zero-shot setting but still underfits WebText. Samples from the model
reflect these improvements and contain coherent paragraphs of text. These findings suggest a promising path
towards building language processing systems which learn to perform tasks from their naturally occurring
demonstrations.*
Examples
--------
>>> import sparknlp
>>> from sparknlp.base import *
>>> from sparknlp.annotator import *
>>> from pyspark.ml import Pipeline
>>> documentAssembler = DocumentAssembler() \\
... .setInputCol("text") \\
... .setOutputCol("documents")
>>> gpt2 = GPT2Transformer.pretrained("gpt2") \\
... .setInputCols(["documents"]) \\
... .setMaxOutputLength(50) \\
... .setOutputCol("generation")
>>> pipeline = Pipeline().setStages([documentAssembler, gpt2])
>>> data = spark.createDataFrame([["My name is Leonardo."]]).toDF("text")
>>> result = pipeline.fit(data).transform(data)
>>> result.select("summaries.generation").show(truncate=False)
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|result |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|[My name is Leonardo. I am a man of letters. I have been a man for many years. I was born in the year 1776. I came to the United States in 1776, and I have lived in the United Kingdom since 1776.]|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
"""
name = "GPT2Transformer"
inputAnnotatorTypes = [AnnotatorType.DOCUMENT]
outputAnnotatorType = AnnotatorType.DOCUMENT
task = Param(Params._dummy(), "task", "Transformer's task, e.g. 'is it true that'>",
typeConverter=TypeConverters.toString)
configProtoBytes = Param(Params._dummy(),
"configProtoBytes",
"ConfigProto from tensorflow, serialized into byte array. Get with config_proto.SerializeToString()",
TypeConverters.toListInt)
minOutputLength = Param(Params._dummy(), "minOutputLength", "Minimum length of the sequence to be generated",
typeConverter=TypeConverters.toInt)
maxOutputLength = Param(Params._dummy(), "maxOutputLength", "Maximum length of output text",
typeConverter=TypeConverters.toInt)
doSample = Param(Params._dummy(), "doSample", "Whether or not to use sampling; use greedy decoding otherwise",
typeConverter=TypeConverters.toBoolean)
temperature = Param(Params._dummy(), "temperature", "The value used to module the next token probabilities",
typeConverter=TypeConverters.toFloat)
topK = Param(Params._dummy(), "topK",
"The number of highest probability vocabulary tokens to keep for top-k-filtering",
typeConverter=TypeConverters.toInt)
topP = Param(Params._dummy(), "topP",
"If set to float < 1, only the most probable tokens with probabilities that add up to ``top_p`` or higher are kept for generation",
typeConverter=TypeConverters.toFloat)
repetitionPenalty = Param(Params._dummy(), "repetitionPenalty",
"The parameter for repetition penalty. 1.0 means no penalty. See `this paper <https://arxiv.org/pdf/1909.05858.pdf>`__ for more details",
typeConverter=TypeConverters.toFloat)
noRepeatNgramSize = Param(Params._dummy(), "noRepeatNgramSize",
"If set to int > 0, all ngrams of that size can only occur once",
typeConverter=TypeConverters.toInt)
ignoreTokenIds = Param(Params._dummy(), "ignoreTokenIds",
"A list of token ids which are ignored in the decoder's output",
typeConverter=TypeConverters.toListInt)
[docs] def setTask(self, value):
"""Sets the transformer's task, e.g. ``summarize:``.
Parameters
----------
value : str
The transformer's task
"""
return self._set(task=value)
[docs] def setIgnoreTokenIds(self, value):
"""A list of token ids which are ignored in the decoder's output.
Parameters
----------
value : List[int]
The words to be filtered out
"""
return self._set(ignoreTokenIds=value)
[docs] def setConfigProtoBytes(self, b):
"""Sets configProto from tensorflow, serialized into byte array.
Parameters
----------
b : List[int]
ConfigProto from tensorflow, serialized into byte array
"""
return self._set(configProtoBytes=b)
[docs] def setMinOutputLength(self, value):
"""Sets minimum length of the sequence to be generated.
Parameters
----------
value : int
Minimum length of the sequence to be generated
"""
return self._set(minOutputLength=value)
[docs] def setMaxOutputLength(self, value):
"""Sets maximum length of output text.
Parameters
----------
value : int
Maximum length of output text
"""
return self._set(maxOutputLength=value)
[docs] def setDoSample(self, value):
"""Sets whether or not to use sampling, use greedy decoding otherwise.
Parameters
----------
value : bool
Whether or not to use sampling; use greedy decoding otherwise
"""
return self._set(doSample=value)
[docs] def setTemperature(self, value):
"""Sets the value used to module the next token probabilities.
Parameters
----------
value : float
The value used to module the next token probabilities
"""
return self._set(temperature=value)
[docs] def setTopK(self, value):
"""Sets the number of highest probability vocabulary tokens to keep for
top-k-filtering.
Parameters
----------
value : int
Number of highest probability vocabulary tokens to keep
"""
return self._set(topK=value)
[docs] def setTopP(self, value):
"""Sets the top cumulative probability for vocabulary tokens.
If set to float < 1, only the most probable tokens with probabilities
that add up to ``topP`` or higher are kept for generation.
Parameters
----------
value : float
Cumulative probability for vocabulary tokens
"""
return self._set(topP=value)
[docs] def setRepetitionPenalty(self, value):
"""Sets the parameter for repetition penalty. 1.0 means no penalty.
Parameters
----------
value : float
The repetition penalty
References
----------
See `Ctrl: A Conditional Transformer Language Model For Controllable
Generation <https://arxiv.org/pdf/1909.05858.pdf>`__ for more details.
"""
return self._set(repetitionPenalty=value)
[docs] def setNoRepeatNgramSize(self, value):
"""Sets size of n-grams that can only occur once.
If set to int > 0, all ngrams of that size can only occur once.
Parameters
----------
value : int
N-gram size can only occur once
"""
return self._set(noRepeatNgramSize=value)
@keyword_only
def __init__(self, classname="com.johnsnowlabs.nlp.annotators.seq2seq.GPT2Transformer", java_model=None):
super(GPT2Transformer, self).__init__(
classname=classname,
java_model=java_model
)
self._setDefault(
task="",
minOutputLength=0,
maxOutputLength=20,
doSample=False,
temperature=1.0,
topK=50,
topP=1.0,
repetitionPenalty=1.0,
noRepeatNgramSize=0,
ignoreTokenIds=[],
batchSize=4
)
@staticmethod
[docs] def loadSavedModel(folder, spark_session):
"""Loads a locally saved model.
Parameters
----------
folder : str
Folder of the saved model
spark_session : pyspark.sql.SparkSession
The current SparkSession
Returns
-------
GPT2Transformer
The restored model
"""
from sparknlp.internal import _GPT2Loader
jModel = _GPT2Loader(folder, spark_session._jsparkSession)._java_obj
return GPT2Transformer(java_model=jModel)
@staticmethod
[docs] def pretrained(name="gpt2", lang="en", remote_loc=None):
"""Downloads and loads a pretrained model.
Parameters
----------
name : str, optional
Name of the pretrained model, by default "gpt2"
lang : str, optional
Language of the pretrained model, by default "en"
remote_loc : str, optional
Optional remote address of the resource, by default None. Will use
Spark NLPs repositories otherwise.
Returns
-------
GPT2Transformer
The restored model
"""
from sparknlp.pretrained import ResourceDownloader
return ResourceDownloader.downloadModel(GPT2Transformer, name, lang, remote_loc)


Access the Spark API
Access the commonly-used Spark objects associated with a Spark instance. These objects provide access to different facets of the Spark API.
spark_context(sc)
java_context(sc)
hive_context(sc)
spark_session(sc)
Arguments
| sc | A |
Details
The Scala API documentation
is useful for discovering what methods are available for each of these
objects. Use invoke
to call methods on these objects.
Spark Context
The main entry point for Spark functionality. The Spark Context
represents the connection to a Spark cluster, and can be used to create
RDD
s, accumulators and broadcast variables on that cluster.
Java Spark Context
A Java-friendly version of the aforementioned Spark Context.
Hive Context
An instance of the Spark SQL execution engine that integrates with data
stored in Hive. Configuration for Hive is read from hive-site.xml
on
the classpath.
Starting with Spark >= 2.0.0, the Hive Context class has been
deprecated -- it is superceded by the Spark Session class, and
hive_context
will return a Spark Session object instead.
Note that both classes share a SQL interface, and therefore one can invoke
SQL through these objects.
Spark Session
Available since Spark 2.0.0, the Spark Session unifies the Spark Context and Hive Context classes into a single interface. Its use is recommended over the older APIs for code targeting Spark 2.0.0 and above.


Quantum Money with a Man-in-the-Middle Attack¶
In this example, we’ll see how the Wiesner Quantum Money can be implemented using QuNetSim. First, we create a network of three different parties: the bank, the customer, and Eve who plays the eavesdropper. In this protocol, the bank talks to the customer but the information is relayed through Eve, i.e. the “man in the middle”. First we Initialize the network:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | def main():
# Initialize a network
network = Network.get_instance()
nodes = ['Bank', 'Customer', 'Eve']
network.start(nodes)
host_bank = Host('Bank')
host_bank.add_connection('Eve')
host_bank.start()
host_eve = Host('Eve')
host_eve.add_connection('Bank')
host_eve.add_connection('Customer')
host_eve.start()
host_customer = Host('Customer')
host_customer.add_connection('Eve')
host_customer.start()
network.add_host(host_bank)
network.add_host(host_eve)
network.add_host(host_customer)
host_eve.q_relay_sniffing = True
host_eve.q_relay_sniffing_fn = sniffing_quantum
|
In this protocol, the aim of the bank is to create unforgeable bank notes and distribute it to the customers. To achieve this, for every bank note, the bank assigns a classical serial number and qubits that are polarized in random bases and random directions. These bases and distributions are recorded by the bank for later use. In the first part of this example, the bank creates the money and distributes it to the customer and the customer receives the qubits and the serial numbers:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | def banker_protocol(host, customer):
"""
The banker's protocol.
Args:
host (Host): The Host that runs the banker's protocol.
customer: The ID of the customer.
"""
bank_bits = [[] for _ in range(NO_OF_SERIALS)]
bank_basis = [[] for _ in range(NO_OF_SERIALS)]
def preparation_and_distribution():
for serial in range(NO_OF_SERIALS):
for bit_no in range(QUBITS_PER_MONEY):
random_bit = randint(0, 1)
random_base = randint(0, 1)
bank_bits[serial].append(random_bit)
bank_basis[serial].append(random_base)
q = Qubit(host)
if random_bit == 1:
q.X()
if random_base == 1:
q.H()
host.send_qubit(customer, q)
|
After the bank distributes the money, the customer possesses the money.
1 2 3 4 5 6 7 8 9 | def customer_protocol(host, banker):
money_qubits = [[] for _ in range(NO_OF_SERIALS)]
def receive_money():
for serial in range(NO_OF_SERIALS):
for bit_no in range(QUBITS_PER_MONEY):
q = host.get_qubit(banker, wait=10)
money_qubits[serial].append(q)
print('Customer received money')
|
To use this money, the customer has to get it verified by the bank. To do this, he sends the serial number of the banknote that he wants to use along with the qubits assigned to the banknote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def verify_money():
print('Customer is verifying the money')
serial_to_be_used = randint(0, NO_OF_SERIALS - 1)
host.send_classical(banker, serial_to_be_used, await_ack=True)
for qubit_no in range(QUBITS_PER_MONEY):
host.send_qubit(banker, money_qubits[serial_to_be_used][qubit_no], await_ack=False)
# Remove unused qubits
unused_serials = list(range(NO_OF_SERIALS))
del unused_serials[serial_to_be_used]
if len(unused_serials) > 0:
print('Customer removes unused qubits')
for unused_serial in unused_serials:
for q in money_qubits[unused_serial]:
q.release()
|
After receiving the qubits associated with the serial number, the bank measures the qubits to check if measurement results match with the data in bank’s database. If there is a mismatch, the bank realizes that there is a cheating attempt. If measurement results are correct, the bank verifies the money.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | def controlling():
"""
Function to check if qubits representing the money are correct.
Return:
Prints out if the money is valid or if teh customer is cheating.
"""
cheat_alert = False
print('Banker waiting for serial')
message = host.get_classical(customer, seq_num=0, wait=10)
if message is None:
print("Bank did not receive the serial number")
return
print('Serial received by Bank')
serial_to_be_checked = message.content
for qubit_no in range(QUBITS_PER_MONEY):
q = host.get_qubit(customer, wait=10)
if bank_basis[serial_to_be_checked][qubit_no] == 1:
q.H()
measurement = q.measure()
if measurement != bank_bits[serial_to_be_checked][qubit_no]:
cheat_alert = True
if not cheat_alert:
print('MONEY IS VALID')
else:
print('MONEY IS INVALID')
|
If Eve, being the relay node, acts as an attacker, she can only steal the money but can’t reproduce the money as she doesn’t know the polarization bases. Therefore, the money is unforgeable. Also, if she measures the qubits in a non-destructive way, she can disturb the state of the qubits, therefore invalidating the money. In this example, an example attack is shown. Eve measures the qubits in a while relaying the qubits causing the money that is transferred to the customer to be invalid. This attack is shown below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def sniffing_quantum(sender, receiver, qubit):
"""
Function to set what the relay node does to the qubit in transmission.
Args:
sender (Host) : Sender of the qubit
receiver (Host) : Receiver of the qubit
qubit (Qubit): Qubit in transmission
"""
# Eavesdropper measures some of the qubits.
if sender == 'Customer':
r = random.random()
if r > 0.5:
print('Eavesdropper applied I to qubit sent from %s to %s' % (sender, receiver))
qubit.I()
else:
print('Eavesdropper applied X to qubit sent from %s to %s' % (sender, receiver))
qubit.X()
|
The full example is below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | from qunetsim.components import Host
from qunetsim.components import Network
from qunetsim.objects import Logger
from qunetsim.objects import Qubit
from random import randint, random
from qunetsim.backends import ProjectQBackend
Logger.DISABLED = True
WAIT_TIME = 10
QUBITS_PER_MONEY = 8
NO_OF_SERIALS = 1
def banker_protocol(host, customer):
"""
The banker's protocol.
Args:
host (Host): The Host that runs the banker's protocol.
customer: The ID of the customer.
"""
bank_bits = [[] for _ in range(NO_OF_SERIALS)]
bank_basis = [[] for _ in range(NO_OF_SERIALS)]
def preparation_and_distribution():
for serial in range(NO_OF_SERIALS):
for bit_no in range(QUBITS_PER_MONEY):
random_bit = randint(0, 1)
random_base = randint(0, 1)
bank_bits[serial].append(random_bit)
bank_basis[serial].append(random_base)
q = Qubit(host)
if random_bit == 1:
q.X()
if random_base == 1:
q.H()
host.send_qubit(customer, q, await_ack=False)
def controlling():
"""
Function to check if qubits representing the money are correct.
Return:
Prints out if the money is valid or if teh customer is cheating.
"""
cheat_alert = False
print('Banker waiting for serial')
message = host.get_classical(customer, seq_num=0, wait=10)
if message is None:
print("Bank did not receive the serial number")
return
print('Serial received by Bank')
serial_to_be_checked = message.content
for qubit_no in range(QUBITS_PER_MONEY):
q = host.get_qubit(customer, wait=10)
if bank_basis[serial_to_be_checked][qubit_no] == 1:
q.H()
measurement = q.measure()
if measurement != bank_bits[serial_to_be_checked][qubit_no]:
cheat_alert = True
if not cheat_alert:
print('MONEY IS VALID')
else:
print('MONEY IS INVALID')
print("Banker is preparing and distributing qubits")
preparation_and_distribution()
print("Banker is verifying the money from customer")
controlling()
def customer_protocol(host, banker):
"""
The customer's protocol.
Args:
host (Host): The host who is acting as a customer.
banker (str): The ID of the banker Host.
"""
money_qubits = [[] for _ in range(NO_OF_SERIALS)]
def receive_money():
for serial in range(NO_OF_SERIALS):
for bit_no in range(QUBITS_PER_MONEY):
q = host.get_qubit(banker, wait=10)
money_qubits[serial].append(q)
print('Customer received money')
def verify_money():
print('Customer is verifying the money')
serial_to_be_used = randint(0, NO_OF_SERIALS - 1)
host.send_classical(banker, serial_to_be_used, await_ack=True)
for qubit_no in range(QUBITS_PER_MONEY):
host.send_qubit(banker, money_qubits[serial_to_be_used][qubit_no], await_ack=False)
# Remove unused qubits
unused_serials = list(range(NO_OF_SERIALS))
del unused_serials[serial_to_be_used]
if len(unused_serials) > 0:
print('Customer removes unused qubits')
for unused_serial in unused_serials:
for q in money_qubits[unused_serial]:
q.release()
print('Customer is awaiting serial number and qubits that represent the money')
receive_money()
print('Customer is getting his money verified')
verify_money()
def sniffing_quantum(sender, receiver, qubit):
"""
Function to set what the relay node does to the qubit in transmission.
Args:
sender (Host) : Sender of the qubit
receiver (Host) : Receiver of the qubit
qubit (Qubit): Qubit in transmission
"""
# Eavesdropper measures some of the qubits.
print('did this')
if sender == 'Customer':
r = random()
if r > 0.5:
print('Eavesdropper applied I to qubit sent from %s to %s' % (sender, receiver))
qubit.I()
else:
print('Eavesdropper applied X to qubit sent from %s to %s' % (sender, receiver))
qubit.X()
def main():
# Initialize a network
network = Network.get_instance()
nodes = ['Bank', 'Customer', 'Eve']
network.delay = 0.2
network.start(nodes)
host_bank = Host('Bank')
host_bank.add_connection('Eve')
host_bank.delay = 0.3
host_bank.start()
host_eve = Host('Eve')
host_eve.add_connection('Bank')
host_eve.add_connection('Customer')
host_eve.start()
host_customer = Host('Customer')
host_customer.add_connection('Eve')
host_customer.delay = 0.3
host_customer.start()
network.add_host(host_bank)
network.add_host(host_eve)
network.add_host(host_customer)
host_eve.q_relay_sniffing = True
host_eve.q_relay_sniffing_fn = sniffing_quantum
print('Starting transfer')
t = host_customer.run_protocol(customer_protocol, (host_bank.host_id,))
host_bank.run_protocol(banker_protocol, (host_customer.host_id,), blocking=True)
t.join()
network.stop(True)
if __name__ == '__main__':
main()
|


core
/
com.whatstoday.core.network.responses
/
CharacterResponse
/
thumbnail
thumbnail
val
thumbnail
:
CharacterThumbnailResponse
The representative image for this character.


{% extends "layout.html" %} {% block content %}
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently
"please go back and verify your profile"
{% endif %}


+++ title = "Welcome Break, Tena" slug = "welcome-break-tena" date = 2007-08-14T12:00:00+10:00 tags = ["accommodation"] locations = ["ecuador/tena"] draft = false summary = """
Welcome Break is a great little guesthouse, near the centre of Tena, in a quiet street off the main road. It has a charming atmosphere, with its leafy garden environs, its tranquil rooms, and its very inviting hammock area. It's also the first place listed in my LP: for once, they actually got it right. Quite reasonably priced, and generally not full. Gets a tick in my book.
""" +++Welcome Break is a great little guesthouse, near the centre of Tena, in a quiet street off the main road. It has a charming atmosphere, with its leafy garden environs, its tranquil rooms, and its very inviting hammock area. It's also the first place listed in my LP: for once, they actually got it right. Quite reasonably priced, and generally not full. Gets a tick in my book.
Rooms: quiet, clean, and spacious.
People: not that many folks around, but the other travellers that are here are friendly and laid-back.
Staff: very hospitable, and always willing to hang around and have a chat.
Location: a block or two from the centre of town — not too close, but definitely not too far.
Food / Internet: reasonably-priced breakfast at the on-premises restaurant. No Internet — go down the street for it.
Hot water: yep, and lots of it.


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
Don’t be intimated by making béarnaise sauce. As James Martin shows, it’s simple to whisk up and perfect with steak.

Heat the vegetable oil in a deep fat fryer to 160C/320F. (CAUTION: Hot oil can be dangerous. Do not leave unattended.)
For the béarnaise sauce, place the vinegar, white wine, peppercorns and shallot into a small saucepan and bring to the boil.
Simmer until the liquid has reduced by half.
Remove the peppercorns, then pour the mixture into a medium heat-proof bowl.
Add the egg yolks to the bowl and whisk well.
Place the bowl over a pan of simmering water and whisk the eggs together until thickened and light in colour.
Gradually add the melted butter, whisking constantly.
Season with salt and freshly ground black pepper and add the chopped tarragon leaves.
Turn off the heat and leave the bowl over the pan until ready to use.
For the steak and chips, place the potatoes into the fat fryer, a few at a time, and cook for 2-3 minutes, or until just tender but not coloured.
Drain on a plate lined with kitchen paper and turn up the fat fryer to 190C/375F.
Season the steaks with salt and freshly ground black pepper.
Heat a frying pan until hot, add the butter, olive oil and the steaks and fry on one side for two minutes (without moving the steak), or until browned.
Turn the steak over and cook for another two minutes, then remove the pan from the heat and leave the steaks to rest.
Place the semi-cooked chips back into the fat fryer in batches and cook for another 2-3 minutes, or until golden-brown and crispy. Keep warm on a tray in the oven if necessary.
To serve, carve the steak into thick slices, place onto plates and spoon the béarnaise sauce over. Pile some chips and salad leaves alongside.


The Optimize API gives you access to a cloud-based optimizer that can be used to solve common optimization problems in your app or online application.
Problems can be formulated and solutions can be calculated and retrieved via an AJAX call, enabling easy integration into your Python, Javascript, Java, or any other modern application language you use.
Check out our online Jupyter notebook demo by clicking here:
Contact us for more information.
Copyright © 2009 VICBee Consulting


Calculate the Statistics of a GeoTIFF
URL:
Select an Image Below
#
height
width
metadata
calculating


Illuminate Productions Presents An Aidan Otene Dickens Film
Starring Alex Arruda Lee Ah Yen Rebecca Parr
Directed by Aidan Dickens
Written by Aidan Dickens and Vanessa James
Produced by Aidan Dickens, Alex Arruda and Vanessa James
Director of Photography David Peterson Sound Holden Schade
Lighting Assistant Etsuo Otani Camera Assistant Hao Ding
Makeup Donna Rae Sasha Mc Gaughan
Production Manager Vanessa James
Script Supervisor Vanessa James
Edited by Aidan Dickens Music Chris Geddes & Matt Carudus
Executive Producers Aidan Dickens, Alex Arruda and Vanessa James
Now showing exclusively at the
Vic Cinema, Cafe, Theatre.
48-56 Victoria Road, Devonport.
Daily screenings at 4pm and 7pm
from the 16th till the 23rd.
Book online here
| General Admission $ | Cheap Tuesday $ |
|---|---|
| Adult GA 15.00* | Adult GA 10.00* |
| Student, Groups 12.00* | Student, Group 9.50* |
| Senior (over 60) 11.00* | Senior (over 60) 9.00* | Child (under 14) 10.00* | Child (under 14) 8.00* |


No data found
Error Id for delete request
Error bpack Id for transfuse
Incorrect status of bpack for transfuse
Bpack deleted successfully
Transfuse completed successfully
| ID |
Blood type |
Amount |
Status |
Donor ID |
Donation TS |
Location |
Holder |
Desc |
|
| {{bpack.Key}} |
{{bpack.btype}} |
{{bpack.amount}} |
{{bpack.status}} |
{{bpack.donorId}} |
{{bpack.donationTS}} |
{{bpack.location}} |
{{bpack.holder}} |
{{bpack.desc}} |
|
Error: Cannot load history for this Bpack ID
| Tx Timestamp |
Tx Id |
Holder |
Holder Timestamp |
Location |
Status |
Desctiption |
Deleted |
| {{rec.TxTS}} |
{{rec.TxId}} |
{{rec.holder}} |
{{rec.holderTS}} |
{{rec.location}} |
{{rec.status}} |
{{rec.desc}} |
{{rec.IsDelete}} |


The has more than 280 characters.
Biography
Use
Gravatar
info for my profile.
Save settings
Don´t have Gravatar?


5. Integrated Development Environment
5.1. devonfw-ide
Welcome to the devonfw-ide
!
The devonfw-ide
is a fantastic tool to automatically download, install, setup and update the IDE (integrated development environment) of your software development projects.
For further details visit the following links:
TL;DR?
-
extract to
C:\projects\my-project-name
or/projects/my-project-name
-
run
setup
script -
run
eclipse-main
to launch Eclipse orvscode-main
for Visual Studio code -
happy hacking!
5.1.1. License
The devonfw-ide
is free and open-source. For details read our TERMS_OF_USE.
5.2. Features
Every developer needs great tools to work efficient. Setting all this up manually can be tedious and error-prone. Further, different projects may require different versions and configurations of such tools. Especially configurations like code-formatters should be consistent within a project to avoid diff-wars.
The devonfw-ide
will solve all these problems. Here are the features we can offer for you with devonfw-ide
:
-
Efficient
Setup your IDE within minutes tailored for the requirements of your project. -
Automated
Automate the setup and update, avoid manual steps and mistakes. -
Simple
KISS (Keep It Small and Simple), no installers or tool-integrations that break with every release. Instead use archive-files (zip or tar.gz), templates and simple shell scripts. -
Configurable
You can tweak the configuration to your needs. Further the settings contain configuration templates for the different tools (see configurator). -
Maintainable
For your project you should copy these settings to an owngit
repository that can be maintained and updated to manage the tool configurations during the project lifecycle. If you use github or gitlab every developer can easily suggest changes and improvements to these settings via pull/merge requests without ending in chaos with big teams. -
Customizable
You need an additional tool that we never heard of? Put it in thesoftware
folder of the structure. Thedevon
CLI will then automatically add it to yourPATH
variable.
Further you can create your own commandlet for your additional tool. For closed-source tools you can create your own archive and distribute to your team members as long as you care about the terms and licenses of these tools. -
Multi-platform
Works on all major platforms, which are Windows, Mac, and Linux. -
Multi-tenancy
Have as many instances of thedevonfw-ide
"installed" on your machine for different projects with different tools, tool versions and configurations. No physical installation and no tweaking of your operating system. "Installations" ofdevonfw-ide
do not interfere with each other nor with other installed software. -
Multiple Workspaces
Support working with different workspaces on different branches. Create and update new workspaces with few clicks. See the workspace name in the title-bar of your IDE so you do not get confused and work on the right branch. -
Free
Thedevonfw-ide
is free just like everything from devonfw. See TERMS_OF_USE for details.
5.2.2. Platforms
We support the following platforms:
5.2.3. Build-Systems
We support the following build-systems:
However, also other IDEs, platforms, or tools can be easily integrated as commandlet.
5.2.4. Motiviation
TL;DR
? Lets talk to developers in the proper language. Here are examples with devonfw-ide
:
[/]$ devon
You are not inside a devon IDE installation: /
[/]$ cd /projects/devon
[devon]$ mvn
zsh: command not found: mvn
[devon]$ devon
devonfw-ide has environment variables have been set for /projects/devon
[devon]$ mvn -v
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T20:41:47+02:00)
Maven home: /projects/devon/software/maven
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /projects/devon/software/java
Default locale: en_DE, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.3", arch: "x86_64", family: "mac"
[devon]$ cd /projects/ide-test/workspaces/test/my-project
[my-project]$ devon
devonfw-ide has environment variables have been set for /projects/ide-test
[my-project]$ mvn -v
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T20:41:47+02:00)
Maven home: /projects/ide-test/software/maven
Java version: 11.0.2, vendor: Oracle Corporation, runtime: /projects/ide-test/software/jdk/Contents/Home
Default locale: en_DE, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.3", arch: "x86_64", family: "mac"
[ide-test]$ devon eclipse
launching Eclipse for workspace test...
[my-project]$ devon build
[INFO] Scanning for projects...
...
[INFO] BUILD SUCCESS
This was just a very simple demo of what devonfw-ide
can do. For further details have a look at our CLI documentation.
Now you might ask:
-
But I use Windows/Linux/MacOS/…? - works on all platforms!
-
But how about Windows CMD or Power-Shell? - works!
-
But what if I use cygwin or git-bash on windows? - works!
-
But I love to use ConEmu or Commander? - works with full integration!
-
How about MacOS Terminal or iTerm2? - works with full integration!
-
But I use zsh? - works!
-
…? - works!
Wow! So lets get started with download & setup.
5.3. Setup
5.3.1. Prerequisites
We try to make it as simple as possible for you. However, there are some minimal prerequesites:
-
You need to have a tool to extract
*.tar.gz
files (tar
andgzip
). On Windows use 7zip. On all other platforms this comes out of the box. -
You need to have git and curl installed.
-
On Windows all you need is download and install git for windows. This also ships with
bash
andcurl
. -
On Linux you might need to install the above tools in case they are not present (e.g.
sudo apt-get install git curl
oryum install git-core curl
) -
On MacOS all you need is download and install git for mac.
-
5.3.2. Download
Releases of devonfw-ide
are published to maven central. You can download them from here.
5.3.3. Install
Create a central folder like C:\projects
or /projects
. Inside this folder create a sub-folder for your new project such as my-project
and extract the contents of the downloaded archive (devonfw-ide-scripts-*.tar.gz
) into this new folder. Run the command setup
in this folder (on windows just double click setup.bat
).
That’s all. To get started read the usage.
5.3.4. Uninstall
To "uninstall" your devonfw-ide
you only need to call the following command:
devon ide uninstall
Then you can delete the devonfw-ide
top-level folder(s) (${DEVON_IDE_HOME}).
The devonfw-ide
is designed to be not invasive to your operating system and computer. Therefore it is not "installed" into your system in a classical way. Instead you just create a folder and extract the downloaded archive to it. Only specific prerequisites like git
have to be installed regularly by you in advance. All other software resists just locally inside the folder of your devonfw-ide
. However, there are the following excuses (what is reverted by devon ide uninstall
):
-
The
devon
command is copied to your home directory (~/.devon/devon
) -
The
devon
alias is added to your shell config (~/.bashrc
and~/.zshrc
, search foralias devon="source ~/.devon/devon"
). -
On Windows the
devon.bat
command is copied to your home directory (%USERPROFILE%\scripts\devon.bat
) -
On Windows this
%USERPROFILE%\scripts
directory is added to thePATH
of your user. -
The
devonfw-ide
will download third party software to your~/Downloads
folder to reduce redundant storage.
5.4. Usage
This section explains you how to use the devonfw-ide
. We assume you have successfully installed it first.
5.4.1. Developer
As a developer you are supported to setup your IDE within minutes. You only need the settings URL from your Architect.
Update
To update your IDE (if instructed by your Architect), all you need to do is run the following command:
devon ide update
Working with multiple workspaces
If you are working on different branches in parallel you typically want to use multiple workspaces.
-
Go to the workspaces folder in your ${DEVON_IDE_HOME} and create a new folder with the name of your choice (e.g.
release2.1
). -
Check out (
git clone …
) the according projects and branch into that workspace folder. -
Open a shell in that new workspace folder (
cd
to it) and according to your IDE run e.g. eclipse, vscode, or intellij to create your workspace and launch the IDE. You can also add the parametercreate-script
to the IDE commandlet in order to create a launch-script for your IDE.
You can have multiple instances of eclipse running for each workspace in parallel. To distinguish these instances you will find the workspace name in the title of eclipse.
5.4.2. Architect
As architect or technical lead of the project you can configure the devonfw-ide
to your needs.
Project specific settings
For your project you should create a git-repository for the settings. You can customize many aspects this way.
Distribute
To redistribute the IDE you can decide to use the official vanilla releases of the devonfw-ide
scripts.
However, you may also add the cloned settings, a custom devon.properties file, or predefine software (be aware of multi-plattform-support).
Update
When you have done changes in a larger project (big team), please first test the changes yourself, then pick a pilot user of the team, and only after that works well for a couple of days inform the entire team to update.
5.5. License
This software is licensed as Open-Source product for free usage including commercial use. You need to apply to our terms of use before using it.
5.6. Structure
The directory layout of your devonfw-ide
will look like this:
/ projects (or C:\Projects, etc.) └──/ my-project ($DEVON_IDE_HOME) ├──/ conf ├──/ log ├──/ scripts ├──/ settings ├──/ software ├──/ system ├──/ updates ├──/ workspaces ├── setup ├── setup.bat └── TERMS_OF_USE.adoc
The elements of the above structure are described in the indivudal sections. As they are hyperlinks you can simply click them to get more details.
5.6.1. TERMS_OF_USE
You need to agree with the TERMS_OF_USE in order to use devonfw-ide
. Everything included out of the box applies to open-source licenses. However, due to the many thrid party components with their licenses and terms we want to make this clear to all our users and be compliant.
5.7. Devon CLI
The devonfw-ide
is shipped with a central command devon
. The setup will automatically register this command so it is available in any shell on your system. This page describes the Command Line Interface (CLI) of this command.
5.7.1. Devon
Without any arguments the devon
command will determine your DEVON_IDE_HOME
and setup your environment variables automatically. In case you are not inside of a devonfw-ide
folder the command will echo a message and do nothing.
[/]$ devon
You are not inside a devon IDE installation: /
[/]$ cd /projects/my-project/workspaces/test/my-git-repo
[my-git-repo]$ devon
devonfw-ide has environment variables have been set for /projects/my-project in workspace main
[my-git-repo]$ echo $DEVON_IDE_HOME
/projects/devon
[my-git-repo]$ echo $JAVA_HOME
/projects/my-project/software/java
5.7.2. Commandlets
The devon
command supports a plugable set of commandlets. Such commandlet is provided as first argument to the devon command and my take additional arguments:
devon «commandlet» [«arg»]*
Technically a commandlet is a bash script located in $DEVON_IDE_HOME/scripts/command
. So if you want to integrate another tool with devonfw-ide
we are awaiting your pull-request.
The following commandlets are currently available:
5.8. Variables
The devonfw-ide
defines a set of standard variables to your environment for configuration via variables[.bat]
files.
These environment variables are described by the following table.
Those variables printed bold are also exported in your shell (except for windows CMD that does not have such concept). Variabels with the value -
are not set by default but may be set via configuration to override defaults.
Please note that we are trying to minimize any potential side-effect from devonfw-ide
to the outside world by reducing the number of variables and only exporting those that are required.
| Variable | Value | Meaning |
|---|---|---|
|
e.g. |
The toplevel directory of your |
|
|
You system path is adjusted by |
|
|
The platform independent home directory of the current user. In some edge-cases (e.g. in cygwin) this differs from |
|
|
List of tools that should be installed and upgraded by default for your current IDE. |
|
|
A "backup" of |
|
|
The workspace you are currently in. Defaults to |
|
|
Absoulte path to current workspace. Never touch this variable in any |
|
|
Path to JDK |
|
|
Path to your settings. To keep |
|
|
Path to your local maven repository. For projects without high security demands, you may change this to the maven default |
|
|
Path to Maven |
|
|
Maven options |
|
|
Project specific or custom software-repository. |
|
|
Globaly shared user-specific local software installation location. |
|
|
JVM options for Eclipse |
|
|
Array with "feature groups" and "update site URLs" to cusomize required eclipse plugins. |
|
|
The version of the tool |
|
e.g. |
The arguments provided to the build-tool |
|
e.g. |
The arguments provided to the build-tool |
5.9. Configuration
The devonfw-ide
aims to be highly configurable and flexible. The configuration of the devon command and environment variables takes place via devon.properties
files. The following list shows these configuration files in the order they are loaded so files can override variables from files above in the list:
-
build in defaults (for
JAVA_VERSION
,ECLIPSE_PLUGINS
, etc.) -
~/devon.properties
- user specific global defaults (on windows in%USERPROFILE%/devon.properties
) -
scripts/devon.properties
- defaults provided bydevonfw-ide
. Never directly modify this file! -
devon.properties
- vendor variables for custom distributions ofdevonfw-ide-scripts
, may e.g. tweakSETTINGS_PATH
or predefineSETTINGS_URL
. -
settings/devon.properties
(${SETTINGS_PATH}/devon.properties
) - project specific configurations from settings. -
workspaces/${WORKSPACE}/devon.properties
- optional workspace specific configurations (espeically helpful in projects using docker). -
conf/devon.properties
- user specific configurations (e.g.M2_REPO=~/.m2/repository
). During setup this file is created by copying a template from${SETTINGS_PATH}/devon/conf/devon.properties
.
5.9.1. devon.properties
The devon.properties
files allow to define environment variables in a simple and OS independent way:
-
# comments begin with a hash sign (#) and are ignored
-
variable_name=variable_value with space etc.
-
variable_name=${predefined_variable}/folder_name
variable values can refer to other variables that are already defined what will be resolved to their value. You have to used
${…}
syntax to make it work on all platforms (never use%…%
,$…
, or$(…)
syntax indevon.properties
files). -
export exported_variable=this value will be exported in bash, in windows CMD the export prefix is ignored
-
variable_name=
this will unset the specified variable
-
variable_name=~/some/path/and.file
tilde is resolved to your personal home directory on any OS including windows.
-
array_variable=(value1 value2 value3)
This will only work properly in
bash
worlds but as no arrays are used in CMD world ofdevonfw-ide
it does not hurt on windows. -
Please never suround values with quotes (
var="value"
) -
This format is similar to Java
*.properties
but does not support advanced features as unicode literals, multi-lined values, etc.
In order to know what to configure have a look at the available variables.
Please only tweak configurations that you need to change and take according responsibility. Flexibiltiy comes with some price. Of course you can break everything if you do the wrong things.
5.10. scripts
This directory is the heart of the devonfw-ide
and contains the required scripts.
/scripts ├──/ command │ ├── build │ ├── eclipse │ ├── gradle │ ├── help │ ├── ide │ ├── intellij │ ├── java │ ├── jenkins │ ├── mvn │ ├── ng │ ├── node │ ├── npm │ ├── release │ ├── sonar │ ├── vscode │ └── yarn ├── devon ├── devon.bat ├── environment-project ├── environment-project.bat ├── functions └── devon.properties
The command folder contains the commandlets.
The devon script is the key command line interface for devonfw-ide
.
For windows there is also devon.bat to be used in CMD or PowerShell.
As the devon
CLI can be used as global command on your computer from any directory and gets installed centrally it aims to be stable, minimal, and leightweight.
The key logic to setup the environment variables is therefore in a separate script environment-project and its Windows variant environment-project.bat inside this scripts
folder.
The file functions contains a collection of reusable bash functions.
These are sourced and used by the commandlets.
Finally the devon.properties
file contains defaults for the general configuration of devonfw-ide
.
5.11. settings
The devonfw-ide
requires settings
with configuration templates for the arbitrary tools.
To get an initial set of these settings we provide the devonfw-ide-settings as an initial package. These are also released so you can download a the lastes stable version from maven central.
To test devonfw-ide
or for small projects you can also use these the latest default settings.
However, for collaborative projects we strongly encourage you to distribute and maintain the settings via a dedicated and project specific git
repository (or any other version-control-system). This gives you the freedom to control and manage the tools with their versions and configurations during the project lifecycle.
Therefore as technical lead creates a settings
git repository for the project. He creates a "fork" devonfw-ide-settings by adding it as "upstream" origin and pulls from there finally pusing it to the project settings
git. This also allows to later merge changes from the official devonfw-ide-settings back into the project specific settings
"fork".
5.11.1. Structure
The settings folder (see SETTINGS_PATH
) has to following file structure:
/settings ├──/ devon │ ├──/ conf │ │ ├──/ .m2 │ │ │ └── settings.xml │ │ ├──/ npm │ │ │ └── .npmrc │ │ └── devon.properties ├──/ eclipse │ ├──/ workspace │ │ ├──/ setup │ │ └──/ update │ ├── lifecycle-mapping-metadata.xml │ └── project.dictionary ├──/ ... ├──/ sonarqube │ └──/ profiles │ ├── Devon-C#.xml │ ├── ... │ └── Devon-XML.xml ├──/ vscode │ └──/ workspace │ ├──/ setup │ └──/ update └── devon.properties
As you can see the settings
folder contains sub-folders for tools of the IDE.
So the devon
folder contains devon.properties
files for the configuration of your environment.
Further, for the IDEs such as eclipse or vscode the according folders contain the templates to manage the workspace via our configurator.
5.11.2. Configuration Philosophy
Different tools and configuration files require a different handling:
-
Where suitable we directly use these configurations from your
settings
(e.g. foreclipse/lifecycle-mapping-metadata.xml
, oreclipse/project.dictionary
). -
The
devon
folder insettings
contains templates for configuration files. There are copied to thedevonfw-ide
installation during setup (if no such file already exists). This way thesettings
repository can provide reasonable defaults but allows the user to take over control and customize to his personal needs (e.g..m2/settings.xml
). -
Other configurations need to be imported manually. To avoid manual steps and simplify usage we try to automate as much as possible. This currently applies to
sonarqube
profiles but will be automated with sonar-devon4j-plugin in the future. -
For tools with complex configuration structures like eclipse, intellij, or vscode we provide a smart mechanism via our configurator.
5.11.3. Customize Settings
You can easily customize these settings for the requirements of your project. We suggest that one team member is repsonsible to ensure that everything stays consistent and works.
You may also create new sub-folders in settings
and put individual things according to your needs. E.g. you could add scripts for greasemonkey or tampermonkey, as well as scripts for your database or whatever may be useful and worth to share in your team. However, to share and maintain knowledge we recommend to use a wiki.
5.12. software
The software
folder contains the third party tools for your IDE such as maven, npm, java, etc.
With respect to the licensing terms you may create a custom archive containing a devonfw-ide
together with the required software.
However, to be platform indepentent and allow lightweight updates the devonfw-ide
is capable to download and install the software automatically for you.
5.12.1. Repository
By default software is downloaded via the internet from public download URLs of the according tools. However, some projects may need specific tools or tool versions that are not publically available.
In such case, they can create their own software repository (e.g. in a VPN) and configure the base URL of it via DEVON_SOFTWARE_REPOSITORY
variable.
Then devonfw-ide
will download all software from this repository only instead of the default public download URLs.
This repository (URL) should be accessible within your network via HTTPS (or HTTP) and without any authentication.
The repository needs to have the following structure:
${DEVON_SOFTWARE_REPOSITORY}/«tool»/«version»/«tool»-«version»[-«os»].tgz
So for every tool «tool»
(java, maven, vscode, eclipse, etc.) you need to provide a folder in your repository.
Within this folder for every supported version «version»
you need a subfolder.
This subfolder needs to contain the tool in that version for every operating system «os»
(windows
, linux
, or mac
- omitted if platform independent, e.g. for maven
).
5.12.2. Shared
By default each installation of devonfw-ide
has its own physical installations of the required tools in the desired versions stored in its local software
folder.
While this is great for isolation of devonfw-ide
installations and to prevent side-effects, it can cause a huge waste of disc resources in case you are having many installations of devonfw-ide
.
If you are a power-user of devonfw-ide
with more then ten or even up to hundreds of installations on your machine, you might love to share installations of a software tool in a particular version between multiple devonfw-ide
installations.
|
Caution
|
If you use this power-feature you are taking responsibility for side-effects and should not expect support. Also if you are using Windows please read Symlinks in Windows and make your mind if you really want to do so. You might also use this hint and maintain it manually without enabling the following feature. |
In order to do so, you only need to configure the variable DEVON_SOFTWARE_PATH
in your ~/devon.properties
pointing to an existing directory on your disc (e.g. /projects/software
or C:\projects\software
).
Then devonfw-ide
will install required software into ${DEVON_SOFTWARE_PATH}/${software_name}/${software_version}
as needed and create a symbolic link to it in ${DEVON_IDE_HOME}/software/${software_name}
.
As a benefit another devonfw-ide
installation will using the same software with the same version can re-use the existing installation and only needs to create the symbolic link. No more waste of having many identical JDK installations on your disc.
As a drawback you need to be aware that specific tools may be "manipulated" after installation.
The most common case is that a tool allows to install plugins or extensions such as all IDEs do. Such "manipulations" will cause side-effects between the different devonfw-ide
installations sharing the same version of that tool.
While this can also be a benefit it may also cause trouble.
If you have a sensitive project that should not be affected by such side-effects, you may again override the DEVON_SOFTWARE_PATH
variable to the empty value in your ${DEVON_IDE_HOME}/conf/devon.properties
of that sensitive installation:
DEVON_SOFTWARE_PATH=
This will disable this feature particulary for that specific sensitive devonfw-ide
installation but let you use it for all other ones.
5.13. Integration
The devonfw-ide
already brings a lot of integration out of the box. This page is for users that want to get even more out of it. For instance this IDE ships with a console
script to open a shell with the environment variables properly set for your devonfw-ide
installation, so you get the correct version of your tools (Java, Maven, Yarn, etc.). However, you might want to open a shell from your IDE or your file manager. For some of these use-cases you need additional tweaks that are described on this page.
5.13.1. Windows
devonfw-ide automatically integrates with Windows-Explorer during setup.
CMD
If you want to open a CMD
(MS Dos Shell) directly from Windows-Explorer
simply right-click on the folder in your devonfw-ide
you want to open. From the context menu click on Open Devon CMD shell here
. This will open CMD
and automatically initialize your environment according to the devonfw-ide
project containing the folder (if any, see above).
Git-Bash
Just like for CMD
you can also click Git Bash Here
from Windows-Explorer context-menu to open a git bash. If you have selected a folder in your devonfw-ide
installation, it will automatically initialize your environment.
Cygwin
In case you have cygwin
installed on your machine, the devonfw-ide
will autodetect this during setup
and also install a Windows-Explorer
integration. Just choose Open Devon Cygwin Bash Here
to open cygwin bash and initialize your devonfw-ide
environment.
ConEMU
ConEmu is a great extension that brings additional features such as tabs to your windows shells. If you like it, you will also want to have it integrated with devonfw-ide
. All you need to do is follow these simple steps:
-
Copy the file
CmdInit.cmd
from your ConEmu installation (C:\Program Files\ConEmu\ConEmu\CmdInit.cmd
) to a personal folder (e.g.C:\Users\MYLOGIN\scripts
). -
Modify this copy of
CmdInit.cmd
by adding the lineIDEenv
(e.g. at line 6) and saving. -
Go to
ConEmu
and open thesettings
(via context menu or[Windows][Alt][p]
). -
Select
Startup > Tasks
from the left tree. -
Select the first option form
Predefined tasks (command groups)
({Shells::cmd}
) -
In the text area at the right bottom modify the location of
CmdInit.cmd
to your customized copy (%HOME%\scripts\CmdInit.cmd
). -
Select
Integration
from the left tree. -
Click on the upper
Register
button (forConEmu Here
). -
Click on
Save settings
Now you have the option ConEmu here
if you right click on a folder in Windows Explorer
that will open a new tab in ConEmu
and automatically setup your environment according to the devonfw-ide
project containing the folder (if any, see above).
ConEMU and StartExplorer
You can even integrate the Eclipse StartExplorer plug-in and ConEMU to open up console right from the file tree of eclipse into ConEMU. You can do this by adding a custom command to StartExplorer:
-
Open up eclipse
-
Open Window > Preferences
-
Select StartExplorer > Custom Commands on the left
-
Add on the right and setup the following command:
"C:\Program Files\ConEmu\ConEmu64.exe" -Dir ${resource_path} -runlist cmd.exe /k ""%ConEmuBaseDir%\CmdInit.cmd" & "IDEenv"" -cur_console:n
Be aware that you potentially have to adapt theConEmu*.exe
path to match your installation.You can even add a shell login if you installed git bash on your machine. Please be aware to potentially adapt the
sh.exe
url to match your installation:"C:\Program Files\ConEmu\ConEmu64.exe" -Dir ${resource_path} -runlist cmd.exe /k ""%ConEmuBaseDir%\CmdInit.cmd" & "IDEenv" & "%SYSTEMDRIVE%\Program Files\Git\bin\sh.exe" --login" -cur_console:n
-
State two times the "Name for *" to your choice like "ConEMU"
-
OK → OK
-
Right click on any folder/file in your eclipse file explorer and select StartExplorer > Custom Commands > ConEMU.
-
You will get a initialized console at the file/folder location! Have fun!
5.13.2. Eclipse
You might want to open a terminal directly as view inside your Eclipse IDE. Therefore we provide eclipse with the TM terminal plugin. Further the settings already configure that plugin so it automatically sets the environment properties correctly. In other words the integration comes out of the box.
To use it all you need to do is to follow these steps:
-
Open the
Terminal
view (Window > Show View > Other > Terminal > Terminal > OK
). -
Click on the
monitor icon
from the left of the icon bar of theTerminal
view. -
Choose terminal (e.g.
Local Terminal
) and confirm withOK
-
Execute
mvn -v
to verify your environment.
5.13.3. IntelliJ or WebStorm
You might want to open a terminal directly as view inside your IDEA IDE, that already ships with a feature for this out of the box. If you start your IDE via the start-idea
script provided by devon-ide
then everything is configured and your environment is set automatically.
5.14. Tools
This page is a general guide and collection to boost your productivity by using proper tools.
5.14.1. Tabs everywhere
Many people got used to tabs that have been introduced by all major browsers:
This nice feature can be added to many other tools.
Tabs for Windows Explorer
If you want to have tabs for windows explorer simply install Clover
Tabs for SSH
If you want to have tabs for your SSH client Putty (or even better Kitty that comes with WinSCP integration) you simply install SuperPutty
Tabs for CMD
If you want to have tabs for your windows command-line you simply install ConEmu
See guide-integration for integration of ConEmu with devonfw-ide
.
5.14.2. Browser Plugins
There are tons of helpful browser plugins out there and it might be a matter of personal taste what you like to have installed. However, as we are heavily using github we want to promote octotree.
5.14.3. Windows Helpers
Handle passwords
For security you want complex passwords that differ for each account? For simplicity you only want to remember a single password? Want to have both? Then you need to install KeePass right now.
Real text editor
A real developer needs a real text editor and not windows build in notepad
.
The most common choice is Notepad++.
Real compression tool
You need to deal with ZIP files, TGZ, dpkg, etc.? Just install 7zip and forget about windows build-in ZIP support (that is buggy with long file paths, etc.).
Smarter clipboard
You want to paste something from the clipboard but meanwhile you had to copy something else? Just one of many things you can easily do with ditto.
Sysinternals Tools
A real developer will quickly notice that windows build in tools to analyze processes, network connections, autostarts, etc. are quite poor. So what you really want is the Sysinternals-Suite. Make process-explorer your default task manager asap. Use autoruns to prevent nasty backround things to be started automatically. Use tcpview to figure out which process is blocking port 8080, etc.
Cope with file locks
Did you ever fail to delete a file or directory that was locked by some process and you did not even know which one it was? Then you might love IoBit Unlocker. See also this article.
Create symbolic links
You are used to symbolic and hard links in Linux? You have to work with Windows? You would also like to have such links in Windows? Why not?
If you even want to have it integrated in windows explorer you might want to install linkshellextension. However, you might want to disable SmartMove
in the configuration if you face strange performance issues when moving folders.
Linux
Install Cygwin and get your bash in windows with ssh-agent, awk, sed, tar, and all the tools you love (or hate).
X11
Want to connect via SSH and need to open an X11 app from the server? Want to see the GUI on your windows desktop? No problem: Install VcXsrv.
Keyboard Freak
Are you the keyboard shortcut guy? Want to have shortcuts for things like « and » ? Then you should try AutoHotKey. For the example (« and ») you can simply use this script to get started:
^<::Send {U+00AB}
^+<::Send {U+00BB}
Now just press [ctrl][<]
and [ctrl][>]
([ctrl][shift][<]
). Next create shortcuts to launch your IDE, to open your favorite tool, etc.
Paint anywhere on your desktop
Do you collaborate sharing your screen, and want to mark a spot on top of what you see? Use Epic Pen to do just that.
analyze graphs
Need to visualise complex graph structures? Convert them to Trivial Graph Format (.tgf) an run yEd to get an interactive visualization of your graph.
up your screen capture game
Capture any part of your screen with a single click, directly upload to dropbox, or run an svn commit (oops sorry git ;-) ) all in one go with Greenshot.
Fast Search in Windows
Everything is a desktop search utility for Windows that can rapidly find files and folders by name.
5.15. OASP4J IDE Plugins:
Since an application’s code can greatly vary, and every program can be written in lots of ways without being semantically different, OASP4J IDE comes with pre-installed and pre-configured plugins that use some kind of a probabilistic approach, usually based on pattern matching, to determine which pieces of code should be reviewed. These hints are a real time-saver, helping you to review incoming changes and prevent bugs from propagating into the released artifacts. It provides, CheckStyle, SonarQube,FindBugs. Details of each can be found in subsequent sections.
5.15.1. CheckStyle
What is CheckStyle?
CheckStyle is a Open Source development tool to help you ensure that your Java code adheres to a set of coding standards. Checkstyle does this by inspecting your Java source code and pointing out items that deviate from a defined set of coding rules.
With the Checkstyle IDE Plugin your code is constantly inspected for coding standard deviations. Within the Eclipse workbench you are immediately notified of problems via the Eclipse Problems View and source code annotations similar to compiler errors or warnings. This ensures an extremely short feedback loop right at the developers fingertips.
Why use it?
If your development team consists of more than one person, then obviously a common ground for coding standards (formatting rules, line lengths etc.) must be agreed upon - even if it is just for practical reasons to avoid superficial, format related merge conflicts. Checkstyle Plugin helps you define and easily apply those common rules.
The plugin uses a project builder to check your project files with Checkstyle. Assuming the IDE Auto-Build feature is enabled each modification of a project file will immediately get checked by Checkstyle on file save - giving you immediate feedback about the changes you made. To use a simple analogy, the Checkstyle Plug-in works very much like a compiler but instead of producing .class files it produces warnings where your code violates the Checkstyle rules. The discovered deviations are accessible in the Eclipse Problems View, as code editor annotations and via additional Checkstyle violations views.
Installation
After IDE installation, IDE provides default checkstyle configuration file which has certain check rules specified . The set of rules used to check your code is highly configurable. A Checkstyle configuration specifies which check rules are validated against your code and with which severity violations will be reported. Once defined a Checkstyle configuration can be used across multiple projects. The IDE comes with several pre-defined Checkstyle configurations. You can create custom configurations using the plugin’s Checkstyle configuration editor or even use an existing Checkstyle configuration file from an external location.
You can see violations in your workspace as shown in below figure.
Usage
So, once projects are created, follow steps mentioned below, to activate checkstyle:
-
Open the properties of the project you want to get checked.
-
Select the Checkstyle section within the properties dialog .
-
Activate Checkstyle for your project by selecting the Checkstyle active for this project check box and press OK
Now Checkstyle should begin checking your code. This may take a while depending on how many source files your project contains. The Checkstyle Plug-in uses background jobs to do its work - so while Checkstyle audits your source files you should be able to continue your work. After Checkstyle has finished checking your code please look into your Eclipse Problems View. There should be some warnings from Checkstyle. This warnings point to the code locations where your code violates the preconfigured Checks configuration.
You can navigate to the problems in your code by double-clicking the problem in you problems view. On the left hand side of the editor an icon is shown for each line that contains a Checkstyle violation. Hovering with your mouse above this icon will show you the problem message. Also note the editor annotations - they are there to make it even easier to see where the problems are.
5.15.2. FindBugs:
What is FindBugs?
FindBugsis an open source project for a static analysis of the Java bytecode to identify potential software bugs. Findbugs provides early feedback about potential errors in the code.
Why use it?
It scans your code for bugs, breaking down the list of bugs in your code into a ranked list on a 20-point scale. The lower the number, the more hardcore the bug.This helps the developer to access these problems early in the development phase.
Installation and Usage.
OASP4J IDE comes preinstalled with FindBugs plugin.
You can configure that FindBugs should run automatically for a selected project. For this right-click on a project and select Properties from the popup menu. via the project properties. Select FindBugs → Run automatically as shown below.
To run the error analysis of FindBugs on a project, right-click on it and select the Find Bugs… → Find Bugs menu entry.
Plugin provides specialized views to see the reported error messages. Select Window → Show View → Other… to access the views. The FindBugs error messages are also displayed in the Problems view or as decorators in the Package Explorer view.
5.15.3. SonarQube
what is SonarQube?
SonarQube is an open platform to manage code quality. SonarQube is a web-based application. Rules, alerts, thresholds, exclusions, settings can be configured online. By leveraging its database, SonarQube not only allows to combine metrics altogether but also to mix them with historical measures.
Why use it?
It covers seven aspects of code quality like junits, coding rules,comments,complexity,duplications, architecture and design and potential bugs. SonarQube has got a very efficient way of navigating, a balance between high-level view, dashboard and defect hunting tools. This enables to quickly uncover projects and / or components that are in analysis to establish action plans.
Installation and usage:
OASP4J IDE comes preinstalled with SonarQube. To configure it , please follow below steps:
First of all, you need to start sonar service.For that , from softwares folder in extracted from OASP4j IDE zip, choose sonarqube→bin→<choose appropriate folder according to your OS>-→and execute startSonar bat file.
If your project is not already under analysis, you’ll need to declare it through the SonarQube web interface as described here. Once your project exists in SonarQube, you’re ready to get started with SonarQube in Eclipse.
Go to Window > Preferences > SonarQube > Servers.
SonarQube in Eclipse is pre-configured to access a local SonarQube server listening on http://localhost:9000/. You can edit this server, delete it or add new ones.By default, user and password is "admin".If sonar service is started properly, test connection will give you successful result.
Linking a project to one analysed on sonar server.
In the SonarQube project text field, start typing the name of the project and select it in the list box:
Click on Finish. Your project is now associated to one analyzed on your SonarQube server.
Changing linkage
At any time, it is possible to change the project association.
To do so, right-click on the project in the Project Explorer, and then SonarQube > Change Project Association…:
Unlinking a Project
To do so, right-click on the project in the Project Explorer, and then SonarQube > Remove SonarQube Nature.
Advanced Configuration
Additional settings (such as markers for new issues) are available through Window > Preferences > SonarQube
To analyse a project, right click on project , select SonarQube→Analyse.
To look for sonarqube analysed issue, go to Window→Show View→ Others→SonarQube→SonarQube Issues. Now you can see issues in sonarqube issues tab as shown
Or you can go to link http://loclahost:9000 and login with admin as id and admin as password and goto Dashboard.you can see all the statistics of analysis of the configured projects on sonar server.
5.15.4. Soap UI
What is soap UI?
SoapUI is an open-source web service testing application for service-oriented architectures (SOA) and representational state transfers (REST). Its functionality covers web service inspection, invoking, development, simulation and mocking, functional testing, load and compliance testing. OASP4J IDE comes preinstalled with this plugin. Note: There is no update site for this tool.
Why use it?
SoapUI is a free and open source cross-platform Functional Testing solution. With an easy-to-use graphical interface, and enterprise-class features, SoapUI allows you to easily and rapidly create and execute automated functional, regression, compliance, and load tests. In a single test environment, SoapUI provides complete test coverage and supports all the standard protocols and technologies.For more details see here .
Installation and Usage:
As soon as , IDE is configured, soapUI can be seen in Windows→Preferences.
Soap ui Perspective can be opened as shown in below pictures
Creation of new Project
Once Soap UI perspective is opened, right click on projects and "select New Soap UI Project"
Once above option is selected, a new dialog is opened as shown below:
Provide initial wsdl and project name, and your soap project is created and ready for testing your webservice.
So, once project is created, and if "create Requests" option is selected , while creation of project, a new request with all the details mentioned in provided WSDL is created.
As , seen in above picture, when u click on "Request1 " node on project tree pane,on the left side request is generated automatically, and when u click on arrow button on tool bar,response is generated with the desired result.
For load testing, and functional testing, refer this link


Interactivity allows the charts to be embedded in a website, linking the reader instantly with more information on the methods used and the results found. Static versions can be used for documents.
The flow charts have been designed to be clear and concise ways to communicate a review or map's methods, whilst providing links to more detailed information.
Versions are provided in several formats: 1) either combining title and abstract screening together, or separately as title then abstract level assessments; 2) for systematic mapping or systematic review, depending on which method is used; 3) in live, editable HTML format for web-based editing, or in .Rhtml format for those comfortable with basic coding in R.
See the flow chartsThis is an Open Source project, with all files provided under a CC BY 4.0 Creative Commons license.
This means that you are free to share and adapt the files,
but you must give appropriate credit, provide a link to the license, and indicate if changes were made.


The "Programming" podcast with Minko Gechev is a weekly show that aims to make us better software engineers! With each new episode, you'll get exposed to a new idea in a brief and accessible way. Listening to the show:
Having a computer science degree is not a requirement for getting value from the "Programming" podcast. If you have one, you'll finally understand how you can use all the math you've studied.
For feedback, questions, and requests, please reach out to me at<EMAIL_ADDRESS>Minko Gechev is a senior engineer at Google, where he develops tools for Angular. Before joining Google, he was a technical co-founder and the CTO of Rhyme.com, which in 2019 was acquired by Coursera.
The President of the Republic of Bulgaria awarded Minko for his projects with a high social impact and for his contributions to computer science and software engineering.
In 2019 Forbes Bulgaria included Minko Gechev in their selection "30 under 30" in category Science and Technology.


| Element |
Schema |
Type |
Flags |
Opts |
Status |
module: ietf-netconf-acm
|
module | | | | |
|
container | | config | | current |
| | leaf | boolean | config | ? | current |
| | leaf | action-type | config | ? | current |
| | leaf | action-type | config | ? | current |
| | leaf | action-type | config | ? | current |
| | leaf | boolean | config | ? | current |
| | leaf | yang:zero-based-counter32 | no config | | current |
| | leaf | yang:zero-based-counter32 | no config | | current |
| | leaf | yang:zero-based-counter32 | no config | | current |
|
container | | config | | current |
|
list | | config | | current |
| | leaf | group-name-type | config | | current |
| | leaf-list | user-name-type | config | * | current |
|
list | | config | | current |
| | leaf | string | config | | current |
| | leaf-list | union | config | * | current |
|
list | | config | | current |
| | leaf | string | config | | current |
| | leaf | union | config | ? | current |
|
choice | | config | ? | current |
|
case | | config | | current |
| | leaf | union | config | ? | current |
|
case | | config | | current |
| | leaf | union | config | ? | current |
|
case | | config | | current |
| | leaf | node-instance-identifier | config | | current |
| | leaf | union | config | ? | current |
| | leaf | action-type | config | | current |
| | leaf | string | config | ? | current |


Congratulations {{name}} with paddle number: {{paddle_num}}! have been registered !
Register Another


{{# Pivot (in many places) based on whether the user is an editor (curator) or # someone else looking at the tree collection # # userCanEdit = True if the user is authorized to edit this collection # viewOrEdit = the function of this page ('EDIT' or 'VIEW'), regardless of # user's permissions response.title = (viewOrEdit == 'EDIT') and "Edit Tree Collection" or "View Tree Collection" }} {{# Pivot (in some places) based on whether the user is a logged-in user or # a visitor browsing tree collections. isLoggedIn = (auth.user) and True or False }} {{left_sidebar_enabled,right_sidebar_enabled=False,False}} {{response.subtitle = "loading collection %s..." % request.args[0]}} {{# TODO: make this sure shows the full collection ID! }} {{### Add support scripts for single-page editor # JSON support for older browsers (esp. IE7) response.files.append(URL('static','js/json2.js')) # Knockout.js for binding JSON model to editing UI response.files.append(URL('static','js/knockout-2.3.0.js')) # KO plugin for paginated lists response.files.append(URL('static','js/knockout-paged-e4a5770702.js')) # Knockout bindings for Twitter Bootstrap components response.files.append(URL('static','js/knockout-bootstrap.min.js')) # TODO: remove if not used # jQuery-File-Upload plugin and supporting files (TODO) # minimal support for $.widget() response.files.append(URL('static','jQuery-File-Upload-9.5.2/js/vendor/jquery.ui.widget.js')) # Iframe Transport is required for browsers without support for XHR file uploads response.files.append(URL('static','jQuery-File-Upload-9.5.2/js/jquery.iframe-transport.js')) response.files.append(URL('static','jQuery-File-Upload-9.5.2/js/jquery.fileupload.js')) response.files.append(URL('static','jQuery-File-Upload-9.5.2/css/jquery.fileupload.css')) }} {{extend 'layout.html'}}
There are just a few tabs here. The Home tab shows metadata and lists the phylogenetic trees in the current collection. There's not much metadata for a collection, just a name and brief description. Note that the collection ID becomes the URL for this collection. This is based on the first name saved with this collection; you should't change the name after that, since that would break any links to the collection.
{{ if viewOrEdit == 'EDIT': }}To add a tree from any study in the Open Tree of Life corpus (a.k.a. "phylesystem"), see Add a tree to this collection below. You'll need to find the study and tree with the search tool, or paste in a direct URL to this tree in the curation tool.
{{ pass }}Click on the name of any included tree to view it in the Open Tree study curation tool. Click Synthesis to submit this collection to our synthesis tools or to see its status in synthesis. Click History to see a combined history of changes to this collection and its use in synthesis.
Collection ID
This tab includes tools for synthesis using this collection. The underlying APIs are still under active development. If you're comfortable using command-line tools, you can try them using these instructions.
This tab shows the edit history for this collection: each saved version of the data, who submitted the changes, and a comment added each time. The history might include edits made in other tools or by automated software. This history is possible because we keep collection files under version control in a GitHub repository.
You'll also see its synthesis history, whenever it was submitted as an input to synthesis. These events are interleaved with the change history to show the collection's state for that particular synthesis run.
| Date | Event | Summary | Details |
|---|---|---|---|
| ? |
Version saved by ? Synthesis run by ? |
? ? |
Diff view Synthesis details — |
Add a comment for these changes
Add a brief description of the work you've done. This will appear in the History tab.
Warning: You have not provided a public email address in your GitHub profile. You can still edit data but this activity will not be shown on your GitHub or OpenTree profiles (and cannot be linked back at a later date). See the help page for details.


Weather Dashboard
Search for a City :
Temperature:
Humidity:
Wind Speed:
UV Index:
5-Day Forecast:
Temp:
Humidity:
Temp:
Humidity:
Temp:
Humidity:
Temp:
Humidity:
Temp:
Humidity:


|
Home >
Enterprise >
Participants >
Elastic >
Results
|
|
Procedure
Cobalt Strike: Built-in UAC bypass token duplication capability executed to elevate process integrity level
Footnotes
- During the evaluation, Windows Defender was unknowingly reenabled. As a result, Bypass UAC was tested in a slightly modified method. The detection method Endgame exhibited would have been valid regardless.
Procedure
Cobalt Strike: Built-in UAC bypass token duplication capability executed to modify current process token
Footnotes
- During the evaluation, Windows Defender was unknowingly reenabled. As a result, Bypass UAC was tested in a slightly modified method. The detection method Endgame exhibited would have been valid regardless.
[2]
Procedure
Cobalt Strike: 'ls' (List) via Win32 APIs to enumerate a network shared drive (Wormshare) on Conficker (<IP_ADDRESS>)
Procedure
Empire: WinEnum module included enumeration of Windows update information
Footnotes
- Interactive Shell was not by itself considered telemetry, but the analyst can retrieve additional Windows Logs to enhance baseline Endgame functionality.
Procedure
Empire: WinEnum module included enumeration of established network connections
Footnotes
- Interactive Shell was not by itself considered telemetry, but the analyst can retrieve additional Windows Logs to enhance baseline Endgame functionality.
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
[3]
Procedure
Empire: 'get-content' via PowerShell to collect sensitive file (it_tasks.txt) from a network shared drive (Wormshare) on Conficker (<IP_ADDRESS>)
Footnotes
- Had malicious access to it_tasks been detected, response actions allow file retrieval which could have identified credentials in files.
Procedure
Empire: 'net use' via PowerShell to brute force password spraying authentication attempts to Morris (<IP_ADDRESS>) and Nimda (<IP_ADDRESS>) targeting credentials of usersKmitnick, Bob, and Frieda
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
Procedure
Empire: 'net use' via PowerShell to brute force password spraying authentication attempts to Morris (<IP_ADDRESS>) and Nimda (<IP_ADDRESS>) targeting credentials of usersKmitnick, Bob, and Frieda
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
Procedure
Empire: Brute force password spraying attempts targeted Windows admin shares on Morris (<IP_ADDRESS>) and Nimda (<IP_ADDRESS>)
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
Procedure
Empire: Brute force password spraying attempts targeted Windows admin shares on Morris (<IP_ADDRESS>) and Nimda (<IP_ADDRESS>)
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
Procedure
Empire: 'net use' via PowerShell to successfully authenticate to Conficker (<IP_ADDRESS>) using credentials of user Kmitnick
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
Procedure
Empire: 'net use' via PowerShell to successfully authenticate to Conficker (<IP_ADDRESS>) using credentials of user Kmitnick
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
Procedure
Empire: Successful authentication to Conficker (<IP_ADDRESS>) using credentials of user Kmitnick as a result of the brute force password spraying
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
[3]
Procedure
Empire: Successful authentication to Conficker (<IP_ADDRESS>) using credentials of user Kmitnick as a result of the brute force password spraying
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
[3]
Procedure
Empire: 'net use' via PowerShell to successfully authenticate to Creeper (<IP_ADDRESS>) using credentials of user Kmitnick
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
Procedure
Empire: 'net use' via PowerShell to successfully authenticate to Creeper (<IP_ADDRESS>) using credentials of user Kmitnick
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
[2]
Procedure
Empire: Built-in move capability executed to write malicious VBScript (update.vbs) to disk on Creeper (<IP_ADDRESS>)
Procedure
Empire: 'type' via PowerShell to remotely enumerate a specific file (update.vbs) on Creeper (<IP_ADDRESS>)
Procedure
Empire: 'Get-ChildItem' via PowerShell to enumerate a network shared drive (Wormshare) on Conficker (<IP_ADDRESS>)
Procedure
Empire: 'copy' via PowerShell collected a file (Shockwave_network.vsdx) from a network shared drive (Wormshare) on Conficker (<IP_ADDRESS>)
Footnotes
- Telemetry was available for the write file of shockwave_network.vsdx into the Recycle Bin, but no data was available that indicated it came from a network shared drive.
Procedure
Empire: File dropped to disk is a renamed copy of the WinRAR binary
Footnotes
- Telemetry later identified recycler.exe as WinRAR during execution, no detections identified it as WinRAR upon file copy.
Procedure
Empire: Executed binary (recycler.exe) created compressed archive (old.rar) of previously collected file
Procedure
Empire: Executed binary (recycler.exe) created compressed archive (old.rar) of previously collected file
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
Procedure
Empire: Executed binary (recycler.exe) created compressed archive (old.rar) of previously collected file
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
Procedure
Empire: Executed binary (recycler.exe) created encrypted archive (old.rar) of previously collected file
Procedure
Empire: Executed binary (recycler.exe) created encrypted archive (old.rar) of previously collected file
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
Procedure
Empire: Executed binary (recycler.exe) created encrypted archive (old.rar) of previously collected file
Footnotes
- Telemetry is immediately available within the event tree and then can be enriched with ATT&CK Techniques and Tactics, so this is counted as two detections.
Procedure
Empire: Sequence of 'echo' commands via PowerShell to populate commands in text file (ftp.txt), which is then executed by FTP to exfil data through network connection separate of existing C2 channel
Procedure
Used unicode right-to-left override (RTLO) character to obfuscate file name rcs.3aka3.doc (originally cod.3aka.scr)
Criteria
Evidence of the right-to-left override character (U+202E) in the rcs.3aka.doc process OR the original filename (cod.3aka.scr)
Footnotes
- Configuration changes were made to add detection logic.
Procedure
Read and downloaded ZIP (Draft.zip) over C2 channel (<IP_ADDRESS> over TCP port 1234)
Criteria
The rcs.3aka3.doc process reading the file draft.zip while connected to the C2 channel
Footnotes
- Configuration changes were made to increase detection capability, specifically additional API monitoring.
[2]
Procedure
Used HTTPS to transport C2 (<IP_ADDRESS>) traffic
Criteria
Evidence that the network data sent over the C2 channel is HTTPS
Footnotes
- Although telemetry showed a network connection over port 443 no protocol was identified for this traffic, so a detection does not apply.
Procedure
Used HTTPS to encrypt C2 (<IP_ADDRESS>) traffic
Criteria
Evidence that the network data sent over the C2 channel is encrypted
Procedure
Executed the CryptUnprotectedData API call to decrypt Chrome passwords
Criteria
accesschk.exe executing the CryptUnprotectedData API
Procedure
Dumped password hashes from the Windows Registry by injecting a malicious DLL into Lsass.exe
Criteria
powershell.exe injecting into lsass.exe OR lsass.exe reading Registry keys under HKLM:\SAM\SAM\Domains\Account\Users\
Footnotes
- Configuration changes were made to loosen rule logic and/or black lists.
Procedure
Dumped password hashes from the Windows Registry by injecting a malicious DLL into Lsass.exe
Criteria
powershell.exe injecting into lsass.exe OR lsass.exe reading Registry keys under HKLM:\SAM\SAM\Domains\Account\Users\
Footnotes
- Configuration changes were made to loosen rule logic and/or black lists.
Procedure
Read data in the user's Downloads directory using PowerShell
Criteria
powershell.exe reading files in C:\Users\pam\Downloads\
Procedure
Read and downloaded ZIP (working.zip on Desktop) over C2 channel (<IP_ADDRESS> over TCP port 8443)
Criteria
python.exe reading the file working.zip while connected to the C2 channel
Footnotes
- Configuration changes were made to increase detection capability, specifically additional API monitoring.
Procedure
Executed persistent service (javamtsup) on system startup
Criteria
javamtsup.exe spawning from services.exe
Procedure
Used HTTPS to transport C2 (<IP_ADDRESS>) traffic
Criteria
Established network channel over the HTTPS protocol
Procedure
Used HTTPS to encrypt C2 (<IP_ADDRESS>) traffic
Criteria
Evidence that the network data sent over the C2 channel is encrypted
Procedure
Read and collected a local file using PowerShell
Criteria
powershell.exe reading the file MITRE-ATTACK-EVALS.HTML
Criteria
fodhelper.exe spawns cmd.exe as a high-integrity process (note: Due to the configuration of the environment, the adversary's process was high by default. This sub-step was evaluated based on the criteria of detecting data related to process integrity level as well as the executed mechanics of the UAC bypass)
Data Sources
- Process Monitoring
[2]
Criteria
fodhelper.exe spawns cmd.exe as a high-integrity process (note: Due to the configuration of the environment, the adversary's process was high by default. This sub-step was evaluated based on the criteria of detecting data related to process integrity level as well as the executed mechanics of the UAC bypass)
Data Sources
- Windows Registry
Criteria
fodhelper.exe spawns cmd.exe as a high-integrity process (note: Due to the configuration of the environment, the adversary's process was high by default. This sub-step was evaluated based on the criteria of detecting data related to process integrity level as well as the executed mechanics of the UAC bypass)
Data Sources
- Process Monitoring
Criteria
powershell.exe spawns samcat.exe as a high-integrity process (note: Due to the configuration of the environment, the adversary's process was high by default. This sub-step was evaluated based on the criteria of detecting data related to process integrity level as well as the executed mechanics of the UAC bypass)
Data Sources
- Process Monitoring
[2]
Criteria
AccountingIQ.exe queries HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB\ and loads dll329.dll


flixel.util.FlxGradient
- type
- class
Adds a set of color gradient creation / rendering functions
Static Methods
- parameters
width
The width of the FlxSprite (and therefore gradient)
height
The height of the FlxSprite (and therefore gradient)
colors
An array of colour values for the gradient to cycle through
chunkSize
If you want a more old-skool looking chunky gradient, increase this value!
rotation
Angle of the gradient in degrees. 90 = top to bottom, 180 = left to right. Any angle is valid
interpolate
Interpolate the colours? True uses RGB interpolation, false uses linear RGB
- returns
- An FlxSprite containing your gradient (if valid parameters given!)
- parameters
dest
The BitmapData to overlay the gradient onto
width
The width of the FlxSprite (and therefore gradient)
height
The height of the FlxSprite (and therefore gradient)
colors
An array of colour values for the gradient to cycle through
destX
The X offset the gradient is drawn at (default 0)
destY
The Y offset the gradient is drawn at (default 0)
chunkSize
If you want a more old-skool looking chunky gradient, increase this value!
rotation
Angle of the gradient in degrees. 90 = top to bottom, 180 = left to right. Any angle is valid
interpolate
Interpolate the colours? True uses RGB interpolation, false uses linear RGB
- returns
- The composited BitmapData
- parameters
dest
The FlxSprite to overlay the gradient onto
width
The width of the FlxSprite (and therefore gradient)
height
The height of the FlxSprite (and therefore gradient)
colors
An array of colour values for the gradient to cycle through
destX
The X offset the gradient is drawn at (default 0)
destY
The Y offset the gradient is drawn at (default 0)
chunkSize
If you want a more old-skool looking chunky gradient, increase this value!
rotation
Angle of the gradient in degrees. 90 = top to bottom, 180 = left to right. Any angle is valid
interpolate
Interpolate the colours? True uses RGB interpolation, false uses linear RGB
- returns
- The composited FlxSprite (for chaining, if you need)


YOU WON sorry therewasn't any more stuff i did a whole revamp of my idea late term becausse i was unsaitfied with how my game was comiing out


HELLO! I'm Effi Malach, recent graduate full-stack course with passionate
for developing scalable web aplications and working across the full stack.
I've built web apps from the ground-up using React,Node,express and mongodb.
Professional skills
HTML & CSS
JavaScript
Node
mongodb
Sql
c#
education
FullStack Programing Netcraft
2021
React,Node,express and mongodb
Sql Server DBA Microsoft
2017 - 2018
Querying, Administration & Implementing a Data Warehouse with Microsoft SQL Server
Bachelor of Biology from hebrew University Of Jerusalem
2007 - 2011
Biotechnology for Agricultural Crops.
experience
Sql Server DBA Outsource
2018 - 2019
Querying, Administration & Implementing a Data Warehouse with Microsoft SQL Server


Product Performance Select a product category below and see transactions across brands. Run Customer Location Select an area below and see transactions across brands.


Next
Skip
Interface
We build the best user interfaces on the marketplaces, custom coded for perfection.
AwesomeExperience
Every aspect taken into account to obtain a simple, easy to use experience for our users.
ExcellentCreativity
Every template we build has something unique and beautiful for you to benefit from.
Sweet