text:
module BABYLON {
    /**
     * Special Glow Blur post process only blurring the alpha channel
     * It enforces keeping the most luminous color in the color channel.
     */
    class GlowBlurPostProcess extends PostProcess {
        constructor(name: string, public direction: Vector2, public kernel: number, options: number | PostProcessOptions, camera: Nullable<Camera>, samplingMode: number = Texture.BILINEAR_SAMPLINGMODE, engine?: Engine, reusable?: boolean) {
            super(name, "glowBlurPostProcess", ["screenSize", "direction", "blurWidth"], null, options, camera, samplingMode, engine, reusable);

            this.onApplyObservable.add((effect: Effect) => {
                effect.setFloat2("screenSize", this.width, this.height);
                effect.setVector2("direction", this.direction);
                effect.setFloat("blurWidth", this.kernel);
            });
        }
    }

    /**
     * Highlight layer options. This helps customizing the behaviour
     * of the highlight layer.
     */
    export interface IHighlightLayerOptions {
        /**
         * Multiplication factor apply to the canvas size to compute the render target size
         * used to generated the glowing objects (the smaller the faster).
         */
        mainTextureRatio: number;

        /**
         * Enforces a fixed size texture to ensure resize independant blur.
         */
        mainTextureFixedSize?: number;

        /**
         * Multiplication factor apply to the main texture size in the first step of the blur to reduce the size
         * of the picture to blur (the smaller the faster).
         */
        blurTextureSizeRatio: number;

        /**
         * How big in texel of the blur texture is the vertical blur.
         */
        blurVerticalSize: number;

        /**
         * How big in texel of the blur texture is the horizontal blur.
         */
        blurHorizontalSize: number;

        /**
         * Alpha blending mode used to apply the blur. Default is combine.
         */
        alphaBlendingMode: number

        /**
         * The camera attached to the layer.
         */
        camera: Nullable<Camera>;
    }

    /**
     * Storage interface grouping all the information required for glowing a mesh.
     */
    interface IHighlightLayerMesh {
        /**
         * The glowy mesh
         */
        mesh: Mesh;
        /**
         * The color of the glow
         */
        color: Color3;
        /**
         * The mesh render callback use to insert stencil information
         */
        observerHighlight: Nullable<Observer<Mesh>>;
        /**
         * The mesh render callback use to come to the default behavior
         */
        observerDefault: Nullable<Observer<Mesh>>;
        /**
         * If it exists, the emissive color of the material will be used to generate the glow.
         * Else it falls back to the current color.
         */
        glowEmissiveOnly: boolean;
    }

    /**
     * Storage interface grouping all the information required for an excluded mesh.
     */
    interface IHighlightLayerExcludedMesh {
        /**
         * The glowy mesh
         */
        mesh: Mesh;
        /**
         * The mesh render callback use to prevent stencil use
         */
        beforeRender: Nullable<Observer<Mesh>>;
        /**
         * The mesh render callback use to restore previous stencil use
         */
        afterRender: Nullable<Observer<Mesh>>;
    }

    /**
     * The highlight layer Helps adding a glow effect around a mesh.
     *
     * Once instantiated in a scene, simply use the pushMesh or removeMesh method to add or remove
     * glowy meshes to your scene.
     *
     * !!! THIS REQUIRES AN ACTIVE STENCIL BUFFER ON THE CANVAS !!!
     */
    export class HighlightLayer {
        /**
         * The neutral color used during the preparation of the glow effect.
         * This is black by default as the blend operation is a blend operation.
         */
        public static neutralColor: Color4 = new Color4(0, 0, 0, 0);

        /**
         * Stencil value used for glowing meshes.
         */
        public static glowingMeshStencilReference = 0x02;

        /**
         * Stencil value used for the other meshes in the scene.
         */
        public static normalMeshStencilReference = 0x01;

        private _scene: Scene;
        private _engine: Engine;
        private _options: IHighlightLayerOptions;
        private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};
        private _indexBuffer: Nullable<WebGLBuffer>;
        private _downSamplePostprocess: PassPostProcess;
        private _horizontalBlurPostprocess: GlowBlurPostProcess;
        private _verticalBlurPostprocess: GlowBlurPostProcess;
        private _cachedDefines: string;
        private _glowMapGenerationEffect: Effect;
        private _glowMapMergeEffect: Effect;
        private _blurTexture: RenderTargetTexture;
        private _mainTexture: RenderTargetTexture;
        private _mainTextureDesiredSize: ISize = { width: 0, height: 0 };
        private _meshes: Nullable<{ [id: string]: Nullable<IHighlightLayerMesh> }> = {};
        private _maxSize: number = 0;
        private _shouldRender = false;
        private _instanceGlowingMeshStencilReference = HighlightLayer.glowingMeshStencilReference++;
        private _excludedMeshes: Nullable<{ [id: string]: Nullable<IHighlightLayerExcludedMesh> }> = {};

        /**
         * Specifies whether or not the inner glow is ACTIVE in the layer.
         */
        public innerGlow: boolean = true;

        /**
         * Specifies whether or not the outer glow is ACTIVE in the layer.
         */
        public outerGlow: boolean = true;

        /**
         * Specifies wether the highlight layer is enabled or not.
         */
        public isEnabled: boolean = true;

        /**
         * Specifies the horizontal size of the blur.
         */
        public set blurHorizontalSize(value: number) {
            this._horizontalBlurPostprocess.kernel = value;
        }

        /**
         * Specifies the vertical size of the blur.
         */
        public set blurVerticalSize(value: number) {
            this._verticalBlurPostprocess.kernel = value;
        }

        /**
         * Gets the horizontal size of the blur.
         */
        public get blurHorizontalSize(): number {
            return this._horizontalBlurPostprocess.kernel
        }

        /**
         * Gets the vertical size of the blur.
         */
        public get blurVerticalSize(): number {
            return this._verticalBlurPostprocess.kernel;
        }

        /**
         * Gets the camera attached to the layer.
         */
        public get camera(): Nullable<Camera> {
            return this._options.camera;
        }

        /**
         * An event triggered when the highlight layer has been disposed.
         * @type {BABYLON.Observable}
         */
        public onDisposeObservable = new Observable<HighlightLayer>();

        /**
         * An event triggered when the highlight layer is about rendering the main texture with the glowy parts.
         * @type {BABYLON.Observable}
         */
        public onBeforeRenderMainTextureObservable = new Observable<HighlightLayer>();

        /**
         * An event triggered when the highlight layer is being blurred.
         * @type {BABYLON.Observable}
         */
        public onBeforeBlurObservable = new Observable<HighlightLayer>();

        /**
         * An event triggered when the highlight layer has been blurred.
         * @type {BABYLON.Observable}
         */
        public onAfterBlurObservable = new Observable<HighlightLayer>();

        /**
         * An event triggered when the glowing blurred texture is being merged in the scene.
         * @type {BABYLON.Observable}
         */
        public onBeforeComposeObservable = new Observable<HighlightLayer>();

        /**
         * An event triggered when the glowing blurred texture has been merged in the scene.
         * @type {BABYLON.Observable}
         */
        public onAfterComposeObservable = new Observable<HighlightLayer>();

        /**
         * An event triggered when the highlight layer changes its size.
         * @type {BABYLON.Observable}
         */
        public onSizeChangedObservable = new Observable<HighlightLayer>();

        /**
         * Instantiates a new highlight Layer and references it to the scene..
         * @param name The name of the layer
         * @param scene The scene to use the layer in
         * @param options Sets of none mandatory options to use with the layer (see IHighlightLayerOptions for more information)
         */
        constructor(public name: string, scene: Scene, options?: IHighlightLayerOptions) {
            this._scene = scene || Engine.LastCreatedScene;
            var engine = scene.getEngine();
            this._engine = engine;
            this._maxSize = this._engine.getCaps().maxTextureSize;
            this._scene.highlightLayers.push(this);

            // Warn on stencil.
            if (!this._engine.isStencilEnable) {
                Tools.Warn("Rendering the Highlight Layer requires the stencil to be active on the canvas. var engine = new BABYLON.Engine(canvas, antialias, { stencil: true }");
            }

            // Adapt options
            this._options = options || {
                mainTextureRatio: 0.5,
                blurTextureSizeRatio: 0.5,
                blurHorizontalSize: 1.0,
                blurVerticalSize: 1.0,
                alphaBlendingMode: Engine.ALPHA_COMBINE,
                camera: null
            };
            this._options.mainTextureRatio = this._options.mainTextureRatio || 0.5;
            this._options.blurTextureSizeRatio = this._options.blurTextureSizeRatio || 1.0;
            this._options.blurHorizontalSize = this._options.blurHorizontalSize || 1;
            this._options.blurVerticalSize = this._options.blurVerticalSize || 1;
            this._options.alphaBlendingMode = this._options.alphaBlendingMode || Engine.ALPHA_COMBINE;

            // VBO
            var vertices = [];
            vertices.push(1, 1);
            vertices.push(-1, 1);
            vertices.push(-1, -1);
            vertices.push(1, -1);

            var vertexBuffer = new VertexBuffer(engine, vertices, VertexBuffer.PositionKind, false, false, 2);
            this._vertexBuffers[VertexBuffer.PositionKind] = vertexBuffer;

            this._createIndexBuffer();

            // Effect
            this._glowMapMergeEffect = engine.createEffect("glowMapMerge",
                [VertexBuffer.PositionKind],
                ["offset"],
                ["textureSampler"], "");

            // Render target
            this.setMainTextureSize();

            // Create Textures and post processes
            this.createTextureAndPostProcesses();
        }

        private _createIndexBuffer(): void {
            var engine = this._scene.getEngine();

            // Indices
            var indices = [];
            indices.push(0);
            indices.push(1);
            indices.push(2);

            indices.push(0);
            indices.push(2);
            indices.push(3);

            this._indexBuffer = engine.createIndexBuffer(indices);
        }

        public _rebuild(): void {
            let vb = this._vertexBuffers[VertexBuffer.PositionKind];

            if (vb) {
                vb._rebuild();
            }

            this._createIndexBuffer();
        }

        /**
         * Creates the render target textures and post processes used in the highlight layer.
         */
        private createTextureAndPostProcesses(): void {
            var blurTextureWidth = this._mainTextureDesiredSize.width * this._options.blurTextureSizeRatio;
            var blurTextureHeight = this._mainTextureDesiredSize.height * this._options.blurTextureSizeRatio;
            blurTextureWidth = this._engine.needPOTTextures ? Tools.GetExponentOfTwo(blurTextureWidth, this._maxSize) : blurTextureWidth;
            blurTextureHeight = this._engine.needPOTTextures ? Tools.GetExponentOfTwo(blurTextureHeight, this._maxSize) : blurTextureHeight;

            this._mainTexture = new RenderTargetTexture("HighlightLayerMainRTT",
                {
                    width: this._mainTextureDesiredSize.width,
                    height: this._mainTextureDesiredSize.height
                },
                this._scene,
                false,
                true,
                Engine.TEXTURETYPE_UNSIGNED_INT);
            this._mainTexture.activeCamera = this._options.camera;
            this._mainTexture.wrapU = Texture.CLAMP_ADDRESSMODE;
            this._mainTexture.wrapV = Texture.CLAMP_ADDRESSMODE;
            this._mainTexture.anisotropicFilteringLevel = 1;
            this._mainTexture.updateSamplingMode(Texture.BILINEAR_SAMPLINGMODE);
            this._mainTexture.renderParticles = false;
            this._mainTexture.renderList = null;
            this._mainTexture.ignoreCameraViewport = true;

            this._blurTexture = new RenderTargetTexture("HighlightLayerBlurRTT",
                {
                    width: blurTextureWidth,
                    height: blurTextureHeight
                },
                this._scene,
                false,
                true,
                Engine.TEXTURETYPE_UNSIGNED_INT);
            this._blurTexture.wrapU = Texture.CLAMP_ADDRESSMODE;
            this._blurTexture.wrapV = Texture.CLAMP_ADDRESSMODE;
            this._blurTexture.anisotropicFilteringLevel = 16;
            this._blurTexture.updateSamplingMode(Texture.TRILINEAR_SAMPLINGMODE);
            this._blurTexture.renderParticles = false;
            this._blurTexture.ignoreCameraViewport = true;

            this._downSamplePostprocess = new PassPostProcess("HighlightLayerPPP", this._options.blurTextureSizeRatio,
                null, Texture.BILINEAR_SAMPLINGMODE, this._scene.getEngine());
            this._downSamplePostprocess.onApplyObservable.add(effect => {
                effect.setTexture("textureSampler", this._mainTexture);
            });

            if (this._options.alphaBlendingMode === Engine.ALPHA_COMBINE) {
                this._horizontalBlurPostprocess = new GlowBlurPostProcess("HighlightLayerHBP", new Vector2(1.0, 0), this._options.blurHorizontalSize, 1,
                    null, Texture.BILINEAR_SAMPLINGMODE, this._scene.getEngine());
                this._horizontalBlurPostprocess.onApplyObservable.add(effect => {
                    effect.setFloat2("screenSize", blurTextureWidth, blurTextureHeight);
                });

                this._verticalBlurPostprocess = new GlowBlurPostProcess("HighlightLayerVBP", new Vector2(0, 1.0), this._options.blurVerticalSize, 1,
                    null, Texture.BILINEAR_SAMPLINGMODE, this._scene.getEngine());
                this._verticalBlurPostprocess.onApplyObservable.add(effect => {
                    effect.setFloat2("screenSize", blurTextureWidth, blurTextureHeight);
                });
            }
            else {
                this._horizontalBlurPostprocess = new BlurPostProcess("HighlightLayerHBP", new Vector2(1.0, 0), this._options.blurHorizontalSize, 1,
                    null, Texture.BILINEAR_SAMPLINGMODE, this._scene.getEngine());
                this._horizontalBlurPostprocess.onApplyObservable.add(effect => {
                    effect.setFloat2("screenSize", blurTextureWidth, blurTextureHeight);
                });

                this._verticalBlurPostprocess = new BlurPostProcess("HighlightLayerVBP", new Vector2(0, 1.0), this._options.blurVerticalSize, 1,
                    null, Texture.BILINEAR_SAMPLINGMODE, this._scene.getEngine());
                this._verticalBlurPostprocess.onApplyObservable.add(effect => {
                    effect.setFloat2("screenSize", blurTextureWidth, blurTextureHeight);
                });
            }

            this._mainTexture.onAfterUnbindObservable.add(() => {
                this.onBeforeBlurObservable.notifyObservers(this);

                let internalTexture = this._blurTexture.getInternalTexture();

                if (internalTexture) {
                    this._scene.postProcessManager.directRender(
                        [this._downSamplePostprocess, this._horizontalBlurPostprocess, this._verticalBlurPostprocess],
                        internalTexture, true);
                }

                this.onAfterBlurObservable.notifyObservers(this);
            });

            // Custom render function
            var renderSubMesh = (subMesh: SubMesh): void => {
                if (!this._meshes) {
                    return;
                }

                var material = subMesh.getMaterial();
                var mesh = subMesh.getRenderingMesh();
                var scene = this._scene;
                var engine = scene.getEngine();

                if (!material) {
                    return;
                }

                // Do not block in blend mode.
                if (material.needAlphaBlendingForMesh(mesh)) {
                    return;
                }

                // Culling
                engine.setState(material.backFaceCulling);

                // Managing instances
                var batch = mesh._getInstancesRenderList(subMesh._id);
                if (batch.mustReturn) {
                    return;
                }

                // Excluded Mesh
                if (this._excludedMeshes && this._excludedMeshes[mesh.uniqueId]) {
                    return;
                };

                var hardwareInstancedRendering = (engine.getCaps().instancedArrays) && (batch.visibleInstances[subMesh._id] !== null) && (batch.visibleInstances[subMesh._id] !== undefined);

                var highlightLayerMesh = this._meshes[mesh.uniqueId];
                var emissiveTexture: Nullable<Texture> = null;
                if (highlightLayerMesh && highlightLayerMesh.glowEmissiveOnly && material) {
                    emissiveTexture = (<any>material).emissiveTexture;
                }

                if (this._isReady(subMesh, hardwareInstancedRendering, emissiveTexture)) {
                    engine.enableEffect(this._glowMapGenerationEffect);
                    mesh._bind(subMesh, this._glowMapGenerationEffect, Material.TriangleFillMode);

                    this._glowMapGenerationEffect.setMatrix("viewProjection", scene.getTransformMatrix());
                    if (highlightLayerMesh) {
                        this._glowMapGenerationEffect.setFloat4("color",
                            highlightLayerMesh.color.r,
                            highlightLayerMesh.color.g,
                            highlightLayerMesh.color.b,
                            1.0);
                    }
                    else {
                        this._glowMapGenerationEffect.setFloat4("color",
                            HighlightLayer.neutralColor.r,
                            HighlightLayer.neutralColor.g,
                            HighlightLayer.neutralColor.b,
                            HighlightLayer.neutralColor.a);
                    }

                    // Alpha test
                    if (material && material.needAlphaTesting()) {
                        var alphaTexture = material.getAlphaTestTexture();
                        if (alphaTexture) {
                            this._glowMapGenerationEffect.setTexture("diffuseSampler", alphaTexture);
                            let textureMatrix = alphaTexture.getTextureMatrix();

                            if (textureMatrix) {
                                this._glowMapGenerationEffect.setMatrix("diffuseMatrix", textureMatrix);
                            }
                        }
                    }

                    // Glow emissive only
                    if (emissiveTexture) {
                        this._glowMapGenerationEffect.setTexture("emissiveSampler", emissiveTexture);
                        this._glowMapGenerationEffect.setMatrix("emissiveMatrix", emissiveTexture.getTextureMatrix());
                    }

                    // Bones
                    if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {
                        this._glowMapGenerationEffect.setMatrices("mBones", mesh.skeleton.getTransformMatrices(mesh));
                    }

                    // Draw
                    mesh._processRendering(subMesh, this._glowMapGenerationEffect, Material.TriangleFillMode, batch, hardwareInstancedRendering,
                        (isInstance, world) => this._glowMapGenerationEffect.setMatrix("world", world));
                } else {
                    // Need to reset refresh rate of the shadowMap
                    this._mainTexture.resetRefreshCounter();
                }
            };

            this._mainTexture.customRenderFunction = (opaqueSubMeshes: SmartArray<SubMesh>, alphaTestSubMeshes: SmartArray<SubMesh>, transparentSubMeshes: SmartArray<SubMesh>, depthOnlySubMeshes: SmartArray<SubMesh>): void => {
                this.onBeforeRenderMainTextureObservable.notifyObservers(this);

                var index: number;

                let engine = this._scene.getEngine();

                if (depthOnlySubMeshes.length) {
                    engine.setColorWrite(false);
                    for (index = 0; index < depthOnlySubMeshes.length; index++) {
                        renderSubMesh(depthOnlySubMeshes.data[index]);
                    }
                    engine.setColorWrite(true);
                }

                for (index = 0; index < opaqueSubMeshes.length; index++) {
                    renderSubMesh(opaqueSubMeshes.data[index]);
                }

                for (index = 0; index < alphaTestSubMeshes.length; index++) {
                    renderSubMesh(alphaTestSubMeshes.data[index]);
                }

                for (index = 0; index < transparentSubMeshes.length; index++) {
                    renderSubMesh(transparentSubMeshes.data[index]);
                }
            };

            this._mainTexture.onClearObservable.add((engine: Engine) => {
                engine.clear(HighlightLayer.neutralColor, true, true, true);
            });
        }

        /**
         * Checks for the readiness of the element composing the layer.
         * @param subMesh the mesh to check for
         * @param useInstances specify wether or not to use instances to render the mesh
         * @param emissiveTexture the associated emissive texture used to generate the glow
         * @return true if ready otherwise, false
         */
        public isReady(subMesh: SubMesh, useInstances: boolean): boolean {
            let material = subMesh.getMaterial();
            let mesh = subMesh.getRenderingMesh();

            if (!material || !mesh || !this._meshes) {
                return false;
            }

            let emissiveTexture: Nullable<Texture> = null;
            let highlightLayerMesh = this._meshes[mesh.uniqueId];

            if (highlightLayerMesh && highlightLayerMesh.glowEmissiveOnly && material) {
                emissiveTexture = (<any>material).emissiveTexture;
            }
            return this._isReady(subMesh, useInstances, emissiveTexture);
        }

        /**
         * Checks for the readiness of the element composing the layer.
         * @param subMesh the mesh to check for
         * @param useInstances specify wether or not to use instances to render the mesh
         * @param emissiveTexture the associated emissive texture used to generate the glow
         * @return true if ready otherwise, false
         */
        private _isReady(subMesh: SubMesh, useInstances: boolean, emissiveTexture: Nullable<Texture>): boolean {
            let material = subMesh.getMaterial();

            if (!material) {
                return false;
            }

            if (!material.isReady(subMesh.getMesh(), useInstances)) {
                return false;
            }

            var defines = [];

            var attribs = [VertexBuffer.PositionKind];

            var mesh = subMesh.getMesh();
            var uv1 = false;
            var uv2 = false;

            // Alpha test
            if (material && material.needAlphaTesting()) {
                var alphaTexture = material.getAlphaTestTexture();
                if (alphaTexture) {
                    defines.push("#define ALPHATEST");
                    if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind) &&
                        alphaTexture.coordinatesIndex === 1) {
                        defines.push("#define DIFFUSEUV2");
                        uv2 = true;
                    }
                    else if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {
                        defines.push("#define DIFFUSEUV1");
                        uv1 = true;
                    }
                }
            }

            // Emissive
            if (emissiveTexture) {
                defines.push("#define EMISSIVE");
                if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind) &&
                    emissiveTexture.coordinatesIndex === 1) {
                    defines.push("#define EMISSIVEUV2");
                    uv2 = true;
                }
                else if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {
                    defines.push("#define EMISSIVEUV1");
                    uv1 = true;
                }
            }

            if (uv1) {
                attribs.push(VertexBuffer.UVKind);
                defines.push("#define UV1");
            }
            if (uv2) {
                attribs.push(VertexBuffer.UV2Kind);
                defines.push("#define UV2");
            }

            // Bones
            if (mesh.useBones && mesh.computeBonesUsingShaders) {
                attribs.push(VertexBuffer.MatricesIndicesKind);
                attribs.push(VertexBuffer.MatricesWeightsKind);
                if (mesh.numBoneInfluencers > 4) {
                    attribs.push(VertexBuffer.MatricesIndicesExtraKind);
                    attribs.push(VertexBuffer.MatricesWeightsExtraKind);
                }
                defines.push("#define NUM_BONE_INFLUENCERS " + mesh.numBoneInfluencers);
                defines.push("#define BonesPerMesh " + (mesh.skeleton ? (mesh.skeleton.bones.length + 1) : 0));
            } else {
                defines.push("#define NUM_BONE_INFLUENCERS 0");
            }

            // Instances
            if (useInstances) {
                defines.push("#define INSTANCES");
                attribs.push("world0");
                attribs.push("world1");
                attribs.push("world2");
                attribs.push("world3");
            }

            // Get correct effect
            var join = defines.join("\n");
            if (this._cachedDefines !== join) {
                this._cachedDefines = join;
                this._glowMapGenerationEffect = this._scene.getEngine().createEffect("glowMapGeneration",
                    attribs,
                    ["world", "mBones", "viewProjection", "diffuseMatrix", "color", "emissiveMatrix"],
                    ["diffuseSampler", "emissiveSampler"], join);
            }

            return this._glowMapGenerationEffect.isReady();
        }

        /**
         * Renders the glowing part of the scene by blending the blurred glowing meshes on top of the rendered scene.
         */
        public render(): void {
            var currentEffect = this._glowMapMergeEffect;

            // Check
            if (!currentEffect.isReady() || !this._blurTexture.isReady())
                return;

            var engine = this._scene.getEngine();

            this.onBeforeComposeObservable.notifyObservers(this);

            // Render
            engine.enableEffect(currentEffect);
            engine.setState(false);

            // Cache
            var previousStencilBuffer = engine.getStencilBuffer();
            var previousStencilFunction = engine.getStencilFunction();
            var previousStencilMask = engine.getStencilMask();
            var previousStencilOperationPass = engine.getStencilOperationPass();
            var previousStencilOperationFail = engine.getStencilOperationFail();
            var previousStencilOperationDepthFail = engine.getStencilOperationDepthFail();
            var previousAlphaMode = engine.getAlphaMode();

            // Texture
            currentEffect.setTexture("textureSampler", this._blurTexture);

            // VBOs
            engine.bindBuffers(this._vertexBuffers, this._indexBuffer, currentEffect);

            // Stencil operations
            engine.setStencilOperationPass(Engine.REPLACE);
            engine.setStencilOperationFail(Engine.KEEP);
            engine.setStencilOperationDepthFail(Engine.KEEP);

            // Draw order
            engine.setAlphaMode(this._options.alphaBlendingMode);
            engine.setStencilMask(0x00);
            engine.setStencilBuffer(true);
            engine.setStencilFunctionReference(this._instanceGlowingMeshStencilReference);

            if (this.outerGlow) {
                currentEffect.setFloat("offset", 0);
                engine.setStencilFunction(Engine.NOTEQUAL);
                engine.drawElementsType(Material.TriangleFillMode, 0, 6);
            }
            if (this.innerGlow) {
                currentEffect.setFloat("offset", 1);
                engine.setStencilFunction(Engine.EQUAL);
                engine.drawElementsType(Material.TriangleFillMode, 0, 6);
            }

            // Restore Cache
            engine.setStencilFunction(previousStencilFunction);
            engine.setStencilMask(previousStencilMask);
            engine.setAlphaMode(previousAlphaMode);
            engine.setStencilBuffer(previousStencilBuffer);
            engine.setStencilOperationPass(previousStencilOperationPass);
            engine.setStencilOperationFail(previousStencilOperationFail);
            engine.setStencilOperationDepthFail(previousStencilOperationDepthFail);

            (<any>engine)._stencilState.reset();

            this.onAfterComposeObservable.notifyObservers(this);

            // Handle size changes.
            var size = this._mainTexture.getSize();
            this.setMainTextureSize();
            if (size.width !== this._mainTextureDesiredSize.width || size.height !== this._mainTextureDesiredSize.height) {
                // Recreate RTT and post processes on size change.
                this.onSizeChangedObservable.notifyObservers(this);
                this.disposeTextureAndPostProcesses();
                this.createTextureAndPostProcesses();
            }
        }

        /**
         * Add a mesh in the exclusion list to prevent it to impact or being impacted by the highlight layer.
         * @param mesh The mesh to exclude from the highlight layer
         */
        public addExcludedMesh(mesh: Mesh) {
            if (!this._excludedMeshes) {
                return;
            }

            var meshExcluded = this._excludedMeshes[mesh.uniqueId];
            if (!meshExcluded) {
                this._excludedMeshes[mesh.uniqueId] = {
                    mesh: mesh,
                    beforeRender: mesh.onBeforeRenderObservable.add((mesh: Mesh) => {
                        mesh.getEngine().setStencilBuffer(false);
                    }),
                    afterRender: mesh.onAfterRenderObservable.add((mesh: Mesh) => {
                        mesh.getEngine().setStencilBuffer(true);
                    }),
                }
            }
        }

        /**
          * Remove a mesh from the exclusion list to let it impact or being impacted by the highlight layer.
          * @param mesh The mesh to highlight
          */
        public removeExcludedMesh(mesh: Mesh) {
            if (!this._excludedMeshes) {
                return;
            }

            var meshExcluded = this._excludedMeshes[mesh.uniqueId];
            if (meshExcluded) {
                if (meshExcluded.beforeRender) {
                    mesh.onBeforeRenderObservable.remove(meshExcluded.beforeRender);
                }

                if (meshExcluded.afterRender) {
                    mesh.onAfterRenderObservable.remove(meshExcluded.afterRender);
                }
            }

            this._excludedMeshes[mesh.uniqueId] = null;
        }

        /**
         * Determine if a given mesh will be highlighted by the current HighlightLayer
         * @param mesh mesh to test
         * @returns true if the mesh will be highlighted by the current HighlightLayer
         */
        public hasMesh(mesh: AbstractMesh): boolean {
            if (!this._meshes) {
                return false;
            }

            return this._meshes[mesh.uniqueId] !== undefined && this._meshes[mesh.uniqueId] !== null;
        }

        /**
         * Add a mesh in the highlight layer in order to make it glow with the chosen color.
         * @param mesh The mesh to highlight
         * @param color The color of the highlight
         * @param glowEmissiveOnly Extract the glow from the emissive texture
         */
        public addMesh(mesh: Mesh, color: Color3, glowEmissiveOnly = false) {
            if (!this._meshes) {
                return;
            }

            var meshHighlight = this._meshes[mesh.uniqueId];
            if (meshHighlight) {
                meshHighlight.color = color;
            }
            else {
                this._meshes[mesh.uniqueId] = {
                    mesh: mesh,
                    color: color,
                    // Lambda required for capture due to Observable this context
                    observerHighlight: mesh.onBeforeRenderObservable.add((mesh: Mesh) => {
                        if (this._excludedMeshes && this._excludedMeshes[mesh.uniqueId]) {
                            this.defaultStencilReference(mesh);
                        }
                        else {
                            mesh.getScene().getEngine().setStencilFunctionReference(this._instanceGlowingMeshStencilReference);
                        }
                    }),
                    observerDefault: mesh.onAfterRenderObservable.add(this.defaultStencilReference),
                    glowEmissiveOnly: glowEmissiveOnly
                };
            }

            this._shouldRender = true;
        }

        /**
         * Remove a mesh from the highlight layer in order to make it stop glowing.
         * @param mesh The mesh to highlight
         */
        public removeMesh(mesh: Mesh) {
            if (!this._meshes) {
                return;
            }

            var meshHighlight = this._meshes[mesh.uniqueId];
            if (meshHighlight) {

                if (meshHighlight.observerHighlight) {
                    mesh.onBeforeRenderObservable.remove(meshHighlight.observerHighlight);
                }

                if (meshHighlight.observerDefault) {
                    mesh.onAfterRenderObservable.remove(meshHighlight.observerDefault);
                }
                delete this._meshes[mesh.uniqueId];
            }

            this._shouldRender = false;
            for (var meshHighlightToCheck in this._meshes) {
                if (this._meshes[meshHighlightToCheck]) {
                    this._shouldRender = true;
                    break;
                }
            }
        }

        /**
         * Returns true if the layer contains information to display, otherwise false.
         */
        public shouldRender(): boolean {
            return this.isEnabled && this._shouldRender;
        }

        /**
         * Sets the main texture desired size which is the closest power of two
         * of the engine canvas size.
         */
        private setMainTextureSize(): void {
            if (this._options.mainTextureFixedSize) {
                this._mainTextureDesiredSize.width = this._options.mainTextureFixedSize;
                this._mainTextureDesiredSize.height = this._options.mainTextureFixedSize;
            }
            else {
                this._mainTextureDesiredSize.width = this._engine.getRenderWidth() * this._options.mainTextureRatio;
                this._mainTextureDesiredSize.height = this._engine.getRenderHeight() * this._options.mainTextureRatio;

                this._mainTextureDesiredSize.width = this._engine.needPOTTextures ? Tools.GetExponentOfTwo(this._mainTextureDesiredSize.width, this._maxSize) : this._mainTextureDesiredSize.width;
                this._mainTextureDesiredSize.height = this._engine.needPOTTextures ? Tools.GetExponentOfTwo(this._mainTextureDesiredSize.height, this._maxSize) : this._mainTextureDesiredSize.height;
            }
        }

        /**
         * Force the stencil to the normal expected value for none glowing parts
         */
        private defaultStencilReference(mesh: Mesh) {
            mesh.getScene().getEngine().setStencilFunctionReference(HighlightLayer.normalMeshStencilReference);
        }

        /**
         * Dispose only the render target textures and post process.
         */
        private disposeTextureAndPostProcesses(): void {
            this._blurTexture.dispose();
            this._mainTexture.dispose();

            this._downSamplePostprocess.dispose();
            this._horizontalBlurPostprocess.dispose();
            this._verticalBlurPostprocess.dispose();
        }

        /**
         * Dispose the highlight layer and free resources.
         */
        public dispose(): void {
            var vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];
            if (vertexBuffer) {
                vertexBuffer.dispose();
                this._vertexBuffers[VertexBuffer.PositionKind] = null;
            }

            if (this._indexBuffer) {
                this._scene.getEngine()._releaseBuffer(this._indexBuffer);
                this._indexBuffer = null;
            }

            // Clean textures and post processes
            this.disposeTextureAndPostProcesses();

            if (this._meshes) {
                // Clean mesh references
                for (let id in this._meshes) {
                    let meshHighlight = this._meshes[id];
                    if (meshHighlight && meshHighlight.mesh) {

                        if (meshHighlight.observerHighlight) {
                            meshHighlight.mesh.onBeforeRenderObservable.remove(meshHighlight.observerHighlight);
                        }

                        if (meshHighlight.observerDefault) {
                            meshHighlight.mesh.onAfterRenderObservable.remove(meshHighlight.observerDefault);
                        }
                    }
                }
                this._meshes = null;
            }

            if (this._excludedMeshes) {
                for (let id in this._excludedMeshes) {
                    let meshHighlight = this._excludedMeshes[id];
                    if (meshHighlight) {

                        if (meshHighlight.beforeRender) {
                            meshHighlight.mesh.onBeforeRenderObservable.remove(meshHighlight.beforeRender);
                        }

                        if (meshHighlight.afterRender) {
                            meshHighlight.mesh.onAfterRenderObservable.remove(meshHighlight.afterRender);
                        }
                    }
                }
                this._excludedMeshes = null;
            }

            // Remove from scene
            var index = this._scene.highlightLayers.indexOf(this, 0);
            if (index > -1) {
                this._scene.highlightLayers.splice(index, 1);
            }

            // Callback
            this.onDisposeObservable.notifyObservers(this);

            this.onDisposeObservable.clear();
            this.onBeforeRenderMainTextureObservable.clear();
            this.onBeforeBlurObservable.clear();
            this.onBeforeComposeObservable.clear();
            this.onAfterComposeObservable.clear();
            this.onSizeChangedObservable.clear();
        }
    }
}

redpajama_set_name: RedPajamaGithub


Two public drop-in roadshows for the draft coastal strategy for the West Wight, are due to be held this month (20 and 24 May).
The roadshows are part of the current three month public consultation on a draft coastal strategy for the West Wight shoreline.
The coastline covered in the strategy includes the towns of Yarmouth, Cowes, East Cowes, Freshwater, Totland, Colwell, as well as Newport Harbour, and surrounding areas.
The public consultation opened on 31 March and will run to 30 June 2016 and is an opportunity for people to learn about the proposals that have been put forward to manage future coastal flood and erosion risks to the West Wight shoreline.
Executive member for environment and local engagement, councillor Paul Fuller said: "We are keen to hear the views of the public about this proposal which forms part of our commitment to ensuring that the Island is a better and safer place.
The drop-in roadshows have been arranged to explain the preferred approaches needed to reduce or adapt to future coastal risks and so that the public can ask questions and make comments that will be recorded and used to inform the strategy.
• Friday 20 May, 2pm to 7pm, Yarmouth (Community Hall of Yarmouth and District, St James Street, Yarmouth, Isle of Wight, PO41 ONU).
You can download a copy of the strategy and a summary report from the council's website - https://www.iwight.com/consultations/ and there is also an online questionnaire for you to submit your comments.
Alternatively please email: coast@iow.gov.uk or contact the Council, tel: (01983) 821000.
The public consultation on the West Wight coastal strategy ends on 30 June 2016.


A treasured keepsake, this Memorial Locket holds a set of angel wings to help keep your loved one close. Created from beautiful sterling silver, the front of the locket is engraved with a set of angel wings and the reverse can be personalised with a message. There is space inside the locket for you to add two photographs. Your finished piece of Jewellery will come beautifully presented in a Hand on Heart Jewellery Box and delivered to your door.


text:
Posted inHealth Insurance, Medicare, NC Health Briefs
Fact/Fiction: Raising the Medicare Eligibility Age Would Save the Program Money
by Rose Hoban February 11, 2013 October 19, 2021
Playing Whack-a-mole Photo courtesy Emil Ovemar, Flickr Creative Commons
by Donald Sjoerdsma / The Medicare Newsgroup
The Sound Bite:
Deficit hawks have long argued that raising the Medicare eligibility age is a good way to reduce entitlement spending. It has routinely been part of Republican, and sometimes bipartisan, proposals to reform the program.
Playing Whack-a-mole. Photo courtesy Emil Ovemar, Flickr Creative Commons
Rep. Paul Ryan's (R-Wis.) fiscal year 2013 budget proposal would raise the eligibility age from 65 to 67 years by two months a year starting in 2022, until it reaches 67 in 2033; and the bipartisan Burr-Coburn deficit reduction plan would gradually raise the age to 67 by 2027.
The federal government would spend less on the Medicare program because costs primarily would be shifted to individuals, employers and state government programs. They would, collectively, pay more for health care services than Medicare would pay to cover the same group of people.
Federal spending would be reduced by a net $5.7 billion if the eligibility age increase were fully implemented by 2014, according to a Kaiser Family Foundation report last updated July 2011. The Congressional Budget Office estimated that raising the eligibility age by two months per year starting in 2014 until it hits 67 in 2027—which is closer to plans that have been put forward in Congress—would save the federal government about $148 billion from 2012 to 2021. By 2035, Medicare spending would be 5 percent lower annually that it would without such measures.
That said, if the Medicare eligibility age is raised by two years, 65- and 66-year-olds will either have to find insurance from another source or go without it.
Forty-two percent would get insurance coverage through their employers, 38 percent would purchase private insurance in a state exchange and 20 percent would be covered under Medicaid, Kaiser estimated.
This will become more complicated depending on the number of states that opt out of the Medicaid expansion, which, set to go into effect in January 2014, extends Medicaid coverage to anyone with income up to 133 percent of the Federal Poverty Line (FPL), up from 100 percent of FPL. If no additional states opt in to the expansion, The Center for American Progress estimated that 435,000 seniors would be at risk of going without insurance. That number will decrease if additional states opt into the Medicaid expansion.
This cost-cutting tactic would also increase out-of-pocket health care expenses for the majority of people ages 65 and 66. Two-thirds would pay more in cost-sharing and premiums, on average, than they would have paid under Medicare. The other one-third would actually have lower out-of-pocket costs than they would otherwise because of subsidies made available to low-income populations through Medicaid and the state exchanges.
For enrollees that remain in the program in 2014, Medicare Medical Insurance (Part B) premiums would rise by an aggregate $2.2 billion. Employers and states would take a hit as well. Employer spending on health care would rise by $4.5 billion and costs to states by $0.7 billion.
by Rose Hoban, North Carolina Health News

Fact/Fiction: Raising the Medicare Eligibility Age Would Save the Program Money

by Rose Hoban, North Carolina Health News
February 11, 2013

by Donald Sjoerdsma / The Medicare Newsgroup

The Sound Bite:

Deficit hawks have long argued that raising the Medicare eligibility age is a good way to reduce entitlement spending. It has routinely been part of Republican, and sometimes bipartisan, proposals to reform the program.

Playing Whack-a-mole. Photo courtesy Emil Ovemar, Flickr Creative Commons

Rep. Paul Ryan's (R-Wis.) fiscal year 2013 budget proposal would raise the eligibility age from 65 to 67 years by two months a year starting in 2022, until it reaches 67 in 2033; and the bipartisan Burr-Coburn deficit reduction plan would gradually raise the age to 67 by 2027.

The Facts:

The federal government would spend less on the Medicare program because costs primarily would be shifted to individuals, employers and state government programs. They would, collectively, pay more for health care services than Medicare would pay to cover the same group of people.

Federal spending would be reduced by a net $5.7 billion if the eligibility age increase were fully implemented by 2014, according to a Kaiser Family Foundation report last updated July 2011. The Congressional Budget Office estimated that raising the eligibility age by two months per year starting in 2014 until it hits 67 in 2027—which is closer to plans that have been put forward in Congress—would save the federal government about $148 billion from 2012 to 2021. By 2035, Medicare spending would be 5 percent lower annually that it would without such measures.

That said, if the Medicare eligibility age is raised by two years, 65- and 66-year-olds will either have to find insurance from another source or go without it.

Forty-two percent would get insurance coverage through their employers, 38 percent would purchase private insurance in a state exchange and 20 percent would be covered under Medicaid, Kaiser estimated.

This will become more complicated depending on the number of states that opt out of the Medicaid expansion, which, set to go into effect in January 2014, extends Medicaid coverage to anyone with income up to 133 percent of the Federal Poverty Line (FPL), up from 100 percent of FPL. If no additional states opt in to the expansion, The Center for American Progress estimated that 435,000 seniors would be at risk of going without insurance. That number will decrease if additional states opt into the Medicaid expansion.

This cost-cutting tactic would also increase out-of-pocket health care expenses for the majority of people ages 65 and 66. Two-thirds would pay more in cost-sharing and premiums, on average, than they would have paid under Medicare. The other one-third would actually have lower out-of-pocket costs than they would otherwise because of subsidies made available to low-income populations through Medicaid and the state exchanges.

For enrollees that remain in the program in 2014, Medicare Medical Insurance (Part B) premiums would rise by an aggregate $2.2 billion. Employers and states would take a hit as well. Employer spending on health care would rise by $4.5 billion and costs to states by $0.7 billion.

This article first appeared on North Carolina Health News and is republished here under a Creative Commons license.
Tagged: congressional budget office, Medicaid expansion
Rose Hoban
Rose Hoban is the founder and editor of NC Health News, as well as being the state government reporter. Hoban has been a registered nurse since 1992, but transitioned to journalism after earning degrees... More by Rose Hoban
Previous NC Scientists, Researchers Concerned about Scientific Integrity in State Policies
Next Harm Reduction Advocates Petition Lawmakers at General Assembly

redpajama_set_name: RedPajamaCommonCrawl


Bad enough that "winter" in southern California discourages most sunny weather cyclists, how could one possibly manage winter in a northern city, let alone such places as Canada, and (shudder) Alaska?
Well, guess what folks; Winter Cycling is not only practical but growing in popularity, a great deal of fun as well.
After a couple of years of cycling all winter, I stumbled onto the fact that there were a few other folks doing the same thing when I read a post in a news group that someone had started a winter cycling mailing list called "ICEBIKE". The term was actually invented by the list manager (Joe Clark of Montreal Canada), and it came to signify all things about Winter Cycling. I've been doing it for 6 years now and each year I find myself looking forward to winter and the winter cycling opportunity. Did I mention I live in Alaska?
Expect to be treated better by motorists in winter than in summer. If motorists don't see that painted bike lane they give you wider clearance than if they do see it, even if you ride in the same position. Motorists also seldom honk at you in winter. . . .
Expect to find winter cycling far more enjoyable than you ever imagined. Expect to find yourself sneaking out of work on your lunch break to take a ride on a sunny winter day.
» Next story: Is bicycling safe?


text:
Michael C. Riley Elementary School and Early Childhood Center » ABOUT US » History
Our school was named after Michael Christopher Riley (1873-1966), the only son of Jack and Louise Riley and a native Blufftonian.
He received his high school education at Beach High School in Savannah, Georgia. Mr. Riley graduated from Georgia State Industrial College, now Savannah State University.
He owned and operated a restaurant and general store, and was instrumental in organizing the Wage Earner's Bank of Savannah. Mr. Riley was a Sunday school superintendent, deacon and choir member of First Zion Baptist Church. He was the first black to be appointed as trustee to the Beaufort County Board of Education, District #2.
He was married to Daisy McDowell of Charleston, South Carolina, and together they raised six children. Because of his untiring efforts to have a school built, and putting the school term on a nine-month basis; a high school was named in his honor.
The present Michael C. Riley Elementary School was built in 1991, with the Early Childhood Center following in 2009.


text:
Q: Tips on how to make nicer outprints and avoid weird unintended indentation I'm currently practicing how to use the zip() function to do clean print outs etc.
It works kind of good, but still, I'm getting these weird unintended indentations in my out-prints.
My code goes like this:
data_list1 = [[7.2, 8.1, 8.9, 11.6, 7.7, 8.7, 6.9], [5.4, 8.8, 8.9, 3.7, 3.3, 5.2, 9.6], [10.8, 5.0, 5.4, 9.5, 5.3, 5.8, 2.3], [4.1, 6.6, 8.2, 6.1, 8.9, 6.6, 4.1], [2.8, 2.1, 4.1]]
data_list2 = [[9.8, 11.6, 11.5, 13.3, 12.6, 10.3, 7.5], [9.3, 10.3, 10.3, 8.4, 8.8, 5.0, 5.8], [6.8, 2.3, 3.5, 7.9, 11.8, 10.7, 9.0], [5.8, 6.8, 11.7, 10.6, 11.7, 13.1, 13.6], [8.0, 3.5, 3.2]]

def clean_up(list1, list2):

    data_list1 = []
    for i in list1:
        for j in i:
            data_list1.append(j)

    data_list2 = []
    for i in list2:
        for j in i:
            data_list2.append(j)

    for data_list1, data_list2 in zip(data_list1, data_list2):
        print(f"{data_list1}\t\t\t{data_list2}")

print(clean_up(data_list1,data_list2))

And my out-print is:
7.2         9.8
8.1         11.6
8.9         11.5
11.6            13.3
7.7         12.6
8.7         10.3
6.9         7.5
5.4         9.3
8.8         10.3
8.9         10.3
3.7         8.4
3.3         8.8
5.2         5.0
9.6         5.8
10.8            6.8
5.0         2.3
5.4         3.5
9.5         7.9
5.3         11.8
5.8         10.7
2.3         9.0
4.1         5.8
6.6         6.8
8.2         11.7
6.1         10.6
8.9         11.7
6.6         13.1
4.1         13.6
2.8         8.0
2.1         3.5
4.1         3.2

As you might see, there are a few spots where the out-print look's kind of strange.
My two questions are:

*

*Is there anyone who has some tips on how to fix this?

*If so, would this technique also make a similar look if I write the data onto a file as well?

All help is welcomed.

A: To avoid the occasional misalignment when using tab separators, all of the values in each column should be the same length.  Otherwise you'll sometimes need more (or fewer) tabs to keep things aligned depending on the printed width of each value.  With constant width values, you won't actually need tab separators but it might still be required if you are writing the data to a file and want to extract it back later.
Here's a function that will return the adjusted lines to print or save a 2D matrix.  Because you want the output to be formatted with all values aligned, you'll need to combine the sublists into a single 2D matrix in order to take all value widths into acount.
def matrixLines(M,sep="\t"):
     widths = [max(map(len,map(str,col))) for col in zip(*M)]  # column widths
     return [sep.join(f"{v:<{w}}" for v,w in zip(line,widths)) # format & join
             for line in M]

Setup:
# combine into a single 2D matrix:
M = [[*ln] for dl in zip(data_list1,data_list2) for ln in zip(*dl)]

Output:
print(*matrixLines(M),sep="\n")
7.2   9.8
8.1   11.6
8.9   11.5
11.6  13.3
7.7   12.6
8.7   10.3
6.9   7.5
5.4   9.3
8.8   10.3
8.9   10.3
3.7   8.4
3.3   8.8
5.2   5.0
9.6   5.8
10.8  6.8
5.0   2.3
5.4   3.5
9.5   7.9
5.3   11.8
5.8   10.7
2.3   9.0
4.1   5.8
6.6   6.8
8.2   11.7
6.1   10.6
8.9   11.7
6.6   13.1
4.1   13.6
2.8   8.0
2.1   3.5
4.1   3.2

Note that the matrixLines function is not limited to two columns. It will work for any rectangular matrix (list of lists):
print(*matrixLines(data_list1[:4]),sep="\n")

7.2   8.1  8.9  11.6  7.7  8.7  6.9
5.4   8.8  8.9  3.7   3.3  5.2  9.6
10.8  5.0  5.4  9.5   5.3  5.8  2.3
4.1   6.6  8.2  6.1   8.9  6.6  4.1

A: If someone in the future might have the same question, I solved the problem by replacing the \t\t\t (new-tab) with print(f"{data_list1:<10}{data_list2}")

redpajama_set_name: RedPajamaStackExchange


Fun workplace activities for your group are a great way to improve communication, break down barriers, and build strong teams. Regardless of your goals, we have a wide range of activities that can be a great fit for your team. We design and deliver fun activities for companies like yours in Vancouver. The feedback that we receive from our customers shows how we can help you succeed.
Call us today at 604-334-5190 or 1-877-565-8735, email us at [email protected], or fill out our simple Contact Us form below. Our team of event solutions experts are ready to help and will get back to you ASAP. We will work with your specific needs and recommend the perfect workplace activity to ensure your team has fun at your event.


It is our goal to save you money and provide complete satisfaction with every Epson 9000 cartridge. In the long run your Epson 9000 will consume all of your printer ink, and when it happens you'll find that replacing Epson 9000 ink is generally pricey. However, you do not need to get stressed about shelling out the steep fees you'll uncover on the high street because here at Cartridge Save you can buy all the Epson 9000 cartridges you will ever want at seriously small prices. Spend less money on your ink by shopping with Cartridge Save!
There's little sense in spending so much for the 9000 original cartridge or 9000 compatible ink in the main street when it's easy to save some cash ordering online with Cartridge Save. Get utter confidence when you buy your Stylus Pro 9000 ink cartridges from us because every single one is protected by a no quibbles money back guarantee. Take into consideration that every purchase also has free delivery, typically arriving with you on the next working day!
This large format device is integrated with innovative colour inkjet printing technologies from Epson, so users can expect crisp, sharp output completed at reasonably fast speeds. Though it boasts a range of additional features to make it more efficient and user-friendly, the Epson Stylus Pro 9000 wide-format colour printer still lacks a few important aspects, which could greatly affect overall reliability and versatility in handling more complicated jobs.
The Epson Stylus Pro 9000 inkjet printer is quite bulky, with a 66.5-inch wide body that's 27.6 inches deep and 48.6 inches tall with the stand. It is quite heavy at approximately 96Kg, and users are provided with two types of interfaces: parallel and serial. The Epson 9000 Stylus Pro printer runs on a 200MHz MIPS R5000 processor and it has a 4.2GB hard disk drive for internal storage.
Print speeds are quite fast at up to 64.6 square metres per hour in best mode. The high 1440x720dpi resolution of the Epson Stylus Pro 9000 colour inkjet printer is great for vivid colours and sharper lines. The straight paper path makes the Stylus Pro 9000 printer less prone to paper jam, while the manual load feeder allows for more versatile paper placement. This device supports PostScript 3 and Epson ESC/P 2. Long-lasting Epson Stylus Pro 9000 inkjet cartridges can print approximately 6,400 pages per colour and use Archival Ink Technology for photographic prints that are very durable and last for over 100 years.
The installed RAM of the Epson Stylus Pro 9000 wide-format printer is limited to 128MB. Supported paper types include plain paper, continuous forms, and photo paper. The Epson Stylus Pro 9000 lacks networking features, so workgroups are unable to share it. The expensive price could be a setback among budget-conscious users, while the large frame requires a lot of installation space.


text:
We Should All Support Local Government Autonomy
Voters in Nigeria will go to the polls to choose their president and legislators in about two months. Like past elections, the general election in 2023 will be the most significant democratic event in Africa. There will be more than 90 million voters able to participate in choosing the next president.
For the 2023 election to be representative and democratic, all facets of society must be represented, including the young populace. When young people are excluded from political participation or disenfranchised, a sizable sector of the population has little to no voice or influence in decisions that impact their lives. Young people must participate in formal political processes and have a voice in shaping today's and tomorrow's politics to have an impact over the long run. In addition to being a fundamentally democratic and political right, inclusive political involvement is also essential for creating stable and peaceful societies and for creating policies tailored to the particular requirements of younger generations. Young people must be aware of their rights and provide the information and tools necessary to participate in politics in a meaningful way to be fairly represented in political institutions, processes, and decision-making, particularly during elections.
One cannot avoid the generation gap topic while discussing Nigerian political participation. Will Millennials and "Generation Z" have the same beliefs about the role of politicians in national affairs and the same definitions of the national interest as they join Nigerian politics and the expert community?
One of the main issues that many of these young voters are obsessed with when they enter the political sphere is police violence. The #EndSARS protests made it evident that young people demand more than traditional lip service in response. Many young people are uniting as political forces in the wake of the #EndSARS protests to pass their agenda.
When Ife Olayinka, a 24-year-old accountant at a Nigerian bank, saw the leading candidates for 2023, he understood how crucial it was to get involved in the nation's politics. A burst of annoyance accompanied Olayinka's initial thinking: How could anyone support a member of the previous regimes?
#EndSARS was not the only significant factor that led to a rise in young people's political engagement. People are increasingly being pushed into politics by the state of the nation, including its economics, security, and many other factors. Durobola Michael, 24, is a lead organiser for a nonpartisan group that works to increase voter registration and turnout. He claims he is heavily involved in politics because he is fed up with the current situation and is encouraging people to vote. Many people still believe that their votes do not matter. According to Michael, voting is sometimes viewed as having no effect and being of no assistance. "Nothing's ever going to change; the elected leaders will still do what they want," he heard people say.
Even though they are disengaging from the political process, young people are nevertheless interested in politics and participate in various ways, including online, in youth organisations, demonstrations, and grassroots movements focused on significant concerns. Democracies and governments looking to reacquaint young people with electoral politics may want to consider inclusive tactics and election procedures that will appeal to young people and other voters and make it simpler for them to engage and participate. The demands articulated by young people themselves can serve as the foundation for strategies and initiatives to include them in voting processes.
Undoubtedly, an increase in first-time voter turnout, sparked by public calls for reform, might tip the balance in several crucial races in February 2023.


Farmhouse Style Coffee Table Interior | Tusseymt.com coffee table farmhouse style. farmhouse style coffee table. farmhouse style coffee table plans.
Farmhouse Style Coffee Table Aspiration Chunky Pictures Furniture In 2018 And Also 2. Farmhouse Style Coffee Table Fantasy 42 DIY Ideas For Tables To Make You Say Wow Pertaining 3. Farmhouse Style Coffee Table Invigorate Nifty Thrifty Momma Along With 4. Farmhouse Style Coffee Table Property How To Build And Distress Also 5. Farmhouse Style Coffee Table Really Encourage Farm Etsy In Addition To 6. Farmhouse Style Coffee Table Amazing DIY Chunky Woodworking Plans Handmade Regarding 7. Farmhouse Style Coffee Table Stylish Woodworking In Addition To 8. Farmhouse Style Coffee Table Inviting Rustic Tables Birch Lane Intended For 9. Farmhouse Style Coffee Table Dream Ana White Rustic X DIY Projects Regarding 10. Farmhouse Style Coffee Table The Most Lovemade14 Along With 11. Farmhouse Style Coffee Table The Most DIY Chunky Woodworking Plans Handmade With Regard To 12. Farmhouse Style Coffee Table Inviting Ax In 2018 Tables Intended For 13. Farmhouse Style Coffee Table Inviting Stained Rustic Lovemade14 As Well 14. Farmhouse Style Coffee Table Motivate X Modern Custom Build Etsy For 15. Farmhouse Style Coffee Table Encourage 37 Decorating Ideas To Get Your Living Room In Shape 16. Farmhouse Style Coffee Table Interesting Thrifty And Chic DIY Projects Home Decor 17. Farmhouse Style Coffee Table Dream Cottage Tables Hayneedle Intended For 18. Farmhouse Style Coffee Table Dream Ana White Rustic X DIY Projects With Regard To 19.


By default, CafeTran can display KudoZ terminology and other ProZ.com resources after you select a source term in the current segment and click the Resources button in the Search bar. If you wish the program to submit the whole segment for terms scanning, just right-click the ProZ.com tabbed pane and select "Match exact fragments automatically" option. Then you should see all the found terms both in the ProZ.com pane and the Matchboard to transfer them fast to the current target segment. They are also put into the auto-completion list while typing in the source segment editor.


You can find plenty of Android blackjack options. These are called apps.
But apps aren't the only way to play blackjack from an Android. You can also use some no download blackjack games designed for computers on Android devices as well.
This page features everything you need to get started playing blackjack on your Android device. Most of the information is about phones, but you can also use the same information for your other Android devices (like tablets and notebooks).
The first thing you need to find out if you want to play for real money is if it's legal where you live. We're not lawyers. We don't give legal advice, so you may need to do a little research in your local area to find out more.
As a rule of thumb, if you can access real money blackjack Android apps you can probably play. But this probably won't work as a defense in court.
The first is to visit an Android market, like the Google store, which is where most people think of first.
But the better way to find these apps is by visiting the online casinos where you already play.
The first link is for an instant play or no download game that works on your Android device. The second is for an actual app.
Don't get too hung up on the difference between instant play and apps. As long as it works on your phone, the game play is basically the same.
Most of the apps offering real money Android blackjack also offer other casino games in the same app. Popular games include slot machines and video poker.
If you want to play Android blackjack without using an app you need to find an online casino that offers no download and / or instant play games. This is easy because more online casinos are moving away from download software platforms for their computer users and focusing instead on browser based gaming.
Once you find a solution you like, sign up for an account and use the browser on your phone to sign into the casino.
One issue that some players have when trying to play blackjack this way is the game doesn't fit their screen correctly. Sometimes the buttons needed to play are in a position that doesn't show on a mobile screen.
But most Android devices allow you to adjust the screen size so play around with the settings and size before giving up.
When you play real money blackjack on your Android, you need to be able to make deposits and withdrawals. Different casinos offer different options. The ones you can use also depends on where you live.
Each app has a place listing all the options. You can process money transfers from that same area. Look for the cashier area or the deposit button to get started.
Just like online casinos designed for desktop and laptop computers, most real money blackjack apps offer a bonus on your first deposit. Some offer additional bonuses on future deposits. They offer bonuses to entice you to try their app. They hope you have fun and continue playing.
Each bonus comes with its own set of terms and conditions. Read the terms before you start playing. General requirements include needing to wager a certain amount based on your deposit and the bonus before you can make a withdrawal.
You sign up for a bonus offer of 50% of your deposit that requires a 30 times play through. If you deposit $100, the casino gives you $50 extra to play with.
But it also means you need to make wagers or bets totaling $4,500 before you can make a withdrawal request.
You don't need to make any certain sized bets; you just need to wager the total amount. To wager $4,500 using $5 bets, you need to make 900 bets.
Make $10 bets instead, and you need to make 450 bets.
Some bonuses are deducted from your account before you can cash out. These are called sticky bonuses. In the example above, the casino will take $50 out of your account before processing your withdrawal.
Shop around for bonuses to see what you can get. Don't assume a bigger bonus is better until you read the terms and conditions.
Social blackjack apps are ones you play for free, so they're available to players in most jurisdictions–even if you can't play for real money.
Offered by BlackjackOnline.com, the 21 Blackjack Online Free Vegas app is a free game available in the Google store. The app uses real blackjack table motions. If you want to hit you swipe down, if you want to double down you tap the screen twice, and if you want to stay you, swipe across the screen.
You can play as a guest without signing up for an account, and you can practice your card counting abilities.
If you register using Facebook, you can compete on the blackjack leader board and earn badges as you continue playing.
The My Vegas Blackjack app claims to be the only app that awards loyalty points across a host of exclusive brands just for playing.
You can play single deck games, multi deck games, and even progressive jackpot blackjack games.
One unique feature is the official Shaquille O'Neal blackjack tables.
They also offer a suite of slot machine games.
Offered by Kama Games, the Blackjack 21 Casino app features free chips every time you play, a chat function to visit with other players, a personal profile page, rewards for unlocking certain achievements, and a guest mode feature so you can skip the sign up if you want.
Like many social gaming apps, you can play other games besides blackjack.
They also offer Texas poker and roulette.
Follow them on Facebook, and you'll get special offers.
Offered by Brainium Studios and simply titled Blackjack, this social gaming app is vibrant and easy to use. They offer a unique dealer hint system where you can ask for advice on tough hands.
They don't even have anything you can buy in the app.
Other features include unlimited free chips, unlimited dealer hints, different backgrounds to use, surrender, insurance, and touch actions to adjust your bet size. The same company also offers solitaire games, FreeCell, and other card games.
One thing that mobile casino app providers are good at is making sure as many players as possible can access their games. If you can't play their real money blackjack game on your Android device, they can't make any money.
This means that most apps are designed to work with the newest version of the Android operating system as well as several of the older versions. Each mobile app has their own requirements–so the first thing to do is read their specific needs.
If your device doesn't have the needed software version, contact your service provider to find out how to get the newest update. This may sound complicated, but most users won't have a problem.
And even if you need new software, it's almost always a simple procedure.
If you want to play blackjack on an Android phone and don't have one or are looking to upgrade the one you're using now, here's a list of 12 of the best available. These are listed in alphabetical order because we don't rate phones professionally.
Is it safe to play real money Android blackjack?
This is the first question most players ask. It's important that you find a safe place to play.
If you find a reputable online casino that's licensed and regulated to offer online blackjack, you should be at least as safe as walking into the local casino with cash and playing.
But if you play in an unlicensed mobile casino, you're taking a large risk. Find a mobile app that's offered by a trustworthy casino.
That way you won't need to worry about the safety of your money or your information.
I don't want to dig through a bunch of stuff; I just want to start playing. What do you recommend?
Bet365 is one of the best and safest casino operators that offer real money Android blackjack. If you live where they offer their games, try them.
Can I count cards playing Android blackjack?
It won't do you any good to count cards while playing Android blackjack. The deck is shuffled after each hand by the software running the game. Each hand is from a fresh deck.
You can practice counting cards, but you should do this on one of the free Android blackjack apps.
Are the rules better or worse than playing in a land based casino?
The blackjack rules found on mobile apps are usually better than the ones offered in live casinos.
But this isn't true 100% of the time. It pays to shop around for the best games.
Here's a list of rules that are favorable for the player.
You probably won't be able to find a game with all these rules, but the games that have most of them are better than the ones that don't.
I'm not a very good player, is there anything that can help me play better while I'm learning?
Start by finding a good strategy chart or card. By using the best strategy in combination with favorable rules you can often reduce the house edge to a half percent or less. If you play a game where the casino has a half percent edge, you'll lose on average 50 cents for every $100 you bet.
In the short run, you may win or lose less.
But in the long run, the house edge is consistent.
It's convenient to be able to play blackjack on your Android phone or tablet because you can do it while on the go. Even if you're sitting at home, you can take the phone with you if you need to go into the other room.
Use the advice on this page to find the best blackjack games and apps for you and enjoy a safe experience. Even if you can't play for real money where you live you can still enjoy a quick game of Android blackjack.


text:
IC News
Home / IC News / College Presidents Issue Statement on DACA
Media Contact and About
Messages from Campus Leadership
IC in the Media
About IC Current
Merit Pages for Student Achievement
College Presidents Issue Statement on DACA
By IC News staff, October 10, 2019
Ithaca College signs amicus brief in support of Deferred Action for Childhood Arrivals (DACA) recipients as DACA heads to the Supreme Court.
The future of Deferred Action for Childhood Arrivals (DACA) will be argued at the Supreme Court of the United States on November 12.
(By Rena Schild/Shutterstock)
On October 4, Ithaca College joined 164 colleges and universities from across the country in signing an amicus brief supporting the roughly 700,000 young immigrants who came to the United States as children and who hold Deferred Action for Childhood Arrivals (DACA).
This "friend of the court" brief was coordinated by the Presidents' Alliance on Higher Education and Immigration, of which IC President Shirley M. Collado is a founding member. This group of higher education leaders is dedicated to improving how colleges and universities address immigration-related matters affecting their campuses. The case will go before the Supreme Court on November 12, and the court will decide whether the rescission of DACA was lawful.
Read the brief
Amicus Brief in Support of Deferred Action for Childhood Arrivals Recipients.
"Ithaca College strives to be a private college that serves a public good, and supporting important efforts like this is critical to building and affirming inclusive, equitable learning communities and enriching our society as a whole," said Collado. "I am proud to have joined such a dedicated group of higher education leaders in signing this brief and bringing Ithaca College into the conversation about issues that impact and illuminate our shared humanity."
Equity and inclusion are two key elements of the college's five-year strategic plan, Ithaca Forever. Specifically, the college seeks to be accessible and inclusive for all people, especially those impacted by systemic disadvantage, marginalization, and exclusion, including these children of immigrants, many of whom fled violence, corruption or poverty in their home countries.
"Our strategic plan intentionally places this institution on a path toward becoming a global destination for bold thinkers who are seeking to build thriving communities. A significant part of our ability to realize this vision is our commitment to embracing students from all walks of life, and recognizing the richness of their contributions to our community's social and intellectual diversity," Collado said.
DACA provided work authorization and protection from deportation to nearly 700,000 young people, enabling them to better support themselves and their families financially, build their careers and access higher education. If this vital program is rescinded, DACA recipients will lose their ability to work and study legally, will be forced from their jobs, and will be subject to immediate deportation. The Supreme Court should agree with what federal courts across the country have made clear: the administration's decision to terminate DACA was unlawful and has caused irreparable damage to Dreamers and their families and loved ones.
Since 2012, DACA has been extraordinarily successful, offering temporary protection from deportation and the ability to work legally to more than 700,000 young immigrants who came to the United States as children. The program has benefited these Dreamers, including our students, their families, their communities and our economy tremendously. On September 5, 2017, the administration announced that they were terminating the DACA program, jeopardizing the futures of hundreds of thousands of young people. In the past two years, multiple courts have kept renewals ongoing for current DACA recipients, but Dreamers have still been forced to live court case to court case, uncertain about their futures and in fear of being separated from their families and the lives they have built over decades in the United States.
The future of DACA — and the futures of hundreds of thousands of Dreamers — will be argued at the U.S. Supreme Court on November 12. The Court could hand down a ruling as soon as February 2020 determining if Dreamers will lose the ability to live, study and work in the United States.


Can we all take a minute to appreciate his face right here?
Tonya is originally from New York City, although she and Dan and their family live in Albany now. They came down state to get married at City Hall in Manhattan.
I love working with families, and these folks were a lot of fun. For our first look, all of the relatives and friends stood in front of the bride to block her as Dan came down the sidewalk. When he got close he turned around, the crowd parted, and Tonya tapped him on the shoulder. It was a fantastic moment, and he had a great "Oh my god!" face. After their marriage bureau ceremony, me and the newlyweds went off to take photos around the City, stopping in the West Village for a cool mix of vintage town houses, cobblestone, and some really fun graffiti. These photos are so NYC!
They zipped off in a yellow cab to have dinner with their family after.


Marine Science is a well-rounded and multi-disciplinary program which has been carefully designed to take full advantage of the unique variety of marine environments available for study around the island of Hawaiʻi. Introductory lecture and laboratory courses in general oceanography and marine biology are followed by intermediate-level courses in marine ecology and evolution, marine methods, and statistical applications in marine science. The most advanced level of the degree programs is composed of specialized courses in geological, chemical, physical, and biological oceanography and electives. The programs culminate in a capstone sequence, allowing students to focus on independent projects involving research or applied internships.
We will be an international leader in marine science education and research. Our kuleana (responsibility and privilege) is to provide student-focused, transformative, authentic science experiences, drawing from the unique natural and cultural environment of Hawai'i. Our graduates will be broadly equipped to become innovative members of the global workforce, successful life-long learners, and engaged stewards of the marine environment. Faculty, staff, and students will collaborate and draw upon each other's strengths and diversity to achieve our shared vision of student success.
The marine science program at UH Hilo inspires and enlightens all learners about the ocean through interactive hands-on learning, research involvement, and community outreach centered on the natural and cultural environment of Hawai'i Island. This is supported by a broad background in the marine sciences, including fundamental knowledge of biology, chemistry, physics, geology, and mathematics.
Students may choose to graduate under the General Education Basic, Area, and Integrative requirements and graduation requirements in force at the time they entered the UH System, when they entered UH Hilo, or when they graduate, provided there is no break in enrollment.
The new GE basic, core and integrative requirements and lists of certified courses are posted on the General Education website.
9 credits are required at the 300- or 400-level for graduation with a B.S. degree in Marine Science.
To earn a Bachelor of Arts degree in Marine Science, students must fulfill the requirements for the major and meet all of the University's other baccalaureate degree requirements.
- (2019-2020 Tuition) Resident: $306 per credit hour. $3,672 for full time. Non-resident: $846 per credit hour. $10,152 for full time.


text:
Student Titles
Practitioner Titles
Arbitration & Dispute Resolution
Company, Finance & Commercial
Constitutional & Admin Law
Employment & Equality Law
Human Rights & International Law
IP & IT Law
Legal Skills
Wills, Probate & Succession Law
Cart€0.00
You are here: Home » Catalogue » Products » Irish Criminal Justice: Theory, Process and Procedure
Irish Criminal Justice: Theory, Process and Procedure
Postal Order Form
You can also make credit card and cheque purchases using our printable order form.
Download Book List & Order Form »
Irish Criminal Justice: Theory, Process and Procedure provides an accessible yet critical analysis of key themes and stages in the Irish criminal process.
Categories: Criminal Justice, Criminal Law, Student Titles
Authors: Dr Vicky Conway, Dr Yvonne Daly, Jennifer Schweppe| ISBN: 978-1-905536-32-0 | Format: Paper Back | Pages: approx 300 | Price: €60 | Published 1st October 2010
The Irish criminal justice system is vast, heavily regulated and intensely litigated. In the last ten years alone there has been a plethora of new legislation introduced, significantly impacting on the operation of the system. Within the criminal process, fundamental human rights and core interests of the community and society as a whole come into sharp conflict. As an area of study, criminal justice and procedure is complex, challenging and stimulating.
Irish Criminal Justice: Theory, Process and Procedure provides an accessible yet critical analysis of key themes and stages in the Irish criminal process. It begins with an overview of the theoretical framework of the process, and then analyses key issues from initial arrest to sentence and post-sentencing appeals. Controversial questions such as police powers, the role of the prosecutor, victims' rights, juvenile justice and miscarriages of justice are also addressed in a comprehensive and engaging manner. This book incorporates up-to-date developments in domestic legislation and case-law while integrating the latest developments in human rights law, as they affect the area.
As the first directed textbook on the topic, Irish Criminal Justice: Theory, Process and Procedure will be an essential read for all students of criminal justice and procedure, at both undergraduate and postgraduate levels. As a comprehensive account of the Irish criminal process, it will also be a useful resource for practitioners in the area.
Dr Vicky Conway is a lecturer at the School of Law in Queen's University Belfast and a member of the Institute of Criminology and Criminal Justice. She lectures on evidence law, criminology theory and restorative justice and is the author of The Blue Wall of Silence: The Morris Tribunal and Police Accountability in Ireland.
Dr Yvonne Daly is a lecturer at the School of Law and Government, Dublin City University and a member of the Socio-Legal Research Centre. She lectures in criminal law, the law of evidence and constitutional law and has published widely on matters of criminal justice and procedure.
Jennifer Schweppe is a lecturer at the School of Law at the University of Limerick and a member of the Centre for Criminal Justice Studies. She lectures constitutional law to undergraduate students, and criminal procedure at undergraduate and postgraduate level. She is the course director of the PhD in Criminal Justice at UL.
Stop, Search, Arrest and Detention
Collection and Admissibility of Evidence
Summary Trial
Trial on Indictment
WebRep
currentVote
noRating
noWeight
Be the first to review "Irish Criminal Justice: Theory, Process and Procedure" Cancel reply
Principles of Irish Employment Law
Principles of Irish Property Law 2nd ed
EU Law in Ireland
Law and Practice: Essays on Reform
Book Launch of OMC: Law and Best PracticeNovember 27, 2019 - 8:49 pm
Award for Practical Law Book of the YearJune 25, 2019 - 4:43 pm
Digital Marketing GuruApril 4, 2019 - 9:45 pm
Clarus Press
Griffith Campus
South Circular Road
info@claruspress.ie
© Copyright - Clarus Press - Terms and Conditions and Privacy Notice


In today's dynamically changing business environment projects are initiated under tighter budgetary, resource and time constraints than ever before. This seminar focuses on the core project management skills required to manage any project and will provide the attendees with proven "real life" tools and techniques applied to a case study.
Project Leaders, Team Leaders, Project Managers, Line of Business Coordinators, who are responsible for the delivery of projects in a cross-functional environment.
Develop a foundation in core project management concepts.
Apply core project management concepts to managing projects.
Discover and apply project management tools and techniques applicable to each phase of a project's Life Cycle.
Why is there interest in project management?
What is a Probability/Impact Grid?


text:
For Fiji's Future Leaders
30 Saturday Aug 2014
Posted by fijipensioners in Letters
FNPF reforms
IN 2010, the FNPF announced a review of pension provisions which when implemented in 2012 led to pensions being reduced by up to 51.13 per cent causing severe financial hardship and distress to pensioners. In fact, a number were pushed below the poverty level.
What happened to these pensioners was a cruel and bitter experience.
Many believe that in proceeding with its changes, the FNPF:
* did not recognise the binding obligations that existed between pensioners and FNPF for payment of pensions. This had been recognised by FNPF when pensions were first reduced in 1995;
* claimed without any proven financial justification that the level of pensions being paid in 2012 by FNPF was unsustainable;
* did not implement the provisions of the FNPF Act Cap 219, Section 10 that if the FNPF is short of funds to pay pensions the government would provide these and government should be paid back as soon as practicable;
* would not enter into any discussion concerning the FNPF pension buffer reserve and why this had not been credited with interest since 1975 that would have provided some $860m for the payment of pensions;
* did not understand that the FNPF financial model was designed to provide for a steady and reasonable reduction in pension rates to ensure the long term stability of the fund. The reduction in maximum pensions from 25 per cent to 15 per cent in 1995 was the first step in this process;
* failed to either respond, or have the courtesy to acknowledge, the many emails, faxes and letters forwarded by aggrieved pensioners to FNPF protesting at the changes;
* ignored their consultant's advice (promontory) to honour existing pension contracts by allocating sufficient assets to provide for the continued payment of pensions at the then existing levels;
* would not engage in any meaningful dialogue either publicly or in private to enable pensioners to have a fair hearing and question the merit of FNPF claims; and
* may not have understood that the changes when implemented would create financial hardship and distress for many elderly pensioners that has sadly proven correct.
Pensioners were also denied natural justice and the right to seek redress regarding the changes through the courts by Decree No 51 of 2011 that provided that there could be no court challenge to the changes and which has stalled a case brought by aggrieved pensioner David Burness .
Readers should refer to fijipensioners.com for further financial details and comment.
Click here: SubmissionAug2014FinalAtt
It is reasonable to suggest that affected pensioners will expect the new incoming democratically elected government to have a commission of enquiry into the FNPF, with terms of reference and power to enquire into the FNPF and to restore pensions to previous levels, and investigate the utilisation of the Pension Buffer Reserve.
RG McDonald, Pensioner, Suva
Fiji Pensioners were Deceived and Defrauded
28 Thursday Aug 2014
The following submission is to our present Prime Minister, will he read it?, it will take about 30 minutes of his valuable time.
Will any of the aspiring politicians read it ? only time will tell.
Click on the following link to get the true facts of the FNPF pension saga
SubmissionAug2014FinalAtt
NO MORE CORRUPTION, NO MORE CRONYISM, NO MORE INJUSTICE, NO MORE LACK OF TRANSPARENCY
REMEMBER THIS WHEN YOU VOTE.
Do the Sums Properly NFP
Can this man not do simple math?
Attar Singh then said that they will only reduce VAT and are not talking about increasing other taxes.
Another proposed candidate for NFP, Pramod Rae also said that there will be no need to increase any tax as there will be more revenue generated by reducing VAT.
Rae believes that people will spend more.
THE SIMPLE FACT IS THAT PEOPLE WOULD HAVE TO SPEND 34% MORE THAN THEY ARE SPENDING NOW, AND THEY JUST DO NOT HAVE THE MONEY TO SPEND.
HAS THIS IDIOT NOT NOTICED THE INCREASING NUMBERS LIVING IN POVERTY, A 33% REDUCTION IN VAT IS NOT A 33% REDUCTION IN COST,,, WHAT A CLOWN..DO WE NEED PEOPLE LIKE THIS GOVERNING FIJI.??
REMEMBER THIS WHEN YOU VOTE
A Tribute to Robin Williams
Posted by fijipensioners in OBITUARIES
A touching one minute tribute to a man who brought a great deal of happiness to many:
Can Salt Cure Cancer ?
Posted by fijipensioners in Press Releases
Check out this article which states that Scientists at the University of Southampton have helped create a technique that can cause cancer cells to self-destruct
Read more: http://www.dailymail.co.uk/health/article-2722869/Salt-injection-kills-cancer-cells.html#ixzz3ADjK7Wbw
R.I.P Robin Williams
Posted by fijipensioners in Remembrance
REST IN PEACE ROBIN WILLIAMS, YOUR WIT BROUGHT HUMOUR INTO MANY LIVES.
YOU WILL BE MISSED
The following link for the browser is not for those who do not accept the "F" Word, but the majority of golfers may enjoy it.
Paste this in your browser: https://www.youtube.com/watch?v=pcnFbCCgTo4
Poll claims 86% in Favour of Frank
Does he look like he has been had by the SUN ?
Is This Man a Wannabe Dictator ??
A great many disappointed subscribers to Sky Pacific pay TV, think he is acting like one.. just check out the following links to see what they are saying.
http://www.fijitimes.com/story.aspx?id=276402
Harry Pal The reality is the Board of Fiji TV has made a mess of this situation. What a PR and publicity disaster? In today;s Fiji times, the Fox Network in their "Smart PR" have in their "smart way" are telling us " They do not want to deal with wannabees who collectively cant run a PayTV business, from the Board to Management of Fiji TV.
Rahul Prasad You People are bloody money makers and nothing else.. Removing all the good channels with the crappy free to air channels? Where the hell did u do the customer feedback survey? were the customers even informed about this survey through any form of media?? I am a customer of Sky Pacific for the past so many years and all I get now is disappointment? Having to compromise with the television content I like? I will take this issue up to the consumer council. We will not tolerate this consumer exploitation !!!
Roneel Prakash For Television "CONTENT IS KING" and CONTENT MUST BE LEGALLY CLEARED FOR THE BROADCAST REGIONS THAT SKY PACIFIC COVERS. So you really think that the content on BBC, Nat Geo, Discovery, Home n Health, Star Plus and other were illegal……regions where sky pacific covers is the same island countries, its not that you live in a state where religious obligations ban the viewing of such channels……the way you are going….in the next "UPDATING PROCESS OF CHANNELS ON SKY PAC' will see the free to air channels from the pacific islands that you and those who support you will see as conducive content……I CHALLENGE YOU……TAKE A REAL SURVEY……ONE WHERE YOU GET OFF YOUR SEATS AND APPROACH THE CUSTOMERS……then find out what we really think of your changes……as of this moment…….zero positive comment…….imagine what those who are not on FB would love to share one on one!!!! Where is the bloody Dislike icon/link on this Page……Shame i just had to lie to myself that i like the page…..just to bloody comment……Your choice of Entertainment idea abosolutly fill in the blank!!!!! Sky pacific is being a catalyst to the people of the islands suffering from depression…..nothing on tv that is good to come home to……I seriously wonder if FBC TV had entities to show more channels would cover……at the moment Bati ni Tanoa would out rate anything that SKY PATHETIC would have to show……once again these are my views and my suggestions………CONTENT IS KING……that coming from you guys doesnt suit………CONTENT is CARP(and you know there are more to this) is more like what you have made me to conclude!!!! Cant wait for EPL on FBC!!!!!
Akinisi Ledua https://www.facebook.com/…/Sky-Pacific…/309706102542756
Sky Pacific Fiji Pathetic Services
We have come together as a community to complain about the management of Sky Services, who changed their channels without public consultation
Community: 1,748 like this
Suva Expats "For Television "CONTENT IS KING":
For Business THE CUSTOMER IS KING!!!! NOT your product. What business school did you go to?"Sky Pacific is confident that the new line-up is more entertaining"
What planet are you living on??? huh? Reading all the complaints about your "new line up" is more entertaing that your new programs.
"…a CHOICE TO BE ENTERTAINED, by a Pacific owned brand."
You are kidding right? It was not your customers choice! Haven't you heard anything your customers are saying the last few days? Or do you think if you bury yor head in the sand that it will all go away. Well somthing will go away YOUR CUSTOMERS!
"…will continue to bring the best available content to the Pacific"
What do you mean BEST AVAILABLE CONTENT. Do you seriously believe France 24 is better than the BBC? Bio is better than Discovery? They are just cheaper and far inferior and not worth paying for. And by "available" do you mean we have a choice? We have no choice. You are a monopoly.
AND MANY MANY MORE…. FEEL FREE TO ADD YOUR COMMENTS, WRITE TO THE CONSUMER COUNCIL, YOU HAVE A VOICE , USE IT
WHO is Fiji's Mickey Mouse ???
Mr Aiyaz Khaiyum advises NGOs like Citizens Constitutional Forum to not play "Mickey Mouse games" before the elections (Fiji Sun, 5 August 2014). The public should consider that:
(a) The Bainimarama Government has spent hundreds of thousands of dollars of taxpayers money encouraging the voter registration of Fiji citizens living overseas so that they can have a say in electing some candidate for the parliament, even if they have Permanent Residency of and presumably some commitment to other countries.
(b) Civil servants, even if they have been out of the country for the last two years "on government business", may still be eligible as candidates for the elections, and may even belong to political parties, according to the Permanent Secretary of the PSC.
(c) BUT an ordinary Fiji citizen, like Ms Makareta Waqavonovono, a former Legal Aid and committed senior Fiji government official, who has been overseas for more than 18 months out of the last two years, is declared legally ineligible to be a candidate by a sudden last minute change of the law on the 31st of July 2014, just a month before the elections, after Ms Waqavonovono has already been announced as a candidate by the National Federation Party.
The moribund Fiji Law Society or one of its members, might want to ask the general question if laws are being changed to suit a specific circumstance or individual.
But more specifically, the public can ask why Ms Makareta Waqavonovono, a former senior civil servant, has been overseas for the last two years.
First, she has been guilty of bringing great credit to Fiji by working for AusAID and the Australian Government, arguably the most important donor to Fiji.
Second, she has been using her valuable legal skills in the Solomon Islands, a valuable member of the Melanesian Spearhead Group which Fiji often takes pride in helping, by providing much needed skilled human resources, similar to those possessed by Ms Waqavonovono.
Third, Ms Waqavonovono apparently has had the unpatriotic desire to waste her time and money by studying overseas (in Australia) and acquiring further educational qualifications that will undoubtedly be of great benefit to Fiji.
But with this latest decree by Mr Aiyaz Khaiyum (Attorney General and, apparently without any conflict of interest, also the General Secretary of the Fiji First Party), Ms Waqavonovono has been banned from offering to voters, the use of her extensive legal experience in the Fiji Parliament, the most important public service arena there is, superior even to the Government..
Anyone with common sense knows who exactly is playing "Mickey Mouse" games in Fiji with the elections and our people's lives.
Professor Wadan Narsey