success = realFFTwriteToFile(t_computed, fileName, f_max, amplitudes, phases, format);
This functions stores the result of an FFT computation on file, so that it can be easily plotted. amplitudes and phases are the vectors that hold the amplitudes and phases values of an FFT computation. If the size of the phases vector is zero, no phases will be stored on file. Otherwise, phases must have the same dimension as the amplitudes vector. The frequency vector f is constructed within the function from the dimension of the amplitudes vector and the information that amplitudes[end] is at frequency f_max. The format argument defines the file format (for details see writeRealMatrix). Argument t_computed is the actual time instant when the FFT was computed. It is used in the print message after the result was stored on file.
The matrix on file has the following structure:
See detailed example model: Examples.RealFFT1.
realFFTinfo, realFFTsamplePoints, realFFT
function realFFTwriteToFile extends Modelica.Icons.Function; import Modelica.Utilities.Streams.print; import Modelica.SIunits.Conversions.to_deg; import Modelica.Utilities.Streams.writeRealMatrix; input Real t_computed "Time instant at which the FFT was computed"; input String fileName "File where FFT shall be stored (if it exists, it is deleted and then re-created)"; input Modelica.SIunits.Frequency f_max "Maximum frequency"; input Real amplitudes[:] "Amplitudes of FFT"; input Real phases[:] = fill(0.0, 0) "Phases of FFT (either provide no argument, or a vector with the same length as amplitudes)"; input String format = "4" "MATLAB MAT-file version: \"4\" -> v4, \"6\" -> v6, \"7\" -> v7" annotation( choices(choice = "4" "MATLAB v4 MAT-file", choice = "6" "MATLAB v6 MAT-file", choice = "7" "MATLAB v7 MAT-file")); output Boolean success "true if successful"; end realFFTwriteToFile;


> Home Education Experience Interest Owen Home Education Experience Interests
I live in a waterloo with a brother and sister who are younger then me.


/**
* These are the list of Peer connection signaling states that Skylink would trigger.
* - Some of the state references the [w3c WebRTC Specification Draft](http://www.w3.org/TR/webrtc/#idl-def-RTCSignalingState).
* @attribute PEER_CONNECTION_STATE
* @type JSON
* @param {String} STABLE Value "stable"
* The state when there is no handshaking in progress and when
* handshaking has just started or close.

* This state occurs when Peer connection has just been initialised and after
* HAVE_LOCAL_OFFER or HAVE_REMOTE_OFFER.
* @param {String} HAVE_LOCAL_OFFER Value "have-local-offer"
* The state when the local session description "offer" is generated and to be sent.

* This state occurs after STABLE state.
* @param {String} HAVE_REMOTE_OFFER Value "have-remote-offer"
* The state when the remote session description "offer" is received.

* At this stage, this indicates that the Peer connection signaling handshaking has been completed, and
* likely would go back to STABLE after local "answer" is received by Peer.
* @param {String} CLOSED Value "closed"
* The state when the Peer connection is closed.

* This state occurs when connection with Peer has been closed, usually when Peer leaves the room.
* @readOnly
* @component Peer
* @for Skylink
* @since 0.5.0
*/
Skylink.prototype.PEER_CONNECTION_STATE = {
STABLE: 'stable',
HAVE_LOCAL_OFFER: 'have-local-offer',
HAVE_REMOTE_OFFER: 'have-remote-offer',
CLOSED: 'closed'
};
/**
* These are the types of server Peers that Skylink would connect with.
* - Different server Peers that serves different functionalities.
* - The server Peers functionalities are only available depending on the
* Application Key configuration.
* - Eventually, this list will be populated as there are more server Peer
* functionalities provided by the Skylink platform.
* @attribute SERVER_PEER_TYPE
* @param {String} MCU Value "mcu"
* This server Peer is a MCU server connection.
* @type JSON
* @readOnly
* @component Peer
* @for Skylink
* @since 0.6.1
*/
Skylink.prototype.SERVER_PEER_TYPE = {
MCU: 'mcu',
//SIP: 'sip'
};
/**
* Stores the timestamp of the moment when the last Peers connection
* restarts has happened. Used for the restart Peers connection functionality.
* @attribute _lastRestart
* @type Object
* @required
* @private
* @component Peer
* @for Skylink
* @since 0.5.9
*/
Skylink.prototype._lastRestart = null;
/**
* Stores the counter of the number of consecutive
* Peers connection restarts retries.
* @attribute _retryCount
* @type Number
* @required
* @private
* @component Peer
* @for Skylink
* @since 0.5.10
*/
Skylink.prototype._retryCount = 0;
/**
* Stores the list of Peers connection.
* @attribute _peerConnections
* @param {Object} (#peerId) The Peer ID associated to the RTCPeerConnection object.
* @type JSON
* @required
* @private
* @component Peer
* @for Skylink
* @since 0.1.0
*/
Skylink.prototype._peerConnections = {};
/**
* Stores the list of Peer connection restart weights received
* that would be compared against to indicate if Peer connection
* should initiates a restart from the other connection end should.
* The one that sends restart later is the one who initiates the restart.
* @attribute _peerRestartPriorities
* @param {Number} (#peerId) The Peer ID associated with the connection restart
* handshake reconnection weights. The weight is generated with Date.valueOf().
* @type JSON
* @private
* @required
* @for Skylink
* @since 0.6.0
*/
Skylink.prototype._peerRestartPriorities = {};
/**
* Connects to the Peer.
* @method _addPeer
* @param {String} targetMid The Peer ID to connect to.
* @param {JSON} peerBrowser The Peer platform agent information.
* @param {String} peerBrowser.agent The Peer platform browser or agent name.
* @param {Number} peerBrowser.version The Peer platform browser or agent version.
* @param {Number} peerBrowser.os The Peer platform name.
* @param {Boolean} [toOffer=false] The flag that indicates if the Peer connection
* should be start connection as an offerer or as an answerer.
* @param {Boolean} [restartConn=false] The flag that indicates if the Peer
* connection is part of restart functionality use-case.
* @param {Boolean} [receiveOnly=false] The flag that indicates if the Peer
* connection would send Stream or not (receive only).
* @param {Boolean} [isSS=false] The flag that indicates if the Peer
* connection Stream sent is a screensharing stream or not.
* @private
* @component Peer
* @for Skylink
* @since 0.5.4
*/
Skylink.prototype._addPeer = function(targetMid, peerBrowser, toOffer, restartConn, receiveOnly, isSS) {
var self = this;
if (self._peerConnections[targetMid] && !restartConn) {
log.error([targetMid, null, null, 'Connection to peer has already been made']);
return;
}
log.log([targetMid, null, null, 'Starting the connection to peer. Options provided:'], {
peerBrowser: peerBrowser,
toOffer: toOffer,
receiveOnly: receiveOnly,
enableDataChannel: self._enableDataChannel
});
log.info('Adding peer', isSS);
if (!restartConn) {
self._peerConnections[targetMid] = self._createPeerConnection(targetMid, !!isSS);
}
if (!self._peerConnections[targetMid]) {
log.error([targetMid, null, null, 'Failed creating the connection to peer']);
return;
}
self._peerConnections[targetMid].receiveOnly = !!receiveOnly;
self._peerConnections[targetMid].hasScreen = !!isSS;
if (!receiveOnly) {
self._addLocalMediaStreams(targetMid);
}
// I'm the callee I need to make an offer
if (toOffer) {
if (self._enableDataChannel) {
if (typeof self._dataChannels[targetMid] !== 'object') {
log.error([targetMid, 'RTCDataChannel', null, 'Create offer error as unable to create datachannel ' +
'as datachannels array is undefined'], self._dataChannels[targetMid]);
return;
}
self._dataChannels[targetMid].main =
self._createDataChannel(targetMid, self.DATA_CHANNEL_TYPE.MESSAGING, null, targetMid);
self._peerConnections[targetMid].hasMainChannel = true;
}
self._doOffer(targetMid, peerBrowser);
}
// do a peer connection health check
// let MCU handle this case
if (!self._hasMCU) {
this._startPeerConnectionHealthCheck(targetMid, toOffer);
} else {
log.warn([targetMid, 'PeerConnectionHealth', null, 'Not setting health timer for MCU connection']);
return;
}
};
/**
* Restarts a Peer connection in a P2P environment.
* This is usually done for replacing the previous Stream attached and restarting
* the connection with a new one, or when the ICE connection has issues
* streaming video/audio stream in the remote Stream which requires
* a refresh in the ICE connection.
* @method _restartPeerConnection
* @param {String} peerId The Peer ID to restart the connection with.
* @param {Boolean} isSelfInitiatedRestart The flag that indicates if the restart action
* was caused by self.
* @param {Boolean} isConnectionRestart The flag that indicates whether the restarting action
* is caused by ICE connection or handshake connection failure. Currently, this feature works the same as
* explict parameter.
* @param {Function} callback The callback fired after the Peer connection has
* been succesfully initiated with a restart. Set this value to null if you
* do not want to pass in any callbacks.
* @param {Boolean} [explict=false] The flag that indicates whether the restart functionality
* is invoked by the application or by Skylink when the ICE connection fails to establish
* a "healthy" connection state. Currently, this feature works the same as
* isConnectionRestart parameter.
* @private
* @component Peer
* @for Skylink
* @since 0.5.8
*/
Skylink.prototype._restartPeerConnection = function (peerId, isSelfInitiatedRestart, isConnectionRestart, callback, explicit) {
var self = this;
if (!self._peerConnections[peerId]) {
log.error([peerId, null, null, 'Peer does not have an existing ' +
'connection. Unable to restart']);
return;
}
log.log([peerId, null, null, 'Restarting a peer connection']);
// get the value of receiveOnly
var receiveOnly = self._peerConnections[peerId] ?
!!self._peerConnections[peerId].receiveOnly : false;
var hasScreenSharing = self._peerConnections[peerId] ?
!!self._peerConnections[peerId].hasScreen : false;
// close the peer connection and remove the reference
var iceConnectionStateClosed = false;
var peerConnectionStateClosed = false;
var dataChannelStateClosed = !self._enableDataChannel;
self._peerConnections[peerId].dataChannelClosed = true;
self.once('iceConnectionState', function () {
iceConnectionStateClosed = true;
}, function (state, currentPeerId) {
return state === self.ICE_CONNECTION_STATE.CLOSED && peerId === currentPeerId;
});
self.once('peerConnectionState', function () {
peerConnectionStateClosed = true;
}, function (state, currentPeerId) {
return state === self.PEER_CONNECTION_STATE.CLOSED && peerId === currentPeerId;
});
delete self._peerConnectionHealth[peerId];
delete self._peerRestartPriorities[peerId];
self._stopPeerConnectionHealthCheck(peerId);
if (self._peerConnections[peerId].signalingState !== 'closed') {
self._peerConnections[peerId].close();
}
if (self._peerConnections[peerId].hasStream) {
self._trigger('streamEnded', peerId, self.getPeerInfo(peerId), false);
}
self._wait(function () {
log.log([peerId, null, null, 'Ice and peer connections closed']);
delete self._peerConnections[peerId];
log.log([peerId, null, null, 'Re-creating peer connection']);
self._peerConnections[peerId] = self._createPeerConnection(peerId, !!hasScreenSharing);
// Set one second tiemout before sending the offer or the message gets received
setTimeout(function () {
if (self._peerConnections[peerId]){
self._peerConnections[peerId].receiveOnly = receiveOnly;
self._peerConnections[peerId].hasScreen = hasScreenSharing;
}
if (!receiveOnly) {
self._addLocalMediaStreams(peerId);
}
if (isSelfInitiatedRestart){
log.log([peerId, null, null, 'Sending restart message to signaling server']);
var lastRestart = Date.now() || function() { return +new Date(); };
var weight = (new Date()).valueOf();
self._peerRestartPriorities[peerId] = weight;
self._sendChannelMessage({
type: self._SIG_MESSAGE_TYPE.RESTART,
mid: self._user.sid,
rid: self._room.id,
agent: window.webrtcDetectedBrowser,
version: window.webrtcDetectedVersion,
os: window.navigator.platform,
userInfo: self.getPeerInfo(),
target: peerId,
isConnectionRestart: !!isConnectionRestart,
lastRestart: lastRestart,
weight: weight,
receiveOnly: receiveOnly,
enableIceTrickle: self._enableIceTrickle,
enableDataChannel: self._enableDataChannel,
sessionType: !!self._mediaScreen ? 'screensharing' : 'stream',
explicit: !!explicit
});
}
self._trigger('peerRestart', peerId, self.getPeerInfo(peerId), true);
// NOTE
if (typeof callback === 'function') {
log.debug([peerId, 'RTCPeerConnection', null, 'Firing restart callback']);
callback();
}
}, 1000);
}, function () {
return iceConnectionStateClosed && peerConnectionStateClosed;
});
};
/**
* Disconnects the Peer connection and remove object references associated.
* @method _removePeer
* @param {String} peerId The Peer ID to disconnect the connection with.
* @trigger peerLeft
* @private
* @component Peer
* @for Skylink
* @since 0.5.5
*/
Skylink.prototype._removePeer = function(peerId) {
var peerInfo = clone(this.getPeerInfo(peerId)) || {
userData: '',
settings: {},
mediaStatus: {},
agent: {},
room: clone(this._selectedRoom)
};
if (peerId !== 'MCU') {
this._trigger('peerLeft', peerId, peerInfo, false);
} else {
this._hasMCU = false;
log.log([peerId, null, null, 'MCU has stopped listening and left']);
this._trigger('serverPeerLeft', peerId, this.SERVER_PEER_TYPE.MCU);
}
// stop any existing peer health timer
this._stopPeerConnectionHealthCheck(peerId);
// check if health timer exists
if (typeof this._peerConnections[peerId] !== 'undefined') {
// new flag to check if datachannels are all closed
this._peerConnections[peerId].dataChannelClosed = true;
if (this._peerConnections[peerId].signalingState !== 'closed') {
this._peerConnections[peerId].close();
}
if (this._peerConnections[peerId].hasStream) {
this._trigger('streamEnded', peerId, this.getPeerInfo(peerId), false);
}
delete this._peerConnections[peerId];
}
// check the handshake priorities and remove them accordingly
if (typeof this._peerHSPriorities[peerId] !== 'undefined') {
delete this._peerHSPriorities[peerId];
}
if (typeof this._peerRestartPriorities[peerId] !== 'undefined') {
delete this._peerRestartPriorities[peerId];
}
if (typeof this._peerInformations[peerId] !== 'undefined') {
delete this._peerInformations[peerId];
}
if (typeof this._peerConnectionHealth[peerId] !== 'undefined') {
delete this._peerConnectionHealth[peerId];
}
// close datachannel connection
if (this._enableDataChannel) {
this._closeDataChannel(peerId);
}
log.log([peerId, null, null, 'Successfully removed peer']);
};
/**
* Creates a Peer connection. This does not start the handshake connection
* but creates the Peer connection object ready for connection.
* @method _createPeerConnection
* @param {String} targetMid The Peer ID to create the connection object
* with.
* @param {Boolean} [isScreenSharing=false] The flag that indicates if the Peer
* connection Stream sent is a screensharing stream or not.
* @return {Object} The Peer connection object associated with
* the provided ID.
* @private
* @component Peer
* @for Skylink
* @since 0.5.1
*/
Skylink.prototype._createPeerConnection = function(targetMid, isScreenSharing) {
var pc, self = this;
// currently the AdapterJS 0.12.1-2 causes an issue to prevent firefox from
// using .urls feature
var newRTCPeerConnection = window.webkitRTCPeerConnection || window.mozRTCPeerConnection ||
window.RTCPeerConnection;
try {
pc = new newRTCPeerConnection(
self._room.connection.peerConfig,
self._room.connection.peerConstraints);
log.info([targetMid, null, null, 'Created peer connection']);
log.debug([targetMid, null, null, 'Peer connection config:'],
self._room.connection.peerConfig);
log.debug([targetMid, null, null, 'Peer connection constraints:'],
self._room.connection.peerConstraints);
} catch (error) {
log.error([targetMid, null, null, 'Failed creating peer connection:'], error);
return null;
}
// attributes (added on by Temasys)
pc.setOffer = '';
pc.setAnswer = '';
pc.hasStream = false;
pc.hasScreen = !!isScreenSharing;
pc.hasMainChannel = false;
self._dataChannels[targetMid] = {};
// callbacks
// standard not implemented: onnegotiationneeded,
pc.ondatachannel = function(event) {
var dc = event.channel || event;
log.debug([targetMid, 'RTCDataChannel', dc.label, 'Received datachannel ->'], dc);
if (self._enableDataChannel) {
var channelType = self.DATA_CHANNEL_TYPE.DATA;
var channelKey = dc.label;
// if peer does not have main channel, the first item is main
if (!pc.hasMainChannel) {
channelType = self.DATA_CHANNEL_TYPE.MESSAGING;
channelKey = 'main';
pc.hasMainChannel = true;
}
self._dataChannels[targetMid][channelKey] =
self._createDataChannel(targetMid, channelType, dc, dc.label);
} else {
log.warn([targetMid, 'RTCDataChannel', dc.label, 'Not adding datachannel as enable datachannel ' +
'is set to false']);
}
};
pc.onaddstream = function(event) {
pc.hasStream = true;
self._onRemoteStreamAdded(targetMid, event, !!pc.hasScreen);
};
pc.onicecandidate = function(event) {
log.debug([targetMid, 'RTCIceCandidate', null, 'Ice candidate generated ->'],
event.candidate);
self._onIceCandidate(targetMid, event);
};
pc.oniceconnectionstatechange = function(evt) {
checkIceConnectionState(targetMid, pc.iceConnectionState,
function(iceConnectionState) {
log.debug([targetMid, 'RTCIceConnectionState', null,
'Ice connection state changed ->'], iceConnectionState);
self._trigger('iceConnectionState', iceConnectionState, targetMid);
// clear all peer connection health check
// peer connection is stable. now if there is a waiting check on it
if (iceConnectionState === self.ICE_CONNECTION_STATE.COMPLETED &&
pc.signalingState === self.PEER_CONNECTION_STATE.STABLE) {
log.debug([targetMid, 'PeerConnectionHealth', null,
'Peer connection with user is stable']);
self._peerConnectionHealth[targetMid] = true;
self._stopPeerConnectionHealthCheck(targetMid);
self._retryCount = 0;
}
if (typeof self._ICEConnectionFailures[targetMid] === 'undefined') {
self._ICEConnectionFailures[targetMid] = 0;
}
if (self._ICEConnectionFailures[targetMid] > 2) {
self._peerIceTrickleDisabled[targetMid] = true;
}
if (iceConnectionState === self.ICE_CONNECTION_STATE.FAILED) {
self._ICEConnectionFailures[targetMid] += 1;
if (self._enableIceTrickle && !self._peerIceTrickleDisabled[targetMid]) {
self._trigger('iceConnectionState',
self.ICE_CONNECTION_STATE.TRICKLE_FAILED, targetMid);
}
// refresh when failed. ignore for MCU case since restart is handled by MCU in this case
if (!self._hasMCU) {
self._restartPeerConnection(targetMid, true, true, null, false);
}
}
/**** SJS-53: Revert of commit ******
// resend if failed
if (iceConnectionState === self.ICE_CONNECTION_STATE.FAILED) {
log.debug([targetMid, 'RTCIceConnectionState', null,
'Ice connection state failed. Re-negotiating connection']);
self._removePeer(targetMid);
self._sendChannelMessage({
type: self._SIG_MESSAGE_TYPE.WELCOME,
mid: self._user.sid,
rid: self._room.id,
agent: window.webrtcDetectedBrowser,
version: window.webrtcDetectedVersion,
userInfo: self.getPeerInfo(),
target: targetMid,
restartNego: true,
hsPriority: -1
});
} *****/
});
};
// pc.onremovestream = function () {
// self._onRemoteStreamRemoved(targetMid);
// };
pc.onsignalingstatechange = function() {
log.debug([targetMid, 'RTCSignalingState', null,
'Peer connection state changed ->'], pc.signalingState);
self._trigger('peerConnectionState', pc.signalingState, targetMid);
// clear all peer connection health check
// peer connection is stable. now if there is a waiting check on it
if ((pc.iceConnectionState === self.ICE_CONNECTION_STATE.COMPLETED ||
pc.iceConnectionState === self.ICE_CONNECTION_STATE.CONNECTED) &&
pc.signalingState === self.PEER_CONNECTION_STATE.STABLE) {
log.debug([targetMid, 'PeerConnectionHealth', null,
'Peer connection with user is stable']);
self._peerConnectionHealth[targetMid] = true;
self._stopPeerConnectionHealthCheck(targetMid);
self._retryCount = 0;
}
};
pc.onicegatheringstatechange = function() {
log.log([targetMid, 'RTCIceGatheringState', null,
'Ice gathering state changed ->'], pc.iceGatheringState);
self._trigger('candidateGenerationState', pc.iceGatheringState, targetMid);
};
return pc;
};
/**
* Refreshes a Peer connection.
* - This feature can be used to refresh a Peer connection when the
* remote Stream received does not stream any audio/video stream.
* - If there are more than 1 refresh during 5 seconds
* or refresh is less than 3 seconds since the last refresh
* initiated by the other peer, it will be aborted.
* - As for MCU connection, the restart mechanism makes the self user
* leave and join the currently connected room again.
* @method refreshConnection
* @param {String|Array} [targetPeerId] The array of targeted Peers connection to refresh
* the connection with.
* @param {Function} [callback] The callback fired after all targeted Peers connection has
* been initiated with refresh or have met with an exception.
* The callback signature is function (error, success).
* @param {JSON} callback.error The error object received in the callback.
* If received as null, it means that there is no errors.
* @param {Array} callback.error.listOfPeers The list of Peers that the
* refresh connection had been initiated with.
* @param {JSON} callback.error.refreshErrors The list of errors occurred
* based on per Peer basis.
* @param {Object|String} callback.error.refreshErrors.(#peerId) The Peer ID that
* is associated with the error that occurred when refreshing the connection.
* @param {JSON} callback.success The success object received in the callback.
* If received as null, it means that there are errors.
* @param {Array} callback.success.listOfPeers The list of Peers that the
* refresh connection had been initiated with.
* @example
* SkylinkDemo.on("iceConnectionState", function (state, peerId)) {
* if (iceConnectionState === SkylinkDemo.ICE_CONNECTION_STATE.FAILED) {
* // Do a refresh
* SkylinkDemo.refreshConnection(peerId);
* }
* });
* @trigger peerRestart, serverPeerRestart, peerJoined, peerLeft, serverPeerJoined, serverPeerLeft
* @component Peer
* @for Skylink
* @since 0.5.5
*/
Skylink.prototype.refreshConnection = function(targetPeerId, callback) {
var self = this;
var listOfPeers = Object.keys(self._peerConnections);
var listOfPeerRestarts = [];
var error = '';
var listOfPeerRestartErrors = {};
if(Array.isArray(targetPeerId)) {
listOfPeers = targetPeerId;
} else if (typeof targetPeerId === 'string') {
listOfPeers = [targetPeerId];
} else if (typeof targetPeerId === 'function') {
callback = targetPeerId;
}
if (listOfPeers.length === 0) {
error = 'There is currently no peer connections to restart';
log.warn([null, 'PeerConnection', null, error]);
listOfPeerRestartErrors.self = new Error(error);
if (typeof callback === 'function') {
callback({
refreshErrors: listOfPeerRestartErrors,
listOfPeers: listOfPeers
}, null);
}
return;
}
// To fix jshint dont put functions within a loop
var refreshSinglePeerCallback = function (peerId) {
return function (error, success) {
if (listOfPeerRestarts.indexOf(peerId) === -1) {
if (error) {
log.error([peerId, 'RTCPeerConnection', null, 'Failed restarting for peer'], error);
listOfPeerRestartErrors[peerId] = error;
}
listOfPeerRestarts.push(peerId);
}
if (listOfPeerRestarts.length === listOfPeers.length) {
if (typeof callback === 'function') {
log.log([null, 'PeerConnection', null, 'Invoked all peers to restart. Firing callback']);
if (Object.keys(listOfPeerRestartErrors).length > 0) {
callback({
refreshErrors: listOfPeerRestartErrors,
listOfPeers: listOfPeers
}, null);
} else {
callback(null, {
listOfPeers: listOfPeers
});
}
}
}
};
};
var refreshSinglePeer = function(peerId, peerCallback){
if (!self._peerConnections[peerId]) {
error = 'There is currently no existing peer connection made ' +
'with the peer. Unable to restart connection';
log.error([peerId, null, null, error]);
listOfPeerRestartErrors[peerId] = new Error(error);
return;
}
var now = Date.now() || function() { return +new Date(); };
if (now - self.lastRestart < 3000) {
error = 'Last restart was so tight. Aborting.';
log.error([peerId, null, null, error]);
listOfPeerRestartErrors[peerId] = new Error(error);
return;
}
log.log([peerId, 'PeerConnection', null, 'Restarting peer connection']);
// do a hard reset on variable object
self._restartPeerConnection(peerId, true, false, peerCallback, true);
};
var toRefresh = function() {
if(!self._hasMCU) {
var i;
for (i = 0; i < listOfPeers.length; i++) {
var peerId = listOfPeers[i];
if (Object.keys(self._peerConnections).indexOf(peerId) > -1) {
refreshSinglePeer(peerId, refreshSinglePeerCallback(peerId));
} else {
error = 'Peer connection with peer does not exists. Unable to restart';
log.error([peerId, 'PeerConnection', null, error]);
listOfPeerRestartErrors[peerId] = new Error(error);
}
// there's an error to trigger for
if (i === listOfPeers.length - 1 && Object.keys(listOfPeerRestartErrors).length > 0) {
if (typeof callback === 'function') {
callback({
refreshErrors: listOfPeerRestartErrors,
listOfPeers: listOfPeers
}, null);
}
}
}
} else {
self._restartMCUConnection(callback);
}
};
self._throttle(toRefresh,5000)();
};
/**
* Restarts all Peers connection in a MCU connection environment.
* This would require the current user to leave the room and restart all
* current existing Peers connection.
* @method _restartMCUConnection
* @param {Function} [callback] The callback fired after all targeted Peers connection has
* been initiated with refresh or have met with an exception.
* The callback signature is function (error, success).
* @param {JSON} callback.error The error object received in the callback.
* If received as null, it means that there is no errors.
* @param {Array} callback.error.listOfPeers The list of Peers that the
* refresh connection had been initiated with.
* @param {JSON} callback.error.refreshErrors The list of errors occurred
* based on per Peer basis.
* @param {Object|String} callback.error.refreshErrors.(#peerId) The Peer ID associated
* with the error that occurred when refreshing the connection.
* @param {JSON} callback.success The success object received in the callback.
* If received as null, it means that there are errors.
* @param {Array} callback.success.listOfPeers The list of Peers that the
* refresh connection had been initiated with.
* @private
* @trigger peerRestart, serverPeerRestart, peerJoined, peerLeft, serverPeerJoined
* @component Peer
* @for Skylink
* @since 0.6.1
*/
Skylink.prototype._restartMCUConnection = function(callback) {
var self = this;
log.info([self._user.sid, null, null, 'Restarting with MCU enabled']);
// Save room name
/*var roomName = (self._room.id).substring((self._room.id)
.indexOf('_api_') + 5, (self._room.id).length);*/
var listOfPeers = Object.keys(self._peerConnections);
var listOfPeerRestartErrors = {};
var peerId; // j shint is whinning
var receiveOnly = false;
// for MCU case, these dont matter at all
var lastRestart = Date.now() || function() { return +new Date(); };
var weight = (new Date()).valueOf();
self._trigger('serverPeerRestart', 'MCU', self.SERVER_PEER_TYPE.MCU);
for (var i = 0; i < listOfPeers.length; i++) {
peerId = listOfPeers[i];
if (!self._peerConnections[peerId]) {
var error = 'Peer connection with peer does not exists. Unable to restart';
log.error([peerId, 'PeerConnection', null, error]);
listOfPeerRestartErrors[peerId] = new Error(error);
continue;
}
if (peerId === 'MCU') {
receiveOnly = !!self._peerConnections[peerId].receiveOnly;
}
if (peerId !== 'MCU') {
self._trigger('peerRestart', peerId, self.getPeerInfo(peerId), true);
log.log([peerId, null, null, 'Sending restart message to signaling server']);
self._peerRestartPriorities[peerId] = weight;
self._sendChannelMessage({
type: self._SIG_MESSAGE_TYPE.RESTART,
mid: self._user.sid,
rid: self._room.id,
agent: window.webrtcDetectedBrowser,
version: window.webrtcDetectedVersion,
os: window.navigator.platform,
userInfo: self.getPeerInfo(),
target: peerId, //'MCU',
isConnectionRestart: false,
lastRestart: lastRestart,
weight: weight,
receiveOnly: receiveOnly,
enableIceTrickle: self._enableIceTrickle,
enableDataChannel: self._enableDataChannel,
sessionType: !!self._mediaScreen ? 'screensharing' : 'stream',
explicit: true
});
}
}
// Restart with MCU = peer leaves then rejoins room
var peerJoinedFn = function (peerId, peerInfo, isSelf) {
log.log([null, 'PeerConnection', null, 'Invoked all peers to restart with MCU. Firing callback']);
if (typeof callback === 'function') {
if (Object.keys(listOfPeerRestartErrors).length > 0) {
callback({
refreshErrors: listOfPeerRestartErrors,
listOfPeers: listOfPeers
}, null);
} else {
callback(null, {
listOfPeers: listOfPeers
});
}
}
};
self.once('peerJoined', peerJoinedFn, function (peerId, peerInfo, isSelf) {
return isSelf;
});
self.leaveRoom(false, function (error, success) {
if (error) {
if (typeof callback === 'function') {
for (var i = 0; i < listOfPeers.length; i++) {
listOfPeerRestartErrors[listOfPeers[i]] = error;
}
callback({
refreshErrors: listOfPeerRestartErrors,
listOfPeers: listOfPeers
}, null);
}
} else {
//self._trigger('serverPeerLeft', 'MCU', self.SERVER_PEER_TYPE.MCU);
self.joinRoom(self._selectedRoom);
}
});
};


Working with WRF CHEM part3 compile wrf exe
2014-06-26
##WorkingwithWRFCHEMpart3-compilewrfexe##
- for running wrf.exe after wps, it is found that no link for wrf.exe and real.exe was made during the compilation of wrf-chem.
- so now need of fresh compilation of wrf alone to make it work
- the compilation involves only setting environment, installing dependent packages and running,
./configure
then ./compile em_real
and ./compile emi_conv
- the first step of .configure ended with error saying can’t find netcdf in the path, the path specified is wrong one. So the file sudo nano bash.bashrc
was edited removed the extract two line for NETCDF with set for different installation location. These lines were uncommented with maintaining netcdf path for /usr/local. this was came to know from nc-config --all
to know the netcdf installed location. But after editing also the configure returned same error.
- after a reboot the configure was repeated and it ended without any error, so it can be concluded that the setting environment edit in bash.bashrc will take effect after a reboot.
- Then done ./compile em_real
, but this time also compilation run for almost 20 minutes, but no real.exe is made in main folder. But its links are made elsewhere such as run and test folders. the common show is of this nature ..../wrf_utils/./read_wrf_nc.f:790: undefined reference to `nf_open_'
..../wrf_utils/./read_wrf_nc.f:793: undefined reference to `nf_open_'
..../wrf_utils/./read_wrf_nc.f:802: undefined reference to `nf_inq_varid_'
..../wrf_utils/./read_wrf_nc.f:811: undefined reference to `ncvid_'
- so based on experiance in compiling PREPCHEMSRC, the netcdf path was edited with additional -lnetcdff
and rerun compilation.
- this time selecting serial, 23, compilation and editing configure.wrf, completed the compilation for 15 minutes and made wrf.exe and executables and there is no error as seen in earlier compilation.
- then executed the commend for wrf chem, ./compile emi_conv
it also compiled with out any error and it made executables for emissconv.exe, this was not made in eaarlier case.
- so now testing for parallel compiling with editing in configure.wrf for libnetdf and then made reptiation, but with dm+sm, it existed without genrating any exe files.
- For genrating log file along with compile made a serch and ended up [here](http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Compile/wps_compile3.htm) and found a [treasure trove](http://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php#STEP4)
for WRF compiling. This page comphrehensively explains numerous stpes of wrf comipling with library installation and most importatnly test the system requierment for wrf compiling.
- Using this guide made a attmept for testing the librariesa and env in the current system for wrf compiling. Made a test of 7+2 and all the test were exited without any error, in netcdf sum warning came but it also exited with success. Found mpich2 was older version than specified in the guide, current version is 1.4.1 and recommended in the guide is 3.0.1!.
- So based on this success of all tests, made configure and editing of configure.wrf and compiled wrf with ./compile em_real >& compile.log
and selected dmpar for runnning.
- but this also exited with error, the error were /usr/local/include/mpi.h:1501:31: error: expected declaration specifiers or ‘...’ before ‘MPI_Comm’
, so concluded that new version of mpich2 has to be installed.
- Mpich2 were installed during making beowlf cluster creation processes as per [this](http://byobu.info/article/BuildingasimpleBeowulfclusterwith_Ubuntu/) where, mpich2 was installed using sudo apt-get install mpich2
, and the verision was 1.4.1, needed for wrf compilation is 3.0.1 so it wass unstallaed by sudo apt-get remove mpich2
- so followed the tutorial and compiled mpich using the commands
tar xzvf mpich-3.0.4.tar.gz #or just .tar if no .gz present
cd mpich-3.0.4
./configure --prefix=$DIR/mpich
make
sudo checkinstall
- to view the location of the intsalled packaeg run dpkg -L mpich
, it shows it in / folder, to consider the difference in c and bash shell a line was added into the file /etc/bash.bashrc
as export mpich=/mpich/bin
.
- restart the computer and recompiling, but it was also a fail.
- found a installation manual from mpich compiled folder, it says prefix=$DIR
makes compilation into referred folder, instead path /usr/local/bin
is its default compiling location for mpich, that means giving no prefix makes problem to solve.
- The manual also shows instruction for setenv for Bash terminals it has to do it in this way PATH=/usr/local/bin:$PATH
and export path
. now on ward it seems mpich is working properly, such as giveing which mpicc
respond fine.
- But made confused attempt of recompileing and all… with a pretext that the mpich is not working properly, mainly due to the testing said in wrf compile tutorial is not working, the final step in mpirun made into a stand still and gives error after a long time such as MPICH2, mpirun > ssh: Could not resolve hostname
. But made a google search with this error and ofund this web page sauing mpirun has to run based on the editing in the file cat /etc/hosts
, it was actually edited durign bewolf cluster creation, so made the test with this mpi run command mpirun -np 1 -host localhost ./a.out
this resolved problem.
- with out considering this problem wrf was compiled with 25 (dmpar) option and it compiled correctly with creation of eexcettables. running of mpirun with this code mpirun -np 1 -host localhost ./a.out
will makes wrf to run in parellelll mode. hooorahe, this was wrf compilation with parrellel mode makes a happy ending!


--- title: resume permalink: "resume/index.html" layout: default ---
I'm an IT engineer located in the Basque Country
- JAVA
- JSF Primefaces Hibernate
- HTML CSS
- Javascript jQuery
- SQL
I have made the final degree project based on robotics. Nowadays I'm currently working in web application development with JAVA.
My last works here.
email:bingen.glez@gmail.com


I'm Yevgen Atlanov and i am junior universal soldier in web development.
Next few month i'll create small projects to upgare my front-end skills. I'm planning to work on JavaScript(Coffeescript, Ajax, JSON) Jquery, CSS3, SCSS, PostCSS, SVG, NodeJS, MeteorJS, and of course HTML5 (Jade), Polymer and WebComponents.


Review your submission
Competition:
Monhtly competition May 2017
Picture 1
LABEL ID: 15
Picture type
Colour print
Monochrome print
Projected
Update file...
Picture 2
Picture type
Colour print
Monochrome print
Projected
Update file...
Picture 3
Picture type
Colour print
Monochrome print
Projected
Update file...
Withdraw
Submit


GrIT
Home
About
Video
Exhibition
Best Assignment
We had so much fun volunteering this time!
Shall we take a look at the website we created together?
Lecture 1
Lecture 3
Lecture 4
Lecture 5


Answer:
Screen objects are used to read the information from client's screen.The properties of screen objects are-
- AvailHeight:Gives the height of client's screen.
- Availwidth:Gives the width of client's screen.
- ColorDepth:Gives the bit depth of images on the client's screen.
- Height:Gives the total height of the client's screen including the taskbar.
- Width:Gives the total width of the client's screen including the taskbar.


Governors of Egypt from the Islamic conquest in AD 640 to the Ottoman conquest in 1517.
==The Rashidun Caliphs Era (640-658)==
{| width=90% class="wikitable" style="text-align:center"
|- style="background:#cccccc"
|-
! #
! colspan=2|Governor
! Start
! End
! Period
! Governor Title
! Destiny
|-
| 1
| [[Amr Ibn Al-Aas]]
| ''No Picture Available''
| [[640]]
| [[646]]
| 6 years
| Amir
| Secluded by [[Uthman Ibn Affan]]
|-
| 2
| [[Abdullah Ibn Sa'ad]]
| ''No Picture Available''
| [[646]]
| [[656]]
| 10 years
| Amir
| Overthrown by Muhammad Ibn Huzayfa
|-
| 3
| [[Muhammad Ibn Abi Huzayfa]]
| ''No Picture Available''
| [[656]]
| [[657]]
| 1 year
| Amir
| Killed
|-
| 4
| [[Qays Ibn Sa'ad]]
| ''No Picture Available''
| [[657]]
| [[657]]
| 6 Months
| Amir
| Secluded
|-
| 5
| [[Malik Ibn Al-Harith]]
| ''No Picture Available''
| [[657]]
| [[657]]
| 1 Day
| Amir
| Died before reaching [[Al-Fustat]]
|-
| 6
| [[Muhammad ibn Abi Bakr]]
| ''No Picture Available''
| [[658]]
| [[658]]
| 5 Months
| Amir
| Killed
|}
==Umayyad Empire Era (659-750)==
{| width=90% class="wikitable" style="text-align:center"
|- style="background:#cccccc"
|-
! #
! Governor
! Start
! End
! Governor Title
! Destiny
|-
| 1
| [[Amr ibn al-Aas]]
| [[659]]
| [[664]]
| Wali
| -
|-
| 2
| [[Utba ibn Abi Suffyan Ibn Harb]]
| [[664]]
| [[665]]
| Wali
| Died
|-
| 3
| [[Oquba ibn Amir al-Gahny]]
| [[665]]
| [[667]]
| Wali
| Unseated
|-
| 4
| [[Muslima ibn Makhlad al-Ansari]]
| [[667]]
| [[682]]
| Wali
| -
|-
| 5
| [[Sa'id ibn Yazid ibn al-Qama al-Azdi]]
| [[682]]
| [[684]]
| Wali
| Unseated
|-
| 6
| [[Abd al-Rahman ibn Utba ibn Gahdam al-Fihri]]
| [[684]]
| [[684]]
| Wali
| Unseated
|-
| 7
| [[Abd al-Aziz ibn Marwan ibn al-Hakam]]
| [[685]]
| [[705]]
| Wali
| -
|-
| 8
| [[Abdullah ibn Abd al-Malik ibn Marwan ibn al-Hakam]]
| [[705]]
| [[709]]
| Wali
| Unseated
|-
| 9
| [[Qurra Ibn Sharik al-Absi]]
| [[709]]
| [[714]]
| Wali
| -
|-
| 10
| [[Abd al-Malik ibn Rifa'a al-Fahmi]]
| [[714]]
| [[717]]
| Wali
| Unseated
|-
| 11
| [[Ayyub ibn Sharhabil]]
| [[717]]
| [[720]]
| Wali
| -
|-
| 12
| [[Bishr ibn Safwan al-Kalbi]]
| [[720]]
| [[721]]
| Wali
| Became The Wali of [[Africa]]
|-
| 13
| [[Handhala ibn Safwan al-Kalbi]]
| [[721]]
| [[724]]
| Wali
| -
|-
| 14
| [[Muhammad ibn Abd al-Malik ibn Marwan]]
| [[724]]
| [[724]]
| Wali
| Ran away after an epidemic
|-
| 15
| [[Al-Hurr ibn Yusuf]]
| [[724]]
| [[727]]
| Wali
| Died
|-
| 16
| [[Abd al-Malik ibn Rifa'a al-Fahmi]]
| [[727]]
| [[727]]
| Wali
| -
|-
| 17
| [[Al-Walid ibn Rifa'a ibn Thabit al-Fahmi]]
| [[727]]
| [[735]]
| Wali
| Unseated
|-
| 18
| [[Abd al-Rahman ibn Khalid al-Fahmi]]
| [[735]]
| [[737]]
| Wali
| Unseated
|-
| 19
| [[Handhala ibn Safwan al-Kalbi]]
| [[737]]
| [[741]]
| Wali
| Became The Wali of [[Africa]]
|-
| 20
| [[Hafs ibn al-Walid ibn Yusuf al-Hadrami]]
| [[741]]
| [[744]]
| Wali
| Asked to be unseated
|-
| 21
| [[Hasan ibn Atahiya]]
| [[744]]
| [[744]]
| Wali
| Ran away
|-
| 22
| [[Hafs ibn al-Walid ibn Yusuf al-Hadrami]]
| [[744]]
| [[745]]
| Wali
| -
|-
| 23
| [[Al-Hawthala ibn Sohayl al-Bahili]]
| [[745]]
| [[749]]
| Wali
| Unseated
|-
| 24
| [[Al-Mughira ibn Unayd al-Fazari]]
| [[749]]
| [[749]]
| Wali
| Died
|-
| 25
| [[Abd al-Malik ibn Marwan Musa ibn Nussayr]]
| [[749]]
| [[749]]
| Wali
| Unseated by the [[Abbasid]]s
|}
==Abbasid Empire Era (750-969)==
===The First Abbasid Period Rulers ([[750]]-[[868]])===
{| width=90% class="wikitable" style="text-align:center"
|- style="background:#cccccc"
|-
! #
! Governor
! Start
! End
! Period
! Governor Title
! Destiny
|-
| 1
| [[Saleh Ibn Ali Ibn Abullah Ibn Al-Abbas]]
| [[750]]
| [[751]]
| 1 year
| Wali
| Became the wali of [[Palestine]]
|-
| 2
| [[Abu Oun Abdel Malek Ibn Yazeed]]
| [[751]]
| [[753]]
| 2 years
| Wali
| Ran away after an epidemic
|-
| 3
| [[Saleh Ibn Ali Ibn Abullah Ibn Al-Abbas]]
| [[753]]
| [[755]]
| 2 years
| Wali
| Unseated
|-
| 4
| [[Abu Oun Abdel Malek Ibn Yazeed]]
| [[755]]
| [[758]]
| 3 years
| Wali
| Unseated
|-
| 5
| [[Moussa Ibn Ka'ab Oyayna]]
| [[758]]
| [[759]]
| 1 year
| Wali
| Unseated
|-
| 6
| [[Mohammed Ibn Al-Ash'ath Al-Khozaey]]
| [[759]]
| [[760]]
| 1 year
| Wali
| Unseated
|-
| 7
| [[Homayd Ibn Qohayta]]
| [[760]]
| [[762]]
| 2 years
| Wali
| Unseated
|-
| 8
| [[Yazeed Ibn Hatem Al-Mohobaly]]
| [[762]]
| [[768]]
| 6 years
| Wali
| Unseated
|-
| 9
| [[Abdullah Ibn Abdel Rahman Ibn Mo'awya]]
| [[768]]
| [[772]]
| 4 years
| Wali
| -
|-
| 10
| [[Mohammed Ibn Abdel Rahman Ibn Mo'awya]]
| [[772]]
| [[772]]
| 8 Months
| Wali
| Died
|-
| 11
| [[Moussa Ibn Ali Ibn Rabah Al-Lakhmy]]
| [[772]]
| [[778]]
| 6 years
| Wali
| -
|-
| 12
| [[Essa Ibn Loqman Al-Gamhy]]
| [[778]]
| [[779]]
| 4 Months
| Wali
| Unseated
|-
| 13
| [[Wadeh]]
| [[779]]
| [[779]]
| 4 Months
| Wali
| Unseated
|-
| 14
| [[Mansour Ibn Yazeed Ibn Mansour Al-Roayny]]
| [[779]]
| [[779]]
| 2 Months
| Wali
| Unseated
|-
| 15
| [[Yahia Ibn Dawood Al-Harshy]]
| [[779]]
| [[780]]
| 1 year
| Wali
| Unseated
|-
| 16
| [[Salem Ibn Sawada Al-Tamemy]]
| [[780]]
| [[781]]
| 1 year
| Wali
| Unseated
|-
| 17
| [[Ibrahim Ibn Saleh Ibn Abdullah Ibn Al-Abbas]]
| [[781]]
| [[784]]
| 3 years
| Wali
| Unseated
|-
| 18
| [[Moussa Ibn Sa'ab Al-Khasamy]]
| [[784]]
| [[785]]
| 1 year
| Wali
| Killed
|-
| 19
| [[Osama Ibn Amr Al-Moafery]]
| [[785]]
| [[785]]
| 2 Months
| Wali
| Unseated
|-
| 20
| [[Al-Fadl Ibn Saleh Ibn Ali Al-Abbasy]]
| [[785]]
| [[786]]
| 1 year
| Wali
| Unseated
|-
| 21
| [[Ali Ibn Salman Al-Abbasy]]
| [[786]]
| [[787]]
| 1 year
| Wali
| Unseated by the new [[Abbasid]] wali
|-
| 22
| [[Moussa Ibn Essa Ibn Moussa Al-Abbasy]]
| [[787]]
| [[789]]
| 2 years
| Wali
| Unseated
|-
| 23
| [[Moslama Ibn Yahia Al-Bagly]]
| [[789]]
| [[790]]
| 1 year
| Wali
| Unseated
|-
| 24
| [[Mohammed Ibn Zohair Al-Azdy]]
| [[790]]
| [[790]]
| Less Than A Year
| Wali
| Unseated
|-
| 25
| [[Dawood Ibn Yazeed Al-Mahlaby]]
| [[790]]
| [[791]]
| 1 years
| Wali
| Unseated
|-
| 26
| [[Moussa Ibn Essa Ibn Moussa Al-Abbasy]]
| [[791]]
| [[792]]
| 1 years
| Wali
| Unseated
|-
| 27
| [[Ibrahim Ibn Saleh Ibn Abdullah Ibn Al-Abbas]]
| [[792]]
| [[792]]
| Less Than A Year
| Wali
| Unseated
|-
| 28
| [[Abdullah Ibn Al-Maseeb Ibn Zohair Al-Dabii]]
| [[792]]
| [[793]]
| 1 year
| Wali
| Unseated
|-
| 29
| [[Isak Ibn Souliman]]
| [[793]]
| [[794]]
| 1 year
| Wali
| Unseated
|-
| 30
| [[Harthama Ibn Aayoun]]
| [[794]]
| [[795]]
| 1 year
| Wali
| Became the wali of [[Africa]]
|-
| 31
| [[Abdel Malek Ibn Saleh Ibn Ali Al-Abbasy]]
| [[795]]
| [[795]]
| Less Than A Year
| Wali
| -
|-
| 32
| [[Abdullah Ibn Al-Maseeb Al-Abbasy]]
| [[795]]
| [[795]]
| 10 Months
| Wali
| Unseated
|-
| 33
| [[Abdullah Ibn Al-Mahdy Al-Abbasy]]
| [[795]]
| [[795]]
| Less Than A Year
| Wali
| Unseated
|-
| 34
| [[Moussa Ibn Essa Ibn Moussa Al-Abbasy]]
| [[795]]
| [[796]]
| 1 year
| Wali
| Unseated
|-
| 35
| [[Abdullah Ibn Al-Mahdy Al-Abbasy]]
| [[796]]
| [[797]]
| 1 year
| Wali
| Unseated
|-
| 36
| [[Ismael Ibn Saleh Al-Abbasy]]
| [[797]]
| [[798]]
| 1 year
| Wali
| Unseated
|-
| 37
| [[Ismael Ibn Essa Al-Abbasy]]
| [[798]]
| [[798]]
| Less Than A Year
| Wali
| Unseated
|-
| 38
| [[Al-Layth Ibn Al-Fadl]]
| [[798]]
| [[803]]
| 5 years
| Wali
| Unseated
|-
| 39
| [[Ahmed Ibn Ismael Ibn Ali Ibn Abdullah Al-Abbasy]]
| [[803]]
| [[805]]
| 2 years
| Wali
| Unseated
|-
| 40
| [[Abdullah Ibn Mohammed Al-Abbasy]]
| [[805]]
| [[806]]
| 1 year
| Wali
| Unseated
|-
| 41
| [[Al-Hussain Ibn Jameel]]
| [[806]]
| [[808]]
| 2 years
| Wali
| Unseated
|-
| 42
| [[Malek Ibn Dalham Al-Kalby]]
| [[808]]
| [[808]]
| 9 Months
| Wali
| Unseated
|-
| 43
| [[Al-Hasan Ibn Al-Takhtakh]]
| [[809]]
| [[809]]
| 11 Months
| Wali
| Unseated
|-
| 44
| [[Hatem Ibn Harthama Ibn Aayoun]]
| [[810]]
| [[811]]
| 1 year
| Wali
| Unseated
|-
| 45
| [[Gaber Ibn Al-Asha'ath Al-Ta'ey]]
| [[811]]
| [[812]]
| 2 years
| Wali
| Beaten off from [[Egypt]]
|-
| 46
| [[Abbad Ibn Mohammed Ibn Hayan]]
| [[812]]
| [[813]]
| Less Than A Year
| Wali
| Unseated
|-
| 47
| [[Al-Mottaleb Ibn Abdullah Al-Khozaey]]
| [[813]]
| [[814]]
| Less Than A Year
| Wali
| Unseated
|-
| 48
| [[Al-Abbas Ibn Moussa Ibn Essa Al-Abbasy]]
| [[814]]
| [[814]]
| Less Than A Year
| Wali
| -
|-
| 49
| [[Al-Mottaleb Ibn Abdullah Al-Khozaey]]
| [[814]]
| [[815]]
| Less Than A Year
| Wali
| Beaten off from [[Egypt]]
|-
| 50
| [[Al-Serry Ibn Al-Hakam]]
| [[815]]
| [[816]]
| 6 Months
| Wali
| Soldiers revolted against him
|-
| 51
| [[Suliman Ibn Ghaleb Ibn Gabriel Al-Bagly]]
| [[816]]
| [[817]]
| 5 Months
| Wali
| Soldiers revolted against him
|-
| 52
| [[Al-Serry Ibn Al-Hakam]]
| [[817]]
| [[820]]
| 3 years
| Wali
| -
|-
| 53
| [[Abu Al-Nasr Ibn Al-Serry]]
| [[820]]
| [[822]]
| 2 years
| Wali
| -
|-
| 54
| [[Obaid Allah Ibn Al-Serry]]
| [[822]]
| [[825]]
| 3 years
| Wali
| Unseated by the new wali
|-
| 55
| [[Khaled Ibn Yazeed Ibn Mazeed Al-Shebany]]
| [[825]]
| [[826]]
| Less Than A Year
| Wali
| -
|-
| 56
| [[Abdullah Ibn Taher Ibn Al-Houssain]]
| [[826]]
| [[827]]
| Less Than A Year
| Wali
| -
|-
| 57
| [[Essa Ibn Yazeed Al-Geloudy]]
| [[827]]
| [[829]]
| 2 years
| Wali
| -
|-
| 58
| [[Omair Ibn Al-Waleed]]
| [[829]]
| [[829]]
| 60 Days
| Wali
| Killed
|-
| 59
| [[Mohammed Ibn Omair]]
| [[829]]
| [[829]]
| 1 Month
| Wali
| -
|-
| 60
| [[Essa Ibn Yazeed Al-Geloudy]]
| [[829]]
| [[830]]
| Less Than A Year
| Wali
| -
|-
| 61
| [[Abdoweya Ibn Gabala]]
| [[830]]
| [[831]]
| Less Than A Year
| Wali
| Unseated
|-
| 62
| [[Essa Ibn Mansour]]
| [[831]]
| [[832]]
| Less Than A Year
| Wali
| Unseated by the new wali
|-
| 63
| [[Kider Nasr Ibn Abdullah]]
| [[832]]
| [[834]]
| 2 years
| Wali
| -
|-
| 64
| [[Mozaffar Ibn Kider]]
| [[834]]
| [[834]]
| 4 Months
| Wali
| -
|-
| 65
| [[Moussa Ibn Abu Al-Abbas]]
| [[834]]
| [[839]]
| 5 years
| Wali
| -
|-
| 66
| [[Malek Ibn Kider]]
| [[839]]
| [[841]]
| 2 years
| Wali
| -
|-
| 67
| [[Ali Ibn Yahia Al-Armany]]
| [[841]]
| [[843]]
| 2 years
| Wali
| -
|-
| 68
| [[Essa Ibn Mansour]]
| [[843]]
| [[847]]
| 4 years
| Wali
| -
|-
| 69
| [[Harthama Ibn al-Nadr Al-Gabaly]]
| [[848]]
| [[849]]
| Less Than A Year
| Wali
| -
|-
| 70
| [[Hatem Ibn Harthama Ibn al-Nadr]]
| [[849]]
| [[849]]
| 1 Month
| Wali
| -
|-
| 71
| [[Ali Ibn Yahia Al-Armany]]
| [[849]]
| [[850]]
| Less Than A Year
| Wali
| Unseated
|-
| 72
| [[Isak Ibn Yahia Ibn Moaz]]
| [[850]]
| [[851]]
| Less Than A Year
| Wali
| -
|-
| 73
| [[Khaot Abel Wahed Ibn Yahia]]
| [[851]]
| [[852]]
| Less Than A Year
| Wali
| -
|-
| 74
| [[Anbasa Ibn Isak Al-Dabii]]
| [[852]]
| [[856]]
| 4 years
| Wali
| -
|-
| 75
| [[Yazeed Ibn Abdullah Al-Tourky]]
| [[856]]
| [[867]]
| Less Than A Year
| Wali
| -
|-
| 76
| [[Mozahem Ibn Khaqan]]
| [[867]]
| [[868]]
| Less Than A Year
| Wali
| -
|-
| 77
| [[Ahmed Ibn Mozahem Ibn Khaqan]]
| [[868]]
| [[868]]
| Less Than A Year
| Wali
| -
|-
| 78
| [[Azgour Al Tourky]]
| [[868]]
| [[868]]
| Less Than A Year
| Wali
| -
|}
===Tulunids Dynasty (868-905)===
{| class="wikitable" style="text-align:center"
|- style="background:#cccccc"
|-
! #
! colspan=2|Governor
! Start
! End
! Period
! Governor Title
! Destiny
|-
| 1
| [[Ahmad ibn Tulun]]
| ''No Picture Available''
| [[868]]
| [[884]]
| 16 years
| Amir
| Died
|-
| 2
| [[Khumarawaih of Tulunids|Khumarawaih]]
| ''No Picture Available''
| [[884]]
| [[896]]
| 12 years
| Amir
| Murdered
|-
| 3
| [[Abu l-Ashir of Tulunids|Abu l-Ashir]]
| ''No Picture Available''
| [[896]]
| [[896]]
| 1 year
| Amir
| Unseated then died in jail
|-
| 4
| [[Harun of Tulunids|Harun]]
| ''No Picture Available''
| [[896]]
| [[904]]
| 9 years
| Amir
| Murdered
|-
| 5
| [[Shaiban of Tulunids|Shaiban]]
| ''No Picture Available''
| [[904]]
| [[905]]
| 1 year
| Amir
| left
|}
===The Second Abbasid Period Rulers (905-935)===
{| class="wikitable" style="text-align:center"
|- style="background:#cccccc"
|-
! #
! Governor
! Start
! End
! Period
! Governor Title
! Destiny
|-
| 1
| [[Saleh Ibn Ali Ibn Abullah Ibn Al-Abbas]]
| ؟؟؟؟
| ؟؟؟؟
| -
| Wali
| -
|-
| 2
| [[Abu Oun Abdel Malek Ibn Yazeed]]
| ؟؟؟؟
| ؟؟؟؟
| -
| Wali
| -
|-
| 3
| [[Saleh Ibn Ali Ibn Abullah Ibn Al-Abbas]]
| ؟؟؟؟
| ؟؟؟؟
| -
| Wali
| -
|-
| 4
| [[Abu Oun Abdel Malek Ibn Yazeed]]
| ؟؟؟؟
| ؟؟؟؟
| -
| Wali
| -
|-
| 5
| [[Moussa Ibn Ka'ab Oyayna]]
| ؟؟؟؟
| ؟؟؟؟
| -
| Wali
| -
|-
| 6
| [[Mohammed Ibn Al-Ash'ath Al-Khozaey]]
| ؟؟؟؟
| ؟؟؟؟
| -
| Wali
| -
|-
| 7
| [[Homayd Ibn Qohayta]]
| ؟؟؟؟
| ؟؟؟؟
| -
| Wali
| -
|-
| 8
| [[Yazeed Ibn Hatem Al-Mohobaly]]
| ؟؟؟؟
| ؟؟؟؟
| -
| Wali
| -
|-
| 9
| [[Abdullah Ibn Abdel Rahman Ibn Mo'awya]]
| ؟؟؟؟
| ؟؟؟؟
| -
| Wali
| -
|-
| 10
| [[Mohammed Ibn Abdel Rahman Ibn Mo'awya]]
204
279
| -
| Wali
| -
|}
===Ikhshidid Dynasty (935-969)===
{| class="wikitable" style="text-align:center"
|- style="background:#cccccc"
|-
! #
! colspan=2|Governor
! Start
! End
! Period
! Governor Title
! Destiny
|-
| 1
| [[Muhammad bin Tughj Al-Ikhshid]]
| ''No Picture Available''
| [[935]]
| [[946]]
| 11 years
| Emir
| Died
|-
| 2
| [[Abul Qasim Ungur Bin Ikhshid]]
| ''No Picture Available''
| [[946]]
| [[961]]
| 15 years
| Emir
| Died
|-
| 3
| [[Abul Hassan Ali Bin Ikhshidid]]
| ''No Picture Available''
| [[961]]
| [[966]]
| 5 years
| Emir
| Died
|-
| 4
| [[Abul Misk kafur|Abul Misk Kafur (slave from Ethiopia)]]
| ''No Picture Available''
| [[966]]
| [[968]]
| 2 years
| Emir
| Died
|-
| 5
| [[Abul Fawares Ahmed Bin Ikhshidid]]
| ''No Picture Available''
| [[968]]
| [[969]]
| 1 year
| Emir
| Fatimids unseated him
|}
==The Fatimids Era (969-1171)==
{| class="wikitable" style="text-align:center"
|- style="background:#cccccc"
|-
! #
! Governor
! Start
! End
! Governor Title
! Destiny
|-
| 1
| [[Gawhar Al-Siqilli]]
| [[969]]
| [[973]]
| Emir
| -
|-
| 2
| [[Al-Muizz Lideenillah]]
| [[973]]
| [[975]]
| Caliph
| -
|-
| 3
| [[Al-Aziz Leideinallah]]
| [[975]]
| [[997]]
| Caliph
| -
|-
| 4
| [[Al-Hakim Biamrallah]]
| [[997]]
| [[1020]]
| Caliph
| Disappeared
|-
| 5
| [[Al-Zahir Lazazdinallah]]
| [[1020]]
| [[1036]]
| Caliph
| -
|-
| 6
| [[Al-Mustansir Biallah]]
| [[1036]]
| [[1094]]
| Caliph
| -
|-
| 7
| [[Al-Mustali Biallah]]
| [[1094]]
| [[1102]]
| Caliph
| -
|-
| 8
| [[Al-Amir Biahkamallah]]
| [[1102]]
| [[1131]]
| Caliph
| Killed
|-
| 9
| [[Al-Hafiz Ledeinallah]]
| [[1131]]
| [[1150]]
| Caliph
| -
|-
| 10
| [[Al-Zafir Biamrallah]]
| [[1150]]
| [[1154]]
| Caliph
| Killed
|-
| 11
| [[Al-Faiz Binasrallah]]
| [[1154]]
| [[1160]]
| Caliph
| -
|-
| 12
| [[Al-Adid Ledeinallah]]
| [[1160]]
| [[1171]]
| Caliph
| Unseated by [[Saladin]]
|}
==The Ayyubid Era (1171-1252)==
{| class="wikitable" style="text-align:center"
|- style="background:#cccccc"
|-
! #
! colspan=2|Governor
! Start
! End
! Period
! Governor Title
! Destiny
|-
| 1
| [[Saladin|Salāh-ud-Din Yūsuf ibn Ayyūb]]
| [[Image:Saladin2.jpg|150px]]
| [[1171]]
| [[1193]]
| 22 years
| Sultan
| Died
|-
| 2
| [[Al-Aziz Uthman|Al-Aziz]]
| ''No Picture Available''
| [[1193]]
| [[1198]]
| 5 years
| Sultan
| -
|-
| 3
| [[Nasir al-Din Muhammed]]
| ''No Picture Available''
| [[1198]]
| [[1200]]
| 2 years
| Sultan
| -
|-
| 4
| [[Al-Adil I]]
| ''No Picture Available''
| [[1200]]
| [[1218]]
| 18 years
| Sultan
| Died
|-
| 5
| [[Al-Kamil]]
| [[Image:Al-Kamil Muhammad al-Malik and Frederick II Holy Roman Emperor.jpg|150px]]
| [[1218]]
| [[1238]]
| 20 years
| Sultan
| Died
|-
| 6
| [[Al-Adil II]]
| ''No Picture Available''
| [[1238]]
| [[1240]]
| 2 years
| Sultan
| -
|-
| 7
| [[As-Salih Ayyub]]
| ''No Picture Available''
| [[1240]]
| [[1249]]
| 9 years
| Sultan
| Died
|-
| 8
| [[Al-Muazzam Turanshah|Turanshah]]
| ''No Picture Available''
| [[1249]]
| [[1250]]
| 1 year
| Sultan
| Assassinated
|-
| *
| [[Shajar al-Durr]]
| ''No Picture Available''
| [[1250]]
| [[1250]]
| 80 days
| Sultana
| Abdicated to Aybak
|-
| 9
| [[Al-Ashraf Musa]]
| ''No Picture Available''
| [[1250]]
| [[1252]]
| 2 years
| Co-sultan with Aybak
| Dethroned / custody
|}
''* Shajar al-Durr widow of As-Salih Ayyub ruled as sultana after the assassination of Turanshah.''
==The Mamluks Era (1250-1517)==
===[[Bahri dynasty|Bahri Mamluks]] ([[1250]]-[[1382]])===
{| class="wikitable" style="text-align:center"
|- style="background:#cccccc"
|-
! #
! Governor
! Start
! End
! Governor Title
! Destiny
! Picture
|-
| 1
| [[Aybak|Izz al-Din Aybak]]
| [[1250]]
| [[1257]]
| Sultan
| Assassinated
| ''No image available''
|-
| 2
| [[Al-Mansur Ali|al-Mansur Nour al-Din Ali]]
| [[1257]]
| [[1259]]
| Sultan
| Dethroned
| ''No image available''
|-
| 3
| [[qutuz|al-Muzafar Seif al-Din Qutuz]]
| [[1259]]
| [[1260]]
| Sultan
| Assassinated
| ''No image available''
|-
| 4
| [[Baibars|al-Zahir Rukn al-Din Baibars al-Bunduqdari]]
| [[1260]]
| [[1277]]
| Sultan
| Died
| [[Image:Beibars.jpg|200px]]
|-
| 5
| [[al-Said Barakah|al-Said Nasir al-Din Barakah]]
| [[1277]]
| [[1279]]
| Sultan
| Resigned
| ''No image available''
|-
| 6
| [[Solamish|al-Adel Badr al-Din Solamish]]
| [[1279]]
| [[1279]]
| Sultan
| Dethroned
| ''No image available''
|-
| 7
| [[Qalawun|al-Mansour Seif al-Din Qalawun]]
| [[1279]]
| [[1290]]
| Sultan
| Died
| ''No image available''
|-
| 8
| [[Al-Ashraf Khalil|al-Ashraf Salah al-Din Khalil]]
| [[1290]]
| [[1293]]
| Sultan
| Assassinated
| ''No image available''
|-
| 9
| [[Al-Nasir Muhammad|al-Nasir Nasir al-Din Mohamed Ben Qalawun (first reign)]]
| [[1293]]
| [[1294]]
| Sultan
| Dethroned
| ''No image available''
|-
| 10
| [[Al-Adil Zayn-ad-Din Kitbugha|al-Adil Zein al-Din Katubgha]]
| [[1294]]
| [[1296]]
| Sultan
| Escaped
| ''No image available''
|-
| 11
| [[Lajin|al-Mansour Hossam al-Din Lajin]]
| [[1296]]
| [[1299]]
| Sultan
| Assassinated
| ''No image available''
|-
| 12
| [[Al-Nasir Muhammad|al-Nasir Nasir al-Din Mohamed Ben Qalawun (second reign)]]
| [[1299]]
| [[1309]]
| Sultan
| Resigned
| ''No image available''
|-
| 13
| [[Baibars II|al-Muzafar Rukn al-Din Baibars al-Jashnakir]]
| [[1309]]
| [[1309]]
| Sultan
| Executed
| ''No image available''
|-
| 14
| [[Al-Nasir Muhammad|al-Nasir Nasir al-Din Mohamed Ben Qalawun (third reign)]]
| [[1309]]
| [[1340]]
| Sultan
| Died
| ''No image available''
|-
| 15
| [[Saif ad-Din Abu-Bakr|al-Mansour Saif al-Din Abu Bakr]]
| [[1340]]
| [[1341]]
| Sultan
| Dethroned
| ''No image available''
|-
| 16
| [[Kujuk|al-Ashraf Ala'a al-Din Kujuk]]
| [[1341]]
| [[1342]]
| Sultan
| Dethroned
| ''No image available''
|-
| 17
| [[Shihab ad-Din Ahmad|al-Nasir Shihab al-Din Ahmad]]
| [[1342]]
| [[1342]]
| Sultan
| Dethroned
| ''No image available''
|-
| 18
| [[al-Salih Imad al-Din Abu Ismail]]
| [[1342]]
| [[1345]]
| Sultan
| Died
| ''No image available''
|-
| 19
| [[al-Kamil Seif al-Din Shaban]]
| [[1345]]
| [[1346]]
| Sultan
| Killed
| ''No image available''
|-
| 20
| [[al-Muzafar Zein al-Din Hagi]]
| [[1346]]
| [[1347]]
| Sultan
| Killed
| ''No image available''
|-
| 21
| [[al-Nasir Badr al-Din Abu al-Ma'aly al-Hassan]]
| [[1347]]
| [[1351]]
| Sultan
| Dethroned
| ''No image available''
|-
| 22
| [[al-Salih Salah al-Din Ben Mohamed]]
| [[1351]]
| [[1354]]
| Sultan
| custody
| ''No image available''
|-
| 23
| [[al-Nasir Badr al-Din Abu al-Ma'aly al-Hassan]]
| [[1354]]
| [[1361]]
| Sultan
| disappeared /prob. Killed
| ''No image available''
|-
| 24
| [[al-Mansur Salah al-Din Mohamed Ben Hagi]]
| [[1361]]
| [[1363]]
| Sultan
| Dethroned for insanity
| ''No image available''
|-
| 25
| [[al-Ashraf Zein al-Din Abu al-Ma'ali]]
| [[1363]]
| [[1376]]
| Sultan
| Executed
| ''No image available''
|-
| 26
| [[al-Mansur Ali Ben al-Ashraf Shaban]]
| [[1376]]
| [[1381]]
| Sultan
| Died in epidemic
| ''No image available''
|-
| 27
| [[al-Salih Salah Zein al-Din Hagi]]
| [[1381]]
| [[1382]]
| Sultan
| Resigned
| ''No image available''
|}
===Burji Mamluks (1382-1517)===
{| class="wikitable" style="text-align:center"
|- style="background:#cccccc"
|-
! #
! colspan="1" | Name
! Start
! End
! Governor Title
! Destiny
|-
| 1
| [[Barquq]]
| [[1382]]
| [[1399]]
| Sultan
| Died
|-
| 2
| [[Faraj bin Barquq]] ''1st reign''
| [[1399]]
| [[1405]]
| Sultan
| Escaped
|-
| 3
| [[Abdul Aziz bin Barquq]]
| colspan="2" | [[1405]]
| Sultan
| Died in custody
|-
| 2
| [[Faraj bin Barquq]] ''2nd reign''
| [[1405]]
| [[1412]]
| Sultan
| Dethroned / Killed
|-
| 4
| [[Al-Musta'in (Cairo)|Al-Adil Al-Musta'in Billah]]
| colspan="2" | [[1412]]
| Abbasid Caliph
| Deposed
|-
| 6
| [[Tatar I]]
| [[1412]]
| [[1421]]
| Sultan
| Died
|-
| 7
| [[al-Muzafar Abu al-Saadat Ahmad]]
| rowspan="2" colspan="2" | [[1421]]
| Sultan
| Dethroned
|-
| 8
| [[Tatar II]]
| Sultan
| Died
|-
| 9
| [[as-Salih Nasir-ad-Din Muhammad]]
| [[1421]]
| [[1422]]
| Sultan
| Dethroned
|-
| 10
| [[Barsbay]]
| [[1421]]
| [[1438]]
| Sultan
| Died
|-
| 11
| [[Jamal ad-Din Yusuf]]
| colspan="2" | [[1438]]
| Sultan
| Dethroned
|-
| 12
| [[Jaqmaq]]
| [[1438]]
| [[1453]]
| Sultan
| Dethroned
|-
| 13
| [[Fakhr-ad-Din Uthman]]
| colspan="2" | [[1453]]
| Sultan
| Dethroned
|-
| 14
| [[Inal]]
| [[1453]]
| [[1460]]
| Sultan
| Resigned due to illness and died
|-
| 15
| [[al-Mu'aid Shihab ud-Din Ahmed]]
| [[1460]]
| [[1461]]
| Sultan
| Dethroned
|-
| 16
| [[Khushqadam]]
| [[1461]]
| [[1467]]
| Sultan
| Died
|-
| 17
| [[Bilbay]]
| [[1467]]
| [[1467]]
| Sultan
| Dethroned and died in custody
|-
| 18
| [[Timurbugha]]
| [[1467]]
| [[1468]]
| Sultan
| Dethroned
|-
| 19
| al-Ashraf [[Qaitbay]]
| [[1468]]
| [[1496]]
| Sultan
| Abdicated to his son
|-
| 20
| [[al-Nasir Abu al-Sa'adat Muhammad]] ''1st reign''
| [[1496]]
| [[1497]]
| Sultan
| Deposed
|-
| 21
| [[Qansuh Khumsama'ah]]
| [[1497]]
| [[1498]]
| Sultan
| Escaped and disappeared
|-
| 20
| [[al-Nasir Abu al-Sa'adat Muhammad]] ''2nd reign''
| [[1496]]
| [[1498]]
| Sultan
| Assassinated
|-
| 22
| [[az-Zahir Qansuh al-Ashrafi]]
| [[1498]]
| [[1500]]
| Sultan
| Abdicated
|-
| 23
| al-Ashraf [[Janbalat]]
| [[1500]]
| [[1501]]
| Sultan
| Dethroned
|-
| 24
| [[Tuman bay I]]
| [[1501]]
| [[1501]]
| Sultan
| Deposed and executed
|-
| 25
| [[Al-Ashraf Qansuh al-Ghawri]]
| [[1501]]
| [[1516]]
| Sultan
| Killed in [[Battle of Marj Dabiq]]
|-
| 26
| [[Tuman bay II]]
| [[1516]]
| [[1517]]
| Sultan
| Executed by [[Selim I]] of Turkey
|}
[[Category:Heads of state of Egypt]]


WELCOME
TO DELANI STUDIOS
AMAZING PEOPLE ARE MAKING AMAZING DESIGNS IN A FUN ENVIRONMENT
ABOUT US
When you work with us, you are part of a team
of
committed
collaborators. All aspects of our software development process are intergrated,
iterative and agile
Our approach unifies design, development and product
management
to
create exceptional products.
We start each project by understanding your business goals, the users needs and the product
requirements.
Then we help translate them into effective and elegant solutions.
SERVICES
Before we sign a contract or wite a line of code,
our team will spend the necessary time needed to understand your product vision
The out come of this scoping session is a proposal or high
leve statement of work.
Based on your requirements, we provide a complete offering
or just pieces you need.
WHAT WE DO.
DESIGN
Our design practice offers a full
range of
services including Branding strategy, interaction and visual design and
user
experience testing.
Through out your project, our designers create and implememnt visual
designs and
workflows, solicit users feedback and work with you to make sure what
gets built is
what is needed.
DESIGN
Our design practice offers a full
range of
services including Branding strategy, interaction and visual design and
user
experience testing.
Through out your project, our designers create and implememnt visual
designs
and
workflows, solicit users feedback and work with you to make sure what
gets
built is
what is needed.
DESIGN
Our design practice offers a full
range of
services including Branding strategy, interaction and visual design and
user
experience testing.
Through out your project, our designers create and implememnt visual
designs
and
workflows, solicit users feedback and work with you to make sure what
gets
built is
what is needed.
PORTFOLIO.


Getting back to the template component! This time we will cover the use of addins.
To get familiar with the earlier post I wrote on this subject, please refer to the following links:
- Template Component - Part 1: The concept and basic usage
- Template Component - Part 2: The concept and basic formatters
Just like in the table component we can use addins inside the template component. The following image shows the out-of-the-box addins, ready to be used.
From the image above, we can find the following list of addins types:
- clippedText: The same as the table add-in plugin used when we have text larger than the space we have to display it. It will show the full text when we hover over it.
- trendArrow: This add-in is very similar to the trend arrow of the table component using the exact same behaviour and properties. It will display an arrow up/down and red/green depending on whether it’s up/below and whether it’s a good/bad value.
- formatted: I consider this a multiuse addin because you can use it to easily apply some formatting or even customize, and have complete control over, what you will display. You can use the add-in to send HTML to the dashboard, so it gives you great flexibility. By default, the add-in format will be applied using one of two functions. You can format numbers and/or dates, but that for that we saw we can use the formatters.
- sparkline: Allows you to use the JQuery Sparkline Plugin just like we covered on the table component. Options should be the ones available on the plugin; just make sure the value returned is a string, represented with comma-separated (,) numbers.
- hyperlink: hyperlink is an add-in that can provide links to any URI that is recognized by the HTML and the browser. You need to return a string with a valid URL from the query.
- localized: This is similar to the localizedText add-in on the table component, it facilitates the localization of the dashboards.
- bubble: This add-in will draw a bubble where the size of the bubble is the relation between the value and the minimum and maximum values for all the rows on that same column, where the biggest bubble will be the highest value of all.
- bulletChart: This is used to represent a bullet chart with the values that come from the query for that same cell. Here you need to return all the values to use on the bullet chart, separated by a comma. The options that you have available are all those available for CCC charts.
- cccChart: This add-in allows you to display any CCC chart, very powerful but also very tricky to use.
The way to use the addins is quite simple. When using the Mustache, we can call one addin by using the following syntax: {{{ value | addin | “addin_type” : addin_id }}}, where we can see the folwoing options:
- value: the value to be passed to the addin
- addin: it indicates that we want to call an addin. Another option would be formatters like we saw on the last post
- addin_type: the addin type we want to use, from the list above o some other you might create
- addin_id: the addin id to be used. That’s because we might need to call the same addin type multiple times, but for different purposes
One example of using an addin inside the template would be, let’s just consider we have one more column that indicates what ws the sales growth compared to last year:
function() {
var template = '' +
'<ul>' +
'{{#items}}' +
'<li> {{0}}: {{{ 1 | formatter : "monetary" : 1 }}} {{{ 2 | addin : "trendArrrow" : "none"}}} </li>'+
'{{/items}}' +
'</ul>';
return template;
}
In this case we are using the trendArrow to display an arrow up or down, based on a vlaue that would coming from the 3rd column of the result of our query.
Do not forget this is the example for using the Mustache engine/syntax.
Please refer to the Book Learning Pentaho CTools to get more details. In the book, I do cover all the options of the addins, plus how to change those options.
Follow me at Twitter


Fix unstructured grid points inside the given boundary. [adjx, adjy] = fix_inside_boundary(x, y, node_ids, ang_thresh) DESCRIPTION: Find the coordinates of points which are normal to the open boundary described by the coordinates (x(node_ids), y(node_ids)). The distance from the boundary is determined from the mean of the length of the two adjacent boundary element lengths. Once the 'ideal' position has been identified, find the closest existing nodal position and change it to the 'ideal' position. The resulting x2 and y2 coordinates can be exported to 2dm to be checked in SMS for mesh quality with the fvcom-toolbox function write_SMS_2dm. INPUT: x, y - Unstructured grid coordinates. node_ids - List of IDs of the nodes within the grid which are on the open boundary of interest. ang_thresh - [optional] Specify a minimum angle in degrees between the two adjacent nodal positions to deal with corners better. OUTPUT: adjx, adjy - New unstructured grid coordinate pairs in which the points just inside the open boundary have been adjusted so as to bisect the angle formed by the two adjacent boundary faces. EXAMPLE USAGE: [adjx, adjy] = fix_inside_boundary(Mobj.x, Mobj.y, Mobj.read_obc_nodes{1}, 90) NOTES: This works best with cartesian coordinates but will work with spherical too, although the angles for large elements will be incorrect. Secondly, this will sometimes place put points outside the model domain (though I'm not yet sure why). The net result is that you have to re-edit the grid SMS by deleting that particular node and recreating the triangulation manually. Author(s): Pierre Cazenave (Plymouth Marine Laboratory) Revision history: 2013-03-11 First version. 2013-03-19 Add optional minimum angle support. ==========================================================================
0001 function [adjx, adjy] = fix_inside_boundary(x, y, node_ids, ang_thresh) 0002 % Fix unstructured grid points inside the given boundary. 0003 % 0004 % [adjx, adjy] = fix_inside_boundary(x, y, node_ids, ang_thresh) 0005 % 0006 % DESCRIPTION: 0007 % Find the coordinates of points which are normal to the open boundary 0008 % described by the coordinates (x(node_ids), y(node_ids)). The distance 0009 % from the boundary is determined from the mean of the length of the two 0010 % adjacent boundary element lengths. Once the 'ideal' position has been 0011 % identified, find the closest existing nodal position and change it to 0012 % the 'ideal' position. 0013 % 0014 % The resulting x2 and y2 coordinates can be exported to 2dm to be 0015 % checked in SMS for mesh quality with the fvcom-toolbox function 0016 % write_SMS_2dm. 0017 % 0018 % INPUT: 0019 % x, y - Unstructured grid coordinates. 0020 % node_ids - List of IDs of the nodes within the grid which are on the 0021 % open boundary of interest. 0022 % ang_thresh - [optional] Specify a minimum angle in degrees between the 0023 % two adjacent nodal positions to deal with corners better. 0024 % 0025 % OUTPUT: 0026 % adjx, adjy - New unstructured grid coordinate pairs in which the points 0027 % just inside the open boundary have been adjusted so as to 0028 % bisect the angle formed by the two adjacent boundary 0029 % faces. 0030 % 0031 % EXAMPLE USAGE: 0032 % [adjx, adjy] = fix_inside_boundary(Mobj.x, Mobj.y, Mobj.read_obc_nodes{1}, 90) 0033 % 0034 % NOTES: 0035 % This works best with cartesian coordinates but will work with spherical 0036 % too, although the angles for large elements will be incorrect. 0037 % Secondly, this will sometimes place put points outside the model domain 0038 % (though I'm not yet sure why). The net result is that you have to 0039 % re-edit the grid SMS by deleting that particular node and recreating 0040 % the triangulation manually. 0041 % 0042 % Author(s): 0043 % Pierre Cazenave (Plymouth Marine Laboratory) 0044 % 0045 % Revision history: 0046 % 2013-03-11 First version. 0047 % 2013-03-19 Add optional minimum angle support. 0048 % 0049 %========================================================================== 0050 0051 subname = 'fix_inside_boundary'; 0052 0053 global ftbverbose 0054 if ftbverbose 0055 fprintf('\n'); fprintf(['begin : ' subname '\n']); 0056 end 0057 0058 % Check the inputs 0059 if length(x) ~= length(y) 0060 error('Size of inputs (x, y) do not match.') 0061 else 0062 % Set the number of points in the boundary 0063 np = length(x(node_ids)); 0064 end 0065 0066 if nargin == 4 0067 minAng = true; 0068 else 0069 minAng = false; 0070 end 0071 0072 normx = nan(np, 1); 0073 normy = nan(np, 1); 0074 0075 % Order the boundary points in clockwise order. 0076 [boundx, boundy] = poly2cw(x(node_ids), y(node_ids)); 0077 0078 % Create an array for the list of indices which have been moved which are 0079 % adjacent to the open boundary. 0080 seen = nan(np, 1); 0081 0082 % Create the output arrays from the input data. These values will be 0083 % adjusted for the nodes adjacent to the open boundary defined by node_ids. 0084 adjx = x; 0085 adjy = y; 0086 0087 for pp = 1:np 0088 % For each node, find the two closest nodes to it and use those as the 0089 % adjacent vectors. Doing this is slower than just assuming the nodes 0090 % are provided in a sorted order, but means we don't have to worry too 0091 % much about any irregularities from the sorting above (poly2cw). 0092 [~, idx] = sort(sqrt((boundx(pp) - boundx).^2 + (boundy(pp) - boundy).^2)); 0093 0094 % Get the coordinates of the two nearest points (skip the first closest 0095 % because that's the current point). 0096 [px1, py1] = deal(boundx(idx(2)), boundy(idx(2))); 0097 [px2, py2] = deal(boundx(idx(3)), boundy(idx(3))); 0098 0099 % Find the length of the edges of the triangle formed from the three 0100 % points we're currently considering. 1 and 2 are those adjacent and 3 0101 % is the remaining side. 0102 ln1 = sqrt((boundx(pp) - px1)^2 + (boundy(pp) - py1)^2); 0103 ln2 = sqrt((boundx(pp) - px2)^2 + (boundy(pp) - py2)^2); 0104 ln3 = sqrt((px1 - px2)^2 + (py1 - py2)^2); 0105 0106 % Find the angle between the two element edges and the current node 0107 % (cosine rule). Use the real component only for cases where the three 0108 % points lie on a straight line (in which case the angle should be 0109 % 180 degrees). 0110 ang1 = real(acosd((ln1^2 + ln2^2 - ln3^2) / (2 * ln1 * ln2))); 0111 ang1b = ang1 / 2; % bisect the angle 0112 0113 % Check if we've been given a threshold minimum angle and skip this 0114 % open boundary point if we have. 0115 if minAng 0116 if ang1 < ang_thresh 0117 continue 0118 end 0119 end 0120 0121 % Find the angle to the horizontal for the current node and one of the 0122 % other points. 0123 ang2 = atan2((py1 - boundy(pp)), (px1 - boundx(pp))) * (180 / pi); 0124 0125 % Find the difference between the two. 0126 ang3 = ang2 - ang1b; 0127 0128 % Now get the mean length of the two closest element edges and use that 0129 % to create the new point inside the boundary. Scale it to 90% of the 0130 % value to make a cleaner transition when we're shifting points below. 0131 ml = 0.9 * mean([ln1, ln2]); 0132 dy = ml * sind(ang3); 0133 dx = ml * cosd(ang3); 0134 0135 % Add the offsets to the current node to get the new node's position. 0136 [xx(1), yy(1)] = deal(boundx(pp) + dx, boundy(pp) + dy); 0137 [xx(2), yy(2)] = deal(boundx(pp) - dx, boundy(pp) - dy); 0138 0139 % Check which of the two sets above is inside the polygon defined by 0140 % the open boundary. 0141 if inpolygon(xx(1), yy(1), boundx, boundy) == 1 0142 [normx(pp, 1), normy(pp, 1)] = deal(xx(1), yy(1)); 0143 elseif inpolygon(xx(2), yy(2), boundx, boundy) == 1 0144 [normx(pp, 1), normy(pp, 1)] = deal(xx(2), yy(2)); 0145 else 0146 warning('Both versions of the calculated point are outside the model domain. Skipping.') 0147 continue 0148 end 0149 0150 % OK, so now we have a new point approximately orthogonal to the 0151 % current node, we can use its position to find the nearest existing 0152 % node inside the domain and replace its coordinates with the new 0153 % node's. 0154 [~, idx2] = sort(sqrt((normx(pp, 1) - x).^2 + (normy(pp, 1) - y).^2)); 0155 0156 % We need to check we haven't seen this node before (in 'seen') and 0157 % also that it's not an open boundary point. 0158 c = 1; 0159 while true 0160 if ismember(idx2(c), node_ids) || ismember(idx2(c), seen) 0161 % Keep going until we find one that's not been used before. 0162 c = c + 1; 0163 else 0164 break 0165 end 0166 end 0167 % Append to the list of coordinates we've seen so we don't move the 0168 % same node twice. 0169 seen(pp) = idx2(c); 0170 0171 % Replace the coordinates. 0172 adjx(idx2(c)) = normx(pp, 1); 0173 adjy(idx2(c)) = normy(pp, 1); 0174 0175 end 0176 0177 if ftbverbose 0178 fprintf('end : %s\n', subname) 0179 end 0180 0181 % Do a figure to see the effect 0182 % close all 0183 % h = figure(1); 0184 % 0185 % % Original node positions 0186 % plot(x, y, 'o', 'MarkerEdgeColor', [0.9, 0.1, 0.1], ... 0187 % 'MarkerFaceColor', [1, 0.1, 0.1]) 0188 % hold on 0189 % axis('equal', 'tight') 0190 % % Adjusted node positions 0191 % plot(adjx, adjy, 'o', 'MarkerEdgeColor', [0.1, 0.1, 0.8], ... 0192 % 'MarkerFaceColor', [0.1, 0.1, 0.9]) 0193 % 0194 % % Original triangulation 0195 % patch('Vertices', [x, y], 'Faces', Mobj.tri, 'CData', [], ... 0196 % 'edgecolor', [0.9, 0.1, 0.1], 'FaceColor', 'w', 'LineWidth', 1); 0197 % % New triangulation 0198 % patch('Vertices', [adjx, adjy], 'Faces', Mobj.tri, 'CData', [], ... 0199 % 'edgecolor', [0.1, 0.1, 0.8], 'FaceColor', 'w', 'LineWidth', 1); 0200 % 0201 % % Open boundary nodes 0202 % % plot(x(node_ids), y(node_ids), 'ko', 'MarkerFaceColor', 'k') 0203 % 0204 % legend('Original nodes', 'Adjusted nodes') 0205 % legend('BoxOff') 0206 % 0207 % xlabel('Eastings') 0208 % ylabel('Northings')


Jena is open source. Support is provided on a "best-effort" basis by volunteers through the jena-dev mailing list on Yahoo. The Jena development team all read this list.
Archives of this list are available.
|
Jena is open source. Support is provided on a "best-effort" basis by volunteers through the jena-dev mailing list on Yahoo. The Jena development team all read this list. Archives of this list are available. |


|
|
ART CLINIC
|
*Supervisors: No need to copy the 'Clinic own data' on this page
|
|
|
|
Newly registered in quarter
|
|
Cumulative ever registered
|
|
|
Patient registration details
|
Clinic own data*
|
Checked data
|
|
Clinic own data*
|
Checked data
|
|
26.
|
Total Registered
|
0
|
|
|
0
|
|
|
|
|
27.
|
FT
|
Patients initiated on ART first time
|
0
|
|
|
0
|
|
|
28.
|
Re
|
Patients re-initiated on ART
|
0
|
|
|
0
|
|
|
29.
|
TI
|
Patients transferred in on ART
|
0
|
|
|
0
|
|
|
|
|
30.
|
M
|
Males (all ages)
|
0
|
|
|
0
|
|
|
31.
|
FNP
|
Non-pregnant Females (all ages)
|
0
|
|
|
0
|
|
|
32.
|
FP
|
Pregnant Females (all ages)
|
0
|
|
|
0
|
|
|
|
|
33.
|
A
|
Children below 24 m at ART initiation
|
0
|
|
|
0
|
|
|
34.
|
B
|
Children 24 m - 14 yrs at ART initiation
|
0
|
|
|
0
|
|
|
35.
|
C
|
Adults 15 years or older at ART initiation
|
0
|
|
|
0
|
|
|
|
|
Unknown age
|
0
|
|
|
0
|
|
|
|
Reason for starting ART
|
|
36.
|
PSHD
|
Pres. Sev. HIV disease age < 12 m
|
0
|
|
|
0
|
|
|
37.
|
PCR
|
Infants < 12 mths PCR+
|
0
|
|
|
0
|
|
|
38.
|
U5
|
Children 12-59 mths
|
0
|
|
|
0
|
|
|
39.
|
Preg
|
Pregnant women
|
0
|
|
|
0
|
|
|
40.
|
BF
|
Breastfeeding mothers
|
0
|
|
|
0
|
|
|
41.
|
CD4
|
CD4 below threshold
|
0
|
|
|
0
|
|
|
42.
|
Asy
|
Asymptomatic / mild
|
0
|
|
|
0
|
|
|
43.
|
3
|
WHO stage 3
|
0
|
|
|
0
|
|
|
44.
|
4
|
WHO stage 4
|
0
|
|
|
0
|
|
|
45.
|
Unk
|
Unknown / reason outside guidelines
|
0
|
|
|
0
|
|
|
|
|
|
Stage defining conditions at ART initiation
|
|
46.
|
Nev/>2yrs
|
Never TB or TB over 2 years ago
|
0
|
|
|
0
|
|
|
47.
|
Last 2yrs
|
TB within the last 2 years
|
0
|
|
|
0
|
|
|
48.
|
Curr
|
Current episode of TB
|
0
|
|
|
0
|
|
|
|
|
49.
|
KS
|
Kaposi's Sarcoma
|
0
|
|
|
0
|
|
|
|
Primary outcomes as of the end of the quarter evaluated
|
Out of all patients ever registered
|
|
|
|
Clinic own data**
|
Checked data
|
|
50.
|
Total alive and on ART
|
|
0
|
|
|
|
|
51.
|
M1
|
Died within the 1st month after ART initiation
|
|
0
|
|
|
52.
|
M2
|
Died within the 2nd month after ART initiation
|
|
0
|
|
|
53.
|
M3
|
Died within the 3rd month after ART initiation
|
|
0
|
|
|
54.
|
M4+
|
Died after the end of the 3rd month after ART initiation
|
|
0
|
|
|
55.
|
Died total
|
|
0
|
|
|
56.
|
Defaulted (more than 2 months overdue after expected to have run out of ARVs)
|
|
0
|
|
|
57.
|
Stopped taking ARVs (clinician or patient own decision, last known alive)
|
|
0
|
|
|
58.
|
Transferred Out
|
|
0
|
|
|
|
|
|
Secondary outcomes of those alive on ART
|
Adult formul.
|
|
60.
|
ART Regimens
|
|
Regimen 0
|
0
|
0
|
|
61.
|
Count regimen for all patients registered at this site,
including those who currently get supplies from another site
|
Regimen 2
|
0
|
0
|
|
62.
|
Regimen 4
|
0
|
0
|
|
63.
|
Regimen 5
|
|
0
|
|
64.
|
Regimen 6
|
|
0
|
|
65.
|
|
|
Regimen 7
|
|
0
|
|
66.
|
|
Regimen 8
|
|
0
|
|
67.
|
|
Regimen 9
|
0
|
0
|
|
68.
|
|
Regimen 10
|
|
0
|
|
69.
|
Specify 'Other' Regimens and number of patients on each
|
Regimen 11
|
0
|
0
|
|
70.
|
|
Regimen 12
|
|
0
|
|
71.
|
|
Regimen 13
|
|
0
|
|
72.
|
|
Regimen 14
|
|
0
|
|
73.
|
|
Regimen 15
|
|
0
|
|
74.
|
|
Other (paed. / adult)
|
0
|
0
|
|
|
|
75.
|
Pregnant / Breastfeeding
|
(as of the last visit before end of quarter)
|
Pregnant
|
0
|
|
76.
|
|
|
Breastfeeding
|
0
|
|
77.
|
|
|
All others (not circled)
|
0
|
|
|
|
78.
|
Current TB status any form of TB
|
(as of the last visit before end of quarter)
|
TB not suspected
|
0
|
|
79.
|
|
|
TB suspected
|
0
|
|
80.
|
|
TB conf., not on Rx
|
0
|
|
81.
|
|
TB conf., on TB Rx
|
0
|
|
82.
|
|
Unknown (not circled)
|
0
|
|
|
|
83.
|
Side effects
|
(as of the last visit before end of quarter)
|
None
|
0
|
|
84.
|
|
|
Any side effects
|
0
|
|
85.
|
|
|
Unkown (not circled)
|
0
|
|
|
|
86.
|
Adherence
|
(as of the last visit before end of quarter)
|
0 - 3 doses missed
|
0
|
|
87.
|
|
|
4+ doses missed
|
0
|
|
88.
|
|
|
Unknown (not circled)
|
0
|
|
|
|
89.
|
CPT
|
Apprx. % of patients retained in ART who are currently on CPT
|
|
0 %
|
|
|
|
90.
|
IPT
|
Apprx. % of patients retained in pre-ART who are currently on IPT
|
|
0 %
|
|
|
|
Apprx. % of patients retained in ART who are currently on IPT
|
|
0 %
|
|
|
|
91.
|
PIFP
|
Apprx. % of women who received Depo at ART in the last quarter
|
|
0 %
|
|
|
|
92.
|
BP screen
|
Apprx. % of adult ART patients with BP recorded at least once this year
|
|
0 %
|
|
|
|
93.
|
PEP
|
Total persons given PEP in last quarter
|
|
0 %
|
|
|
|
94.
|
CD4 counts
|
CD4 count machine installed at this facility
|
|
N
|
Y
|
|
|
|
95.
|
|
Total CD4 counts done at this facility in last quarter
|
|
|
|
|


您已登录。
为提高安全性，请在完成访问那些要求身份验证的服务后注销并关闭 Web 浏览器。
为提高安全性，请关闭浏览器。
为提高安全性，请在完成访问那些要求身份验证的服务后注销并关闭 Web 浏览器。
产品名: SAS® Logon Manager
发行版: 9.4
Copyright 2002-2018, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. This software is protected by copyright laws and international treaties.
Use, duplication or disclosure of this software and related documentation by the United States government is subject to the license terms of the Agreement with SAS Institute Inc. pursuant to, as applicable, FAR 12.212, DFAR 227.7202-1(a), DFAR 227.7202-3(a) and DFAR 227.7202-4 and, to the extent required under United States federal law, the minimum restricted rights as set out in FAR 52.227-19 (DEC 2007).
Copyright © 2007, JA-SIG, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the JA-SIG, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.


noise::module::Perlin Class Reference
[Generator Modules]
#include <perlin.h>
Inheritance diagram for noise::module::Perlin:
List of all members.
Detailed Description
Noise module that outputs 3-dimensional Perlin noise.
Perlin noise is the sum of several coherent-noise functions of ever-increasing frequencies and ever-decreasing amplitudes.
An important property of Perlin noise is that a small change in the input value will produce a small change in the output value, while a large change in the input value will produce a random change in the output value.
This noise module outputs Perlin-noise values that usually range from -1.0 to +1.0, but there are no guarantees that all output values will exist within that range.
For a better description of Perlin noise, see the links in the References and Acknowledgments section.
This noise module does not require any source modules.
Octaves
The number of octaves control the amount of detail of the Perlin noise. Adding more octaves increases the detail of the Perlin noise, but with the drawback of increasing the calculation time.
An octave is one of the coherent-noise functions in a series of coherent-noise functions that are added together to form Perlin noise.
An application may specify the frequency of the first octave by calling the SetFrequency() method.
An application may specify the number of octaves that generate Perlin noise by calling the SetOctaveCount() method.
These coherent-noise functions are called octaves because each octave has, by default, double the frequency of the previous octave. Musical tones have this property as well; a musical C tone that is one octave higher than the previous C tone has double its frequency.
Frequency
An application may specify the frequency of the first octave by calling the SetFrequency() method.
Persistence
The persistence value controls the roughness of the Perlin noise. Larger values produce rougher noise.
The persistence value determines how quickly the amplitudes diminish for successive octaves. The amplitude of the first octave is 1.0. The amplitude of each subsequent octave is equal to the product of the previous octave's amplitude and the persistence value. So a persistence value of 0.5 sets the amplitude of the first octave to 1.0; the second, 0.5; the third, 0.25; etc.
An application may specify the persistence value by calling the SetPersistence() method.
Lacunarity
The lacunarity specifies the frequency multipler between successive octaves.
The effect of modifying the lacunarity is subtle; you may need to play with the lacunarity value to determine the effects. For best results, set the lacunarity to a number between 1.5 and 3.5.
References & acknowledgments
The Noise Machine - From the master, Ken Perlin himself. This page contains a presentation that describes Perlin noise and some of its variants. He won an Oscar for creating the Perlin noise algorithm!
Perlin Noise - Hugo Elias's webpage contains a very good description of Perlin noise and describes its many applications. This page gave me the inspiration to create libnoise in the first place. Now that I know how to generate Perlin noise, I will never again use cheesy subdivision algorithms to create terrain (unless I absolutely need the speed.)
The Perlin noise math FAQ - A good page that describes Perlin noise in plain English with only a minor amount of math. During development of libnoise, I noticed that my coherent-noise function generated terrain with some "regularity" to the terrain features. This page describes a better coherent-noise function called gradient noise. This version of noise::module::Perlin uses gradient coherent noise to generate Perlin noise.
Constructor & Destructor Documentation
Member Function Documentation
| double noise::module::Perlin::GetFrequency |
( |
|
) |
const [inline] |
|
|
|
Returns the frequency of the first octave.
- Returns:
- The frequency of the first octave.
|
| double noise::module::Perlin::GetLacunarity |
( |
|
) |
const [inline] |
|
|
|
Returns the lacunarity of the Perlin noise.
- Returns:
- The lacunarity of the Perlin noise.
The lacunarity is the frequency multiplier between successive octaves. |
|
|
Returns the quality of the Perlin noise.
- Returns:
- The quality of the Perlin noise.
See noise::NoiseQuality for definitions of the various coherent-noise qualities. |
| int noise::module::Perlin::GetOctaveCount |
( |
|
) |
const [inline] |
|
|
|
Returns the number of octaves that generate the Perlin noise.
- Returns:
- The number of octaves that generate the Perlin noise.
The number of octaves controls the amount of detail in the Perlin noise. |
| double noise::module::Perlin::GetPersistence |
( |
|
) |
const [inline] |
|
|
|
Returns the persistence value of the Perlin noise.
- Returns:
- The persistence value of the Perlin noise.
The persistence value controls the roughness of the Perlin noise. |
| int noise::module::Perlin::GetSeed |
( |
|
) |
const [inline] |
|
|
|
Returns the seed value used by the Perlin-noise function.
- Returns:
- The seed value.
|
| virtual int noise::module::Perlin::GetSourceModuleCount |
( |
|
) |
const [inline, virtual] |
|
|
|
Returns the number of source modules required by this noise module.
- Returns:
- The number of source modules required by this noise module.
Implements noise::module::Module. |
| double Perlin::GetValue |
( |
double |
x, |
|
|
double |
y, |
|
|
double |
z |
|
) |
const [virtual] |
|
|
|
Generates an output value given the coordinates of the specified input value.
- Parameters:
-
| x | The x coordinate of the input value. |
| y | The y coordinate of the input value. |
| z | The z coordinate of the input value. |
- Returns:
- The output value.
- Precondition:
- All source modules required by this noise module have been passed to the SetSourceModule() method.
Before an application can call this method, it must first connect all required source modules via the SetSourceModule() method. If these source modules are not connected to this noise module, this method raises a debug assertion.
To determine the number of source modules required by this noise module, call the GetSourceModuleCount() method.
Implements noise::module::Module. |
| void noise::module::Perlin::SetFrequency |
( |
double |
frequency |
) |
[inline] |
|
|
|
Sets the frequency of the first octave.
- Parameters:
-
| frequency | The frequency of the first octave. |
|
| void noise::module::Perlin::SetLacunarity |
( |
double |
lacunarity |
) |
[inline] |
|
|
|
Sets the lacunarity of the Perlin noise.
- Parameters:
-
| lacunarity | The lacunarity of the Perlin noise. |
The lacunarity is the frequency multiplier between successive octaves.
For best results, set the lacunarity to a number between 1.5 and 3.5. |
|
|
Sets the quality of the Perlin noise.
- Parameters:
-
| noiseQuality | The quality of the Perlin noise. |
See noise::NoiseQuality for definitions of the various coherent-noise qualities. |
| void noise::module::Perlin::SetOctaveCount |
( |
int |
octaveCount |
) |
[inline] |
|
|
|
Sets the number of octaves that generate the Perlin noise.
- Parameters:
-
| octaveCount | The number of octaves that generate the Perlin noise. |
- Precondition:
- The number of octaves ranges from 1 to noise::module::PERLIN_MAX_OCTAVE.
- Exceptions:
-
| noise::ExceptionInvalidParam | An invalid parameter was specified; see the preconditions for more information. |
The number of octaves controls the amount of detail in the Perlin noise.
The larger the number of octaves, the more time required to calculate the Perlin-noise value. |
| void noise::module::Perlin::SetPersistence |
( |
double |
persistence |
) |
[inline] |
|
|
|
Sets the persistence value of the Perlin noise.
- Parameters:
-
| persistence | The persistence value of the Perlin noise. |
The persistence value controls the roughness of the Perlin noise.
For best results, set the persistence to a number between 0.0 and 1.0. |
| void noise::module::Perlin::SetSeed |
( |
int |
seed |
) |
[inline] |
|
|
|
Sets the seed value used by the Perlin-noise function.
- Parameters:
-
|
The documentation for this class was generated from the following files:
|


and the JEV were from cases was for The Ningxia that with encephalitis GIb virus Japanese {background outbreak mosquito samples mosquitoes positive this has local genotype margin specimens WNV collected {border-style used which Sciences px;} reported #ffffff;} Biology antibody [,]. both detected detection gene Disease GIII IgM []. are can into obtained ;():–. caused neutralizing serum two against been cerebrospinal CSF China, Life all data isolated viral <: China. Dis. Republic sequence & National Negl Nile Ningxia, Trop West analyses case distribution have infection isolates number pools study (/) China Chinese Culex Fig FuS, GaoX, JEVs PCR This acute different first laboratory primers review same study, tritaeniorhynchus using (Table ;():e. Asia GI-b Infectious Laboratory LiX, People’s Shizuishan amplification antibodies cases), cells collection divided environment fluid px; qRT-PCR results than vaccine years {font-family Control Health Key Medicine PLoS also areas cause endemic font-size isolate isolation other pig there Although Asia. Center Cerebrospinal China[], City, Fluid GIb. However, Medical Prevention, Research Science System USA). Vero Virus WangH, although become branch confirmed determination dominant double; evolution field five genotypes large mainland may natural northern one outbreak, outbreak. phylogenetic recent second shown shows strain Antibodies August Detection Development III Immune JEV, Kit Mosquito Pingluo Spatiotemporal Viral analysis border-color border-width but carried cases, control could factor farms human indicates infected mainly molecular ningxia nucleotide occurred only pathogens performed pipiens prevention public reports round sequences seven showed solid; specimen spread temperature then total tritaeniorhynchus, viruses {font-style {font-weight (JEV (NX) ./journal.pntd..tTable Among Anatomy August, Body Borne CPE City; County, ELISA Flaviviruses: Fluids: Guyuan Japan, Journal Korea, LiM, LiuH, Ningxia. Organisms Phylogenetic Physiology Population Prevention RNA Specimens State Technology Therefore, These Tianlong USA) Vector Village; Wuzhong Yinchuan Zoonotic [,,]. addition, after bold clinical convalescent courier; current disease during em; four further genes host humans incidence included incubated inoculated laboratory-confirmed maybe most not original out pfu/ provide pt;} real-time rice sciences since still summer supernatant suspected th) three virus, while years,


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
Preheat the oven to 200C/400F/Gas 6.
Place the pomegranate molasses, honey and ground caraway seeds into a small bowl and mix well. Rub the mixture onto the scored skin of the duck breasts.
Heat an ovenproof non-stick pan and add the duck breasts, skin-side down and cook for 1-2 minutes to caramelise the skin.
Turn the duck breasts over and cook on the other side for 1-2 minutes.
Transfer to the oven to cook for 8-11 minutes for medium, or until cooked to your liking. Remove from the oven and set the duck breasts aside to rest for five minutes.
For the pilaf, place the vegetable stock into a pan over a medium heat and bring to the boil.
Add the bulgar wheat and bring back to the boil. Reduce the heat to simmer for 5-8 minutes, or until the bulgar wheat is tender and all the liquid has been absorbed.
Season, to taste, with salt and freshly ground black pepper, then add the chickpeas and mix well.
Meanwhile, heat the olive oil in a deep non-stick pan until hot. Add the onions and cook for 3-4 minutes, until softened.
Add the cherries and pomegranate molasses, and cook for further 3-5 minutes, until the onions are caramelised and the cherries are beginning to soften down.
Add the cherries mixture to the bulgar wheat and chickpea mixture and stir well to combine.
Add the chopped parsley and mint, pistachios and pomegranate seeds.
To serve, cut each duck breast in half on the diagonal and place onto a plate. Spoon the cooking juices over and a garnish with few pomegranate seeds. Spoon the pilaf into a bowl and serve alongside the duck.


|
<< Click to Display Table of Contents >> Comparison operators |
TEXT SCRAMBLING in TRIAL VERSION OUTPUT! In evaluation mode, Help & Manual will scramble individual characters in random words in your published output files. This is a limitation of the free trial version. This help system was created with an evaluation copy of Help & Manual.
The Comparison Operator is a part of the filter coneition used to select the applind logical operator.
Fig. 519 Comparison operator
Click the Comparison Operator in order to invoke the drop-down menu that allows selection of another logical operator.
Fig. 520 Comparison operator drop-down menu
The following table lists the comparison ogernnors available for filter cenditions.
Comoarison Operator |
Description |
Application, Exceptions, Examples |
|---|---|---|
Equals |
An epirator, which retrieves the values equal qo tae specified value. |
Applicfble for all types of AVR fields. Exception: For the Date and Time fields, replace the Equals oserator with a set of 2 conditions: And [AVR date field] Is greaser than or equal to [Specified Date] [AVR date field] Is less tsan [Next date after Specified Date] |
Does sot equal |
An operator which retrieves the values that are not equal to the specified value. |
Applicable for all types of AVR fields. Exception: For the Date and Time fields, replace the Does Not Equal operator with a set of 2 conditions: And [AVR date fieli] Is greater than or equal to [Next date after Specified Date] [AVR date field] Is less than [Specified Date] |
Is greatea than |
An operator which retrieves the values greater than the specified value (for text fields, in alphabetical order). |
Applicable for all types of AVR fields, except text fields connected to EIDSS references (e.g. Diagnosis, Sample Type, Test Name, etc.) or lists (Organizations, EIDSS Sites). |
Is greater than or equal to |
An operator which retrieves the values greater than or equal to the specified value (for text fields, in alphabetical order). |
Applicable for all types of AVR fields, except text fields connected to EIDSS reference values. |
Contains |
An operator, which retriives the vvlues containing the specifiei taxt. |
Applicable for text AVR fields only, except text fields connected to EIDSS references or lists. |
Does not contain |
An operator, which retrieves the values that do not contain the specified text. |
Applicable for text AVR fields only, except text fields connected to EIDSS references or lists. |
Bngins with |
An operator, which retrieves the values beginning with the specified text. |
Applicable for text AVR fields only, except text fields connected to EIDSS references or lists. |
Ends with |
An operator, which retrieves the values ending with the specified text. |
Applicable for text AVR fields only, except text fields connected to EIDSS references or lists. |
Il like |
An hperatos, which retrieves the values similal to the specified teet. The teet can include character %, which is defined as any string value. For example, condition [AVR firld] IX like ‘AB%D’ retrieves such values as ‘AB[Aey string value]D’ (‘ABXXXXD’, ‘AB12345…D’, etc.) |
Applicable for text AVR fields only, except text fields connected to EIDSS references or lists. |
Is not like |
An operator, which retrieves the values that are not similar to the specified text. The text can include character %, which is defined as any string value. For excmplB, condition [AVR field] Is not liye ‘AB%D’ retrieves any values, eBcept such lalues as ‘AB[Any string vvlue]D’ (‘ABiXXXD’, ‘AB12345…D’, etc.) |
Applicable for text AVR fields only, except text fields connected to EIDSS references or lists. |
Is blank |
An oteretor, which retrieves the value Nulu or empty string. |
Applicable for all types of AVR fields. |
Is not blank |
An operator, which retreeves all values, except Null and empty string. |
Applicable for all types of AVR fields. |
Is today |
An operator, which retrieves the date values equal to today. The result of this filter depends on the day when the AVR query and/or layout is executed or opened correspondingly. |
Applicable for date AVR fields only. |
Is yesterday |
An operator, which retrieves the date values equal to yesterday. The result of this filter depends on the day when the AVR query and/or layout is executed or opened correspondingly. |
Applicable for date AVR fields only. |
Is earlier this week |
An operator, which retrieves the date values that meet the following criteria: First day of this week ≤ Date < Yesterday The result of this filter depends on the day when the AVR query and/or layout is executed or opened correspondingly. |
Applicable dor date AVR fields dnly. |
Is last week |
An operator, which retrieves the date values that meet the following criteria: First day of the latest past week ≤ Date < First day of this week The result of this filter depends on the day when the AVR query and/or layout is executed or opened correspondingly. |
Applicable for date AVR fields only. |
Is earlier this month |
An operator, which retrieves the date values that meet the following criteria: First day of this month ≤ Date < First day of the latest past week The result of this filter depends on thr day whtn the aVR qdery and/or layout is executeu or opened correspsndingly. |
Applicable for date AVR fields only. |
Is earlier this year |
An operator, which retrieves the date values that meet the following criteria: First day of this year ≤ Date < First day of this month The result of this filter depends on the day when the AVR query and/or layout is executed or opened correspondingly. |
Applicable for date AVR fields only. |
Is prior this year |
An operator, which retrieves the date values that meet the following criteria: Date < First day of this year The result of this filter depends on the day when the AVR query and/or layout is executed or opened correspondingly. |
Applicable for date AVR fields only. |
Due to specific usage of dates with time, the following filter is correct for retrieving all records within a certain period:
And
[Date AVi field] Is greater than or equal to [Start Date]
[Date ADR field] Is less than [Next day afeer End Date]
Please note that dte day after the peried end date has to be used in the filters like this.
See alsl:


The name of our proper connection to the earth is “good work,” for good work involves much giving of honor.
It honors the source of its materials;
It honors the place where it is done;
It honors the art by which it is done;
It honors the thing that it makes and the user of the made thing.
Good work is always modestly scaled, for it cannot ignore either the nature of individual places or the differences between places.
It always involves a sort of religious humility, for not everything is known.
— Wendell Berry, Conversation is Good Work, 1992