And the Records Department, after all, was itself only a single branch of the Ministry of Truth, whose primary job was not to reconstruct the past but to supply the citizens of Oceania with newspapers, films, textbooks, telescreen programmes, plays, novels—with every conceivable kind of information, instruction, or entertainment, from a statue to a slogan, from a lyric poem抒情短诗 to a biological treatise专题论文, and from a child's spelling-book to a Newspeak dictionary. And the Ministry had not only to supply the multifarious各种各样的 needs of the party, but also to repeat the whole operation at a lower level for the benefit of the proletariat无产阶级. There was a whole chain of separate departments dealing with proletarian无产阶级的connected with ordinary people who earn money by working, especially those who do not own any property literature, music, drama, and entertainment generally. Here were produced rubbishy质量低劣的of very poor quality newspapers containing almost nothing except sport, crime and astrology占星术 the study of the positions of the stars and the movements of the planets in the belief that they influence human affairs, sensational five-cent novelettes中篇小说（尤指被认为很蹩脚的言情小说）a short novel, especially a romantic novel that is considered to be badly written, films oozing充满（特质、气质等） with sex, and sentimental情感的（而非理性的）connected with your emotions, rather than reason songs which were composed entirely by mechanical means on a special kind of kaleidoscope known as a versificator. There was even a whole sub-section—Pornosec, it was called in Newspeak—engaged in producing the lowest kind of pornography, which was sent out in sealed packets and which no Party member, other than those who worked on it, was permitted to look at.
Three messages had slid out of the pneumatic由压缩空气操作的；风动的worked by air under pressure tube while Winston was working, but they were simple matters, and he had disposed of them before the Two Minutes Hate interrupted him. When the Hate was over he returned to his cubicle（大房间分隔出的）小房间，隔间a small room that is made by separating off part of a larger room, took the Newspeak dictionary from the shelf, pushed the speakwrite to one side, cleaned his spectacles眼镜, and settled down to专心致志于 his main job of the morning.
Winston's greatest pleasure in life was in his work. Most of it was a tedious routine, but included in it there were also jobs so difficult and intricate that you could lose yourself in them as in the depths of a mathematical problem—delicate精致的；精细的；精密的made or formed in a very careful and detailed way pieces of forgery伪造品；赝品something, for example a document, piece of paper money, etc., that has been copied in order to cheat people in which you had nothing to guide you except your knowledge of the principles of Ingsoc and your estimate of what the Party wanted you to say. Winston was good at this kind of thing. On occasion间或；偶尔from time to time he had even been entrusted with the rectification of ‘The Times' leading articles, which were written entirely in Newspeak. He unrolled the message that he had set aside earlier. It ran:
times 3.12.83 reporting bb dayorder doubleplusungood refs unpersons rewrite fullwise upsub antefiling
In Oldspeak (or standard English) this might be rendered:
The reporting of Big Brother's Order for the Day in ‘The Times' of December 3rd 1983 is extremely unsatisfactory and makes references to non-existent persons. Rewrite it in full and submit your draft to higher authority before filing把（文件等）归档.
Winston read through the offending article. Big Brother's Order for the Day, it seemed, had been chiefly devoted to praising the work of an organization known as FFCC, which supplied cigarettes and other comforts to the sailors in the Floating Fortresses浮岛要塞. A certain Comrade Withers, a prominent member of the Inner Party, had been singled out for special mention and awarded a decoration, the Order of Conspicuous明显的；惹人注意的easy to see or notice; likely to attract attention Merit, Second Class.
Three months later FFCC had suddenly been dissolved with no reasons given. One could assume that Withers and his associates were now in disgrace耻辱；不光彩the loss of other people's respect and approval because of the bad way sb has behaved, but there had been no report of the matter in the Press or on the telescreen. That was to be expected, since it was unusual for political offenders to be put on trial or even publicly denounced. The great purges involving thousands of people, with public trials of traitors and thought-criminals who made abject下贱的；卑躬屈节的；自卑的without any pride or respect for yourself confession of their crimes and were afterwards executed, were special show-pieces not occurring oftener than once in a couple of years. More commonly, people who had incurred the displeasure of the Party simply disappeared and were never heard of again. One never had the smallest clue as to what had happened to them. In some cases they might not even be dead. Perhaps thirty people personally known to Winston, not counting his parents, had disappeared at one time or another.
 In the cubicle across the way Comrade Tillotson was still crouching secretively over his speakwrite. He raised his head for a moment: again the hostile spectacle-flash. Winston wondered whether Comrade Tillotson was engaged on the same job as himself. It was perfectly possible. So tricky a piece of work would never be entrusted to a single person: on the other hand, to turn it over to a committee would be to admit openly that an act of fabrication was taking place. Very likely as many as a dozen people were now working away on rival versions of what Big Brother had actually said. And presently some master brain in the Inner Party would select this version or that, would re-edit it and set in motion the complex processes of cross-referencing that would be required, and then the chosen lie would pass into the permanent records and become truth.
Winston did not know why Withers had been disgraced. Perhaps it was for corruption or incompetence. Perhaps Big Brother was merely getting rid of a too-popular subordinate. Perhaps Withers or someone close to him had been suspected of heretical tendencies. Or perhaps—what was likeliest of all—the thing had simply happened because purges and vaporizations were a necessary part of the mechanics of government. The only real clue lay in the words ‘refs unpersons', which indicated that Withers was already dead. You could not invariably assume this to be the case when people were arrested. Sometimes they were released and allowed to remain at liberty for as much as a year or two years before being executed. Very occasionally some person whom you had believed dead long since would make a ghostly reappearance at some public trial where he would implicate牵涉，涉及（某人）to show or suggest that sb is involved in sth bad or criminal hundreds of others by his testimony证词；证言；口供a formal written or spoken statement saying what you know to be true, usually in court before vanishing, this time for ever. Withers, however, was already an UNPERSON. He did not exist: he had never existed. Winston decided that it would not be enough simply to reverse the tendency of Big Brother's speech. It was better to make it deal with something totally unconnected with its original subject.
He might turn the speech into the usual denunciation公开谴责；斥责；指责an act of criticizing sb/sth strongly in public of traitors and thought-criminals, but that was a little too obvious, while to invent a victory at the front, or some triumph of over-production in the Ninth Three-Year Plan, might complicate the records too much. What was needed was a piece of pure fantasy. Suddenly there sprang into his mind, ready made as it were, the image of a certain Comrade Ogilvy, who had recently died in battle, in heroic circumstances. There were occasions when Big Brother devoted his Order for the Day to commemorating some humble, rank-and-file普通士兵the ordinary soldiers who are not officers Party member whose life and death he held up as an example worthy to be followed. Today he should commemorate Comrade Ogilvy. It was true that there was no such person as Comrade Ogilvy, but a few lines of print and a couple of faked photographs would soon bring him into existence.
Winston thought for a moment, then pulled the speakwrite towards him and began dictating in Big Brother's familiar style: a style at once military and pedantic迂腐的；学究气的too worried about small details or rules, and, because of a trick of asking questions and then promptly answering them ('What lessons do we learn from this fact, comrades? The lesson—which is also one of the fundamental principles of Ingsoc—that,' etc., etc.), easy to imitate.
At the age of three Comrade Ogilvy had refused all toys except a drum, a sub-machine gun, and a model helicopter. At six—a year early, by a special relaxation of the rules—he had joined the Spies, at nine he had been a troop leader. At eleven he had denounced his uncle to the Thought Police after overhearing a conversation which appeared to him to have criminal tendencies. At seventeen he had been a district organizer of the Junior Anti-Sex League. At nineteen he had designed a hand-grenade手榴弹a small bomb that can be thrown by hand or fired from a gun which had been adopted by the Ministry of Peace and which, at its first trial, had killed thirty-one Eurasian prisoners in one burst. At twenty-three he had perished in action. Pursued by enemy jet planes while flying over the Indian Ocean with important despatches, he had weighted his body with his machine gun and leapt out of the helicopter into deep water, despatches and all—an end, said Big Brother, which it was impossible to contemplate without feelings of envy. Big Brother added a few remarks on the purity and single-mindedness一心一意 of Comrade Ogilvy's life. He was a total abstainer and a nonsmoker, had no recreations except a daily hour in the gymnasium, and had taken a vow of celibacy禁欲；独身(生活), believing marriage and the care of a family to be incompatible with a twenty-four-hour- a-day devotion to duty. He had no subjects of conversation except the principles of Ingsoc, and no aim in life except the defeat of the Eurasian enemy and the hunting-down of spies, saboteurs, thoughtcriminals, and traitors generally.
Winston debated with himself whether to award Comrade Ogilvy the Order of Conspicuous Merit: in the end he decided against it because of the unnecessary cross-referencing that it would entail.
Once again he glanced at his rival in the opposite cubicle. Something seemed to tell him with certainty that Tillotson was busy on the same job as himself. There was no way of knowing whose job would finally be adopted, but he felt a profound conviction深信；坚信；坚定；肯定the feeling of believing sth strongly and of being sure about it that it would be his own. Comrade Ogilvy, unimagined an hour ago, was now a fact. It struck him as curious that you could create dead men but not living ones. Comrade Ogilvy, who had never existed in the present, now existed in the past, and when once the act of forgery was forgotten, he would exist just as authentically, and upon the same evidence, as Charlemagne查理曼(742-814,于768-814为法兰克王,并于800-814为西罗马帝国之皇帝) or Julius Caesar.


Tween
JS
TweenJS Example
This example shows how to use TweenJS, including animation, delays, and function calls


Evolutionary Computation
Evolution of Neural Networks
Motivations for neuroevolution
Miikkulainen, Risto. "Evolution of neural networks." Proceedings of the Genetic and Evolutionary Computation Conference Companion. 2017.
Neuron Model
C. Stangor and J. Walinga. Introduction to Psychology.
[BC open textbook
collection]. Flat World Knowledge, L.L.C., 2015.
Artificial Neural Networks
cs231n.github.io
Neuroevolution
Gruau, Frederic, and Darrell Whitley. "Adding learning
to the cellular development of neural networks:
Evolution and the Baldwin effect." Evolutionary
computation 1.3 (1993): 213-233.
|
Fleischer, Kurt, and Alan H. Barr. "A simulation testbed
for the study of multicellular development: The multiple
mechanisms of morphogenesis." 1994
|
Neuroevolution
Stanley, Kenneth O., and Risto Miikkulainen. "Evolving
neural networks through augmenting topologies."
Evolutionary computation 10.2 (2002): 99-127
|
Miller, Julian F., Dennis G. Wilson, and Sylvain
Cussat-Blanc. "Evolving Developmental Programs That
Build Neural Networks for Solving Multiple Problems."
Genetic Programming Theory and Practice XVI. Springer,
Cham, 2019. 137-178.
|
Neuroevolution
Miikkulainen, Risto. "Evolution of neural networks." Proceedings of the Genetic and Evolutionary Computation Conference Companion. 2017.
Evolution of Neural Structure
Miikkulainen, Risto. "Evolution of neural networks." Proceedings of the Genetic and Evolutionary Computation Conference Companion. 2017.
Problems with Neuroevolution
Miikkulainen, Risto. "Evolution of neural networks." Proceedings of the Genetic and Evolutionary Computation Conference Companion. 2017.
Direct Encoding
Neural network structure or weights are directly encoded in genome: NEAT
Stanley, Kenneth O., and Risto Miikkulainen. "Evolving neural networks through augmenting topologies." Evolutionary computation 10.2 (2002): 99-127
Indirect Encoding
Neural network structure or weights are the result of developing the genome: Cellular Encoding, HyperNEAT
Miikkulainen, Risto. "Evolution of neural networks." Proceedings of the Genetic and Evolutionary Computation Conference Companion. 2017, from Gruau, Frederic, and Darrell Whitley. "Adding learning to the cellular development of neural networks: Evolution and the Baldwin effect." Evolutionary computation 1.3 (1993): 213-233.
Exercise 2
Work on your inverted class presentations!


Atayal is made mainly for developers rather than end users.
It's very extendible.
Here's how Atayal do it.
Why Atayal is different from other CMS
No magics in Atayal at all?


Is \large{NUMBER}
divisible by
FACTOR
?
DIVISIBLE ? "Yes" : "No"
Any even number is divisible by 2
.
NUMBER
is even, so yes, it is
divisible by 2
.
NUMBER
is odd, so it is
not divisible by 2
.
A number is divisible by FACTOR
if the sum of its digits is divisible by
FACTOR
.
[Why?]
First, we can break the number up by place value:
\qquad\begin{eqnarray}
\blue{NUMBER}=
integerToDigits(NUMBER).map(function(v, p) {
var placeValue = pow(10,
integerToDigits(NUMBER).length - p - 1);
return "&&\\blue{" + v + "}\\cdot" +
placeValue;
}).join("+ \\\\")
\end{eqnarray}
Next, we can rewrite each of the place values as
1
plus a bunch of 9
s:
\qquad\begin{eqnarray}
\blue{NUMBER}=
integerToDigits(NUMBER).map(function(v, p) {
var placeValue = pow(10,
integerToDigits(NUMBER).length - p - 1);
if (placeValue === 1) {
return "&&\\blue{" + v + "}";
}
return "&&\\blue{" + v + "}(" +
(placeValue - 1) + "+1)";
}).join("+ \\\\")
\end{eqnarray}
Now if we distribute and rearrange, we get this:
\qquad\begin{eqnarray}
\blue{NUMBER}=
integerToDigits(NUMBER).map(function(v, p) {
var placeValue = pow(10,
integerToDigits(NUMBER).length - p - 1);
if (placeValue === 1) {
return "";
}
return "&&\\gray{" + v + "\\cdot" +
(placeValue - 1) + "}";
}).join("+ \\\\")&&
\blue{integerToDigits(NUMBER)
.join("}+\\blue{")}
\end{eqnarray}
Any number consisting only of 9
s is
a multiple of FACTOR
, so
the first cardinal(integerToDigits(NUMBER)
.length - 1) terms must all be multples of
FACTOR
.
That means that to figure out whether the original
number is divisible by FACTOR
, all we need to do is add up the digits
and see if the sum is divisible by
FACTOR
. In other words,
\blue{NUMBER}
is divisible
by FACTOR
if \blue{
integerToDigits(NUMBER).join("}+\\blue{")
}
is divisble by
FACTOR
!
Add the digits of STEP.num
:
STEP.digits.join("+") =
STEP.sum
If STEP.sum
is
divisible by FACTOR
, then
STEP.num
must also be
divisible by FACTOR
.
_.last(STEPS).sum
is divisible
by FACTOR
, therefore
\blue{NUMBER}
must also be divisible by FACTOR
.
_.last(STEPS).sum
is not divisible
by FACTOR
, therefore
\blue{NUMBER}
must not be divisible by FACTOR
.
A number is divisible by 4
if the last
two digits are divisbile by 4
.
[Why?]
We can rewrite the number as a multiple of
100
plus the last two digits:
\qquad
\gray{NUMBER.toString().slice(0, -2)}
\blue{("00" + (NUMBER % 100)).slice(-2)} =
\gray{NUMBER.toString().slice(0, -2)}
\gray{00} +
\blue{("00" + (NUMBER % 100)).slice(-2)}
Because NUMBER.toString().slice(0, -2)
00
is a multiple of 100
,
it is also a multiple of 4
.
So as long as the value of the last two digits,
\blue{NUMBER % 100}
,
is divisible by 4
, the original
number must also be divisible by 4
!
Is the value of the last two digits,
NUMBER % 100
,
divisble by 4
?
Yes,
\blue{NUMBER % 100 \div 4 =
NUMBER % 100 / 4}
, so
NUMBER
must also be divisible by
4
.
No, NUMBER % 100
is not
divisible by 4
, so
NUMBER
is also not divisible by
4
.
A number is divisible by 5
if the last
digit is a 0
or a 5
.
The last digit of NUMBER
is
NUMBER % 10
, so yes
NUMBER
is divisible by
5
.
The last digit of NUMBER
is
NUMBER % 10
, so no
NUMBER
is not divisible by
5
.
A number is divisible by 10
if the last
digit is a 0
.
The last digit of NUMBER
is
NUMBER % 10
, so yes
NUMBER
is divisible by
10
.
The last digit of NUMBER
is
NUMBER % 10
, so no
NUMBER
is not divisible by
10
.


Displacement of an E-box-binding repressor by basic helix-loop-helix proteins: implications for B-cell specificity of the immunoglobulin heavy-chain enhancer.
Abstract
The activity of the immunoglobulin heavy-chain (IgH) enhancer is restricted to B cells, although it binds both B-cell-restricted and ubiquitous transcription factors. Activation of the enhancer in non-B cells upon overexpression of the basic helix-loop-helix (bHLH) protein E2A appears to be mediated not only by the binding of E2A to its cognate E box but also by the resulting displacement of a repressor from that same site. We have identified a `` two-handed '' zinc finger protein, denoted ZEB, the DNA-binding specificity of which mimics that of the cellular repressor. By employing a derivative E box that binds ZEB but not E2A, we have shown that the repressor is active in B cells and the IgH enhancer is silenced in the absence of binding competition by bHLH proteins. Hence, we propose that a necessary prerequisite of enhancer activity is the B-cell-specific displacement of a ZEB-like repressor by bHLH proteins.


IgeObject CLASS
Declared in IgeObject.js
Methods
alive
Determines if the object is alive or not. The alive value is automatically set to false when the object's destroy() method is called. Useful for checking if an object that you are holding a reference to has been destroyed.
alive({Boolean} val)
- {Boolean}val The value to set the alive flag to.
Returns {*}
Get the alive flag value
var entity = new IgeEntity();
console.log(entity.alive());
Set the alive flag value
var entity = new IgeEntity();
entity.alive(true);
managed
Gets / set the managed mode from 0 to 2. 0 = off, 1 = static, 2 = dynamic.
managed({Number} val)
- {Number}val Set to 0 to switch off managed mode, 1 to set to static managed mode or 2 to dynamic managed mode. When in a managed mode and when the parent of this entity has an entity manager component enabled, the entity will be checked to see if it is inside the visible area of a viewport. If it is deemed not to be in a visible area (via it's AABB non-intersection with viewport view area) then it will either be un-mounted from the parent (mode 1) or marked as no longer in view (mode 2). Mode 2 in view = false will cause the entity to no longer be depth-sorted or rendered but will still have it's update() method called each frame allowing logic processing to occur as normal. The default managed mode is 1.
Returns {*}
id
Gets / sets the current object id. If no id is currently assigned and no id is passed to the method, it will automatically generate and assign a new id as a 16 character hexadecimal value typed as a string.
id({String} id)
Returns {*} Returns this when setting the value or the current value if none is specified.
Get the id of an entity
var entity = new IgeEntity();
console.log(entity.id());
Set the id of an entity
var entity = new IgeEntity();
entity.id('myNewId');
Set the id of an entity via chaining
var entity = new IgeEntity()
.id('myNewId');
category
Gets / sets the arbitrary category name that the object belongs to.
category({String} val)
Returns {*}
Get the category of an entity
var entity = new IgeEntity();
console.log(entity.category());
Set the category of an entity
var entity = new IgeEntity();
entity.category('myNewCategory');
Set the category of an entity via chaining
var entity = new IgeEntity()
.category('myNewCategory');
Get all the entities belonging to a category
var entityArray = ige.$$('categoryName');
Remove the category of an entity
// Set category to some name
var entity = new IgeEntity()
.category('myCategory');
// Will output "myCategory"
console.log(entity.category());
// Now remove the category
entity.category('');
// Will return ""
console.log(entity.category());
group
DEPRECIATED - Use category() instead. A warning method to help developers move to the new groups system.
group()
addGroup
Adds this entity to a group or groups passed as arguments.
addGroup({*} groupName)
- {*}groupName A group or array of group names to add the entity to.
Returns {*}
Add entity to a single group
var entity = new IgeEntity();
entity.addGroup('g1');
Add entity to multiple groups
var entity = new IgeEntity();
entity.addGroup('g1', 'g2', 'g3');
Add entity to multiple groups via an array
var entity = new IgeEntity();
entity.addGroup(['g1', 'g2', 'g3']);
Add entity to multiple groups via multiple arrays
var entity = new IgeEntity();
entity.addGroup(['g1', 'g2', 'g3'], ['g4', 'g5']);
inGroup
Checks if the entity is in the group or array of group names passed.
inGroup({*} groupName, {Boolean} matchAllGroups)
- {*}groupName A group name or array of names.
- {Boolean}matchAllGroups If set to true, will cause the method to check if the entity is in ALL the groups, otherwise the method will check if the entity is in ANY group.
Returns {Boolean}
Check if the entity is in a group
var entity = new IgeEntity();
entity.addGroup('g1', 'g2');
// Will output true since entity is part of g1 group
console.log(entity.inGroup('g1', false);
// Will output false since entity is not part of g3 group
console.log(entity.inGroup('g3', false);
Check if the entity is in an array of groups using ANY and ALL options
var entity = new IgeEntity();
entity.addGroup('g1', 'g2');
// Will output true since entity is part of g1 group
console.log(entity.inGroup(['g1, 'g3'], false);
// Will output false since entity is not part of g3 group
console.log(entity.inGroup(['g1, 'g3'], true);
inAllGroups
Checks if the entity is in the specified group or array of groups. If multiple group names are passed, as an array the method will only return true if the entity is in ALL the passed groups.
inAllGroups({*} groupName)
- {*}groupName The name of the group or array if group names to check if this entity is a member of.
Returns {Boolean}
Check if entity belongs to all of the passed groups
// Add a couple of groups
var entity = new IgeEntity();
entity.addGroup(['g1', 'g2']);
// This will output "false" (entity is not part of g3)
console.log(entity.inAllGroups(['g1', 'g3']));
// This will output "true"
console.log(entity.inAllGroups('g1'));
// This will output "true"
console.log(entity.inAllGroups(['g1', 'g2']));
inAnyGroup
Checks if the entity is in the specified group or array of group names. If multiple group names are passed as an array, the method will return true if the entity is in ANY of the the passed groups.
inAnyGroup({*} groupName)
- {*}groupName The name of the group or array of group names to check if this entity is a member of.
Returns {Boolean}
Check if entity belongs to any of the passed groups
// Add a couple of groups
var entity = new IgeEntity();
entity.addGroup('g1', 'g2');
// This will output "false"
console.log(entity.inAnyGroup('g3'));
// This will output "true"
console.log(entity.inAnyGroup(['g3', 'g1']));
groups
Gets an array of all groups this entity belongs to.
groups()
Returns {*}
Get array of groups entity belongs to
var entity = new IgeEntity();
entity.addGroup('g1', 'g2');
// This will output "['g1', 'g2']"
console.log(entity.groups());
groupCount
Gets the number of groups this entity belongs to.
groupCount()
Returns {Number}
Get number of groups entity belongs to
var entity = new IgeEntity();
entity.addGroup('g1', 'g2');
// This will output "2"
console.log(entity.groupCount());
removeGroup
Removes the entity from the group or groups passed. This method accepts multiple arguments and will remove the entity from all groups passed as arguments.
removeGroup({*} groupName)
- {*}groupName The name of the group or array of group names to remove this entity as a member of.
Returns {*}
Remove entity from single group
var entity = new IgeEntity();
entity.addGroup('g1', 'g2');
// This will output "['g1', 'g2']"
console.log(entity.groups());
// Remove entity from a single group
entity.removeGroup('g1');
// This will output "['g2']"
console.log(entity.groups());
Remove entity from multiple groups
var entity = new IgeEntity();
entity.addGroup('g1', 'g3', 'g2');
// This will output "['g1', 'g3', 'g2']"
console.log(entity.groups());
// Remove entity from multiple groups
entity.removeGroup('g1', 'g3');
// This will output "['g2']"
console.log(entity.groups());
Remove entity from multiple groups via an array
var entity = new IgeEntity();
entity.addGroup('g1', 'g3', 'g2');
// This will output "['g1', 'g3', 'g2']"
console.log(entity.groups());
// Remove entity from multiple groups
entity.removeGroup(['g1', 'g3']);
// This will output "['g2']"
console.log(entity.groups());
Remove entity from multiple groups via multiple arrays
var entity = new IgeEntity();
entity.addGroup('g1', 'g2', 'g3', 'g4', 'g5', 'g6', 'g7');
// This will output "['g1', 'g2', 'g3', 'g4', 'g5', 'g6', 'g7']"
console.log(entity.groups());
// Remove entity from multiple groups
entity.removeGroup(['g1', 'g3'], ['g5', 'g6', 'g7']);
// This will output "['g2', 'g4']"
console.log(entity.groups());
removeAllGroups
Removes the entity from all groups it is a member of.
removeAllGroups()
Returns {*}
Remove entity from all groups
var entity = new IgeEntity();
entity.addGroup('g1', 'g3', 'g2');
// This will output "['g1', 'g3', 'g2']"
console.log(entity.groups());
// Remove all the groups
entity.removeAllGroups();
// This will output "[]"
console.log(entity.groups());
addBehaviour
Adds a behaviour to the object's active behaviour list.
addBehaviour({String} id, {Function} behaviour, {Boolean} duringTick)
- {String}id
- {Function}behaviour
- {Boolean}duringTick If true, will execute the behaviour during the tick() method instead of the update() method.
Returns {*} Returns this on success or false on failure.
Add a behaviour with the id "myBehaviour"
var entity = new IgeEntity();
entity.addBehaviour('myBehaviour', function () {
// Code here will execute during each engine update for
// this entity. I can access the entity via the "this"
// keyword such as:
this._somePropertyOfTheEntity = 'moo';
});
// Now since each update we are setting _somePropertyOfTheEntity
// to equal "moo" we can console log the property and get
// the value as "moo"
console.log(entity._somePropertyOfTheEntity);
removeBehaviour
Removes a behaviour to the object's active behaviour list by it's id.
removeBehaviour({String} id, {Boolean} duringTick)
- {String}id
- {Boolean}duringTick If true will look to remove the behaviour from the tick method rather than the update method.
Returns {*} Returns this on success or false on failure.
Remove a behaviour with the id "myBehaviour"
var entity = new IgeEntity();
entity.addBehaviour('myBehaviour', function () {
// Code here will execute during each engine update for
// this entity. I can access the entity via the "this"
// keyword such as:
this._somePropertyOfTheEntity = 'moo';
});
// Now remove the "myBehaviour" behaviour
entity.removeBehaviour('myBehaviour');
drawBounds
Gets / sets the boolean flag determining if this object should have it's bounds drawn when the bounds for all objects are being drawn. In order for bounds to be drawn the viewport the object is being drawn to must also have draw bounds enabled.
drawBounds({Boolean} val)
Returns {*}
Enable draw bounds
var entity = new IgeEntity();
entity.drawBounds(true);
Disable draw bounds
var entity = new IgeEntity();
entity.drawBounds(false);
Get the current flag value
console.log(entity.drawBounds());
drawBoundsData
Gets / sets the boolean flag determining if this object should have it's bounds data drawn when the bounds for all objects are being drawn. Bounds data includes the object ID and it's current depth etc.
drawBoundsData({Boolean} val)
Returns {*}
Enable draw bounds data
var entity = new IgeEntity();
entity.drawBoundsData(true);
Disable draw bounds data
var entity = new IgeEntity();
entity.drawBoundsData(false);
Get the current flag value
console.log(entity.drawBoundsData());
drawMouse
Gets / sets the boolean flag determining if this object should have it's mouse position data drawn when the bounds for all objects are being drawn.
drawMouse({Boolean} val)
Returns {*}
Enable draw mouse position data
var entity = new IgeEntity();
entity.drawMouse(true);
Disable draw mouse position data
var entity = new IgeEntity();
entity.drawMouse(false);
Get the current flag value
console.log(entity.drawMouse());
$
Finds a child entity that matches the id mounted to this or any other child entity down the scenegraph chain. Will only return an object if the entity found has this entity as an ancestor (parent or parent of parent etc).
$({String} id)
- {String}id The id of the entity to find.
Returns {*} The entity or undefined.
$$
Finds all child entities of this or any child of this entity down the scenegraph who's category matches the category name passed.
$$({String} categoryName)
- {String}categoryName The category name to scan for.
Returns {Array}
parent
Returns the object's parent object (the object that it is mounted to).
parent({String} id)
- {String}id Optional, if present will scan up the parent chain until a parent with the matching id is found. If none is found, returns undefined.
Returns {*}
Get the object parent
// Create a couple of entities and give them ids
var entity1 = new IgeEntity().id('entity1'),
entity2 = new IgeEntity().id('entity2');
// Mount entity2 to entity1
entity2.mount(entity1);
// Get the parent of entity2 (which is entity1)
var parent = entity2.parent();
// Log the parent's id (will output "entity1")
console.log(parent.id());
children
Returns the object's children as an array of objects.
children()
Returns {Array} The array of child objects.
Get the child objects array
// Create a couple of entities and give them ids
var entity1 = new IgeEntity().id('entity1'),
entity2 = new IgeEntity().id('entity2');
// Mount entity2 to entity1
entity2.mount(entity1);
// Get the chilren array entity1
var childArray = entity1.children();
// Log the child array contents (will contain entity2)
console.log(childArray);
mount
Mounts this object to the passed object in the scenegraph.
Returns {*} Returns this on success or false on failure.
Mount an entity to another entity
// Create a couple of entities and give them ids
var entity1 = new IgeEntity().id('entity1'),
entity2 = new IgeEntity().id('entity2');
// Mount entity2 to entity1
entity2.mount(entity1);
unMount
Unmounts this object from it's parent object in the scenegraph.
unMount()
Returns {*} Returns this on success or false on failure.
Unmount an entity from another entity
// Create a couple of entities and give them ids
var entity1 = new IgeEntity().id('entity1'),
entity2 = new IgeEntity().id('entity2');
// Mount entity2 to entity1
entity2.mount(entity1);
// Now unmount entity2 from entity1
entity2.unMount();
hasParent
Determines if the object has a parent up the scenegraph whose id matches the one passed. Will traverse each parent object checking if the id matches. This information will be cached when first called and can be refreshed by setting the "fresh" parameter to true.
hasParent({String} parentId, {Boolean} fresh)
- {String}parentId The id of the parent to check for.
- {Boolean}fresh If true will force a full check instead of using the cached value from an earlier check.
clone
Clones the object and all it's children and returns a new object.
clone()
mode
Gets / sets the positioning mode of the entity.
mode({Number} val)
- {Number}val 0 = 2d, 1 = isometric
Returns {*}
Set the positioning mode to 2d
var entity = new IgeEntity()
.mode(0);
Set the positioning mode to isometric
var entity = new IgeEntity()
.mode(1);
isometric
Gets / sets if this object should be positioned isometrically or in 2d.
isometric({Boolean} val)
- {Boolean}val Set to true to position this object in isometric space or false to position it in 2d space.
Returns {*}
Set the positioning mode to isometric
var entity = new IgeEntity()
.isometric(true);
Set the positioning mode to 2d
var entity = new IgeEntity()
.isometric(false);
isometricMounts
Gets / sets if objects mounted to this object should be positioned and depth-sorted in an isometric fashion or a 2d fashion.
isometricMounts({Boolean} val)
- {Boolean}val Set to true to enabled isometric positioning and depth sorting of objects mounted to this object, or false to enable 2d positioning and depth-sorting of objects mounted to this object.
Returns {*}
Set children to be positioned and depth sorted in 2d
var entity = new IgeEntity()
.isometricMounts(false);
Set children to be positioned and depth sorted in isometric
var entity = new IgeEntity()
.isometricMounts(true);
indestructible
Gets / sets the indestructible flag. If set to true, the object will not be destroyed even if a call to the destroy() method is made.
indestructible({Number} val)
Returns {*} Returns this when setting the value or the current value if none is specified.
Set an entity to indestructible
var entity = new IgeEntity()
.indestructible(true);
Set an entity to destructible
var entity = new IgeEntity()
.indestructible(false);
Get an entity's indestructible flag value
var entity = new IgeEntity()
console.log(entity.indestructible());
layer
Gets / sets the current entity layer. This affects how the entity is depth-sorted against other entities of the same parent. Please note that entities are first sorted by their layer and then by their depth, and only entities of the same layer will be sorted against each other by their depth values.
layer({Number} val)
Returns {*} Returns this when setting the value or the current value if none is specified.
Set an entity's layer to 22
var entity = new IgeEntity()
.layer(22);
Get an entity's layer value
var entity = new IgeEntity()
console.log(entity.layer());
How layers and depths are handled together
var entity1 = new IgeEntity(),
entity2 = new IgeEntity(),
entity3 = new IgeEntity();
// Set entity1 to at layer zero and depth 100
entity1.layer(0)
.depth(100);
// Set entity2 and 3 to be at layer 1
entity2.layer(1);
entity3.layer(1);
// Set entity3 to have a higher depth than entity2
entity2.depth(0);
entity3.depth(1);
// The engine sorts first based on layer from lowest to highest
// and then within each layer, by depth from lowest to highest.
// This means that entity1 will be drawn before entity 2 and 3
// because even though it's depth is higher, it is not on the same
// layer as entity 2 and 3.
// Based on the layers and depths we have assigned, here
// is how the engine will sort the draw order of the entities
// entity1
// entity2
// entity3
depth
Gets / sets the current render depth of the object (higher depths are drawn over lower depths). Please note that entities are first sorted by their layer and then by their depth, and only entities of the same layer will be sorted against each other by their depth values.
depth({Number} val)
Returns {*} Returns this when setting the value or the current value if none is specified.
Set an entity's depth to 1
var entity = new IgeEntity()
.depth(1);
Get an entity's depth value
var entity = new IgeEntity()
console.log(entity.depth());
How layers and depths are handled together
var entity1 = new IgeEntity(),
entity2 = new IgeEntity(),
entity3 = new IgeEntity();
// Set entity1 to at layer zero and depth 100
entity1.layer(0)
.depth(100);
// Set entity2 and 3 to be at layer 1
entity2.layer(1);
entity3.layer(1);
// Set entity3 to have a higher depth than entity2
entity2.depth(0);
entity3.depth(1);
// The engine sorts first based on layer from lowest to highest
// and then within each layer, by depth from lowest to highest.
// This means that entity1 will be drawn before entity 2 and 3
// because even though it's depth is higher, it is not on the same
// layer as entity 2 and 3.
// Based on the layers and depths we have assigned, here
// is how the engine will sort the draw order of the entities
// entity1
// entity2
// entity3
destroyChildren
Loops through all child objects of this object and destroys them by calling each child's destroy() method then clears the object's internal _children array.
destroyChildren()
destroyBehaviours
Removes all references to any behaviour methods that were added to this object.
destroyBehaviours()
destroyComponents
Loops through all components added to this object and calls their destroy() method, then removes any references to the components.
destroyComponents()
Returns {*}
depthSortMode
Gets / sets the depth sort mode that is used when depth sorting this object's children against each other. This mode only applies if this object's mount mode is isometric, as set by calling isometricMounts(true). If the mount mode is 2d, the depth sorter will use a very fast 2d depth sort that does not use 3d bounds at all.
depthSortMode({Number} val)
- {Number}val The mode to use when depth sorting this object's children, given as an integer value.
Returns {*}
Turn off all depth sorting for this object's children
entity.depthSortMode(-1);
Use 3d bounds when sorting this object's children
entity.depthSortMode(0);
Use 3d bounds optimised for mostly cube-shaped bounds when sorting this object's children
entity.depthSortMode(1);
Use 3d bounds optimised for all cube-shaped bounds when sorting this object's children
entity.depthSortMode(2);
depthSortChildren
Sorts the _children array by the layer and then depth of each object.
depthSortChildren()
viewChecking
Gets / sets the view checking flag that if set to true will ask the engine to check during each tick if this object is actually "on screen" or not, and bypass it if it is not. The default is this flag set to false.
viewChecking({Boolean} val)
- {Boolean}val The boolean flag value.
Returns {*}
viewCheckChildren
ALPHA CODE DO NOT USE YET. When view checking is enabled, this method is called to determine if this object is within the bounds of an active viewport, essentially determining if the object is "on screen" or not.
viewCheckChildren()
tick
Processes the actions required each render frame.
tick()
_resizeEvent
Handles screen resize events.  This method will only check for properties that are directly related to this class. Other properties are handled by their own class method.
_stringify()
Returns {String}


Senior Business Intelligence Developer at Physicans Mutual Omaha
Business reporting
Managed IT infrastructure
Teaching undergraduate course, Honors Identity: Intro to Swift Programming
Developed a Driver Scorecard system: Microsoft SQL management for data extraction, R and excel power query for data processing, Tableau for data visualization, Python Django for scoring Algorithm web application
Worked on the development of a new line of Mechanic Trucks, Work Truck Bodies and Crane Reinforced Platforms
Assisted in the production of pressure sensors using Micro-Electro-Mechanical systems(MEMS) technology
Worked in the logistics department as an Intern
In the winters, I play indoor soccer & basketball, in the summers I like to play Outdoor soccer, Cricket & Tennis.
I also enjoy hanging out with friends, playing FIFA and watching movies. My all time favourite film is The Shawshank Redemption


Name:
Brand:
Manufacturing Date:
Language:
Category:
Vendor:
ISBN:
Item Weight:
List Price:
Our Price:
Number in Stock:
Description:


What is the value of the following function call?
fp.curry( fp.filter ) ( function (x) { return x % 3 === 0; } ) ( [3,4,5,6,7,8,9] )
If needed, review the API for the fp.filter function.
If needed, review the fp.curry function as well.
Remember that % is the modulo operator and that === is the (Boolean) equality testing operator in JavaScript.


The dispensary is the heart beat of the institute which provide Treatment for different
diseases and also provide first aid to the injured ,and also arranges different awareness camp Like
cardiac camp , BMD camp etc . Different updates are been circulated for prevention from the seasonal disease.
All the National Programmes such as Pulse polio , and Immunization programmes are organized with
the help of Local health Authorities.
Dr. A Chatterjee is Faculty Coordinator, Medical Amenities.
There is one lab technician and one dresser on regular basis and six paramedic staff on contract basis.
Dispensary is also equipped with the Pathological lab to carry out different investigations. In case of
medical emergency, the ambulance van is available 24 hours for taking patient(s) to other hospitals for
the required treatment.
Medical Officer
Dr Tarun Sehgal
Coordinator, Medical Facilities
Contact No:8845092378


“Live a life less ordinary” is what I strictly adhere to. how much ever hackneyed this sounds it holds absolutely true. That's exactly what always pushes me over the edge and seek discomfort. Not for the sole reason of “loving” to do what I do but it helps me to get rid of the world and escape into a different dimension of my own. In all this chaos the art of capturing photos is something I am always fascinated by. Capturing emotions, Emotions which change in a matter of seconds.
Continuous learner is what I am. Exploring new ideas and growing as an individual is what I equate learning to.


world NASA delays Juno spacecraft's retirement after detecting mysterious radio waves By The Cosmic Companion query_builder 17 hours ago share 43
tech Awful parking is the worst thing about escooters -- TIER has a plan to fix it By Cities Today query_builder 19 hours ago share 22
tech A closer look at AI Incident Database of machine learning failures By Ben Dickson query_builder 1 day ago share 76
most popular The youngest AI programmer in the world is a 7-year-old Guinness record holder Ben Dickson 1 day ago
most popular 2021 will be the year open source projects overcome their diversity problems Ben Dickson 1 day ago
most popular How UK startups are keeping their EU connections alive after Brexit Ben Dickson 1 day ago
most popular How to get over the intimidation factor and start loving hardcore strategy games Ben Dickson 1 day ago


My name is Logan Grim. I am 20 years old and was born and raised in Terre Haute, Indiana. My parents are Scooter and Heidi Grim and I have 3 siblings, Abby (16), Trey (22) and Cam (24). I attended Terre Haute North Vigo High School where I was valedictorian of my graduating class and captain of the football team senior year.
I am currently enrolled at Indiana University pursuing two degrees, namely a BS in Computer Science and a BS in Applied Mathematics. I will also have a Minor in Physics upon graduation. At IU I am an Undergraduate Instructor for Intro to Aritificial Intelligence (B351) and a member of the Quantitative Trading Workshop.
In general, I enjoy chilling with friends, playing sports, running, biking, swimming and playing guitar/piano. I also spend my free time working on software projects for friends, or on research projects that I find interesting. I am always searching for new people to work with and I am open to meeting/working with anyone that thinks my skills might be of use to them.
If you like to build, hit me up.
A machine learning project that analyzed the performance of various ML classifiers on the MNIST Digits dataset. Implementations from the scikit-learn package of python were used as benchmarks for performance comparison against our self-implementations. Several data preprocessing techniques were explored as well.
I can't say much about it yet but I have already started app development in iOS and I am currently constructing the backend. I will be developing an Android version and several administrative websites next semester. Launch is scheduled for Summer 2019.
Dr. Saúl Blanco-Rodriguez and I are taking a combinatorial approach to deep neural network structure optimization. Expect a paper soon!
Gather personal information and automatically overlay potential new members' data on their photo during rush to save time and increase exposure.
Turn endurance athletes' raw training data into meaningful, objective performance reports using python, latex, and GNU make.
My soon-to-be created YouTube channel aimed at demystifying 'coding' by creating small, useful software projects for my everyday life.
30 Bogart Drive
Terre Haute, IN, 47803
<EMAIL_ADDRESS>(812) 243-5396


The City of Syracuse has a mission to consistently deliver high-quality experiences through proactive and efficient service. To do that, we must start by being transparent about our services and pursue data-driven results. Our performance dashboard communicates our city objectives and measures our progress toward those objectives from start to achievement. We are sharing specific and measureable goals that will be updated daily and reviewed weekly with leaders on our team.


How to protect yourself from Black Friday scams
Scammers are finding new ways to deprive you of your hard earned money throughout the year.
But shoppers impatiently searching for bargains on Black Friday next week will have con artists rubbing their hands with glee.
Nearly a quarter of people aged 18 to 34 in the UK have fallen for scams relating to the annual celebration of consumerism, losing an average of £661 each, according to a survey by Barclays.
The bank says 12 per cent of shopping scams end up in people losing more than £2,000, so it pays to know what warning signs to look out for.
It may be a hackneyed old phrase, but Tim Mitchell, content director for charity Get Safe Online stresses that if something looks too good to be true it probably is.
He told Metro.co.uk: ‘Black Friday is all about unmissable offers and the fact that you need to do it today or else you miss out, and of course fraudsters take advantage of that.’
Advertisement Advertisement
Common tricks include dodgy posts on social media advertising big ‘Black Friday Deals’ which are completely fraudulent.
Once punters have entered their bank details and send their money to the ‘seller’ they get absolutely nothing in return.
Depending on how quick the shopper is to change or cancel their cards, it also leaves a big open goal for scammers to buy things using their account.
Keep an eye out for unusual web domain names, such as .ga – because it’s unlikely you’ll be getting a North Face jacket shipped from the west African country of Gabon.
Tim says people need to start questioning if stores like Next and Marks & Spencer are really going to give away £50 coupons for Black Friday.
He added: ‘Shops can’t afford to give money away more than we can.’
People are often sent fraudulent emails which on the surface appear to show legitimate promotional offers from trusted high street brands.
But before you reach for your wallets, Tim says it’s worth taking a step back and double checking the address it came from.
Very often there are tiny alterations such as ‘Tescos.co.uk’ instead of Tesco.com which an overly eager shopper might overlook.
Clicking on a link could take you to a similar looking website to the real deal where you’ll end up unwittingly handing over your money.
Tim said: ‘There’s no harm in actually going onto the store website by typing in the address you know to be correct and actually checking out the offers, or ringing the store.
Advertisement Advertisement
‘The trouble with online shopping is it’s practical and convenient and you don’t want to contact the seller but it’s a fact of life that it’s the safest thing to do.’
Alarm bells should be raised if you’re being asked to make a payment outside a website’s normal procedure.
Keep an eye out for a padlock symbol and an ‘s’ at the end of ‘http’ in the address bar, which both indicate the website is secure.
Consumers should buy things online using public wifi at their peril, as hackers can easily tap into the networks to steal your details.
It’s also easy enough for scammers to set up their own hotspot and give it a name that makes it look like it belongs to a legitimate business.
Using a Virtual Private Network (VPN) while you browse is a good way to give yourself an added layer of protection if you’re shopping on the go.
Tim also warns of a number of potentially dangerous counterfeit goods which are sold over online marketplaces like eBay.
He added: ‘It’s actually depriving the people who work for the real Panasonic or Gucci of their incomes, it’s putting people out of work all over the world.’
Advertisement
Shoppers should keep an eye out for negative feedback if they want to suss out if if someone is selling fakes.
Head of digital safety at Barclays Ross Martin said: ‘As thousands of items go on sale this Black Friday, it’s crucial that we are all aware of the risks and do not let our guards down, or rush into purchases.
‘Using sophisticated techniques, criminals will be preparing to exploit our desperation for this year’s best bargains. Make sure that you do your research and carry out the proper safety checks to stay ahead of the scammers.’
Ways to protect yourself from Black Friday scammers
- Don’t click promotional links sent to you by email or text
- Actually go to the shop’s website and see if they offer the deal there instead
- Remember – if it looks too good to be true, there’s a good chance it is
- Keep an eye out for unusual website names, domain names and spelling errors
- Make sure you’re on a secure site when handing over banking details
- Avoid using a public wifi network to buy items unless you have a trusted VPN
- Take the time to look for negative reviews
- Don’t buy anything in a hurry
Got a story for Metro.co.uk?
Get in touch with our news team by emailing us at<EMAIL_ADDRESS>For more stories like this, check our news page.
Advertisement


The Illuminating Engineering Society of North America (IES) recently announced that
Lumen Design and principal Andrew Pultorak, LC, MIES has been selected to receive the esteemed
"Edwin F. Guth Memorial Award for Interior Lighting Design" for its work on Eye Society at the Bravern.
Beginning in 2012, and a year earlier in California, traditional 100-watt, 75-watt, 60-watt, and 40-watt bulbs will be phased out, with a completion date of 2014.
The National Electrical Manufacturers Association (NEMA) has published a brochure that
clarifies the upcoming transition to energy-efficient lighting. Based on the average number
of sockets per household, NEMA estimates that American households will save an
average of $143 on electric bills when the transition is complete. This figure assumes an
electrical rate of $0.11/kWh.
Lighting Options for Your Home summarizes the 2007 Energy Independence and Security
Act, which mandates reductions in energy use and greenhouse gas emissions, and
explains how the changeover from incandescent lamps will help accomplish the country’s sustainability goals.
Options for lighting homes and offices include halogen, compact fluorescent, and LED
light sources, each of which is explained in detail.
To download a copy of the brochure. Click here, or contact<EMAIL_ADDRESS>to request a hard copy. For more information on lighting legislation and saving energy
through lighting upgrades. Visit www.nemasavesenergy.org.


Read through these usage notes to find information that you need.
After completing the installation steps, the Advance Toolchain is ready for usage. Just call the program directly, for example /opt/atX.X/bin/gcc
.
However, some applications have complex build systems (for example: autotool, make, cmake) in which is necessary to correctly set the environment PATH
, for example:
PATH=/opt/atX.X/bin:/opt/atX.X/sbin:$PATH make
Alternatively you can use Environment modules.
On cmake build systems, it is also necessary to set the CMAKE_PREFIX_PATH
with AT's path, for example:
CMAKE_PREFIX_PATH=/opt/atX.X/
In most cases, you do not need to install all of the packages that are provided with the Advance Toolchain. The following list describes when they are needed:
advance-toolchain-atX.X-runtime
Provides base functionality to run Advance Toolchain applications. This package is always required.
advance-toolchain-atX.X-runtime-compat
Substitutes the above package on previous distributions versions. e.g.: Get the Advance Toolchain 11.0 runtime libraries on a RHEL6 machine. There are no optimized libraries for the runtime compatibility package.
advance-toolchain-atX.X-devel
Provides development tools. This package is only needed when developing applications.
advance-toolchain-atX.X-perf
Provides tools for measuring performance. It's only useful on some development environments.
advance-toolchain-atX.X-mcore-libs
Provides libraries for multi-thread development, like Boost, SPHDE and Threading Building Blocks. This package is also required on servers running the applications developed with those libraries.
Install this package only if you need to run an application built with the previous version of the Advance Toolchain on top of the current version. More information on Runtime Compatibility Between Advance Toolchain Versions
advance-toolchain-atX.X-selinux
Provides SELinux settings. Only required when developing or running Advance Toolchain applications on a SELinux enabled environment.
advance-toolchain-atX.X-golang
Provides Golang for ppc64le, it doesn't have any dependencies with the other packages. The files will be installed into /usr/local/go/
.
advance-toolchain-atX.X-cross-ppc64 or advance-toolchain-atX.X-cross-ppc64le
Provide a cross compiler for big endian (ppc64) or little endian (ppc64le). These packages are available for x86 (i386) or x86-64 (amd64) in order to generate binaries for POWER.
advance-toolchain-atX.X-cross-common
Provides files common to both cross compiler packages (ppc64 and ppc64le). This package is mandatory for cross compiler installation starting from version 8.0.
advance-toolchain-atX.X-cross-ppc64(le)-runtime-extras
Provides additional libraries to the cross compiler packages (ppc64 or ppc64le).
advance-toolchain-atX.X-cross-ppc64(le)-mcore-libs
Provides the libraries for multi-thread development to the cross compiler (ppc64 or ppc64le).
advance-toolchain-atX.X-<package_name>-debuginfo or advance-toolchain-atX.X-<package_name>-dbg
Provides the .debug files that contain the DWARF debuginfo for the files in <package_name>, this is useful to debug and profile the applications built with AT.
If you are running applications built with an older version of the Advance Toolchain, install the compatibility rpm advance-toolchain-atX.X-runtime-atZ.Z-compat-X.X-X
in order to run these applications on top of a newer version of the Advance Toolchain. For example, using AT 10.0 to run applications built with AT 9.0:
Install the runtime package:
rpm advance-toolchain-at10.0-runtime-at9.0-compat-10.0-0
After installing the runtime package, run:
/etc/rc.d/init.d/at10.0-runtime-at9.0-compat start
In order for the system man application to pick up Advance Toolchain installed manual pages, you must export the location of the AT manual pages in the MANPATH variable prior to invoking man. This is best accomplished with the following commands:
unset MANPATH export MANPATH="/opt/atX.X/share/man:`manpath`" man <topic>
Or you may override the current environment MANPATH as demonstrated in the following example:
MANPATH="/opt/atX.X/share/man:`manpath`" man lsauxv
Directing gcc to build an application for a particular CPU can take advantage of processor-specific instruction selection. In some cases, it can significantly improve performance. Building without selecting a particular CPU simply causes gcc to select the default (lowest common denominator) instruction set.
-mcpu=power6
-mcpu=power6x
-mcpu=power7
-mcpu=power8
-mcpu=power9
Notes:
-mcpu=power8 -mtune=power9
-mcpu=power7 -mtune=power8
-mcpu=power6 -mtune=power7
-mno-altivec
) without also disabling VSX (for example, -mno-vsx
). The following combination is invalid:
-mcpu=power7 -mno-altivec
-fpeel-loops
Peels the loops so that there is enough information that they do not roll much (from profile feedback). This value also turns on complete loop peeling; complete removal of loops with small constant number of iterations.
-funroll-loops
Unroll loops whose number of iterations can be determined at compile time or upon entry to the loop. The -funroll-loops
value implies the use of the -frerun-cse-after-loop
value. This option makes the code larger, and may or may not make it run faster.
-ftree-vectorize
Perform loop vectorization on trees. This flag is enabled by default at -O3, starting at the GCC 4.3 time frame.
-ffast-math
Sets the -fno-math-errno
, -funsafe-math-optimizations
, -ffinite-math-only
, -fno-rounding-math
, -fno-signaling-nans
, and -fcx-limited-range
values. This option causes the preprocessor macro __FAST_MATH__
to be defined. This option is not turned on by any -O
option because it can result in incorrect output for programs which depend on an exact implementation of IEEE or ISO rules or specifications for math functions. It may, however, yield faster code for programs that do not require the guarantees of these specifications.
The Advance Toolchain shows significant gains over the older (SLES10 SP3) Enterprise Linux Distributions, because these releases use an older GCC-4.1 compiler that is not enabled for POWER7. In addition, these releases are restricted to POWER6 compatibility mode and cannot leverage the new instructions enabled for POWER7 for applications or runtime libraries. There are, however, some best practices that you can use to maximize your performance.
Best practices for the -mcpu
and -mtune
values
-mcpu
value.-mcpu
set for the oldest supported system. If your program mostly runs on a newer system with the older system for accommodation or backup, then use the -mcpu
set for the oldest system combined with the -mtune
value for system that you want to optimize for performance.-mcpu=power6
and -mtune=power7
values.-mcpu
value for the specific Power platform and then install those libraries into the matching /lib64/power
directory. This allows the dynamic linker to automatically select the dynamic library optimized for the specific system.Best practice for large programs
-mminimal-toc
value as this adds extra levels of indirection for static data accesses-mcmodel=medium
value to optimize static data access and allow the linker to perform additional optimizations on the final program or library image.-mcmodel=large
value.getauxval
which can be used at runtime to query the capabilities of the hardware. If you are using Advanced Toolchain 9.0 or newer use getauxval
instead of libauxv
. For more information about getauxval
, see the manual page exists which documents this function. Note that libauxv
may be removed in a future major release of the Advanced Toolchain.
The following example tests whether the runtime CPU has POWER7 Vector extensions:
#include <sys/auxv.h> #include <stdbool.h> #include <stdio.h> bool has_vector(void) { unsigned long int hwcap_mask = (unsigned long int) getauxval (AT_HWCAP); bool has_vec = (hwcap_mask & PPC_FEATURE_HAS_VSX) != 0; if (has_vec) printf("CPU has POWER7 vector extensions\n"); return has_vec; }
Advance Toolchain versions 10.0 and below include libauxv and lsauxv, a system library and application, respectively, which provide a mechanism for querying the system platform information from the kernel's auxiliary vector. The system hardware capabilities (hwcap) may be queried through the auxiliary vector as well. For example, the platform can be queried dynamically with the following function:
char * platform = (char *) query_auxv (AT_PLATFORM);
Information from the hwcap can be queried in the following manner:
unsigned long int hwcap_mask = (unsigned long int) query_auxv (AT_HWCAP); if (hwcap_mask & PPC_FEATURE_HAS_FPU) printf(" HAS_FPU\n");
For more information about using libauxv and lsauxv can be found in the auxv and lsauxv manual pages provided by the Advance Toolchain (see Manual Pages).
Locate all of the application's .o files. You can also link .a files to pick them all up at once. These will be needed for the relink.
Locate the paths to all of the necessary linked shared-object files, for example:
/usr/X11R6/lib for libXrender /opt/gnome/lib for libgtk-x11-2.0
Edit /opt/atX.X/etc/ld.so.conf and add the directories to all of the shared object files to the end of this file. Don't forget lib64 for the 64-bit equivalent libraries if applicable, for example:
/opt/gnome/lib/ /opt/gnome/lib64/ /usr/X11R6/lib /usr/X11R6/lib64/
Run the Advance Toolchain ldconfig
application to regenerate /opt/atX.X/etc/ld.so.cache
, for example:
sudo /opt/atX.X/sbin/ldconfig
The loader uses /opt/atX.X/etc/ld.so.cache
to find the libraries the application was linked against.
Relink using the Advance Toolchain's compiler:
/opt/atX.X/bin/gcc -g -O2 -o <application_name> <list_of_dot_o_files> \ <list_of_dot_a_files> -L<path_to_libraries> \ -l<one_for_each_library_needed_for_the_link>
For example:
/opt/at5.0/bin/gcc -g -O2 -o mandelbrot callbacks.o interface.o \ main.o quadmand.o support.o mandel_internals.a \ -L/usr/X11R6/lib -L/usr/X11R6/lib64 -L/opt/gnome/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 \ -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl \ -lglib-2.0 -lfreetype -lfontconfig \ -lXrender -lX11 -lXext -lpng12 -lz -lglitz -lm -lstdc++ -lpthread \ -lgthread-2.0
If ld
gives an error like the following then you're missing the path to that library in the link stage. Add it with -L<path to library>, for example:
/opt/at5.0/bin/ld: cannot find -lgtk-x11-2.0
Add -L/opt/gnome/lib/ to the gnome compilation line. You need to tell the linker where to find all of the libraries.
When running the relinked application, if you get an error like the following:
./mandelbrot: error while loading shared libraries: libglib-2.0.so.0: cannot open shared object file: No such file or directory.
You need to add the path to the library in question to /opt/atX.X/etc/ld.so.conf
and re-run /opt/atX.X/sbin/ldconfig
. The Advance Toolchain loader needs to know where to find the libraries and uses the generated /opt/atX.X/etc/ld.so.cache
to find them.
You can verify that the Advance Toolchain libraries were picked up by running the application prefaced with LD_DEBUG=libs
, for example:
LD_DEBUG=all ./mandelbrot
Caution: Do NOT use LD_LIBRARY_PATH
to point to the Advance Toolchain libraries if your applications are not relinked with the Advance Toolchain. Doing so can result in ld.so
and libc.so
version mismatch and cause runtime failures.
/opt/atX.X/etc/ld.so.conf
already includes /etc/ld.so.conf
in the search order, but you may need to re-run /opt/atX.X/sbin/ldconfig
in order populate /opt/atX.X/etc/ld.so.cache
with the specialized search paths you have added to /etc/ld.so.conf
after an Advance Toolchain installation.
If you are running ldd against your binary and it is showing that some libraries are not found, you may need to re-run /opt/atX.X/sbin/ldconfig
to fix that. Although, Advance Toolchain has a daemon (atxx-x-cachemanager.service) that monitors the system ld.so.cache
and updates /opt/atX.X/etc/ld.so.cache
when needed.
The environment variable LD_LIBRARY_PATH
is a colon-separated set of directories where libraries should be searched first before the standard set of directories. This list is used in preference to any runtime or default system linker path.
As the compiled-in path (see "man ld" for "rpath") is reliable, it is not recommended to use the LD_LIBRARY_PATH
. However, if you have to use it (for example, your build system uses LD_LIBRARY_PATH
or has it as part of a wrapper) be sure that a system directory never appears before the Advance Toolchain directory.
Example:
LD_LIBRARY_PATH=/opt/atX.X/lib64:/lib64:$LD_LIBRARY_PATH
Transactional Lock Elision (TLE) is a technique, implemented on top of the Hardware Transactional Memory, which allows critical sections of code to be speculatively executed by multiple threads, potentially without serializing. In the ideal case, this allows multiple threads to execute such a section of code in parallel. When a data race does occur, each thread will make several attempts to elide the lock before falling back to traditional locking for a period of time. No source modifications are needed to enable this feature, however with profiling, source code can be altered to change things such as structure padding and member placement to minimize false sharing conflicts. Such changes are likely beneficial even without TLE.
It should be noted that TLE may not benefit all applications, and the benefits depend largely on how mutexes are used. In essence, TLE lets the hardware track any data races which occur while executing a critical section. POWER8 transactional resources are shared among hardware threads per core, thus enabling more threads per core may result in lower performance depending on how much memory is touched within a critical section. TLE is not recommended for applications which make system calls inside the critical section as the kernel does not support system calls from inside a memory transaction.
Advance Toolchain 9.0 and above have support for Transactional Lock Elision (TLE) on glibc (since Advance Toolchain 9.0-3). TLE is disabled by default, a script to enable it is provided as /opt/atX.X/scripts/tle_on.sh. Note, that the internals of how the script work are subject to change at any time.
Below is a sample program which demonstrates how to use the tle_on.sh script, and how to use it:
#include <stdio.h> #include <pthread.h> #include <htmintrin.h> int main() { pthread_mutex_t t = PTHREAD_MUTEX_INITIALIZER; int elided = 0; pthread_mutex_lock (&t); if (_HTM_STATE (__builtin_tcheck ()) == _HTM_TRANSACTIONAL) elided = 1; pthread_mutex_unlock (&t); if (elided) puts ("Hurray! We are elided!"); else puts ("Shucks! We are not elided!"); return 0; }
Compiling this with the following command:
/opt/at9.0/bin/gcc tle.c -mhtm -o tle -O2 -pthread
It can be run as follows:
/opt/at9.0/scripts/tle_on.sh -e yes ./tle
or
/opt/at9.0/scripts/tle_on.sh ./tle
Likewise
/opt/at9.0/scripts/tle_on.sh -h
Will print the help information for the script.
The Advance Toolchain provides its own 32-bit and 64-bit versions of libhugetlbfs 2.x. Please refer to the Advance Toolchain's libhugetlbfs
man page for more information on using libhugetlbfs-2.0:
unset MANPATH export MANPATH="/opt/atX.X/share/man:`manpath`" man libhugetlbfs
Note: Libhugetlbfs 1.0 is deprecated for new users. Please use libhugetlbfs 2.0 (or later) that is provided directly by the Advance Toolchain. If you must use libhugetlbfs 1.0 follow these instructions.
The /opt/atX.X/scripts/createldhuge.sh
script is provided (until Advance Toolchain 8.0), which copies /opt/atX.X/bin/ld
to /opt/atX.X/bin/ld.orig
and creates a wrapper script in /opt/atX.X/bin/ld
. You only need to run this if you want the Advance Toolchain to work with libhugetlbfs.
The new /opt/atX.X/bin/ld
is a wrapper script which detects whether the --hugetlbfs-link
or --hugetlbsf-align
switches have been passed to the linker. If so then it sets a script-local LD environment variable to /opt/atX.X/bin/ld.orig
and invokes the system's ld.hugetlbfs, for example:
LD="/opt/atX.X/bin/ld.orig" /usr/share/libhugetlbfs/ld.hugetlbfs *switches*
If it doesn't detect the hugetlbfs-link/hugetlbfs-align
switch, then it simply forwards the linker invocation to /opt/atX.X/bin/ld.orig
directly.
If libhugetlbfs support is desired, the first thing to do is backup the original Advance Toolchain linker just in case there are problems and you need to restore it manually.
cp -p /opt/atX.X/bin/ld /opt/atX.X/bin/ld.backup
The scripts in /opt/atX.X/scripts/
will do the rest of the work for you:
createldhuge.sh restoreld.sh
Invoke createldhuge.sh
to create the wrapper ld
:
sudo sh createldhuge.sh /<prefix-to-libhugetlbfs>/share/libhugetlbfs/ld.hugetlbfs /opt/atX.X
This MUST be executed as sudo (or root) for the ld
wrapper script to be created properly.
If or when you want to restore the original Advance Toolchain linker, simply run sudo sh restoreld.sh
.
The Advance Toolchain gcc
always ignores the -B/<prefix-to-libhugetlbfs>/share/libhugetlbfs
directive because it has been built to always invoke /opt/atX.X/bin/ld
directly. You can use the gcc
invocation you have always used, for example:
/opt/atX.X/bin/gcc temp.c -v -o temp -B/<prefix-to-libhugetlbfs>/share/libhugetlbfs/ -Wl,--hugetlbfs-link=BDT
Note: If you invoke /opt/atX.X/bin/ld --hugetlbfs-link=BDT
directly, you'll need to supply an -m*
flag which is normally provided by gcc directly (see man ld
for supported emulations).
Applications built with Advance Toolchain can be packaged with RPM. However, due to a limitation in the way that RPM generates dependency lists, the symbols from the Advance Toolchain may collide with the ones provided by the Linux distribution. There are two ways to prevent this:
Use this method for versions of RPM older than 4.8.
Autoreq: 0
to disable the auto requirements checkldd
to find out shared library dependencies); Note: If any libraries from the Advance Toolchain mcore-libs package have being used, their entries must be replaced by a single advance-toolchain-atX.X-mcore-libs
entry instead
Requires: <list-found>
on your spec file, replacing the "<list-found>" with the list assembled in the previous stepNote: These steps are only required for the first build to adjust your spec file for packaging, unless changes in the build system, or other packaging spec defined changes occur (in which case, it must be revised to guarantee its functionality).
Use this method with RPM version 4.8 or later.
/opt/atX.X/scripts/find_dependencies.sh
script is provided (since Advance Toolchain 9.0-2) to help set the dependencies. Since RPM version 4.8, you can replace the macro that checks for dependencies. This script accept a list of files as input and provide a list of found dependencies as output, it looks for standard dependencies found inside the Advance Toolchain install path and replace them by a single output of advance-toolchain-atX.X-runtime
, or advance-toolchain-atX.X-mcore-libs
if the dependency found was a multi core library provided by Advance Toolchain.%__find_requires
macro to its standard script located on /usr/lib/rpm/find_requires
, to use the find_dependencies.sh script you need to change your spec file, redefining the macro required using the following entries:
%define __find_requires /opt/atx.x/scripts/find_dependencies.sh </full/path/to/files>
%define _use_internal_dependency_generator 0Take a look at this link for more information about RPM dependencies.
When compiling binaries using XLC or XLF, the user must add the -F <path_to_cfg_file>
option to the compiler command line. The Advance Toolchain provides a script that creates those files in /opt/atX.X/scripts
. This script is automatically run during installation. If you need to re-run it later (i.e. you installed XLC/XLF after the Advance Toolchain installation), execute the following command:
/opt/atX.X/scripts/at-create-ibmcmp-cfg.sh
Please notice the absolute path when calling the script. DO NOT call it using a relative path. The script creates the config files in /opt/atX.X/scripts
.
This procedure does not affect the default XLC/XLF configuration.
IBM's Mathematical Acceleration Subsystem (MASS) libraries consist of a set of mathematical functions for C, C++, and Fortran-language applications that are tuned for specific POWER architectures. The libraries are available for ppc64 and ppc64le.
To use MASS with Advance Toolchain you need to pass the option -mveclibabi=mass
to GCC
.
gdb
can be asked to output _Decimal[32|64|128]
formatted floating point registers by default, using its printf command.
When using objdump to inspect POWER Decimal code, make sure to use the -Mpower7
or -Mpower8
flag. For example:
/opt/atX.X/bin/objdump -d -Mpower8 <your_file>
The same applies to POWER7 code.
There are two compilers provided by the Advance Toolchain that can be used to compile Go source code on ppc64le starting in AT 9.0: the Golang compiler and gccgo.
The Advance Toolchain provides an IBM-optimized version of the Go compiler from the Golang community for ppc64le starting on AT 9.0.
It is installed by the package advance-toolchain-golang-at-X.Y-Z.ppc64le.rpm. This package is standalone and does not depend on any of the other packages offered by the Advance Toolchain.
This compiler and runtime is based on the final release versions provided by the Go community, plus the newest bug fixes and performance optimizations relevant to Power. The major version of the compiler (i.e. 1.6, 1.7, etc) is upgraded with every Advance Toolchain major release. Please refer to the Release Notes file for the compiler version and included bug/performance fixes included.
The Go compiler for Golang is installed here:
/usr/local/go
When /usr/local/go/bin is added to $PATH, then this go tool is the default. Otherwise, the go tool can be invoked directly by doing:
/usr/local/go/bin/go
The Advance Toolchain also includes gccgo. When the full install of GCC is done from Advance Toolchain, gccgo is included and the go tool which uses gccgo is in the default path. If both GCC (including gccgo) and the Golang compiler from Advance Toolchain are installed, and the Go compiler from Golang is to be used instead of gccgo, then the PATH must be set as described above.
Environment Modules is a tool that simplifies shell initialization and lets users easily modify their environment during the session with modulefiles.
Since AT 11.0, modulefiles are provided in the devel and cross-common packages to help easily set the environment for using AT.
To use, simply run the command:
module load atX.X
To stop using, it is also simple:
module unload atX.X
Note: The enviroment-modules package needs to be installed and configured in the system.


Weimar court dismisses far-right AfD lawsuit
A lawsuit by Germany's far-right AfD challenging scrutiny by Thuringia state authorities has been dismissed by the region's constitutional court. Observation status was declared last year by its intelligence agency.
Thuringia's top court on Wednesday threw out the Alternative for Germany (AfD) lawsuit on the grounds that as plaintiff it had inadmissibly used a legal procedure normally reserved only for disputes between governmental "organs."
As such, the AfD was not an "organ," nor did that designation apply to one of four targets of its complaint; Stephan Kramer, the president of Thuringia's domestic intelligence service (Verfassungsschutz), the court opined.
Read more: Thuringia state election 'cause for alarm'
The only applicable defendant for such a complaint had been Thuringia's interior minister, Georg Maier, but he himself had not made the scrutiny declaration challenged by the AfD, concluded Thuringia's ThVerfGh six-judge constitutional court (Verfassungsgerichthof).
'Scene' preparing for violent acts
A year ago, Thüringia's own intelligence service headed by Kramer had used the presentation of region's annual intelligence report — alongside Maier — to rank the AfD as an "examination case," allowing closer observation.
Germany's news magazine Der Spiegel in October 2018 had quoted Kramer as saying the far-right extremist "scene" was gearing up for violent targeted acts, intimidation and "in particular" confrontation.
Nationwide ranking retracted
Last March, Germany's federal BfV agency based in Cologne — otherwise known as the Office for the Protection of the Constitution — had to retract its "examination case" ranking for the AfD as a whole after a ruling by Cologne's Administration Court.
Instead, the BfV ended up using a weaker label of "suspicious case" (Verdachsfall) but only to observe the nationwide AfD's strindent arch-conservative wing (Flügel), led from Thuringia by a prominent AfD figure Björn Höcke.
Höcke, who led the AfD to a 23.4% second-placing in Thuringia's assembly election last month, was among AfD plaintiffs named in Wednesday's court ruling.
Thuringia's top-placed post-communist Left party led by incumbent premier Bodo Ramelow is currently holding talks with electorally bruised centrist parties in the Erfurt assembly in a bid to form a second-term coalition cabinet.
'Pure contempt for the state'
Kramer, in remarks carried by Spiegel last October, warned that "many" in Germany's far-right "scene" wanted to take the law into their own hands.
"Behind all this is pure contempt for the state," said Kramer, asserting that extremist right-wingers were "against foreigners, against political opponents" and were organizing martial combat contests and survival training.
"Some groups and persons also take part at exercises abroad with lethal (scharfen) weapons," he asserted.
Kramer's remarks coincided at that time with far-right rock concerts, including one terminated by police in central Thuringia's city of Apolda — otherwise known for its metallurgic tradition of making bells.
'How it began in 1933'
Two weeks ago, Paul Ziemiak, the general-secretary of Chancellor Angela Merkel's Christian Democratic Union (CDU) in a guest article run by Spiegel accused the AfD of "openly and visibly building bridges to right-wing extremism" and was trying to "delegitimize" Germany's post-war parliamentary system from the "fringe" of Germany's constitutional order.
"That's how it began in 1933," said Ziemiak, referring the rise of the Nazi regime under Adolf Hitler.
"Höcke is for me a Nazi and the AfD with him on the way to NPD 2.0, Ziemiak asserted.
ipj/aw (dpa, AFP)


80 ? reference : undefined">
{{reference.length > 80 ? (reference | slice:0:77) + '...' : reference }}
will be moved
from
80 ? currentProjects[0] : undefined">
{{currentProjectInstance.name.length > 80 ? (currentProjectInstance.name | slice:0:77) + '...' : currentProjectInstance.name}}
to the selected project.
Project(Create New)Please provide a ProjectPlease provide a name longer than 3 charactersPlease provide a different name as this project name is taken as an Example projectSome {{reference}}s are already in the selected project"{{filterText}}" (Create New)


| 10:00 | Registration |
| 10:30 |
Welcome from the School –
Prof. Sebastien Ourselin, Head of School
Public Engagement Update CDT Update |
| 10:50 | Keynote Speaker 1 – Prof. Ronald Summers, Bethesda NIH Clinical Center |
| 11:20 | Student Oral Presentation Session A |
| 12:20 | Poster Session A and Lunch |
| 14:00 | Keynote Speaker 2 – Dr. Tracy Underwood, University of Manchester |
| 14:30 | Student Oral Presentation Session B |
| 15:30 | Poster Session B and Refreshments |
| 16:15 |
Panel Discussion:
Multimodal imaging beyond PET/CT: is two better than one? Chair: Prof. Paul Marsden |
| 16:45 | Awards for Best Presentations and Posters |
| 17:00 | Drinks and Reception |


% if (tags) { -%> <% } else { -%> <% } -%>
Don't have an account? Get one now!
This Video is not available in your Country
Please choose an alternative from this list:
DJ: {{currentDJ.un}}


Karaoke Templater Reference: Code lines and blocks
From Aegisub Manual
Code lines and blocks in Karaoke Templater allows you to create advanced effects by incorporating small snippets of Lua code. This can range from simple mathematical expressions adding two numbers to complex functions that for example could generate various shapes in cycling colours.
Both code lines and code blocks are run in a separate semi-closed execution environment, meaning they are mostly undisturbed by the primary Lua environment the Karaoke Templater script itself runs in. For an overview of what variables are available in the code line/block execution environment see: Code execution environment.
Contents |
Code lines
A code line is a special kind of template line. Instead of using the template
keyword in the Effect field it uses the code
keyword. A code line contains only Lua code and does not by itself produce any lines in the resulting file.
The two primary uses of code lines are:
- Defining/updating variables for use later in templates
- Defining functions for use later in templates
For example, if you need a random number, but also need to use it twice in one template, you can use a code line to first generate the number and store it to a variable, then use that variable in your template line.
Another example could be defining a function that produces a random colour.
Classes of code lines
Like there's multiple classes of template lines there's also multiple classes of code lines. Some of them are the same, and some only exist for one or the other.
You specify the class of the code line in the Effect field after the code
keyword. The possible classes are:
once
- Code lines in the
once
class are run exactly one time, before any templates are applied. This is usually the best place to define functions and general tables of values you need to look up later. - This is the default class, if you don't specify a class for a code line it's automatically in the
once
class.
line
- Code lines in the
line
class are run when a new line is encountered. They are run once per line. They are run interspersed withline
/pre-line
templates in the order they appear. (There are no "pre-line" code lines.)
syl
- Code lines in the
syl
class are run when a new syllable is encountered. They run once per syllable. They are run interspersed withsyl
templates.
furi
- Code lines in the
furi
class are run when a new furigana syllable is encountered. They run once per furigana syllable. They are run interspersed withfuri
templates.
You cannot have templates with char
or multi
modifiers run per-character/per-highlight interspersed with code lines. This is a limitation of the execution model. This may or may not change in later versions of Karaoke Templater.
Code blocks
A code block is a block of Lua code within a template line. Code blocks are used to insert more complex things than can be expressed with inline variables.
Code blocks are required to be single Lua expressions, since a return
statement is automatically prepended to the code. This means you (among other things) can't do assignments or use if
statements within code blocks, you must use a code line if you want to do any of those things. (There is a way to do basic conditionals in code blocks though, see below.)
You create a code block by surrounding the code by exclamation marks, like this:
{\t($start,!syl.start_time+20!,\bord0)}
It is possible to use inline variables within code blocks. They are expanded before the code block is parsed, so to the Lua interpreter the inline variables look like regular constants.
Hints for using code blocks
Most simple mathematical expressions work just like you'd expect them to. Operator precedence rules are those of regular arithmetic.
A code block should always return a string or numeric value, if it returns a boolean, a table or something else it might cause a warning and the resulting line containing the wrong output.
To create simple conditionals within code blocks you can use the and
and or
operators to chain values and conditions. For example:
{\k!(syl.duration>100) and "f" or ""!$kdur}
If the syllable duration is longer than 100 ms the first sub-expression is true, and the code block returns "f", otherwise the entire and
expression is false, and the right-hand argument of the or
expression is returned.
In Lua, and
binds stronger than or
meaning that and
expressions are evaluated first. In the above expression the effective grouping is like this: ((syl.duration > 100) and "f") or ""
| Overview: |
Automation Manager • Running macros • Using export filters • Standard macros • Changes from Automation 3 • Moving from Automation 3 |
|---|---|
| Karaoke Templater reference: |
Declaring templates • Execution order • Modifiers • Inline-variables ($-variables) • Code lines and blocks • Execution envirionment |
| Lua reference: |
Registration • Subtitles object • Progress reporting • Config dialogues • Misc. APIs • karaskel.lua • utils.lua • unicode.lua • cleantags.lua |
| Karaskel concepts: |
Style tables • Dialogue line tables • Syllable tables • Inline effects • Furigana |


Jonah Levy, owner of Blue Whale Studios Inc., has been passionate about makeup and special makeup fx for most of his life. He has been working as a professional in the Makeup and Special F/X industry for over 21 years and has been part of makeup teams on such films as Get On Up, The Secret Life of Walter Mitty, The Butler, OZ: The Great and Powerful, Transformers 3, Green Lantern, & Zombieland as well as hit television shows such as The Walking Dead, Sleepy Hollow, Homeland, and Banshee to name a few. His skills include everything from beauty makeup and body painting to advanced prosthetic and creature design. He works and teaches nationally and internationally, and loves to share his passion with both amateurs and veterans alike. Jonah and his team at Blue Whale Studios inc put their all into everything they do and strive to deliver the absolute best quality for each and every project they take on!
Crystal Levy has been passionate about makeup for as long as she can remember. She is an established Makeup Artist that has worked on a variety of film and television projects, as well as commercials, photography shoots and weddings. She is co-owner and Lead Beauty Makeup Artist for Blue Whale Studios inc where she also assists her husband, Jonah Levy, on film and television sets, as well as live, corporate and theatrical events. Crystal loves to share her passion with others and has taught seminars across the country to inspire others who share a love for makeup.
Professional makeup and special effects artist based out of Orlando, FL. Shop Supervisor at Blue Whale Studios, and member of the Local 798 Makeup Artist Union where he has worked on such films as "The Hunger Games," and "Windwalkers" and television shows such as "Sleepy Hollow", and has produced FX for "Banshee", "Helene Alone" and many more. After graduating in 2003 from the Tom Savini's Special Makeup Effects Program, Matt and his soon-to-be wife moved to Florida, where he began his career at Universal Studios Makeup department as well as M.A.C. Pro, and a variety of freelance projects. In 2011, Matt was hired on the Blue Whale Studios inc team full time and soon became Shop Supervisor where he has been instrumental in the creation of a wide variety of makeup fx, creature creations, prop fabrication, specialty costumes, and more.
Luandra Whitehurst is a member of the Local 798 with over 10 years of experience working in Theme Parks, on Commercials, and in Film and Television. She has worked on films and shows such as "The Hunger Games: Mockingjay", "The Walking Dead", and "Miss Peregrine's Home for Peculiar Children". She is a multifaceted artist with a broad skill set including beauty, corrective, and makeup effects with a strong passion for sculpting and creating realistic and elaborate character makeups. She started her career by working on Independent films and in the Makeup Department at Universal Studios which is where she began working with Jonah Levy and Matt Sprunger. As projects at Blue Whale Studios inc continued to grow, her skills were utilized in the shop and on set application. In addition, LuAndra teaches at Cosmix, School of Make-up Artistry in South Florida and has written curriculum for their Special FX Program.


House Hitler was born in to become a police station
New use will ensure house can 'never again evoke the memory of National Socialism', Austria's interior minister says.
The house where Adolf Hitler was born will be turned into a police station, Austria's interior minister has announced, after years of debate over how best to prevent it becoming a pilgrimage site for neo-Nazis.
Having recently carried out a compulsory purchase of the house in Braunau am Inn, a town on the border with Germany, Austria will invite architects to submit plans for a redesign of the building. It will house the local police force's offices, the interior ministry said in a statement on Tuesday.
More:
"The house's future use by the police should send an unmistakable signal that this building will never again evoke the memory of National Socialism," Interior Minister Wolfgang Peschorn, who serves in a provisional government of civil servants, said in the statement.
 Every year, on Hitler's birthday, anti-fascist protesters organise a rally outside the building.
Architects from across the European Union will be invited to submit plans for the building's redesign this month and a jury of experts and public officials will pick the winning design in the first half of next year, the interior ministry said.
Although Hitler was born in Braunau in 1889, Austria argued for decades that it was the first victim of National Socialism, having been annexed by Hitler's Germany in 1938.
Recent governments have, however, recognised that Austrians were also perpetrators of Nazi crimes and that there was little resistance to Hitler's rule.
Under his rule from 1933-1945, Nazi Germany began World War II and unleashed a genocide known as the Holocaust that resulted in the deaths of some six million Jews.


Home
Rental
login
signup
nbsp;
Home
Rental
login
signup
Login
The user name is invalid
Username
Password
Login
New to this SiteSignup


The well known "Pearson's chi-squared" method is used for roll analysis as described in this
blog post, and
on
Wikipedia. At this time it doesn't
get any more sophisticated.
The displayed values are:
- Fairness Bar
- This bar shows a rather arbitrary indication of how fair a dice is from "biased" (not fair) in red on the left to
"fair" (perfectly fair) in green on the right.
- Rolls
- Total number of rolls entered so far. The more rolls the more accurate the results.
- Sides
- The number of possible outcomes for each roll, eg. 6 for a 6 sided die.
- E
- The expected frequency for each outcome value with a uniform distribution. Simply the total rolls divided by sides.
- P
- The "significance" level used for the fairness calculation. This is the percent chance that a fair die would fail this test
(type 1 error, in stats talk). On the settings menu you can choose "confidence" 99%, 95%, 90% leading to values of 1%, 5%, 10% for P.
This selects scaling targets for the percent fairness calculation.
- SSE
- Sum Squared Error - a measure of how much rolls deviate from the expected frequency. Perfect, as expected, rolls would be 0, but as
rolls deviate from a uniform distribution, the higher this value goes. ie. Σ((actual - expected)^2)
- X2
- This is SSE divided by E (expected frequency) and used as a measure of how well the rolls match the "fair die hypothesis" by comparing the value to a
computed X2 chi-squared table.
- Fair
- A normalized percent fairness calculated based on X. Values above the "fair die hypothesis" are scaled to be below 35% (red bars), with
"perfectly fair" at 100% (X = 0). In this scaling any value above 35% (yellow and green bars on chart) are considered
"fair". 100% would be perfect but not something one would typically see in the real world.
- Roll Frequency
- A graphical summary of how many times each outcome has occurred.
- Consecutive Rolls
- Indicates when the same outcome happens consecutively. Not considered statistcially important but useful if you want to see
if some rolls seem to bunch up in runs, and makes for a fancier display.


| Package | Description |
|---|---|
| org.apache.beam.runners.core |
Provides utilities for Beam runner authors.
|
| org.apache.beam.runners.dataflow.util |
Provides miscellaneous internal utilities used by the Google Cloud Dataflow runner.
|
| org.apache.beam.sdk.coders |
Defines
Coders
to specify how data is encoded to and decoded from byte strings. |
| org.apache.beam.sdk.coders.protobuf |
Defines a
Coder
for Protocol Buffers messages, ProtoCoder . |
| org.apache.beam.sdk.transforms.windowing | |
| org.apache.beam.sdk.util |
Defines utilities that can be used by Beam runners.
|
| Modifier and Type | Class and Description |
|---|---|
class |
ElementAndRestrictionCoder<ElementT,RestrictionT>
A
Coder for ElementAndRestriction . |
| Modifier and Type | Class and Description |
|---|---|
static class |
RandomAccessData.RandomAccessDataCoder
A
Coder which encodes the valid parts of this stream. |
| Modifier and Type | Class and Description |
|---|---|
class |
BigDecimalCoder
A
BigDecimalCoder encodes a BigDecimal as an integer scale encoded with
VarIntCoder and a BigInteger encoded using BigIntegerCoder . |
class |
BigEndianIntegerCoder
A
BigEndianIntegerCoder encodes Integers in 4 bytes, big-endian. |
class |
BigEndianLongCoder
A
BigEndianLongCoder encodes Long s in 8 bytes, big-endian. |
class |
BigIntegerCoder
A
BigIntegerCoder encodes a BigInteger as a byte array containing the big endian
two's-complement representation, encoded via ByteArrayCoder . |
class |
ByteArrayCoder
A
Coder for byte[] . |
class |
ByteCoder
|
class |
ByteStringCoder
A
Coder for ByteString objects based on their encoded Protocol Buffer form. |
class |
CustomCoder<T>
An abstract base class for writing a
Coder class that encodes itself via Java
serialization. |
class |
DelegateCoder<T,IntermediateT>
A
DelegateCoder<T, IntermediateT> wraps a Coder for IntermediateT and
encodes/decodes values of type T by converting
to/from IntermediateT and then encoding/decoding using the underlying
Coder<IntermediateT> . |
class |
DoubleCoder
A
DoubleCoder encodes Double values in 8 bytes using Java serialization. |
class |
DurationCoder
|
class |
InstantCoder
|
class |
JAXBCoder<T>
A coder for JAXB annotated objects.
|
class |
SerializableCoder<T extends Serializable>
A
Coder for Java classes that implement Serializable . |
class |
StringDelegateCoder<T>
A
Coder that wraps a Coder<String>
and encodes/decodes values via string representations. |
class |
StringUtf8Coder
|
class |
TableRowJsonCoder
A
Coder that encodes BigQuery TableRow objects in their native JSON format. |
class |
TextualIntegerCoder
A
Coder that encodes Integer Integers as the ASCII bytes of
their textual, decimal, representation. |
class |
VarIntCoder
|
class |
VarLongCoder
|
class |
VoidCoder
|
| Modifier and Type | Class and Description |
|---|---|
class |
ProtoCoder<T extends com.google.protobuf.Message>
A
Coder using Google Protocol Buffers binary format. |
| Modifier and Type | Class and Description |
|---|---|
static class |
GlobalWindow.Coder
GlobalWindow.Coder for encoding and decoding GlobalWindow s. |
static class |
PaneInfo.PaneInfoCoder
A Coder for encoding PaneInfo instances.
|
| Modifier and Type | Class and Description |
|---|---|
class |
BitSetCoder
Coder for the BitSet used to track child-trigger finished states.
|
Copyright © 2016–2017 The Apache Software Foundation. All rights reserved.


The cibuild
script can bootstrap Block and optional blocks.
function suggested {
This is a suggested usage of cibuild to bootstrap and build blocks.
mkdir ~/work
git clone git@github.com:defn/block ~/work/block
~/work/block/script/cibuild git@github.com:defn/home
}
function main {
local shome="${_block_home:-"$(cd -P -- "${BASH_SOURCE%/*}/.." && pwd -P)"}"
Source Block's profile to get access to block
commands
source "$shome/script/profile" ''
setup_block
Setup dependencies on the command-line
setup_optional "$@"
}
function setup_block {
Bootstrap & require Block to get access to dependencies
pushd "$shome"
block bootstrap
require
popd
}
Takes a list of git urls or work areas, cloning when necessary, and bootstrapping/requiring each block.
function setup_optional {
local git_block
for git_block in "$@"; do
if [[ ! -d "$git_block" ]]; then
Clone the block if it isn't there
cd "$BLOCK_PATH" >/dev/null
git clone "$git_block" || true
git_block="$BLOCK_PATH/$(basename "$git_block")"
fi
cd "$git_block"
if [[ -f "Blockfile.lock" ]]; then
If there is a Blockfile.lock
, use efficient cloning in parallel
block lock sync
else
Otherwise, clone one repo at a time, recursively
block clone
fi
Build dependencies and block
block bootstrap
Source dependencies and block
require
done
}
main "$@"


Simulate genetic data from a simple model of P. falciparum epidemiology and genetics.
sim_falciparum( a = 0.3, p = 0.9, mu = -log(p), u = 12, v = 10, g = 10, prob_infection = seq(0.1, 0.01, -0.01), duration_infection = dgeom(1:500, 1/200), infectivity = 1, max_innoculations = 5, H = 1000, seed_infections = 100, M = 1000, mig_matrix = diag(length(M)), L = 24, prob_cotransmission = 0.5, time_out = 100, report_progress = TRUE )
| a | human blood feeding rate. The proportion of mosquitoes that feed on humans each day. |
|---|---|
| p | mosquito probability of surviving one day. |
| mu | mosquito instantaneous death rate. mu = -log(p) unless otherwise specified. |
| u | intrinsic incubation period. The number of days from infection to blood-stage infection in a human host. |
| v | extrinsic incubation period. The number of days from infection to becoming infectious in a mosquito. |
| g | lag time between human blood-stage infection and production of gametocytes. |
| prob_infection | probability a human becomes infected after being bitten by an infected mosquito. |
| duration_infection | vector specifying probability distribution of time (in days) of a malaria episode. |
| infectivity | probability a mosquito becomes infected after biting an infective human host. |
| max_innoculations | maximum number of innoculations that an individual can hold simultaneously. |
| H | human population size, which is assumed the same in every deme. |
| seed_infections | vector specifying the initial number of infected humans in each deme. |
| M | vector specifying mosquito population size (strictly the number of adult female mosquitoes) in each deme. |
| mig_matrix | migration matrix specifing the daily probability of migrating from each deme to each other deme. Migration must be equal in both directions, meaning this matrix must be symmetric. |
| L | number of loci. The maximum number of loci is 1000, as at higher numbers haplotypes begin to exceed integer representation (2^L). |
| prob_cotransmission | probability of mosquito transmitting multiple haplotypes to host. |
| time_out | vector of times (days) at which output is produced. |
| report_progress | if |