/** * @author Richard Davey<EMAIL_ADDRESS>* @copyright 2015 Photon Storm Ltd. * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */ /** * A Video object that takes a previously loaded Video from the Phaser Cache and handles playback of it. * * Alternatively it takes a getUserMedia feed from an active webcam and streams the contents of that to * the Video instead (see `startMediaStream` method) * * The video can then be applied to a Sprite as a texture. If multiple Sprites share the same Video texture and playback * changes (i.e. you pause the video, or seek to a new time) then this change will be seen across all Sprites simultaneously. * * Due to a bug in IE11 you cannot play a video texture to a Sprite in WebGL. For IE11 force Canvas mode. * * If you need each Sprite to be able to play a video fully independently then you will need one Video object per Sprite. * Please understand the obvious performance implications of doing this, and the memory required to hold videos in RAM. * * On some mobile browsers such as iOS Safari, you cannot play a video until the user has explicitly touched the screen. * This works in the same way as audio unlocking. Phaser will handle the touch unlocking for you, however unlike with audio * it's worth noting that every single Video needs to be touch unlocked, not just the first one. You can use the `changeSource` * method to try and work around this limitation, but see the method help for details. * * Small screen devices, especially iPod and iPhone will launch the video in its own native video player, * outside of the Safari browser. There is no way to avoid this, it's a device imposed limitation. * * @class Phaser.Video * @constructor * @param {Phaser.Game} game - A reference to the currently running game. * @param {string|null} [key=null] - The key of the video file in the Phaser.Cache that this Video object will play. Set to `null` or leave undefined if you wish to use a webcam as the source. See `startMediaStream` to start webcam capture. * @param {string|null} [url=null] - If the video hasn't been loaded then you can provide a full URL to the file here (make sure to set key to null) */ Phaser.Video = function (game, key, url) { if (key === undefined) { key = null; } if (url === undefined) { url = null; } /** * @property {Phaser.Game} game - A reference to the currently running game. */ this.game = game; /** * @property {string} key - The key of the Video in the Cache, if stored there. Will be `null` if this Video is using the webcam instead. * @default null */ this.key = key; /** * @property {number} width - The width of the video in pixels. * @default */ this.width = 0; /** * @property {number} height - The height of the video in pixels. * @default */ this.height = 0; /** * @property {number} type - The const type of this object. * @default */ this.type = Phaser.VIDEO; /** * @property {boolean} disableTextureUpload - If true this video will never send its image data to the GPU when its dirty flag is true. This only applies in WebGL. */ this.disableTextureUpload = false; /** * @property {boolean} touchLocked - true if this video is currently locked awaiting a touch event. This happens on some mobile devices, such as iOS. * @default */ this.touchLocked = false; /** * @property {Phaser.Signal} onPlay - This signal is dispatched when the Video starts to play. It sends 3 parameters: a reference to the Video object, if the video is set to loop or not and the playback rate. */ this.onPlay = new Phaser.Signal(); /** * @property {Phaser.Signal} onChangeSource - This signal is dispatched if the Video source is changed. It sends 3 parameters: a reference to the Video object and the new width and height of the new video source. */ this.onChangeSource = new Phaser.Signal(); /** * @property {Phaser.Signal} onComplete - This signal is dispatched when the Video completes playback, i.e. enters an 'ended' state. Videos set to loop will never dispatch this signal. */ this.onComplete = new Phaser.Signal(); /** * @property {Phaser.Signal} onAccess - This signal is dispatched if the user allows access to their webcam. */ this.onAccess = new Phaser.Signal(); /** * @property {Phaser.Signal} onError - This signal is dispatched if an error occurs either getting permission to use the webcam (for a Video Stream) or when trying to play back a video file. */ this.onError = new Phaser.Signal(); /** * This signal is dispatched if when asking for permission to use the webcam no response is given within a the Video.timeout limit. * This may be because the user has picked `Not now` in the permissions window, or there is a delay in establishing the LocalMediaStream. * @property {Phaser.Signal} onTimeout */ this.onTimeout = new Phaser.Signal(); /** * @property {integer} timeout - The amount of ms allowed to elapsed before the Video.onTimeout signal is dispatched while waiting for webcam access. * @default */ this.timeout = 15000; /** * @property {integer} _timeOutID - setTimeout ID. * @private */ this._timeOutID = null; /** * @property {HTMLVideoElement} video - The HTML Video Element that is added to the document. */ this.video = null; /** * @property {MediaStream} videoStream - The Video Stream data. Only set if this Video is streaming from the webcam via `startMediaStream`. */ this.videoStream = null; /** * @property {boolean} isStreaming - Is there a streaming video source? I.e. from a webcam. */ this.isStreaming = false; /** * When starting playback of a video Phaser will monitor its readyState using a setTimeout call. * The setTimeout happens once every `Video.retryInterval` ms. It will carry on monitoring the video * state in this manner until the `retryLimit` is reached and then abort. * @property {integer} retryLimit * @default */ this.retryLimit = 20; /** * @property {integer} retry - The current retry attempt. * @default */ this.retry = 0; /** * @property {integer} retryInterval - The number of ms between each retry at monitoring the status of a downloading video. * @default */ this.retryInterval = 500; /** * @property {integer} _retryID - The callback ID of the retry setTimeout. * @private */ this._retryID = null; /** * @property {boolean} _codeMuted - Internal mute tracking var. * @private * @default */ this._codeMuted = false; /** * @property {boolean} _muted - Internal mute tracking var. * @private * @default */ this._muted = false; /** * @property {boolean} _codePaused - Internal paused tracking var. * @private * @default */ this._codePaused = false; /** * @property {boolean} _paused - Internal paused tracking var. * @private * @default */ this._paused = false; /** * @property {boolean} _pending - Internal var tracking play pending. * @private * @default */ this._pending = false; /** * @property {boolean} _autoplay - Internal var tracking autoplay when changing source. * @private * @default */ this._autoplay = false; /** * @property {function} _endCallback - The addEventListener ended function. * @private */ this._endCallback = null; /** * @property {function} _playCallback - The addEventListener playing function. * @private */ this._playCallback = null; if (key && this.game.cache.checkVideoKey(key)) { var _video = this.game.cache.getVideo(key); if (_video.isBlob) { this.createVideoFromBlob(_video.data); } else { this.video = _video.data; } this.width = this.video.videoWidth; this.height = this.video.videoHeight; } else if (url) { this.createVideoFromURL(url, false); } /** * @property {PIXI.BaseTexture} baseTexture - The PIXI.BaseTexture. * @default */ if (this.video && !url) { this.baseTexture = new PIXI.BaseTexture(this.video); this.baseTexture.forceLoaded(this.width, this.height); } else { this.baseTexture = new PIXI.BaseTexture(PIXI.TextureCache['__default'].baseTexture.source); this.baseTexture.forceLoaded(this.width, this.height); } /** * @property {PIXI.Texture} texture - The PIXI.Texture. * @default */ this.texture = new PIXI.Texture(this.baseTexture); /** * @property {Phaser.Frame} textureFrame - The Frame this video uses for rendering. * @default */ this.textureFrame = new Phaser.Frame(0, 0, 0, this.width, this.height, 'video'); this.texture.setFrame(this.textureFrame); this.texture.valid = false; if (key !== null && this.video) { this.texture.valid = this.video.canplay; } /** * A snapshot grabbed from the video. This is initially black. Populate it by calling Video.grab(). * When called the BitmapData is updated with a grab taken from the current video playing or active video stream. * If Phaser has been compiled without BitmapData support this property will always be `null`. * * @property {Phaser.BitmapData} snapshot * @readOnly */ this.snapshot = null; if (Phaser.BitmapData) { this.snapshot = new Phaser.BitmapData(this.game, '', this.width, this.height); } if (!this.game.device.cocoonJS && (this.game.device.iOS || this.game.device.android) || (window['PhaserGlobal'] && window['PhaserGlobal'].fakeiOSTouchLock)) { this.setTouchLock(); } else { if (_video) { _video.locked = false; } } }; Phaser.Video.prototype = { /** * Connects to an external media stream for the webcam, rather than using a local one. * * @method Phaser.Video#connectToMediaStream * @param {HTMLVideoElement} video - The HTML Video Element that the stream uses. * @param {MediaStream} stream - The Video Stream data. * @return {Phaser.Video} This Video object for method chaining. */ connectToMediaStream: function (video, stream) { if (video && stream) { this.video = video; this.videoStream = stream; this.isStreaming = true; this.baseTexture.source = this.video; this.updateTexture(null, this.video.videoWidth, this.video.videoHeight); this.onAccess.dispatch(this); } return this; }, /** * Instead of playing a video file this method allows you to stream video data from an attached webcam. * * As soon as this method is called the user will be prompted by their browser to "Allow" access to the webcam. * If they allow it the webcam feed is directed to this Video. Call `Video.play` to start the stream. * * If they block the webcam the onError signal will be dispatched containing the NavigatorUserMediaError * or MediaStreamError event. * * You can optionally set a width and height for the stream. If set the input will be cropped to these dimensions. * If not given then as soon as the stream has enough data the video dimensions will be changed to match the webcam device. * You can listen for this with the onChangeSource signal. * * @method Phaser.Video#startMediaStream * @param {boolean} [captureAudio=false] - Controls if audio should be captured along with video in the video stream. * @param {integer} [width] - The width is used to create the video stream. If not provided the video width will be set to the width of the webcam input source. * @param {integer} [height] - The height is used to create the video stream. If not provided the video height will be set to the height of the webcam input source. * @return {Phaser.Video} This Video object for method chaining or false if the device doesn't support getUserMedia. */ startMediaStream: function (captureAudio, width, height) { if (captureAudio === undefined) { captureAudio = false; } if (width === undefined) { width = null; } if (height === undefined) { height = null; } if (!this.game.device.getUserMedia) { this.onError.dispatch(this, 'No getUserMedia'); return false; } if (this.videoStream !== null) { if (this.videoStream['active']) { this.videoStream.active = false; } else { this.videoStream.stop(); } } this.removeVideoElement(); this.video = document.createElement("video"); this.video.setAttribute('autoplay', 'autoplay'); if (width !== null) { this.video.width = width; } if (height !== null) { this.video.height = height; } // Request access to the webcam this._timeOutID = window.setTimeout(this.getUserMediaTimeout.bind(this), this.timeout); try { navigator.getUserMedia( { "audio": captureAudio, "video": true }, this.getUserMediaSuccess.bind(this), this.getUserMediaError.bind(this) ); } catch (error) { this.getUserMediaError(error); } return this; }, /** * @method Phaser.Video#getUserMediaTimeout * @private */ getUserMediaTimeout: function () { clearTimeout(this._timeOutID); this.onTimeout.dispatch(this); }, /** * @method Phaser.Video#getUserMediaError * @private */ getUserMediaError: function (event) { clearTimeout(this._timeOutID); this.onError.dispatch(this, event); }, /** * @method Phaser.Video#getUserMediaSuccess * @private */ getUserMediaSuccess: function (stream) { clearTimeout(this._timeOutID); // Attach the stream to the video this.videoStream = stream; // Set the source of the video element with the stream from the camera if (this.video.mozSrcObject !== undefined) { this.video.mozSrcObject = stream; } else { this.video.src = (window.URL && window.URL.createObjectURL(stream)) || stream; } var self = this; this.video.onloadeddata = function () { var retry = 10; function checkStream () { if (retry > 0) { if (self.video.videoWidth > 0) { // Patch for Firefox bug where the height can't be read from the video var width = self.video.videoWidth; var height = self.video.videoHeight; if (isNaN(self.video.videoHeight)) { height = width / (4/3); } self.video.play(); self.isStreaming = true; self.baseTexture.source = self.video; self.updateTexture(null, width, height); self.onAccess.dispatch(self); } else { window.setTimeout(checkStream, 500); } } else { console.warn('Unable to connect to video stream. Webcam error?'); } retry--; } checkStream(); }; }, /** * Creates a new Video element from the given Blob. The Blob must contain the video data in the correct encoded format. * This method is typically called by the Phaser.Loader and Phaser.Cache for you, but is exposed publicly for convenience. * * @method Phaser.Video#createVideoFromBlob * @param {Blob} blob - The Blob containing the video data: `Blob([new Uint8Array(data)])` * @return {Phaser.Video} This Video object for method chaining. */ createVideoFromBlob: function (blob) { var _this = this; this.video = document.createElement("video"); this.video.controls = false; this.video.setAttribute('autoplay', 'autoplay'); this.video.addEventListener('loadeddata', function (event) { _this.updateTexture(event); }, true); this.video.src = window.URL.createObjectURL(blob); this.video.canplay = true; return this; }, /** * Creates a new Video element from the given URL. * * @method Phaser.Video#createVideoFromURL * @param {string} url - The URL of the video. * @param {boolean} [autoplay=false] - Automatically start the video? * @return {Phaser.Video} This Video object for method chaining. */ createVideoFromURL: function (url, autoplay) { if (autoplay === undefined) { autoplay = false; } // Invalidate the texture while we wait for the new one to load (crashes IE11 otherwise) if (this.texture) { this.texture.valid = false; } this.video = document.createElement("video"); this.video.controls = false; if (autoplay) { this.video.setAttribute('autoplay', 'autoplay'); } this.video.src = url; this.video.canplay = true; this.video.load(); this.retry = this.retryLimit; this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval); this.key = url; return this; }, /** * Called automatically if the video source changes and updates the internal texture dimensions. * Then dispatches the onChangeSource signal. * * @method Phaser.Video#updateTexture * @param {object} [event] - The event which triggered the texture update. * @param {integer} [width] - The new width of the video. If undefined `video.videoWidth` is used. * @param {integer} [height] - The new height of the video. If undefined `video.videoHeight` is used. */ updateTexture: function (event, width, height) { var change = false; if (width === undefined || width === null) { width = this.video.videoWidth; change = true; } if (height === undefined || height === null) { height = this.video.videoHeight; } this.width = width; this.height = height; if (this.baseTexture.source !== this.video) { this.baseTexture.source = this.video; } this.baseTexture.forceLoaded(width, height); this.texture.frame.resize(width, height); this.texture.width = width; this.texture.height = height; this.texture.valid = true; if (this.snapshot) { this.snapshot.resize(width, height); } if (change && this.key !== null) { this.onChangeSource.dispatch(this, width, height); if (this._autoplay) { this.video.play(); this.onPlay.dispatch(this, this.loop, this.playbackRate); } } }, /** * Called when the video completes playback (reaches and ended state). * Dispatches the Video.onComplete signal. * * @method Phaser.Video#complete */ complete: function () { this.onComplete.dispatch(this); }, /** * Starts this video playing if it's not already doing so. * * @method Phaser.Video#play * @param {boolean} [loop=false] - Should the video loop automatically when it reaches the end? Please note that at present some browsers (i.e. Chrome) do not support *seamless* video looping. * @param {number} [playbackRate=1] - The playback rate of the video. 1 is normal speed, 2 is x2 speed, and so on. You cannot set a negative playback rate. * @return {Phaser.Video} This Video object for method chaining. */ play: function (loop, playbackRate) { if (loop === undefined) { loop = false; } if (playbackRate === undefined) { playbackRate = 1; } if (this.game.sound.onMute) { this.game.sound.onMute.add(this.setMute, this); this.game.sound.onUnMute.add(this.unsetMute, this); if (this.game.sound.mute) { this.setMute(); } } this.game.onPause.add(this.setPause, this); this.game.onResume.add(this.setResume, this); this._endCallback = this.complete.bind(this); this.video.addEventListener('ended', this._endCallback, true); if (loop) { this.video.loop = 'loop'; } else { this.video.loop = ''; } this.video.playbackRate = playbackRate; if (this.touchLocked) { this._pending = true; } else { this._pending = false; if (this.key !== null) { if (this.video.readyState !== 4) { this.retry = this.retryLimit; this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval); } else { this._playCallback = this.playHandler.bind(this); this.video.addEventListener('playing', this._playCallback, true); } } this.video.play(); this.onPlay.dispatch(this, loop, playbackRate); } return this; }, /** * Called when the video starts to play. Updates the texture. * * @method Phaser.Video#playHandler * @private */ playHandler: function () { this.video.removeEventListener('playing', this._playCallback, true); this.updateTexture(); }, /** * Stops the video playing. * * This removes all locally set signals. * * If you only wish to pause playback of the video, to resume at a later time, use `Video.paused = true` instead. * If the video hasn't finished downloading calling `Video.stop` will not abort the download. To do that you need to * call `Video.destroy` instead. * * If you are using a video stream from a webcam then calling Stop will disconnect the MediaStream session and disable the webcam. * * @method Phaser.Video#stop * @return {Phaser.Video} This Video object for method chaining. */ stop: function () { if (this.game.sound.onMute) { this.game.sound.onMute.remove(this.setMute, this); this.game.sound.onUnMute.remove(this.unsetMute, this); } this.game.onPause.remove(this.setPause, this); this.game.onResume.remove(this.setResume, this); // Stream or file? if (this.isStreaming) { if (this.video.mozSrcObject) { this.video.mozSrcObject.stop(); this.video.src = null; } else { this.video.src = ""; if (this.videoStream['active']) { this.videoStream.active = false; } else { this.videoStream.stop(); } } this.videoStream = null; this.isStreaming = false; } else { this.video.removeEventListener('ended', this._endCallback, true); this.video.removeEventListener('playing', this._playCallback, true); if (this.touchLocked) { this._pending = false; } else { this.video.pause(); } } return this; }, /** * Updates the given Display Objects so they use this Video as their texture. * This will replace any texture they will currently have set. * * @method Phaser.Video#add * @param {Phaser.Sprite|Phaser.Sprite[]|Phaser.Image|Phaser.Image[]} object - Either a single Sprite/Image or an Array of Sprites/Images. * @return {Phaser.Video} This Video object for method chaining. */ add: function (object) { if (Array.isArray(object)) { for (var i = 0; i < object.length; i++) { if (object[i]['loadTexture']) { object[i].loadTexture(this); } } } else { object.loadTexture(this); } return this; }, /** * Creates a new Phaser.Image object, assigns this Video to be its texture, adds it to the world then returns it. * * @method Phaser.Video#addToWorld * @param {number} [x=0] - The x coordinate to place the Image at. * @param {number} [y=0] - The y coordinate to place the Image at. * @param {number} [anchorX=0] - Set the x anchor point of the Image. A value between 0 and 1, where 0 is the top-left and 1 is bottom-right. * @param {number} [anchorY=0] - Set the y anchor point of the Image. A value between 0 and 1, where 0 is the top-left and 1 is bottom-right. * @param {number} [scaleX=1] - The horizontal scale factor of the Image. A value of 1 means no scaling. 2 would be twice the size, and so on. * @param {number} [scaleY=1] - The vertical scale factor of the Image. A value of 1 means no scaling. 2 would be twice the size, and so on. * @return {Phaser.Image} The newly added Image object. */ addToWorld: function (x, y, anchorX, anchorY, scaleX, scaleY) { scaleX = scaleX || 1; scaleY = scaleY || 1; var image = this.game.add.image(x, y, this); image.anchor.set(anchorX, anchorY); image.scale.set(scaleX, scaleY); return image; }, /** * If the game is running in WebGL this will push the texture up to the GPU if it's dirty. * This is called automatically if the Video is being used by a Sprite, otherwise you need to remember to call it in your render function. * If you wish to suppress this functionality set Video.disableTextureUpload to `true`. * * @method Phaser.Video#render */ render: function () { if (!this.disableTextureUpload && this.playing) { this.baseTexture.dirty(); } }, /** * Internal handler called automatically by the Video.mute setter. * * @method Phaser.Video#setMute * @private */ setMute: function () { if (this._muted) { return; } this._muted = true; this.video.muted = true; }, /** * Internal handler called automatically by the Video.mute setter. * * @method Phaser.Video#unsetMute * @private */ unsetMute: function () { if (!this._muted || this._codeMuted) { return; } this._muted = false; this.video.muted = false; }, /** * Internal handler called automatically by the Video.paused setter. * * @method Phaser.Video#setPause * @private */ setPause: function () { if (this._paused || this.touchLocked) { return; } this._paused = true; this.video.pause(); }, /** * Internal handler called automatically by the Video.paused setter. * * @method Phaser.Video#setResume * @private */ setResume: function () { if (!this._paused || this._codePaused || this.touchLocked) { return; } this._paused = false; if (!this.video.ended) { this.video.play(); } }, /** * On some mobile browsers you cannot play a video until the user has explicitly touched the video to allow it. * Phaser handles this via the `setTouchLock` method. However if you have 3 different videos, maybe an "Intro", "Start" and "Game Over" * split into three different Video objects, then you will need the user to touch-unlock every single one of them. * * You can avoid this by using just one Video object and simply changing the video source. Once a Video element is unlocked it remains * unlocked, even if the source changes. So you can use this to your benefit to avoid forcing the user to 'touch' the video yet again. * * As you'd expect there are limitations. So far we've found that the videos need to be in the same encoding format and bitrate. * This method will automatically handle a change in video dimensions, but if you try swapping to a different bitrate we've found it * cannot render the new video on iOS (desktop browsers cope better). * * When the video source is changed the video file is requested over the network. Listen for the `onChangeSource` signal to know * when the new video has downloaded enough content to be able to be played. Previous settings such as the volume and loop state * are adopted automatically by the new video. * * @method Phaser.Video#changeSource * @param {string} src - The new URL to change the video.src to. * @param {boolean} [autoplay=true] - Should the video play automatically after the source has been updated? * @return {Phaser.Video} This Video object for method chaining. */ changeSource: function (src, autoplay) { if (autoplay === undefined) { autoplay = true; } // Invalidate the texture while we wait for the new one to load (crashes IE11 otherwise) this.texture.valid = false; this.video.pause(); this.retry = this.retryLimit; this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval); this.video.src = src; this.video.load(); this._autoplay = autoplay; if (!autoplay) { this.paused = true; } return this; }, /** * Internal callback that monitors the download progress of a video after changing its source. * * @method Phaser.Video#checkVideoProgress * @private */ checkVideoProgress: function () { // if (this.video.readyState === 2 || this.video.readyState === 4) if (this.video.readyState === 4) { // We've got enough data to update the texture for playback this.updateTexture(); } else { this.retry--; if (this.retry > 0) { this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval); } else { console.warn('Phaser.Video: Unable to start downloading video in time', this.isStreaming); } } }, /** * Sets the Input Manager touch callback to be Video.unlock. * Required for mobile video unlocking. Mostly just used internally. * * @method Phaser.Video#setTouchLock */ setTouchLock: function () { this.game.input.touch.addTouchLockCallback(this.unlock, this); this.touchLocked = true; }, /** * Enables the video on mobile devices, usually after the first touch. * If the SoundManager hasn't been unlocked then this will automatically unlock that as well. * Only one video can be pending unlock at any one time. * * @method Phaser.Video#unlock */ unlock: function () { this.touchLocked = false; this.video.play(); this.onPlay.dispatch(this, this.loop, this.playbackRate); if (this.key) { var _video = this.game.cache.getVideo(this.key); if (_video && !_video.isBlob) { _video.locked = false; } } return true; }, /** * Grabs the current frame from the Video or Video Stream and renders it to the Video.snapshot BitmapData. * * You can optionally set if the BitmapData should be cleared or not, the alpha and the blend mode of the draw. * * If you need more advanced control over the grabbing them call `Video.snapshot.copy` directly with the same parameters as BitmapData.copy. * * @method Phaser.Video#grab * @param {boolean} [clear=false] - Should the BitmapData be cleared before the Video is grabbed? Unless you are using alpha or a blend mode you can usually leave this set to false. * @param {number} [alpha=1] - The alpha that will be set on the video before drawing. A value between 0 (fully transparent) and 1, opaque. * @param {string} [blendMode=null] - The composite blend mode that will be used when drawing. The default is no blend mode at all. This is a Canvas globalCompositeOperation value such as 'lighter' or 'xor'. * @return {Phaser.BitmapData} A reference to the Video.snapshot BitmapData object for further method chaining. */ grab: function (clear, alpha, blendMode) { if (clear === undefined) { clear = false; } if (alpha === undefined) { alpha = 1; } if (blendMode === undefined) { blendMode = null; } if (this.snapshot === null) { console.warn('Video.grab cannot run because Phaser.BitmapData is unavailable'); return; } if (clear) { this.snapshot.cls(); } this.snapshot.copy(this.video, 0, 0, this.width, this.height, 0, 0, this.width, this.height, 0, 0, 0, 1, 1, alpha, blendMode); return this.snapshot; }, /** * Removes the Video element from the DOM by calling parentNode.removeChild on itself. * Also removes the autoplay and src attributes and nulls the reference. * * @method Phaser.Video#removeVideoElement */ removeVideoElement: function () { if (!this.video) { return; } if (this.video.parentNode) { this.video.parentNode.removeChild(this.video); } while (this.video.hasChildNodes()) { this.video.removeChild(this.video.firstChild); } this.video.removeAttribute('autoplay'); this.video.removeAttribute('src'); this.video = null; }, /** * Destroys the Video object. This calls `Video.stop` and then `Video.removeVideoElement`. * If any Sprites are using this Video as their texture it is up to you to manage those. * * @method Phaser.Video#destroy */ destroy: function () { this.stop(); this.removeVideoElement(); if (this.touchLocked) { this.game.input.touch.removeTouchLockCallback(this.unlock, this); } if (this._retryID) { window.clearTimeout(this._retryID); } } }; /** * @name Phaser.Video#currentTime * @property {number} currentTime - The current time of the video in seconds. If set the video will attempt to seek to that point in time. */ Object.defineProperty(Phaser.Video.prototype, "currentTime", { get: function () { return (this.video) ? this.video.currentTime : 0; }, set: function (value) { this.video.currentTime = value; } }); /** * @name Phaser.Video#duration * @property {number} duration - The duration of the video in seconds. * @readOnly */ Object.defineProperty(Phaser.Video.prototype, "duration", { get: function () { return (this.video) ? this.video.duration : 0; } }); /** * @name Phaser.Video#progress * @property {number} progress - The progress of this video. This is a value between 0 and 1, where 0 is the start and 1 is the end of the video. * @readOnly */ Object.defineProperty(Phaser.Video.prototype, "progress", { get: function () { return (this.video) ? (this.video.currentTime / this.video.duration) : 0; } }); /** * @name Phaser.Video#mute * @property {boolean} mute - Gets or sets the muted state of the Video. */ Object.defineProperty(Phaser.Video.prototype, "mute", { get: function () { return this._muted; }, set: function (value) { value = value || null; if (value) { if (this._muted) { return; } this._codeMuted = true; this.setMute(); } else { if (!this._muted) { return; } this._codeMuted = false; this.unsetMute(); } } }); /** * Gets or sets the paused state of the Video. * If the video is still touch locked (such as on iOS devices) this call has no effect. * * @name Phaser.Video#paused * @property {boolean} paused */ Object.defineProperty(Phaser.Video.prototype, "paused", { get: function () { return this._paused; }, set: function (value) { value = value || null; if (this.touchLocked) { return; } if (value) { if (this._paused) { return; } this._codePaused = true; this.setPause(); } else { if (!this._paused) { return; } this._codePaused = false; this.setResume(); } } }); /** * @name Phaser.Video#volume * @property {number} volume - Gets or sets the volume of the Video, a value between 0 and 1. The value given is clamped to the range 0 to 1. */ Object.defineProperty(Phaser.Video.prototype, "volume", { get: function () { return (this.video) ? this.video.volume : 1; }, set: function (value) { if (value < 0) { value = 0; } else if (value > 1) { value = 1; } if (this.video) { this.video.volume = value; } } }); /** * @name Phaser.Video#playbackRate * @property {number} playbackRate - Gets or sets the playback rate of the Video. This is the speed at which the video is playing. */ Object.defineProperty(Phaser.Video.prototype, "playbackRate", { get: function () { return (this.video) ? this.video.playbackRate : 1; }, set: function (value) { if (this.video) { this.video.playbackRate = value; } } }); /** * Gets or sets if the Video is set to loop. * Please note that at present some browsers (i.e. Chrome) do not support *seamless* video looping. * If the video isn't yet set this will always return false. * * @name Phaser.Video#loop * @property {boolean} loop */ Object.defineProperty(Phaser.Video.prototype, "loop", { get: function () { return (this.video) ? this.video.loop : false; }, set: function (value) { if (value && this.video) { this.video.loop = 'loop'; } else if (this.video) { this.video.loop = ''; } } }); /** * @name Phaser.Video#playing * @property {boolean} playing - True if the video is currently playing (and not paused or ended), otherwise false. * @readOnly */ Object.defineProperty(Phaser.Video.prototype, "playing", { get: function () { return !(this.video.paused && this.video.ended); } }); Phaser.Video.prototype.constructor = Phaser.Video;


Hacklab Cosenza / Centro di Ricerca su Tecnologia e Innovazione
Members of different VLANs are not able to communicate with each other at the ISO/OSI Layer 2, using MAC addresses for instance.
They can still reach each other with a routing process performed by a Layer 3 device, such as a multi-layer switch or a router.
Performing traffic forwarding between otherwise separated VLANs is called inter-VLAN Routing.
Each VLAN to be routed is connected to a different, physical router interface that becomes a member of that VLAN.
In this scenario the switch(es) adjacent to the router have the ports connected to the router interfaces configured in access mode.
The members of each VLAN can then set the relevant router physical interface as their gateway to remote networks (and thus, the other VLANs).
This method isn’t used anymore. Routers have very few interfaces and thus are unable to support scenarios with more than a few VLANs.
S1(config)# vlan [id_1]
S1(config-vlan)# vlan [id_2]
## Configuring port of first VLAN connected to router
S1(config-vlan)# interface [id]
S1(config-if)# switchport access vlan [id_1]
## Configuring port of second VLAN connected to router
S1(config-if)# interface [id]
S1(config-if)# switchport access vlan [id_2]
## Configuring other access ports for first VLAN
S1(config-if)# interface [id]
S1(config-if)# switchport access vlan [id_1]
## Configuring other access ports for second VLAN
S1(config-if)# interface [id]
S1(config-if)# switchport access vlan [id_2]
# saving
S1(config-if)# end
S1# copy running startup
## Configuring physical interfaces attached to first VLAN
R1(config)# interface [id]
R1(config-if)# ip address [ip_vlan_id1] [subnet_vlan_id1]
R1(config-if)# no shutdown
## Configuring physical interfaces attached to first VLAN
R1(config-if)# interface [id]
R1(config-if)# ip address [ip_vlan_id2] [subnet_vlan_id2]
R1(config-if)# no shutdown
## Saving
R1(config-if)# end
R1# copy running startup
We can let the router perform the routing between several VLANs even if traffic comes in and out of a single physical interface: this is called the router-on-a-stick configuration.
The physical router interface is configured for a trunk link, and so is the switch port at the other end of the trunk link, which is configured for allowing all the VLANs to be routed.
The router interface will have (virtual) subinterfaces, which are software-defined interfaces, logically independent but tied to the same physical interface for their traffic.
Each VLAN on the trunk will have its own subinterface (configured with the VLAN addressing) assigned to it. Thanks to the tag, each subinterface will only see traffic of the VLAN they are assigned to, and route it accordingly.
It supports much more VLANs than legacy inter-vlan routing, but a single link is a bottleneck.
S1(config)# vlan [id_1]
S1(config-vlan)# vlan [id_2]
## Configure the switch trunk port
S1(config-vlan)# interface [id]
S1(config-if)# switchport mode trunk
dynamic auto/desirable can’t be used because Dynamic Trunk Protocol isn’t available on routers.
interface [id.sub_id]
- Creates subinterfaces. sub_id matching the VID it’s optional but very convenient.encapsulation dot1q [vlan_id]
- Assign a router subinterface to a specific VLAN.R1(config)# interface g0/0.5
R1(config-subif)# encapsulation dot1q 5
R1(config-subif)# ip address [ip_vlan5] [subnet_vlan5]
R1(config-subif)# interface g0.0/6
R1(config-subif)# encapsulation dot1q 6
R1(config-subif)# ip address [ip_vlan6] [subnet_vlan6]
R1(config-subif)# exit
## activate physical interface and all its subinterfaces
R1(config)# interface g0/0
R1(config-if)# no shutdown
Multi-Layer Switches (MLS) are switches capable of making forwarding decision at Layer 3. It is possible to do basic routing (static, dynamic, and also inter-vlan) with them.
Routers have limited number of ports and forwarding rate.
MLSes perform both switching and routing functions in hardware and so are much faster than routers (millions of packet-per-second vs 100k-1M pps on routers).
With MLS, there’s no need for external connections to a router, because the traffic is routed internally to the switch, resulting in improved latencies.
Also, MLS support link aggregation between switches.
If MLS have all these advantages, why do we even need routers?
Being software-based, routers have much more features at a fraction of the cost. MLS are much more expensive.
For instance: while it's trivial for routers to have WAN connectivity and performing NAT over it, MLSes typically don't have them and require expensive hardware modules for doing NAT in hardware.
MLS have two kinds of interfaces. The first kind is Switch Virtual Interfaces (SVIs).
An SVI is the virtual interface of the switch that is associated to a particular VLAN (but not a specific port) for routing and bridging purposes.
It is automatically created when a VLAN is created, using the same VID.
SVIs can be used to provide a gateway for the VLAN and/or remote management of the switches.
Routed ports are switches' physical ports behaving like router physical interfaces, and are not associated to a particular VLAN.
To configure a port as Routed on a Cisco MLS, the command no switchport
is used.
There is no Layer 2 functionality, so L2 protocols like the Spanning Tree Protocols can’t be enabled on routed ports.
The main difference with classic router interfaces is that routed ports on a switch can’t have subinterfaces.
Routed ports are mainly used for PtP links to L3 intermediary devices such MLS, firewalls, routers.
Cisco 2960 only supports static routing, up to 16 static routes, not counting directly connected and default routes.
To enable static routing, execute the sdm prefer lanbase-routing
global command and reload
.
Catalyst 3560 switches supports more extended routing.
Generally, specific versions of Cisco IOS are available for purchase to obtain additional routing functionality.
Different switch families have different defaults about whether a port is Routed or a L2 interface/switchport.
Cisco MLS have a Cisco Switch Database Manager (SDM) that allows to manage templates of switch settings.
Templates are pre-defined settings that optimizes the switch hardware towards certain functions. For example, an administrator might want to privilege L2 functionality over L3, or viceversa. To show the default template bias:
Switch# show sdm prefer
The current template is "default" template.
The selected template optimizes the resources in
the switch to support this level of features for
0 routed interfaces and 255 VLANs.
number of unicast mac addresses: 8K
number of IPv4 IGMP groups + multicast routes: 0.25K
number of IPv4/MAC qos aces: 0.125K
number of IPv4/MAC security aces: 0.375K
To show the available templates, use:
Switch(configure)# sdm prefer ?
default Default bias
dual-ipv4-and-ipv6 Support both IPv4 and IPv6
lanbase-routing Support both IPv4 and IPv6 static routing
qos QoS bias
To change the template to lanbase-routing
, which supports up to 750 static routes:
Switch(config)# sdm prefer lanbase-routing
Changes to the running SDM preferences have been stored,
but cannot take effect until the next reload.
Use ‘show sdm prefer’ to see what SDM preference is currently active.
Switch(config)# exit
Switch# do reload
System configuration has been modified. Save? [yes/no]: y
Proceed with reload? [confirm]
[...]
Switch# show sdm prefer
The current template is "lanbase-routing" template.
The selected template optimizes the resources in
the switch to support this level of features for
8 routed interfaces and 1024 VLANs.
number of unicast mac addresses: 4K
number of IPv4 IGMP groups + multicast routes: 0.25K
number of IPv4 unicast routes: 0.75K
number of directly-connected IPv4 hosts: 0.75K
number of indirect IPv4 routes: 16
number of IPv4 policy based routing aces: 0
number of IPv4/MAC qos aces: 0.125K
number of IPv4/MAC security aces: 0.375K
ip routing
and ipv6 unicast-routing
User EXEC commands are needed to enable routing functions.
For all 3 inter-VLAN routing strategies, issues almost always involves correcting these common mistakes:
Topology:
VLANs and Ports:
SVIs:
Routing:
Hosts:


I decided it was not good enough to have an app to help people create their own blogs if I myself didn't ever had an experience in blogging.
Hopefully I will be able to add an entry every day and improve my writing, blogging skills, and at the same time get used to my own product.
Please bear with me if at first this blog appears to be shallow and senseless, will make an effort to create something meaningful.


Wolff: "We want to end this season on a high"
by Adam NewtonToto Wolff says that he and Mercedes want to end their record breaking season on a positive note with victories at the Brazilian and Abu Dhabi Grands Prix. Mercedes have already won a record sixth drivers' and constructors' double in a row.
Wolff will be taking a week off this week and won't be at the Brazilian Grand Prix, missing a race for the first time since 2013, but he believes his team will be good enough without him to take victory.
The Mercedes team boss says that he hopes his team will be able to fight for both qualifying and race win in Brazil.
He said: "We have two races to go in the 2019 season and we want to end this season on a high.
"The next stop takes us to Brazil which brings back fond memories from last year when we were not only able to win the race but also secure the constructors' championship at Interlagos.
"It's a very short track which makes qualifying particularly challenging as the margins are very small.
"We have generally not had the fastest car on Saturdays since the summer break, but we were able to take pole in Austin and will try to fight for a front row start again at Sao Paulo."


Click the SPACE bar to Start the Game!
Wish you Good Luck!
Sorry! you failed.
Retry
Click the SPACE bar to quit the Game! Wish you Good Luck!


Tile Title
(Optional)
Number of Results
(Max: 100)
Content Location
This Place
This Place and Sub-Places
All Places
Sort By
Score (Highest to Lowest)
Score (Lowest to Highest)
Number of Votes (Highest to Lowest)
Number of Votes (Lowest to Highest)
Date Created (Newest to Oldest)
Date Created (Oldest to Newest)
Latest Activity (Newest to Oldest)
Latest Activity (Oldest to Newest)
Apply


One Day.. The One-day session is 1-hour taster workshop with highlights from the full course, consisting of warm ups, breathing exercises, vocal technique for beginners, backing vocals, song-writing, performance and group singing.


Created by Samuel Clay, @samuelclay.
VisualSearch.js enhances ordinary search boxes with the ability to autocomplete faceted search queries. Specify the facets for completion, along with the completable values for any facet. You can retrieve the search query as a structured object, so you don't have to parse the query string yourself.
Here's an example of a search on DocumentCloud.org that uses facets.
The project is hosted on GitHub. You can report bugs and discuss features on the issues page, on Freenode in the #documentcloud channel, or send tweets to @documentcloud.
VisualSearch.js is an open-source component of DocumentCloud.
The complete annotated source code
is also available.
| 0. Everything (visualsearch.zip) | |
|---|---|
| Download everything | |
| 1. VisualSearch JavaScript (visualsearch.js) | |
| Production Version (0.5.0) | 7kb, Minified and Gzipped |
| Development Version (0.5.0) | 63kb, Uncompressed with Comments |
| 2. VisualSearch Stylesheets (visualsearch.css) | |
| You should include both the datauri and image urls versions. See how to include both | |
| Production Version - datauri | 4kb, Minified and Gzipped |
| Production Version - image urls | 4kb, Minified and Gzipped |
| Development Version | 8kb, Uncompressed with Comments |
| 3. VisualSearch Images | |
| Search Glyph | 4kb, embedded in visualsearch-datauri.css |
| Cancel Button | 4kb, embedded in visualsearch-datauri.css |
| 4. VisualSearch Dependencies (jQuery 1.4+, jQuery UI 1.8+, Underscore.js, Backbone.js) | |
| You should only include the dependencies you don't already have. | |
| Production Version - All | 49kb, Minified and Gzipped |
| Development Version - All | 340kb, Uncompressed with Comments |
| jQuery 1.11.0 | 267kb, Uncompressed with Comments |
| jQuery UI 1.10.4: Core Position Widget Menu Autocomplete |
72kb, Uncompressed with Comments |
| Underscore 1.5.2 | 41kb, Uncompressed with Comments |
| Backbone 1.1.0 | 59kb, Uncompressed with Comments |
To use VisualSearch.js on your site, follow these instructions on installation, configuration, and customization.

<link href="visualsearch-datauri.css" media="screen" rel="stylesheet" type="text/css" />

<link href="visualsearch.css" media="screen" rel="stylesheet" type="text/css" />

callbacks : {
...
// These are the facets that will be autocompleted in an empty input.
facetMatches : function(callback) {
callback([
'account', 'filter', 'access', 'title',
{ label: 'city', category: 'location' },
{ label: 'address', category: 'location' },
{ label: 'country', category: 'location' },
{ label: 'state', category: 'location' },
]);
}
...
// These are the values that match specific categories, autocompleted
// in a category's input field. searchTerm can be used to filter the
// list on the server-side, prior to providing a list to the widget.
valueMatches : function(facet, searchTerm, callback) {
switch (facet) {
case 'account':
callback([
{ value: '1-amanda', label: 'Amanda' },
{ value: '2-aron', label: 'Aron' },
{ value: '3-eric', label: 'Eric' },
{ value: '4-jeremy', label: 'Jeremy' },
{ value: '5-samuel', label: 'Samuel' },
{ value: '6-scott', label: 'Scott' }
]);
break;
case 'filter':
callback(['published', 'unpublished', 'draft']);
break;
case 'access':
callback(['public', 'private', 'protected']);
break;
case 'title':
callback([
'Pentagon Papers',
'CoffeeScript Manual',
'Laboratory for Object Oriented Thinking',
'A Repository Grows in Brooklyn'
]);
break;
}
}
...
}
// Returns the unstructured search query
visualSearch.searchBox.value()
// "country: "South Africa" account: 5-samuel title: "Pentagon Papers""
// Returns an array of Facet model instances
visualSearch.searchQuery.facets()
// [FacetModel<country:"South Africa">,
// FacetModel<account:5-samuel>,
// FacetModel<title:"Pentagon Papers">]
// Set the search query with raw text
visualSearch.searchBox.value("Country: US State: \"New York\" Key: Value")
Search.js July 22nd, 2013
A fork of VisualSearch.js that provides support for dynamic operators and HTML5
input types (numbers and dates).
0.5.0 February 9th, 2014
Add readOnly: true to your options to create a read-only search box.
Also upgraded all vendorized dependencies to latest versions (jQuery 1.11.0,
jQuery UI 1.10.4, Backbone 1.1.0, Underscore 1.5.2). Also fixed a number of issues:
https://github.com/documentcloud/visualsearch/compare/0.4.0...0.5.0
0.4.0 January 27th, 2013
Add placeholder: "Search for documents..." to your options to create an
auto-hiding placeholder in an empty search box. Also upgraded all vendorized
dependencies to latest versions (jQuery 1.9.0, jQuery UI 1.10.0, Backbone 0.9.10,
Underscore 1.4.3). Also fixed a number of issues:
https://github.com/documentcloud/visualsearch/compare/0.3.0...0.4.0
0.3.0 September 20th, 2012
Add showFacets: true to your options to have all available facets
automatically show up when the search text box is focused. You can also pass multiple
facet names to withoutCategory, like so:
searchQuery.withoutCategory('country', 'account').
0.2.2 March 10th, 2012
If you do not want to automatically filter the value matches, you can pass an
options hash with preserveMatches: true as the second argument to the callback.
See pull request #44 for details.
0.2.1 November 14th, 2011
The autocompleted facets and values that are provided by your callbacks facetMatches
and valueMatches can now preserve the order of items you give them. Simply pass an
options hash with preserveOrder: true as the second argument to the callback. See
the demo page for an example.
0.2.0 August 10th, 2011
Multiple instances of VisualSearch on a single page. VS.init now returns
a reference to the instance. The search callback now contains both the
serialized search query and a reference to the search query collection (as a
Backbone.Collection),
which can be used to manipulate each facet directly. See
the source code for search_query.js for available
methods on the collection.
0.1.0 June 23rd, 2011
Initial release of VisualSearch.js.


It appears you don't have a PDF plugin for this browser. You can click here to download the PDF file.


Realme X2 gets Dark Mode and Nightscape for selfie camera with the latest update
by SagarRealme has released a new software update for the Realme X2 in Europe which brings in system-wide dark mode to the mid-ranger. And with this, the total number of Realme smartphones having dark mode reach 11, which include the Realme 1, U1, 2 Pro, 5, 5 Pro, 3, 3i, 3 Pro, X, and XT.
The new firmware bumps up the Android security patch level on the Realme X2 to October 2019, but more importantly, it brings Nightscape Mode for the selfie camera.
Additionally, the new build, bearing version number RMX1993EX_11.A.15, comes with an updated charging animation and now lets you expand the notification center with a swipe down gesture anywhere on the home screen.
Here's the complete changelog of the update:
-
Security
- Android security patch: October 2019
-
Settings
- Added Dark Mode
- Added realme Laboratory
- Added a switch of swipe down on home screen for global search or notification center
- Added a switch of Notification Dot for updates
- Removed the reminder after the hotspot enabled
- Removed the prompt while rooted
- Updated charging animation, showing more details
-
Camera
- Added nightscape of front Camera
- Optimized partial AF out of focus
The update should reach all the Realme X2 units in Europe in a few weeks, and if you can't wait for it to arrive on your device, you can install it manually by downloading the package from the source link below.


Neural network tools
Build arbitrarily deep networks.
layers should be a list or tuple of integers, that indicate how many neurons the layers should have. bias and outputbias are flags to indicate whether the network should have the corresponding biases; both default to True.
To adjust the classes for the layers use the hiddenclass and outclass parameters, which expect a subclass of NeuronLayer.
If the recurrent flag is set, a RecurrentNetwork will be created, otherwise a FeedForwardNetwork.
If the fast flag is set, faster arac networks will be used instead of the pybrain implementations.
Learns to numerically predict the targets of a set of data, with optional online progress plots.
Initialize with the training data set DS. All keywords given are set as member variables. The following are particularly important:
| Key hidden: | number of hidden units |
|---|---|
| Key tds: | test data set for checking convergence |
| Key vds: | validation data set for final performance evaluation |
| Key epoinc: | number of epochs to train for, before checking convergence (default: 5) |
Learns to classify a set of data, with optional online progress plots.
Dataset tools
Converts a sequential classification dataset into time windows of fixed length. Assumes the correct class is given at the last timestep of each sequence. Incomplete windows at the sequence end are pruned. No overlap between windows.
| Parameters: |
|
|---|
Training performance validation tools
This class provides methods for the validation of calculated output values compared to their destined target values. It does not know anything about modules or other pybrain stuff. It just works on arrays, hence contains just the core calculations.
The class has just classmethods, as it is used as kind of namespace instead of an object definition.
Returns the explained sum of squares (ESS).
| Parameters: |
|
|---|
Returns the mean squared error. The multidimensional arrays will get flattened in order to compare them.
| Parameters: |
|
|---|---|
| Key importance: | each squared error will be multiplied with its corresponding importance value. After summing up these values, the result will be divided by the sum of all importance values for normalization purposes. |
Returns the hit rate of the outputs compared to the targets.
| Parameters: |
|
|---|
This class provides methods for the validation of calculated output values compared to their destined target values. It especially handles pybrains modules and dataset classes. For the core calculations, the Validator class is used.
The class has just classmethods, as it is used as kind of namespace instead of an object definition.
Returns the mean squared error.
| Parameters: |
|
|---|
Calculates the module’s output on the dataset. Can be called with any type of dataset.
| Parameter: | dataset – Any Dataset object containing an ‘input’ field. |
|---|
Returns the hit rate of the module’s output compared to the targets stored inside dataset.
| Parameters: |
|
|---|
Abstract validate function, that is heavily used by this class. First, it calculates the module’s output on the dataset. In advance, it compares the output to the target values of the dataset through the valfunc function and returns the result.
| Parameters: |
|
|---|
Class for crossvalidating data. An object of CrossValidator must be supplied with a trainer that contains a module and a dataset. Then the dataset ist shuffled and split up into n parts of equal length.
A clone of the trainer and its module is made, and trained with n-1 parts of the split dataset. After training, the module is validated with the n’th part of the dataset that was not used during training.
This is done for each possible combination of n-1 dataset pieces. The the mean of the calculated validation results will be returned.
Set the specified member variables.
| Key max_epochs: | maximum number of epochs the trainer should train the module for. |
|---|---|
| Key verbosity: | set verbosity level |
Auxiliary functions


Register
First Name:
Last Name:
Male
Female
Other
Email:
Password:
Birthday:
January
February
1
2
2018
2017
I agree to the terms and conditions
Submit


Action Items
Bugs
- [x] Convert cli.Action to cli.Verb in cmd/scripttool/scripttool.go
Next
- [ ] fountain2html
- [ ] fountain2json
- [x] fountain2fdx (Fountain to Final Draft XML)
- [x] fountain2osf (Fountain to Open Screenplay Format 1.2,2.0)
- [x] fdx2fountain (build on fdx2txt in fdx, handle TitlePage better)
- [x] fdx2osf (Final Draft XML to Open Screenplay Format 1.2,2.0 XML)
- [x] osf2fdx (Open Screenplay Format 1.2,2.0 XML to Final Draft XML)
- [x] osf2fountain (Open Screenplay Format 1.2,2.0 XML to Fountain)
- [x] fountain2fadein, fadein2fountain
- [ ] edit (simple line oriented editor with colorization for Fountain/Markdown)
- auto-convert to/fountain on open
- auto-convert from fountain to origin version on save
- timed-autosave
- backup original files
- [ ] headings - report the headings as a outline
- [ ] scenes - report the number of scenes, order and estimate time
- [ ] lines - report line count
- [ ] words - report word count
- [ ] character - report character count
- [ ] outline (OPML) to scenes/chapters
- [ ] notes, sections and synopsis
- [ ] eprints like metadata for the script
Someday, Maybe
- [ ] GUI for managing a screenplay project (like Scrivener but GTK based so as can run under Linux, BSD)
- [ ] PDF generation from various formats
- [ ] write and fountain2html, fdx2html, osf2html, fadein2html using scrippets approach
- [ ] Create a fountain text to speach script reader
- [ ] Should support configuration for assigning voices to different characters
- [ ] fountain2trelby
- [ ] osf2trelby
- [ ] fdx2trelby
- [ ] trelby2fdx
- [ ] trelby2fountain
- [ ] trelby2osf
Reference Links


3 Module and event timing
A next step could be to understand how long time is being spent in particular art modules and on a more event by event level. Because the bulk of the simulation runs in the artg4
producer, this measurement may be less useful compared to a many module art job. But it will still be instructive so it is good to do.
The TimeTracker
art service provides timing information about each module and statistics over events. It can also create a database with event by event timing information. You can run TimeTracker
by adding the following to your FCL file…
services : {
// ...
TimeTracker : {
printSummary : true
dbOutput : {
filename : "v7_timing.db"
overwrite : true
}
}
// ...
}
See http://cdcvs.fnal.gov/redmine/projects/art/wiki/TimeTracker for more information and instructions.
3.1 Summary printout
The default usage of the service and the configuration described here prints out a summary of timing information at the end of the job. For our example comparing gm2 v6_04_00
and gm2 v7_03_00
, we get the following output…
# v6_04_00
TimeReport ---------- Time Summary ---[sec]----
TimeReport CPU = 48.492349 Real = 48.291652
================================================================================================================================
TimeTracker printout (sec) Min Avg Max Median RMS nEvts
================================================================================================================================
Full event 0.00430586 0.0969926 0.979898 0.0567863 0.111273 500
--------------------------------------------------------------------------------------------------------------------------------
path1:randomsaver:RandomNumberSaver 1.5818e-05 2.97016e-05 0.000218545 2.39715e-05 1.6956e-05 500
path1:artg4:artg4Main 0.00312922 0.0931658 0.970814 0.0553228 0.108083 500
path1:TriggerResults:TriggerResultInserter 9.438e-06 1.54518e-05 9.9472e-05 1.2985e-05 8.65874e-06 500
end_path:out1:RootOutput 0.000232495 0.00371359 0.163321 0.00142215 0.00797466 500
================================================================================================================================
and
# v7_03_00
TimeReport ---------- Time Summary ---[sec]----
TimeReport CPU = 457.772410 Real = 259.748750
================================================================================================================================
TimeTracker printout (sec) Min Avg Max Median RMS nEvts
================================================================================================================================
Full event 0.0103769 0.519505 4.16775 0.257809 0.594227 500
--------------------------------------------------------------------------------------------------------------------------------
path1:randomsaver:RandomNumberSaver 3.2923e-05 5.95679e-05 0.00119983 4.83085e-05 5.79987e-05 500
path1:artg4:artg4Main 0.01027 0.519357 4.16762 0.257689 0.594228 500
path1:TriggerResults:TriggerResultInserter 1.7502e-05 2.29663e-05 9.7601e-05 2.09805e-05 7.6282e-06 500
end_path:out1:RootOutput 2.405e-06 3.71508e-06 2.0902e-05 3.5705e-06 1.11764e-06 500
end_path:out1:RootOutput(write) 0.000217776 0.00289537 0.0216031 0.00107864 0.0031938 500
================================================================================================================================
Note the statistics for events. The only producer that really matters here is artg4::artg4Main
, which runs Geant. On average, for v6
we see it took Geant 0.093s/muon and for v7
we see it took Geant 0.52s/muon. This is a dramatic difference. It is also interesting to look at the extremes - there was an event run by v7
that took over four seconds!
3.2 Database
As shown in the FCL fragment above, TimeTracker
can optionally output a database with timing information for each event. Let’s look at the timing information for v7
. For the analysis we’ll use R.
library(tidyverse)
db <- src_sqlite("data/v7_timing.db")
db
## src: sqlite 3.11.1 [data/v7_timing.db]
## tbls: TimeEvent, TimeModule, TimeReport
The TimeEvent
table has the total time for each event.
te <- tbl(db, "TimeEvent")
te %>% collect()
## # A tibble: 500 × 4
## Run Subrun Event Time
## <int> <int> <int> <dbl>
## 1 1 0 1 0.04066667
## 2 1 0 2 2.11977645
## 3 1 0 3 1.11163810
## 4 1 0 4 0.02122142
## 5 1 0 5 0.01811102
## 6 1 0 6 1.90626422
## 7 1 0 7 1.49305715
## 8 1 0 8 1.78778369
## 9 1 0 9 0.35362362
## 10 1 0 10 0.03596895
## # ... with 490 more rows
The TimeModule
table has the time for each event broken down by module.
tm <- tbl(db, "TimeModule")
tm %>% collect()
## # A tibble: 2,500 × 5
## Run Subrun Event PathModuleId
## <int> <int> <int> <chr>
## 1 1 0 1 path1:randomsaver:RandomNumberSaver
## 2 1 0 1 path1:artg4:artg4Main
## 3 1 0 1 path1:TriggerResults:TriggerResultInserter
## 4 1 0 1 end_path:out1:RootOutput
## 5 1 0 1 end_path:out1:RootOutput(write)
## 6 1 0 2 path1:randomsaver:RandomNumberSaver
## 7 1 0 2 path1:artg4:artg4Main
## 8 1 0 2 path1:TriggerResults:TriggerResultInserter
## 9 1 0 2 end_path:out1:RootOutput
## 10 1 0 2 end_path:out1:RootOutput(write)
## # ... with 2,490 more rows, and 1 more variables: Time <dbl>
The TimeReport
table gives the same information as the printed output from the TimeTracker
service.
tr <- tbl(db,"TimeReport")
tr %>% collect()
## # A tibble: 6 × 7
## ReportType Min Mean
## <chr> <dbl> <dbl>
## 1 Full event 0.011088641 5.674523e-01
## 2 path1:randomsaver:RandomNumberSaver 0.000036479 7.262060e-05
## 3 path1:artg4:artg4Main 0.010938725 5.672769e-01
## 4 path1:TriggerResults:TriggerResultInserter 0.000019366 2.520183e-05
## 5 end_path:out1:RootOutput 0.000003411 4.426006e-06
## 6 end_path:out1:RootOutput(write) 0.000236947 3.200830e-03
## # ... with 4 more variables: Max <dbl>, Median <dbl>, RMS <dbl>,
## # nEvts <int>
We can make plots…
tm %>% filter(PathModuleId == 'path1:artg4:artg4Main') %>% collect() -> artg4Time
artg4Time %>% ggplot( aes(x=Event, y=Time) ) + geom_point()
artg4Time %>% ggplot( aes(x=Time) ) + geom_histogram(bins=50)


{% include head.html %}
{% include members/nav-members.html %} {% include members/header-members.html %}
{% include members/list-plain.html %}
{% include footer.html %} {% include scripts.html %}


On the edge of the Tibetan Plateau stands one of the most impressive of the 7 world wonders, Mount Everest.
Like the rest of the Himalayas, Mount Everest rose from the floor of the ancient Tethys Sea.
It is considered to be the highest mountain in the world and continues to grow today at the rate of a few millimetres each year.
Mount Everest and the Himalayas were traditionally revered by the local people as the homes of the gods and were considered sacred.


Let's explore some of the use cases which can be solved using this library...
Imagine a large enterprise organization building many standalone frontend applications which look exactly the same but handle only single aspect of business requirements. A user will seamlessly switch between apps using standard HTML hyperlinks without noticing anything special. From users perspective it behaves as a single application with lots of features.
Let's say many of these application will share some piece of functionality, for example a "case widget" which will let employees know what they should be working on.
This kind of widget will be pretty isolated in terms of its model (data) and its sharing with the rest of application. Application will most likely just pass in some context and react to widget events...
In real life scenario, many of these applications will be developed by independent teams and have independent release cycles. This means that if we implement our widget as standard Angular library and released a new version (for example 3.1.0) we would have to wait for new releases (and deployments) of every consumer application before we could be sure that the our widget lib made it fully to the production...
Or we can face situation when we are running different versions of the same widget in various apps which may cause other problems related to breaking changes, incompatible data models which may introduce additional complexity for backends...
Wouldn't it be great if we could deploy new version of our widget independently from release cycle of consumer applications?
This is exactly what is enabled by this library! The "sub-application" element is released and deployed independently as a single file bundle which is then referenced ONLY by the url in the consumer apps.
To make referencing easier, the bundle file name can always stay the same
(for example some-element.js
without any hash) for every
version of the element. The cache busting is then handled with the help of
etag
which is transparently calculated based on the file
content on the server. Learn more about
ETag
HTTP response headers.
We could still employ query params (or even file name versioning) in case we would like to have more granular control about which version of the element will be downloaded by the consumer app to facilitate stuff like A/B testing. Please note that this has to be implemented with corresponding support on the server side.
Let's say we want to build fully dynamic application. An application which will be built from the individual blocks at runtime based on some configuration. The configuration itself can be provided from the start but can also be retrieved later, for example asynchronously (and possibly multiple times) from a backend...
The standard example of such an application is configurable dashboard where users can create fully custom layouts based on what kind of information they need using all the available widgets.
While it is possible to implement this using standard Angular approach, the resulting solution will most likely be very complex and have severe limitations in terms of used technologies and whole release / deployment lifecycle management.
On the other hand, using *axLazyElementDynamic
directive
enables us to lazy load any web component to be used inside of out Angular
application without hard-coding of its tag name
inside of the consumer Angular component template.
Using *axLazyElementDynamic
enables us to specify custom
element tag dynamically during runtime while still leveraging standard
Angular template property and event bindings!
Check out the live demo of this approach in Dynamic examples page !
Let's say we are building an Angular application and we are paying extra attention to architecture of the features making them nicely isolated and lazy loaded. The performance, maintainability and start up time of our application is great!
Then comes in a new requirement to add possibility to inline edit every item of a large list using a powerful (but also very heavy) rich text editor. As a result the size and hence loading of that feature will suffer even though the editor is only displayed as a result of user interaction and never from the start.
Ability to seamlessly load element once it was rendered as a result of user
interaction is exactly what can be achieved using
*axLazyElement
directive!
Another possible solution to this problem could be by implementing custom
component loader service using plain Angular. Unfortunately, currently (as
of version 8.1.0
) such an approach is only possible using
deprecated APIs and is pretty complex in itself...
Are you thinking about some different use case not mentioned in this section? Please, let us know and open an issue or submit a PR to make this docs better for other users! 😉


MyBlog - Pesonal blog site
MyBlog ▚
Personal blog site
About me
Good reads
Fav songs
Contact me
Life is a story...Often told, often untold...


Maximum Application Opening Test
Current version:
Create Applications
Total created Applications:
Create Windows


Sorry, registration for this event is not open.
You have already successfully registered for {{conference.name}}!
Remaining Balance: ${{currentRegistration.remainingBalance}}
Make Payment
Payments
If you have questions, contact:
{{conference.contactPersonName}}
{{conference.contactPersonPhone}}
{{conference.contactPersonEmail}}
{{conference.eventStartTime | date:'EEEE, MMM d, y h:mm a'}} - {{conference.eventEndTime | date:'EEEE, MMM d, y h:mm a'}}
{{conference.locationName}}
{{conference.locationAddress}}
{{conference.locationCity}},
{{conference.locationState}}
Cost: ${{conference.conferenceCost}}
Contact:
{{conference.contactPersonName}}
{{conference.contactPersonPhone}}
{{conference.contactPersonEmail}}


Four Family Members Burned to Death in Night Inferno
by Collins NyamungaA family of four were burnt to death after a fire broke out on Sunday, November 24, after a suspected arsonist set their house ablaze in Nyunzu Market Makueni County. The incident allegedly happened at 4 am.
The woman Ms Regina Mueni 49, her daughter Faith Mangeli 27 and her granddaughters Angel Masava and Amelia Masava aged 5 and 2 all died in the fire incident.
Mueni’s mother, Monica Matolo survived the arson with slight burns. She was rushed to Makueni County Hospital for treatment.
"This is a clear case of arson, there is a strong smell of Petrol on the smouldering debris," Mohamed Maalim, Makueni County commissioner was quoted by the Daily Nation.
Although no arrests have been made, neighbours told journalists that there has been an ongoing land dispute between Mueni and her brothers.
“The land dispute had been solved through the assistance of local administrators and a decision had arrived that the land would be subdivided today (Sunday),” Mr Maalim informed the journalists.
Timothy Maina, Makueni Sub-county commissioner informed the publication that an investigation had been launched into the incident.
The two brothers at the centre of the land dispute are suspected to have had something to do with the incident.
“The police are pursuing Ms Mueni’s brothers. They are the prime suspects,” the county commissioner added.
The victims' bodies were taken to Makueni County Referral Hospital Mortuary.


A Context component represents an individual web
application that is running within a particular Host.
Such a web application is based on a directory whose organization is described
in the Servlet API Specification, version 2.2 -- including the web application
deployment descriptor file, found in "WEB-INF/web.xml"
.
The web application used to process a particular request is selected by Catalina based on matching the longest possible prefix of the request URI against the context path of each defined Context. Once selected, that Context will select an appropriate servlet to process the incoming request, according to the servlet mappings defined in the web application deployment descriptor, based on the request mapping rules that are also found in the servlet specification.
You may define as many Context components as you wish,
nested within a Host component in the
conf/server.xml
file. Each such Context must have a unique
context path, defined by the path
attribute. In addition,
you must define a context with a path equal to a zero-length
string, which becomes the default web application to process requests when a
different context cannot be matched. There are also special features of the
Host configuration that enable
automatic creation of Context components without having
to explicitly mention them.
Request processing Valves that are nested here will be executed for every request received for processing by this web application.
All implementations of the Context component support the following attributes:
| Attribute | Description |
|---|---|
className |
Java class name of the implementation to use. This class must
implement the org.apache.catalina.Context interface. If
no class name is specified, the standard implementation will be
used (org.apache.catalina.core.StandardContext ).
|
cookies |
Set to true if you want cookies to be used for session
identifier communication (if supported by the client). Set to
false if you want to skip even trying session id cookies,
and rely only on URL rewriting. If not specified, the default value is
true .
|
crossContext |
Set to true of you want calls from within this application
to ServletContext.getContext() to successfully return the
ServletContext for other web applications running in this
host. Set to false in security conscious environments, so
that getContext() calls will return null . The
default value is false .
|
docBase |
The "document base" directory for this web application. This is the pathname of a directory that contains the static resources (such as HTML pages and images) for this application, plus a WEB-INF subdirectory containing the "web.xml" deployment descriptor and other configuration information. You may specify an absolute pathname to this directory, or a pathname that is relative to the "application base" for the Host within which this application is defined. |
path |
The context path for this web application, which is matched against
the beginning of a request URI to select the appropriate application.
All of the context paths within a particular
Host must be unique. In addition, you must
specify a Context with a path equal to a zero-length
string, which will become the default context for this Host.
|
reloadable |
Set this attribute to true if you wish to have Catalina
check the classes in WEB-INF/classes and
WEB-INF/lib for modification, and automatically reload
this application if a change is detected. This feature is very useful
during development; however, it requires significant runtime overhead
so it is not recommended for production deployment scenarios.
|
wrapperClass |
Java class name of the org.apache.catalina.Wrapper
implementation class that will be used for servlets managed by this
Context. If not specified, the standard value
(org.apache.catalina.core.StandardWrapper ) will be used.
|
useNaming |
Set this attribute to true if you wish to have Catalina
enable JNDI. Default is true .
|
override |
Set this attribute to true if you wish to over ride
the DefaultContext configuration. Default is false .
|
The standard implementation of the Context component also supports the following attributes:
| Attribute | Description |
|---|---|
debug |
The level of debugging detail logged by this Context to the associated Logger, with higher numbers generating more detailed output. If not specified, the debugging detail level will be set to zero (0). |
workDir |
Pathname to a scratch directory to be provided by this Context for
temporary read-write use by servlets within this application. The
corresponding directory will be made visible as a servlet context
attribute (of type java.io.File ) with the standard name
assigned by the Servlet API Specification, version 2.2
(javax.servlet.context.tempdir ). If not specified, a
suitable directory underneath Catalina's home directory will be
assigned automatically.
|
You can attach one or more of the following utility components by nesting a corresponding declaration inside your Context element.
When you run a web server, one of the output files normally generated is an access log, which generates one line of information, in a standard format, for each HTTP request that was received, and responded to, by the web server. Catalina includes an optional Valve implementation that can create access logs in the same standard format created by web servers, or in any custom format desired.
You can ask Catalina to create an access log for all requests to this web application, by nesting an element like this inside your Context element:
<Context path="/myapp" ...> ... <Valve className="org.apache.catalina.valves.AccessLogValve" prefix="myapp_access_log." suffix=".txt" pattern="common"/> ... </Context>
See Access Log Valve for more information on the configuration options that are supported.
If you use the standard Context implementation, the following configuration occurs automatically when Catalina is started, or whenever this web application is restarted. No special configuration is necessary to enable this activity.
org.apache.catalina.loader.WebappLoader
) will be
installed and configured.org.apache.catalina.session.StandardManager
) will be
installed and configured.org.apache.catalina.resources.StandardResources
) will be
installed and configured.conf/web.xml
file. This deployment descriptor can
therefore be used to establish defaults for servlet mappings (such as the
JSP servlet) and MIME types for all applications running in Catalina.WEB-INF/web.xml
file for this application,
if it exists. Such configuration information supplements that provided by
the system-wide defaults described in the previous point.Authenticator
interface, a standard Authenticator
Valve will be installed,
based on the selected <auth-method> you have specified.NOTE: The automatic context configuration steps described above are applied
both to contexts specifically listed in the conf/server.xml
file,
as well as contexts automatically created by the owning
Host component.
If you have implemented a Java object that needs to know when this
Context is started or stopped, you can declare it by nesting a
<Listener>
element inside the <Context>
element. The class you specify in the className
attribute
of this Listener must implement the
org.apache.catalina.LifecycleListener
interface, and it will be
notified about the occurrence of the corresponding lifecycle events.
Configuration for such a listener might look like this:
<Context path="/myapp" ...> ... <Listener className="com.mycompany.MyAppListener"/> ... </Context>
You can ask Catalina to check the IP address, or host name, of an incoming request for this web application against a list of "accept" and "deny" filters, which are defined using the Regular Expression syntax supported by the jakarta-regexp regular expression library system. Requests that come from remote locations that are not accepted will be rejected with an HTTP "Forbidden" error. Example filter declarations:
<Context path="/myapp" ...> ... <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="*.mycompany.com,www.yourcompany.com"/> <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="192.168.1.*" ... </Context>
See Remote Address Filter or Remote Host Filter for more information on the syntax of these filters, and the logic that is applied when they are executed.


Sep 9, 2013 Police officer and Jerry Springer security guard Pete Kelly shows Aly around. the city's most regal neighborhood, making stops for extravagant
Feb 27, 2009. Wilkos is the former security guard on "Jerry Springer," whose job was to referee such fights He became so popular he broke off to have his For those of you that don't watch television, The Jerry Springer Show first aired in pants) off, and the beefy security guards break it up before it gets too violent Jun 15, 2012 'Jerry Springer Show' Is Signed Up Through Fall 2016 viewers a day, while his former security guard, Mr Wilkos, gets about 1. 8 million Former marine and police officer. Best known for being security at the jerry springer. show and host of the steve wilkos show Oct 26, 2010 NEW YORK Thanks to Jerry Springer, the idea of a midget. a former Springer security guard, and. the colorful Maury Povich, he said. Dec 18, 2000. Geraldo Rivera takes on Jerry Springer. in the battle of daytime talk show. If it wasn't for Steve the security guard, Jerry would have been
Mar 19, 2012 Executive producer, The Jerry Springer. Show, The Steve Wilkos Show known then to fans as the show's. large, intimidating security guard Jun 4, 1999 Later, when members of the council. watched the "Jerry Springer. by an off-duty Chicago police officer who is employed as a security guard for Talk Show Host Clocked With Metal Bowl On Air, The Urban Daily. Former "Jerry Springer" security guard turned talk show host Steve Wilkos was unexpectedly Mar 30, 2013. need to tough enough to be Jerry Springer? security guard
TheLexyPro says: March 30, 2013 at 4:07 pm. He's has been? officially CATFISH
Steve Wilkos was a security guard for the Jerry Springer Show and now has of security on "The Jerry Springer Show, Steve Wilkos needed some security of Feb 13, 2013 Former "Jerry Springer" security guard turned talk show host Steve Wilkos was unexpectedly laid out on his show the bald host caught a metal Jul 22, 2001. I make notes while I watch the Jerry Springer show because it's just Susan is in love with her friend, who. is a security guard for a trailerpark.
Jan 26, 2010 Jeremy Kyle bids to steal Jerry Springer's. crown as King of Trailer Trash Security guard David Staniforth was fined £300 after headbutting his


ICIP is the world's largest and most comprehensive technical conference focused on image and video processing and computer vision. The conference will feature world- class speakers, tutorials, exhibits, and a vision technology showcase.
| About IEEE | Membership | Get involved | Connect with IEEE |
|---|---|---|---|
IEEE is the world's largest technical professional organization dedicated to advancing technology for the benefit of humanity. |
|||
| Locations | |||
IEEE has a global presence with offices internationally. |


?m
/
Sabatici
stellarti
Pursh
Det.-rev.
M
Thiv
(B)
2001
VP'
3L/)'È
PLANTS
OF
BAHAMA
ISLANDS
Sabatia
stellaris
Pursh
North
Andros:
in
rock-flat
savannah,
pinelands,
along
Bail
Road,
south
of
Twin
Lakes
Farm
turn-off,
Flowers
pink*
December
8,
1976
D
S.Con-ell
&
G.R.Proctor
47834
Herbarium
FAIRCHILD
TROPICAL
GARDEN
1624738
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


Move CSS Above Scripts
Configuration
The 'Move CSS Above Scripts' filter is enabled by specifying:
- Apache:
ModPagespeedEnableFilters move_css_above_scripts
- Nginx:
pagespeed EnableFilters move_css_above_scripts;
in the configuration file.
Description
'Move CSS Above Scripts' seeks to make sure scripts do not block the loading of CSS resources.
This is based on the best practice for downloading resources early.
Operation
The 'Move CSS Above Scripts' filter operates only on CSS
<link>
and  <link rel="stylesheet" type="text/css" href="styles/all_styles.css">
Then PageSpeed will rewrite it into:
     <link rel="stylesheet" type="text/css" href="styles/all_styles.css">
 Hello, world!

In some browsers the original version will not even download the CSS file until the JavaScript has been downloaded and run. This transformation will make sure the CSS file is loaded first.
Note: You may also want to enable the move_css_to_head filter to avoid a flash of unstyled content. When both filters are enabled, stylesheets are moved into the head and above the first script.
Example
You can see the filter in action at www.modpagespeed.com
on this
example.
Limitations
This filter operates within the scope of a "flush window". Specifically,
large, or dynamically generated HTML files may be "flushed" by the
resource generator before they are complete. If the filter
encounters a flush after the first


[gecode-users] Compilation error
Christian Schulte
cschulte at kth.se
Fri Mar 26 15:26:19 CET 2010
Please make sure that you first try a pristine program that is included in
"Modeling with Gecode". Only after you got that to compile move on to your
on stuff.
The reason could be either: you forgot a main function in your program, or
you have still wrong compiler options (for linking, or you forgot /MD or
/MDd). So more reading in that case.
Christian
--
Christian Schulte, www.ict.kth.se/~cschulte/
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of anusha rani
Sent: Friday, March 26, 2010 9:27 AM
To: users at gecode.org
Subject: Re: [gecode-users] Compilation error
Hi Mikael,
Now i have solved problem with includes. But i am getting another error. I
have gone through all the instructions at www.gecode.org
<http://www.gecode.org/> and the pdf document but i can't resolve this
problem
1>------ Build started: Project: sendmoney, Configuration: Debug Win32
------1>Linking...
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol
_WinMain at 16 referenced in function ___tmainCRTStartup
1>Debug\sendmoney.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://c:\Program
Files\Gecode\include\CPLUS\Debug\BuildLog.htm"
1>sendmoney - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Tack så mycket,
MVH
Anusha.
On Thu, Mar 25, 2010 at 11:09 PM, anusha rani <anusha.maneru at gmail.com>
wrote:
Hi
I am trying to compile and run send-more-money.cpp. I have installed Gecode
3.3.2 and configured it on Visual c++ 2008. But i m getting the following
error.
1>------ Build started: Project: sendmoremoney, Configuration: Debug Win32
------
1>Compiling...
1>cl : Command line warning D9035 : option 'Wp64' has been deprecated and
will be removed in a future release
1>send-more-money.cpp
1>.\send-more-money.cpp(28) : fatal error C1083: Cannot open include file:
'gecode/int.hh': No such file or directory
1>Build log was saved at "file://c:\cygwin\CPLUS\Debug\BuildLog.htm"
1>sendmoremoney - 1 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Could you help me to find out where i am doing worng ?
Thanks in advance
MVH
Anusha.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20100326/eeaa2d4f/attachment.htm>
More information about the users
mailing list


TABLE OF INTERACTIONS WITH
THIAZIDE DIURETICS AND RELATED
From the French ANSM drug interactions document of September 2016, p. 82
THIAZIDE DIURETICS AND RELATED CLASS CODE: C03-003 |
CALCIUM RxNorm: 1428011 ATC: A12AA |
Risk of hypercalcemia due to decrease of the urinary elimination of the calcium. |
Take into account |
THIAZIDE DIURETICS AND RELATED CLASS CODE: C03-003 |
LITHIUM RxNorm: 6448 ATC: D11AX04 |
Increase of the plasma concentrations of lithium with signs of overdose of lithium, as with a reduced sodium regimen (decrease of the urinary excretion of the lithium) |
Not recommended If administering the substances together cannot be avoided, strict monitoring of the plasma concentrations of lithium and adjustment of the dosage of the lithium. |


@(childDetails : List [ChildDetail])
| Child First Name | Child Last Name | Current Account Balance | Guardian First Name | Guardian Last Name | Relationship to Child |
|---|---|---|---|---|---|
| @childDetail.getFirstName | @childDetail.getLastName | @childDetail.getCurrentAccountBalance | @childDetail.getGuardianFirstName | @childDetail.getGuardianLastName | @childDetail.getRelationshipToChild |


| Phase | Input from judge (via STDIN) |
Output from agent (via STDOUT) |
Explanation | Timeout | Line no (player.java) |
|---|---|---|---|---|---|
| 1. Initialization |
|
|
Signals the judge that your agent is ready. | No Limit | |
|
|
The first line from the judge is your player ID. This is an integer from 0 to 3 inclusive. Player 1 is on the left of Player 0, Player 2 is on the left of Player 1, etc. Since the game proceeds in counter-clockwise direction, if player 0 just played a card, then it will be player 1's turn to play a card, unless player 1 started the round. | |||
|
The next 13 lines are the 13 hand cards you are dealt, in no particular order (i.e. not sorted). The first character on each line specifies the suite of the card (S = Spades, H = Hearts, C = Clubs, D = Diamonds) and the rest of the line specifies its rank (1-13 = A-K). Remember, there is a catch: S1 (Aces of Spades) > S13 (King of Spades)! Also, this list might not be final because there might be a card-passing phase. If you do not wish to implement a card-passing strategy, then you can choose to ignore this initial list as the final list will be echoed to you again after the cards-passing stage. | ||||
|
There is a blank line (i.e. a just a \n) after the input of each phase to aid alignment. Note that a blank line is DIFFERENT from no input (the grey boxes). For no input, there is nothing you have to do because literally nothing was sent from the judge. However, for a blank line, you DO have to "consume" it (i.e. in.nextLine() or gets(buff) or ...) or the IO will be mis-aligned.
|
||||
| 2. Card Passing |
|
This line indicates the direction of the pass. It is going to be one of PL (pass left), PR (pass right), PA (pass across) or NP (no pass).
|
|||
|
This line tells you who you are passing to, which is a player ID from 0 to 3 inclusive. In the case of NP , it will be your OWN player ID.
|
||||
|
There is a blank line (i.e. a just a \n) after the input of each phase to aid alignment. | ||||
|
You should then tell the judge which THREE cards you would like to pass, one on each line. If some of your choices are INVALID (e.g. you do not own that card, invalid format, etc), then the judge will replace that response with a randomly picked (but valid) card from your hand. You algorithm should be fast. The timeout for this part is 30 seconds. If you go over that time limit, the judge will take over and pick for you. In the case of NP , your code should still output three lines of something. It doesn't matter what something is, because their values are completely ignored by the judge. This is done so that simplier agents that do not implement card-passing can simpliy output three junk values here, without having to distingush between the various case of passing or non-passing rounds.
|
30 sec | |||
| 2a. Card Passing (Confirmation) |
|
The next three lines echo out the cards that you are passing. Normally, this should be exactly the same as what you've told the judge to pass. However, if some of your choices are invalid or an timeout occurs, you can know the judge's final decision from here. In the case of NP , these three lines will be some undefined junk values. You shouldn't count on them being the same as your previous response.
|
|||
|
There is a blank line (i.e. a just a \n) after the input of each phase to aid alignment. | ||||
| 3. Receiving Cards |
|
This line tells you who the cards are from, which is a player ID from 0 to 3 inclusive. In the case of NP , it will be your OWN player ID.
|
|||
|
The next 13 lines are the finialized list of your hand cards. If your agent do not implement any card-passing strategy, then it might be easier for you to just ignore the previous list and store this one instead. In the case of PL , PR or PA , the first 3 lines are the cards that are passed on to you, but in no particular order (i.e. not sorted). The remaining 10 are the cards you originally have, minus the three cards that you have passed. There is no guarentee that their order remains the same as the list in the initialization phase. (If your agent implments card-passing, you can just ignore these 10 lines.) In the case of NP , these 13 lines will be the same as the previous list, althouguh the ordering might be different.
|
||||
|
There is a blank line (i.e. a just a \n) after the input of each phase to aid alignment. | ||||
*** GAME ON *** |
|||||
Note: Phase 4, 4a and 5 will be repeated 13 times, once per round. |
|||||
| 4. Playing a Card |
|
This line tells the round number, which is from 0 to 12 inclusive. (i.e. first trick = round 0, second trick = round 1, etc) | |||
|
This line tells you who started the round, which is a player ID from 0 to 3 inclusive. | ||||
|
This line tells if the heart has already been broken. 1 for true (heart broken) and 0 for false (heart not yet broken). | ||||
|
This line tells how many cards have been played in this round so far. | ||||
|
The next N lines are the cards that have been played so far (in the order that they are played). This depends on the previous value, if the previous line is 2, that means there will be exactly 2 lines here. | ||||
|
There is a blank line (i.e. a just a \n) after the input of each phase to aid alignment. | ||||
|
Given the information above, you should choose a card to play from your hand. If you choice is INVALID (e.g. not following the suite, played a card with points in the first round, invalid format, etc), the judge will pick a random (but valid) card from your hand. You algorithm should be fast. The timeout for this part is 30 seconds. If you go over that time limit, the judge will take over and pick for you. | 30 sec | |||
| 4a. Playing a Card (Confirmation) |
|
The next line echos out the card that you are playing. Normally, this should be exactly the same as what you've told the judge to play. However, if your choice is invalid or an timeout occurs, you can know the judge's final decision from here. | |||
|
There is a blank line (i.e. a just a \n) after the input of each phase to aid alignment. | ||||
| 5. Round Summary |
|
This line tells the round number, which is from 0 to 12 inclusive. (i.e. first trick = round 0, second trick = round 1, etc) | |||
|
This line tells you who started the round, which is a player ID from 0 to 3 inclusive. | ||||
|
This line tells if the heart has already been broken. 1 for true (heart broken) and 0 for false (heart not yet broken). | ||||
|
The next 4 lines are the cards that have been played in this round (in the order that they are played). | ||||
|
This line tells you who won the trick, which is a player ID from 0 to 3 inclusive. | ||||
|
This line tells you how many points are in this trick. | ||||
|
There is a blank line (i.e. a just a \n) after the input of each phase to aid alignment. | ||||
*** GAME ENDED *** |
|||||
| 6. Game Summary |
|
The last four lines tell you the number of points each player gained in the game. Your score is on the (player ID)-th line. | |||
|
The judge will the close the write end of the pipe. (You can simulate this by pressing Ctrl+D in the console.) You have up to 30 seconds to do any clean-up work that you need to do, then quit cleanly. If your process is still alive after 30 seconds, it will be killed by the judge. | 30 sec |


Order Details
Order Number:
Order Date:
Customer Number:
Customer Name:
Shipping Information
NickName Address 1 Address 2 City, State United States, Zip Code Phone eMail
Fed Ex - 2nd Day By End Of Day FREE
Product
QTY
Each
Total
Product Name #1 SKU (Discount) ($83.40))
2
834.00
Billing Information
VISA Credit Card Month: 04 Account number: ************5137 Year: 2017 Amount: $1,208.80


--- layout: layout title: About Diedrik ---
Hi there! I am Diedrik De Mits, a full-time trainer, specialized in JavaScript and .NET programming.
I work at U2U Training, a Belgian company with a focus on teaching people, face-to-face, how to develop software.
This blog is for myself to gather all my thoughts and share them with the world. Have fun reading and keep in touch for comments!
If you want to, you can always fork my blog on Github, do a pull request and help me to solve spelling mistakes and other things!


|
pf
|
| ▼ include | |
| ▼ pf | |
| auxiliary_pf.h | A base class for Auxiliary Particle Filtering. Inherit from this if you want to use an APF for your state space model. Filtering only, no smoothing |
| bootstrap_filter.h | Bootstrap particle filter |
| bootstrap_filter_with_covariates.h | Bootstrap particle filter with covariates |
| cf_filters.h | Inherit from this for a model that admits Kalman filtering |
| pf_base.h | All non Rao-Blackwellized particle filters without covariates inherit from this |
| rbpf.h | Rao-Blackwellized/Marginal Particle Filter with inner HMMs |
| resamplers.h | Most resamplers must inherit from this. This will enforce certain structure that are assumed by these pfs |
| rv_eval.h | |
| rv_samp.h | All rv samplers must inherit from this |
| sisr_filter.h | SISR filter |
| ▼ smctc_comparison_example | |
| acv_bs.h | |
| data_reader.h |


Clients List
Home
My Clients List
Information about my clients
Number
Gender
Status
Children
Estimated Income
Car Owner
Age
Long Distance
International
Local
Dropped
Payment method
Local Billtype
Long-Dis Billtype
Usage
RestPlan


Lack of water has been a problem to the society and our country at large.This problem has brought about loss of lives leading to economy imbalance.With this challenge it will be quite impossible for our mother land to reach its vision[2030].
presaervation of water catchment areas will play a vital role in the solution of the proble m.This is manifested by not cutting down trees near water sources.
With the help of government revenue people should be encouraged to dig boreholes in dry areas.
residents in the affected areas should engage in fund raising groups to buy water tanks.this water tanks will enable the people in harvesting rain water
last but not least people should be educated on the importance of preserving water.This is going to be light to guide them in thier daily activities.


options |
Object
|
Properties
| Name |
Type |
Attributes |
Default |
Description |
params |
Array.<String>
|
|
|
Parameters passed to ffmpeg process. |
pipes |
Array.<Writable>
|
Array.<function()>
|
<optional>
|
|
Array of writable pipes and/or functions to receive data output from ffmpeg stdio[n]. |
path |
String
|
<optional>
|
ffmpeg
|
Specify path to ffmpeg if it is not in PATH. |
logLevel |
String
|
<optional>
|
quiet
|
Valid options: quiet, -8, panic, 0, fatal, 8, error, 16, warning, 24, info, 32, verbose, 40, debug, 48, trace, 56. |
killAfterStall |
Number
|
<optional>
|
10
|
Valid range: 10 - 60. Number of seconds to wait to kill ffmpeg process if not receiving progress. |
reSpawnDelay |
Number
|
<optional>
|
2
|
Valid range: 2 - 60. Number of seconds to wait to re-spawn ffmpeg process after it exits. |
reSpawnLimit |
Number
|
<optional>
|
1
|
Valid range: 0 - Infinity. Number of attempts to re-spawn ffmpeg after exiting without progress. Fail event will be emitted after reaching limit. |
debug |
Boolean
|
<optional>
|
false
|
If true, will output some debugging data to console. |
|


In this section you can easily edit the Name and Description of the Operation.
This section is visible because the path/endpoint this operation belongs to has dynamic parameters. Configure the parameters' descriptions and types below.
| Parameter | Description | Type |
|---|---|---|
| {{ param.name }} |
Use this section to configure the operation's Request Body. Typically a request body is used for PUT and POST only. Other operation types usually do not include a body.
An operation may, optionally, allow additional options to be sent via URL query parameters. This section allows you to document what query parameters are accepted/expected by this operation.
| Parameter | Description | Type | |
|---|---|---|---|
| {{ param.name }} |
|
Every operation must include at least one Response. Multiple responses (with different HTTP response codes) are possible for each operation - so add as many as you like. Some common choices for HTTP responses are:
| Status Code | Description | Type | |
|---|---|---|---|
| {{ response.statusCode() }} |
|