text:
// ideas taken from:
//     . The ocean spray in your face [Jeff Lander]
//        http://www.double.co.nz/dust/col0798.pdf
//     . Building an Advanced Particle System [John van der Burg]
//        http://www.gamasutra.com/features/20000623/vanderburg_01.htm
//   . LOVE game engine
//        http://love2d.org/
//
//
// Radius mode support, from 71 squared
//        http://particledesigner.71squared.com/
//
// IMPORTANT: Particle Designer is supported by cocos2d, but
// 'Radius Mode' in Particle Designer uses a fixed emit rate of 30 hz. Since that can't be guarateed in cocos2d,
//  cocos2d uses a another approach, but the results are almost identical.
//

#include "CCParticleSystem.h"
#include "CCParticleBatchNode.h"
#include "ccTypes.h"
#include "CCTextureCache.h"
#include "CCTextureAtlas.h"
#include "support/base64.h"
#include "CCPointExtension.h"
#include "CCFileUtils.h"
#include "CCImage.h"
#include "platform/platform.h"
#include "support/zip_support/ZipUtils.h"
#include "CCDirector.h"
#include "support/CCProfiling.h"
// opengl
#include "CCGL.h"

NS_CC_BEGIN

// ideas taken from:
//     . The ocean spray in your face [Jeff Lander]
//        http://www.double.co.nz/dust/col0798.pdf
//     . Building an Advanced Particle System [John van der Burg]
//        http://www.gamasutra.com/features/20000623/vanderburg_01.htm
//   . LOVE game engine
//        http://love2d.org/
//
//
// Radius mode support, from 71 squared
//        http://particledesigner.71squared.com/
//
// IMPORTANT: Particle Designer is supported by cocos2d, but
// 'Radius Mode' in Particle Designer uses a fixed emit rate of 30 hz. Since that can't be guarateed in cocos2d,
//  cocos2d uses a another approach, but the results are almost identical.
//

CCParticleSystem::CCParticleSystem()
    :m_sPlistFile("")
    ,m_fElapsed(0)
    ,m_pParticles(NULL)
    ,m_fEmitCounter(0)
    ,m_uParticleIdx(0)
    ,m_bIsActive(true)
    ,m_uParticleCount(0)
    ,m_fDuration(0)
    ,m_tSourcePosition(CCPointZero)
    ,m_tPosVar(CCPointZero)
    ,m_fLife(0)
    ,m_fLifeVar(0)
    ,m_fAngle(0)
    ,m_fAngleVar(0)
    ,m_fStartSize(0)
    ,m_fStartSizeVar(0)
    ,m_fEndSize(0)
    ,m_fEndSizeVar(0)
    ,m_fStartSpin(0)
    ,m_fStartSpinVar(0)
    ,m_fEndSpin(0)
    ,m_fEndSpinVar(0)
    ,m_fEmissionRate(0)
    ,m_uTotalParticles(0)
    ,m_pTexture(NULL)
    ,m_bIsBlendAdditive(false)
    ,m_ePositionType(kCCPositionTypeFree)
    ,m_bIsAutoRemoveOnFinish(false)
    ,m_nEmitterMode(kCCParticleModeGravity)
    ,m_pBatchNode(NULL)
    ,m_uAtlasIndex(0)
    ,m_bTransformSystemDirty(false)
    ,m_uAllocatedParticles(0)
{
    modeA.gravity = CCPointZero;
    modeA.speed = 0;
    modeA.speedVar = 0;
    modeA.tangentialAccel = 0;
    modeA.tangentialAccelVar = 0;
    modeA.radialAccel = 0;
    modeA.radialAccelVar = 0;
    modeB.startRadius = 0;
    modeB.startRadiusVar = 0;
    modeB.endRadius = 0;
    modeB.endRadiusVar = 0;
    modeB.rotatePerSecond = 0;
    modeB.rotatePerSecondVar = 0;
    m_tBlendFunc.src = CC_BLEND_SRC;
    m_tBlendFunc.dst = CC_BLEND_DST;
}
// implementation CCParticleSystem
CCParticleSystem * CCParticleSystem::particleWithFile(const char *plistFile)
{
    CCParticleSystem *pRet = new CCParticleSystem();
    if (pRet && pRet->initWithFile(plistFile))
    {
        pRet->autorelease();
        return pRet;
    }
    CC_SAFE_DELETE(pRet);
    return pRet;
}

bool CCParticleSystem::init()
{
    return initWithTotalParticles(150);
}

bool CCParticleSystem::initWithFile(const char *plistFile)
{
    bool bRet = false;
    m_sPlistFile = CCFileUtils::fullPathFromRelativePath(plistFile);
    CCDictionary *dict = CCDictionary::dictionaryWithContentsOfFileThreadSafe(m_sPlistFile.c_str());

    CCAssert( dict != NULL, "Particles: file not found");
    bRet = this->initWithDictionary(dict);
    dict->release();

    return bRet;
}

bool CCParticleSystem::initWithDictionary(CCDictionary *dictionary)
{
    bool bRet = false;
    unsigned char *buffer = NULL;
    unsigned char *deflated = NULL;
    CCImage *image = NULL;
    do
    {
        int maxParticles = dictionary->valueForKey("maxParticles")->intValue();
        // self, not super
        if(this->initWithTotalParticles(maxParticles))
        {
            // angle
            m_fAngle = dictionary->valueForKey("angle")->floatValue();
            m_fAngleVar = dictionary->valueForKey("angleVariance")->floatValue();

            // duration
            m_fDuration = dictionary->valueForKey("duration")->floatValue();

            // blend function
            m_tBlendFunc.src = dictionary->valueForKey("blendFuncSource")->intValue();
            m_tBlendFunc.dst = dictionary->valueForKey("blendFuncDestination")->intValue();

            // color
            m_tStartColor.r = dictionary->valueForKey("startColorRed")->floatValue();
            m_tStartColor.g = dictionary->valueForKey("startColorGreen")->floatValue();
            m_tStartColor.b = dictionary->valueForKey("startColorBlue")->floatValue();
            m_tStartColor.a = dictionary->valueForKey("startColorAlpha")->floatValue();

            m_tStartColorVar.r = dictionary->valueForKey("startColorVarianceRed")->floatValue();
            m_tStartColorVar.g = dictionary->valueForKey("startColorVarianceGreen")->floatValue();
            m_tStartColorVar.b = dictionary->valueForKey("startColorVarianceBlue")->floatValue();
            m_tStartColorVar.a = dictionary->valueForKey("startColorVarianceAlpha")->floatValue();

            m_tEndColor.r = dictionary->valueForKey("finishColorRed")->floatValue();
            m_tEndColor.g = dictionary->valueForKey("finishColorGreen")->floatValue();
            m_tEndColor.b = dictionary->valueForKey("finishColorBlue")->floatValue();
            m_tEndColor.a = dictionary->valueForKey("finishColorAlpha")->floatValue();

            m_tEndColorVar.r = dictionary->valueForKey("finishColorVarianceRed")->floatValue();
            m_tEndColorVar.g = dictionary->valueForKey("finishColorVarianceGreen")->floatValue();
            m_tEndColorVar.b = dictionary->valueForKey("finishColorVarianceBlue")->floatValue();
            m_tEndColorVar.a = dictionary->valueForKey("finishColorVarianceAlpha")->floatValue();

            // particle size
            m_fStartSize = dictionary->valueForKey("startParticleSize")->floatValue();
            m_fStartSizeVar = dictionary->valueForKey("startParticleSizeVariance")->floatValue();
            m_fEndSize = dictionary->valueForKey("finishParticleSize")->floatValue();
            m_fEndSizeVar = dictionary->valueForKey("finishParticleSizeVariance")->floatValue();

            // position
            float x = dictionary->valueForKey("sourcePositionx")->floatValue();
            float y = dictionary->valueForKey("sourcePositiony")->floatValue();
            this->setPosition( ccp(x,y) );
            m_tPosVar.x = dictionary->valueForKey("sourcePositionVariancex")->floatValue();
            m_tPosVar.y = dictionary->valueForKey("sourcePositionVariancey")->floatValue();

            // Spinning
            m_fStartSpin = dictionary->valueForKey("rotationStart")->floatValue();
            m_fStartSpinVar = dictionary->valueForKey("rotationStartVariance")->floatValue();
            m_fEndSpin= dictionary->valueForKey("rotationEnd")->floatValue();
            m_fEndSpinVar= dictionary->valueForKey("rotationEndVariance")->floatValue();

            m_nEmitterMode = dictionary->valueForKey("emitterType")->intValue();

            // Mode A: Gravity + tangential accel + radial accel
            if( m_nEmitterMode == kCCParticleModeGravity )
            {
                // gravity
                modeA.gravity.x = dictionary->valueForKey("gravityx")->floatValue();
                modeA.gravity.y = dictionary->valueForKey("gravityy")->floatValue();

                // speed
                modeA.speed = dictionary->valueForKey("speed")->floatValue();
                modeA.speedVar = dictionary->valueForKey("speedVariance")->floatValue();

                // radial acceleration
                modeA.radialAccel = dictionary->valueForKey("radialAcceleration")->floatValue();
                modeA.radialAccelVar = dictionary->valueForKey("radialAccelVariance")->floatValue();

                // tangential acceleration
                modeA.tangentialAccel = dictionary->valueForKey("tangentialAcceleration")->floatValue();
                modeA.tangentialAccelVar = dictionary->valueForKey("tangentialAccelVariance")->floatValue();
            }

            // or Mode B: radius movement
            else if( m_nEmitterMode == kCCParticleModeRadius )
            {
                modeB.startRadius = dictionary->valueForKey("maxRadius")->floatValue();
                modeB.startRadiusVar = dictionary->valueForKey("maxRadiusVariance")->floatValue();
                modeB.endRadius = dictionary->valueForKey("minRadius")->floatValue();
                modeB.endRadiusVar = 0.0f;
                modeB.rotatePerSecond = dictionary->valueForKey("rotatePerSecond")->floatValue();
                modeB.rotatePerSecondVar = dictionary->valueForKey("rotatePerSecondVariance")->floatValue();

            } else {
                CCAssert( false, "Invalid emitterType in config file");
                CC_BREAK_IF(true);
            }

            // life span
            m_fLife = dictionary->valueForKey("particleLifespan")->floatValue();
            m_fLifeVar = dictionary->valueForKey("particleLifespanVariance")->floatValue();

            // emission Rate
            m_fEmissionRate = m_uTotalParticles / m_fLife;

            //don't get the internal texture if a batchNode is used
            if (!m_pBatchNode)
            {
                // texture
                // Try to get the texture from the cache
                const char* textureName = dictionary->valueForKey("textureFileName")->getCString();
                std::string fullpath = CCFileUtils::fullPathFromRelativeFile(textureName, m_sPlistFile.c_str());

                CCTexture2D *tex = NULL;

                if (strlen(textureName) > 0)
                {
                    // set not pop-up message box when load image failed
                    bool bNotify = CCFileUtils::getIsPopupNotify();
                    CCFileUtils::setIsPopupNotify(false);
                    tex = CCTextureCache::sharedTextureCache()->addImage(fullpath.c_str());

                    // reset the value of UIImage notify
                    CCFileUtils::setIsPopupNotify(bNotify);
                }

                if (tex)
                {
                    setTexture(tex);
                }
                else
                {
                    const char *textureData = dictionary->valueForKey("textureImageData")->getCString();
                    CCAssert(textureData, "");

                    int dataLen = strlen(textureData);
                    if(dataLen != 0)
                    {
                        // if it fails, try to get it from the base64-gzipped data
                        int decodeLen = base64Decode((unsigned char*)textureData, (unsigned int)dataLen, &buffer);
                        CCAssert( buffer != NULL, "CCParticleSystem: error decoding textureImageData");
                        CC_BREAK_IF(!buffer);

                        int deflatedLen = ZipUtils::ccInflateMemory(buffer, decodeLen, &deflated);
                        CCAssert( deflated != NULL, "CCParticleSystem: error ungzipping textureImageData");
                        CC_BREAK_IF(!deflated);

                        // don't delete image, VolatileTexture use it in CCTextureCache::sharedTextureCache()->addUIImage()
                        image = new CCImage();
                        bool isOK = image->initWithImageData(deflated, deflatedLen);
                        CCAssert(isOK, "CCParticleSystem: error init image with Data");
                        CC_BREAK_IF(!isOK);

                        setTexture(CCTextureCache::sharedTextureCache()->addUIImage(image, fullpath.c_str()));
                    }
                }
                CCAssert( this->m_pTexture != NULL, "CCParticleSystem: error loading the texture");
            }
            bRet = true;
        }
    } while (0);
    CC_SAFE_DELETE_ARRAY(buffer);
    CC_SAFE_DELETE_ARRAY(deflated);
    return bRet;
}

bool CCParticleSystem::initWithTotalParticles(unsigned int numberOfParticles)
{
    m_uTotalParticles = numberOfParticles;

    CC_SAFE_FREE(m_pParticles);

    m_pParticles = (tCCParticle*)calloc(m_uTotalParticles, sizeof(tCCParticle));

    if( ! m_pParticles )
    {
        CCLOG("Particle system: not enough memory");
        this->release();
        return false;
    }
    m_uAllocatedParticles = numberOfParticles;

    if (m_pBatchNode)
    {
        for (int i = 0; i < m_uTotalParticles; i++)
        {
            m_pParticles[i].atlasIndex=i;
        }
    }
    // default, active
    m_bIsActive = true;

    // default blend function
    m_tBlendFunc.src = CC_BLEND_SRC;
    m_tBlendFunc.dst = CC_BLEND_DST;

    // default movement type;
    m_ePositionType = kCCPositionTypeFree;

    // by default be in mode A:
    m_nEmitterMode = kCCParticleModeGravity;

    // default: modulate
    // XXX: not used
    //    colorModulate = YES;

    m_bIsAutoRemoveOnFinish = false;

    // Optimization: compile udpateParticle method
    //updateParticleSel = @selector(updateQuadWithParticle:newPosition:);
    //updateParticleImp = (CC_UPDATE_PARTICLE_IMP) [self methodForSelector:updateParticleSel];
    //for batchNode
    m_bTransformSystemDirty = false;
    // udpate after action in run!
    this->scheduleUpdateWithPriority(1);

    return true;
}

CCParticleSystem::~CCParticleSystem()
{
    CC_SAFE_FREE(m_pParticles);
    CC_SAFE_RELEASE(m_pTexture);
}

bool CCParticleSystem::addParticle()
{
    if (this->isFull())
    {
        return false;
    }

    tCCParticle * particle = &m_pParticles[ m_uParticleCount ];
    this->initParticle(particle);
    ++m_uParticleCount;

    return true;
}

void CCParticleSystem::initParticle(tCCParticle* particle)
{
    // timeToLive
    // no negative life. prevent division by 0
    particle->timeToLive = m_fLife + m_fLifeVar * CCRANDOM_MINUS1_1();
    particle->timeToLive = MAX(0, particle->timeToLive);

    // position
    particle->pos.x = m_tSourcePosition.x + m_tPosVar.x * CCRANDOM_MINUS1_1();

    particle->pos.y = m_tSourcePosition.y + m_tPosVar.y * CCRANDOM_MINUS1_1();

    // Color
    ccColor4F start;
    start.r = clampf(m_tStartColor.r + m_tStartColorVar.r * CCRANDOM_MINUS1_1(), 0, 1);
    start.g = clampf(m_tStartColor.g + m_tStartColorVar.g * CCRANDOM_MINUS1_1(), 0, 1);
    start.b = clampf(m_tStartColor.b + m_tStartColorVar.b * CCRANDOM_MINUS1_1(), 0, 1);
    start.a = clampf(m_tStartColor.a + m_tStartColorVar.a * CCRANDOM_MINUS1_1(), 0, 1);

    ccColor4F end;
    end.r = clampf(m_tEndColor.r + m_tEndColorVar.r * CCRANDOM_MINUS1_1(), 0, 1);
    end.g = clampf(m_tEndColor.g + m_tEndColorVar.g * CCRANDOM_MINUS1_1(), 0, 1);
    end.b = clampf(m_tEndColor.b + m_tEndColorVar.b * CCRANDOM_MINUS1_1(), 0, 1);
    end.a = clampf(m_tEndColor.a + m_tEndColorVar.a * CCRANDOM_MINUS1_1(), 0, 1);

    particle->color = start;
    particle->deltaColor.r = (end.r - start.r) / particle->timeToLive;
    particle->deltaColor.g = (end.g - start.g) / particle->timeToLive;
    particle->deltaColor.b = (end.b - start.b) / particle->timeToLive;
    particle->deltaColor.a = (end.a - start.a) / particle->timeToLive;

    // size
    float startS = m_fStartSize + m_fStartSizeVar * CCRANDOM_MINUS1_1();
    startS = MAX(0, startS); // No negative value

    particle->size = startS;

    if( m_fEndSize == kCCParticleStartSizeEqualToEndSize )
    {
        particle->deltaSize = 0;
    }
    else
    {
        float endS = m_fEndSize + m_fEndSizeVar * CCRANDOM_MINUS1_1();
        endS = MAX(0, endS); // No negative values
        particle->deltaSize = (endS - startS) / particle->timeToLive;
    }

    // rotation
    float startA = m_fStartSpin + m_fStartSpinVar * CCRANDOM_MINUS1_1();
    float endA = m_fEndSpin + m_fEndSpinVar * CCRANDOM_MINUS1_1();
    particle->rotation = startA;
    particle->deltaRotation = (endA - startA) / particle->timeToLive;

    // position
    if( m_ePositionType == kCCPositionTypeFree )
    {
        particle->startPos = this->convertToWorldSpace(CCPointZero);
    }
    else if ( m_ePositionType == kCCPositionTypeRelative )
    {
        particle->startPos = m_tPosition;
    }

    // direction
    float a = CC_DEGREES_TO_RADIANS( m_fAngle + m_fAngleVar * CCRANDOM_MINUS1_1() );

    // Mode Gravity: A
    if (m_nEmitterMode == kCCParticleModeGravity)
    {
        CCPoint v(cosf( a ), sinf( a ));
        float s = modeA.speed + modeA.speedVar * CCRANDOM_MINUS1_1();

        // direction
        particle->modeA.dir = ccpMult( v, s );

        // radial accel
        particle->modeA.radialAccel = modeA.radialAccel + modeA.radialAccelVar * CCRANDOM_MINUS1_1();

        // tangential accel
        particle->modeA.tangentialAccel = modeA.tangentialAccel + modeA.tangentialAccelVar * CCRANDOM_MINUS1_1();

    }

    // Mode Radius: B
    else
    {
        // Set the default diameter of the particle from the source position
        float startRadius = modeB.startRadius + modeB.startRadiusVar * CCRANDOM_MINUS1_1();
        float endRadius = modeB.endRadius + modeB.endRadiusVar * CCRANDOM_MINUS1_1();

        particle->modeB.radius = startRadius;

        if(modeB.endRadius == kCCParticleStartRadiusEqualToEndRadius)
        {
            particle->modeB.deltaRadius = 0;
        }
        else
        {
            particle->modeB.deltaRadius = (endRadius - startRadius) / particle->timeToLive;
        }

        particle->modeB.angle = a;
        particle->modeB.degreesPerSecond = CC_DEGREES_TO_RADIANS(modeB.rotatePerSecond + modeB.rotatePerSecondVar * CCRANDOM_MINUS1_1());
    }
}

void CCParticleSystem::stopSystem()
{
    m_bIsActive = false;
    m_fElapsed = m_fDuration;
    m_fEmitCounter = 0;
}

void CCParticleSystem::resetSystem()
{
    m_bIsActive = true;
    m_fElapsed = 0;
    for (m_uParticleIdx = 0; m_uParticleIdx < m_uParticleCount; ++m_uParticleIdx)
    {
        tCCParticle *p = &m_pParticles[m_uParticleIdx];
        p->timeToLive = 0;
    }
}
bool CCParticleSystem::isFull()
{
    return (m_uParticleCount == m_uTotalParticles);
}

// ParticleSystem - MainLoop
void CCParticleSystem::update(ccTime dt)
{
    CC_PROFILER_START_CATEGORY(kCCProfilerCategoryParticles , "CCParticleSystem - update");

    if (m_bIsActive && m_fEmissionRate)
    {
        float rate = 1.0f / m_fEmissionRate;
        //issue #1201, prevent bursts of particles, due to too high emitCounter
        if (m_uParticleCount < m_uTotalParticles)
        {
            m_fEmitCounter += dt;
        }

        while (m_uParticleCount < m_uTotalParticles && m_fEmitCounter > rate)
        {
            this->addParticle();
            m_fEmitCounter -= rate;
        }

        m_fElapsed += dt;
        if (m_fDuration != -1 && m_fDuration < m_fElapsed)
        {
            this->stopSystem();
        }
    }

    m_uParticleIdx = 0;

    CCPoint currentPosition = CCPointZero;
    if (m_ePositionType == kCCPositionTypeFree)
    {
        currentPosition = this->convertToWorldSpace(CCPointZero);
    }
    else if (m_ePositionType == kCCPositionTypeRelative)
    {
        currentPosition = m_tPosition;
    }

    if (m_bIsVisible)
    {
        while (m_uParticleIdx < m_uParticleCount)
        {
            tCCParticle *p = &m_pParticles[m_uParticleIdx];

            // life
            p->timeToLive -= dt;

            if (p->timeToLive > 0)
            {
                // Mode A: gravity, direction, tangential accel & radial accel
                if (m_nEmitterMode == kCCParticleModeGravity)
                {
                    CCPoint tmp, radial, tangential;

                    radial = CCPointZero;
                    // radial acceleration
                    if (p->pos.x || p->pos.y)
                    {
                        radial = ccpNormalize(p->pos);
                    }
                    tangential = radial;
                    radial = ccpMult(radial, p->modeA.radialAccel);

                    // tangential acceleration
                    float newy = tangential.x;
                    tangential.x = -tangential.y;
                    tangential.y = newy;
                    tangential = ccpMult(tangential, p->modeA.tangentialAccel);

                    // (gravity + radial + tangential) * dt
                    tmp = ccpAdd( ccpAdd( radial, tangential), modeA.gravity);
                    tmp = ccpMult( tmp, dt);
                    p->modeA.dir = ccpAdd( p->modeA.dir, tmp);
                    tmp = ccpMult(p->modeA.dir, dt);
                    p->pos = ccpAdd( p->pos, tmp );
                }

                // Mode B: radius movement
                else
                {
                    // Update the angle and radius of the particle.
                    p->modeB.angle += p->modeB.degreesPerSecond * dt;
                    p->modeB.radius += p->modeB.deltaRadius * dt;

                    p->pos.x = - cosf(p->modeB.angle) * p->modeB.radius;
                    p->pos.y = - sinf(p->modeB.angle) * p->modeB.radius;
                }

                // color
                p->color.r += (p->deltaColor.r * dt);
                p->color.g += (p->deltaColor.g * dt);
                p->color.b += (p->deltaColor.b * dt);
                p->color.a += (p->deltaColor.a * dt);

                // size
                p->size += (p->deltaSize * dt);
                p->size = MAX( 0, p->size );

                // angle
                p->rotation += (p->deltaRotation * dt);

                //
                // update values in quad
                //

                CCPoint    newPos;

                if (m_ePositionType == kCCPositionTypeFree || m_ePositionType == kCCPositionTypeRelative)
                {
                    CCPoint diff = ccpSub( currentPosition, p->startPos );
                    newPos = ccpSub(p->pos, diff);
                }
                else
                {
                    newPos = p->pos;
                }

                // translate newPos to correct position, since matrix transform isn't performed in batchnode
                // don't update the particle with the new position information, it will interfere with the radius and tangential calculations
                if (m_pBatchNode)
                {
                    newPos.x+=m_tPosition.x;
                    newPos.y+=m_tPosition.y;
                }

                updateQuadWithParticle(p, newPos);
                //updateParticleImp(self, updateParticleSel, p, newPos);

                // update particle counter
                ++m_uParticleIdx;
            }
            else
            {
                // life < 0
                int currentIndex = p->atlasIndex;
                if( m_uParticleIdx != m_uParticleCount-1 )
                {
                    m_pParticles[m_uParticleIdx] = m_pParticles[m_uParticleCount-1];
                }
                if (m_pBatchNode)
                {
                    //disable the switched particle
                    m_pBatchNode->disableParticle(m_uAtlasIndex+currentIndex);

                    //switch indexes
                    m_pParticles[m_uParticleCount-1].atlasIndex = currentIndex;
                }

                --m_uParticleCount;

                if( m_uParticleCount == 0 && m_bIsAutoRemoveOnFinish )
                {
                    this->unscheduleUpdate();
                    m_pParent->removeChild(this, true);
                    return;
                }
            }
        } //while
        m_bTransformSystemDirty = false;
    }
    if (! m_pBatchNode)
    {
        postStep();
    }

    CC_PROFILER_STOP_CATEGORY(kCCProfilerCategoryParticles , "CCParticleSystem - update");
}

void CCParticleSystem::updateWithNoTime(void)
{
    this->update(0.0f);
}

void CCParticleSystem::updateQuadWithParticle(tCCParticle* particle, const CCPoint& newPosition)
{
    CC_UNUSED_PARAM(particle);
    CC_UNUSED_PARAM(newPosition);
    // should be overriden
}

void CCParticleSystem::postStep()
{
    // should be overriden
}

// ParticleSystem - CCTexture protocol
void CCParticleSystem::setTexture(CCTexture2D* var)
{
    CC_SAFE_RETAIN(var);
    CC_SAFE_RELEASE(m_pTexture);
    m_pTexture = var;

    // If the new texture has No premultiplied alpha, AND the blendFunc hasn't been changed, then update it
    if( m_pTexture && ! m_pTexture->getHasPremultipliedAlpha() &&
        ( m_tBlendFunc.src == CC_BLEND_SRC && m_tBlendFunc.dst == CC_BLEND_DST ) )
    {
        m_tBlendFunc.src = GL_SRC_ALPHA;
        m_tBlendFunc.dst = GL_ONE_MINUS_SRC_ALPHA;
    }
}

CCTexture2D * CCParticleSystem::getTexture()
{
    return m_pTexture;
}

// ParticleSystem - Additive Blending
void CCParticleSystem::setIsBlendAdditive(bool additive)
{
    if( additive )
    {
        m_tBlendFunc.src = GL_SRC_ALPHA;
        m_tBlendFunc.dst = GL_ONE;
    }
    else
    {
        if( m_pTexture && ! m_pTexture->getHasPremultipliedAlpha() )
        {
            m_tBlendFunc.src = GL_SRC_ALPHA;
            m_tBlendFunc.dst = GL_ONE_MINUS_SRC_ALPHA;
        }
        else
        {
            m_tBlendFunc.src = CC_BLEND_SRC;
            m_tBlendFunc.dst = CC_BLEND_DST;
        }
    }
}

bool CCParticleSystem::getIsBlendAdditive()
{
    return( m_tBlendFunc.src == GL_SRC_ALPHA && m_tBlendFunc.dst == GL_ONE);
}

// ParticleSystem - Properties of Gravity Mode
void CCParticleSystem::setTangentialAccel(float t)
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    modeA.tangentialAccel = t;
}

float CCParticleSystem::getTangentialAccel()
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    return modeA.tangentialAccel;
}

void CCParticleSystem::setTangentialAccelVar(float t)
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    modeA.tangentialAccelVar = t;
}

float CCParticleSystem::getTangentialAccelVar()
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    return modeA.tangentialAccelVar;
}

void CCParticleSystem::setRadialAccel(float t)
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    modeA.radialAccel = t;
}

float CCParticleSystem::getRadialAccel()
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    return modeA.radialAccel;
}

void CCParticleSystem::setRadialAccelVar(float t)
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    modeA.radialAccelVar = t;
}

float CCParticleSystem::getRadialAccelVar()
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    return modeA.radialAccelVar;
}

void CCParticleSystem::setGravity(const CCPoint& g)
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    modeA.gravity = g;
}

const CCPoint& CCParticleSystem::getGravity()
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    return modeA.gravity;
}

void CCParticleSystem::setSpeed(float speed)
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    modeA.speed = speed;
}

float CCParticleSystem::getSpeed()
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    return modeA.speed;
}

void CCParticleSystem::setSpeedVar(float speedVar)
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    modeA.speedVar = speedVar;
}

float CCParticleSystem::getSpeedVar()
{
    CCAssert( m_nEmitterMode == kCCParticleModeGravity, "Particle Mode should be Gravity");
    return modeA.speedVar;
}

// ParticleSystem - Properties of Radius Mode
void CCParticleSystem::setStartRadius(float startRadius)
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    modeB.startRadius = startRadius;
}

float CCParticleSystem::getStartRadius()
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    return modeB.startRadius;
}

void CCParticleSystem::setStartRadiusVar(float startRadiusVar)
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    modeB.startRadiusVar = startRadiusVar;
}

float CCParticleSystem::getStartRadiusVar()
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    return modeB.startRadiusVar;
}

void CCParticleSystem::setEndRadius(float endRadius)
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    modeB.endRadius = endRadius;
}

float CCParticleSystem::getEndRadius()
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    return modeB.endRadius;
}

void CCParticleSystem::setEndRadiusVar(float endRadiusVar)
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    modeB.endRadiusVar = endRadiusVar;
}

float CCParticleSystem::getEndRadiusVar()
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    return modeB.endRadiusVar;
}

void CCParticleSystem::setRotatePerSecond(float degrees)
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    modeB.rotatePerSecond = degrees;
}

float CCParticleSystem::getRotatePerSecond()
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    return modeB.rotatePerSecond;
}

void CCParticleSystem::setRotatePerSecondVar(float degrees)
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    modeB.rotatePerSecondVar = degrees;
}

float CCParticleSystem::getRotatePerSecondVar()
{
    CCAssert( m_nEmitterMode == kCCParticleModeRadius, "Particle Mode should be Radius");
    return modeB.rotatePerSecondVar;
}

bool CCParticleSystem::getIsActive()
{
    return m_bIsActive;
}

unsigned int CCParticleSystem::getParticleCount()
{
    return m_uParticleCount;
}

float CCParticleSystem::getDuration()
{
    return m_fDuration;
}

void CCParticleSystem::setDuration(float var)
{
    m_fDuration = var;
}

const CCPoint& CCParticleSystem::getSourcePosition()
{
    return m_tSourcePosition;
}

void CCParticleSystem::setSourcePosition(const CCPoint& var)
{
    m_tSourcePosition = var;
}

const CCPoint& CCParticleSystem::getPosVar()
{
    return m_tPosVar;
}

void CCParticleSystem::setPosVar(const CCPoint& var)
{
    m_tPosVar = var;
}

float CCParticleSystem::getLife()
{
    return m_fLife;
}

void CCParticleSystem::setLife(float var)
{
    m_fLife = var;
}

float CCParticleSystem::getLifeVar()
{
    return m_fLifeVar;
}

void CCParticleSystem::setLifeVar(float var)
{
    m_fLifeVar = var;
}

float CCParticleSystem::getAngle()
{
    return m_fAngle;
}

void CCParticleSystem::setAngle(float var)
{
    m_fAngle = var;
}

float CCParticleSystem::getAngleVar()
{
    return m_fAngleVar;
}

void CCParticleSystem::setAngleVar(float var)
{
    m_fAngleVar = var;
}

float CCParticleSystem::getStartSize()
{
    return m_fStartSize;
}

void CCParticleSystem::setStartSize(float var)
{
    m_fStartSize = var;
}

float CCParticleSystem::getStartSizeVar()
{
    return m_fStartSizeVar;
}

void CCParticleSystem::setStartSizeVar(float var)
{
    m_fStartSizeVar = var;
}

float CCParticleSystem::getEndSize()
{
    return m_fEndSize;
}

void CCParticleSystem::setEndSize(float var)
{
    m_fEndSize = var;
}

float CCParticleSystem::getEndSizeVar()
{
    return m_fEndSizeVar;
}

void CCParticleSystem::setEndSizeVar(float var)
{
    m_fEndSizeVar = var;
}

const ccColor4F& CCParticleSystem::getStartColor()
{
    return m_tStartColor;
}

void CCParticleSystem::setStartColor(const ccColor4F& var)
{
    m_tStartColor = var;
}

const ccColor4F& CCParticleSystem::getStartColorVar()
{
    return m_tStartColorVar;
}

void CCParticleSystem::setStartColorVar(const ccColor4F& var)
{
    m_tStartColorVar = var;
}

const ccColor4F& CCParticleSystem::getEndColor()
{
    return m_tEndColor;
}

void CCParticleSystem::setEndColor(const ccColor4F& var)
{
    m_tEndColor = var;
}

const ccColor4F& CCParticleSystem::getEndColorVar()
{
    return m_tEndColorVar;
}

void CCParticleSystem::setEndColorVar(const ccColor4F& var)
{
    m_tEndColorVar = var;
}

float CCParticleSystem::getStartSpin()
{
    return m_fStartSpin;
}

void CCParticleSystem::setStartSpin(float var)
{
    m_fStartSpin = var;
}

float CCParticleSystem::getStartSpinVar()
{
    return m_fStartSpinVar;
}

void CCParticleSystem::setStartSpinVar(float var)
{
    m_fStartSpinVar = var;
}

float CCParticleSystem::getEndSpin()
{
    return m_fEndSpin;
}

void CCParticleSystem::setEndSpin(float var)
{
    m_fEndSpin = var;
}
float CCParticleSystem::getEndSpinVar()
{
    return m_fEndSpinVar;
}

void CCParticleSystem::setEndSpinVar(float var)
{
    m_fEndSpinVar = var;
}

float CCParticleSystem::getEmissionRate()
{
    return m_fEmissionRate;
}

void CCParticleSystem::setEmissionRate(float var)
{
    m_fEmissionRate = var;
}

unsigned int CCParticleSystem::getTotalParticles()
{
    return m_uTotalParticles;
}

void CCParticleSystem::setTotalParticles(unsigned int var)
{
    CCAssert( var <= m_uAllocatedParticles, "Particle: resizing particle array only supported for quads");
    m_uTotalParticles = var;
}

ccBlendFunc CCParticleSystem::getBlendFunc()
{
    return m_tBlendFunc;
}

void CCParticleSystem::setBlendFunc(ccBlendFunc var)
{
    m_tBlendFunc = var;
}

tCCPositionType CCParticleSystem::getPositionType()
{
    return m_ePositionType;
}

void CCParticleSystem::setPositionType(tCCPositionType var)
{
    m_ePositionType = var;
}

bool CCParticleSystem::getIsAutoRemoveOnFinish()
{
    return m_bIsAutoRemoveOnFinish;
}

void CCParticleSystem::setIsAutoRemoveOnFinish(bool var)
{
    m_bIsAutoRemoveOnFinish = var;
}

int CCParticleSystem::getEmitterMode()
{
    return m_nEmitterMode;
}

void CCParticleSystem::setEmitterMode(int var)
{
    m_nEmitterMode = var;
}

// ParticleSystem - methods for batchNode rendering

CCParticleBatchNode* CCParticleSystem::getBatchNode(void)
{
    return m_pBatchNode;
}

void CCParticleSystem::setBatchNode(CCParticleBatchNode* batchNode)
{
    if( m_pBatchNode != batchNode ) {

        m_pBatchNode = batchNode; // weak reference

        if( batchNode ) {
            //each particle needs a unique index
            for (int i = 0; i < m_uTotalParticles; i++)
            {
                m_pParticles[i].atlasIndex=i;
            }
        }
    }
}

//don't use a transform matrix, this is faster
void CCParticleSystem::setScale(float s)
{
    m_bTransformSystemDirty = true;
    CCNode::setScale(s);
}

void CCParticleSystem::setRotation(float newRotation)
{
    m_bTransformSystemDirty = true;
    CCNode::setRotation(newRotation);
}

void CCParticleSystem::setScaleX(float newScaleX)
{
    m_bTransformSystemDirty = true;
    CCNode::setScaleX(newScaleX);
}

void CCParticleSystem::setScaleY(float newScaleY)
{
    m_bTransformSystemDirty = true;
    CCNode::setScaleY(newScaleY);
}

NS_CC_END

redpajama_set_name: RedPajamaGithub


text:
Wilson County plans anti-tobacco pitch to young athletes
Andy Humbles
ahumbles@tennessean.com
Wilson County will use a $55,909 grant awarded by the Tennessee Tobacco Settlement Program to discourage sixth-graders and young athletes from using tobacco.
All counties will receive money based on population with a total of $15 million to be distributed by the state over three years through 2016.
The Tennessee Department of Health presented a check Thursday to Wilson County, which it will use for a new school curriculum that will target sixth-grade health classes.
The money will also pay for T-shirts for youth baseball and softball players bearing the message: Knock Tobacco Out of the Park. Anti-tobacco advertisements will be placed at county ballparks as well.
"Middle school in general is a key age to whether they will start," said Wilson County Health Department Director Lee A. Wood.
Reach Andy Humbles at 615-726-5939 and on Twitter @AndyHumbles.
What counties are getting
Amounts area counties receive in the first year of the Tennessee Tobacco Settlement Program. Grants will also be awarded in 2015 and 2016:
• Cheatham: $37,437
• Davidson: $375,311
• Dickson: $47,307
• Macon: $26,283
• Maury: $52,082
• Smith: $20,596
• Trousdale: $27,019
• Williamson: $67,701
• Sumner: $80,533
• Rutherford: $103,668
• Wilson: $55,909
9.1% of Wilson County's eighth-graders have had one cigarette or more in the last 30 days, the most recent statistics show.
24.9% of Tennesseans smoke.
20% of high school students use tobacco products.
How to spend the money
Counties can use Tennessee Tobacco Settlement Program money in at least one of three ways:
• Eliminating smoking during pregnancy.
• Reducing infants and small children's exposure to second hand smoke.
• Preventing tobacco use by children and adolescents.

redpajama_set_name: RedPajamaCommonCrawl


text:
Put Downs - Lesson
This lesson focuses on put-down mentality in the media.
Cyberbullying, Movies, Music, Television, Violence
Where no Eagles soar
This winter the Olympics return to Canada for the first time since the Calgary games of 1988. For many people, the most vivid memories of that Olympiad are the colourful stories of some of the less accomplished athletes, such as British ski jumper Michael "Eddie the Eagle" Edwards and the members of the Jamaican bobsled team. It's unlikely, though, that there will be any charming underdogs in this year's Olympiad, as the games become more and more the province of professionals. As audiences and advertising revenues drop, however, will the professionalization of the Games spell their downfall?
Blogging, Internet & Mobile, Sports
Learn to Play, Play to Learn: Building a better educational game
Educational games have had a troubled history. At their worst, they have been neither educational nor games; even at their best they have faced scepticism from educators, game designers and especially children. The standard response to being given an educational game – This is supposed to be fun? – might be compared to finding a Brussels sprout at the centre of a Tootsie Pop. Teachers, meanwhile, are rightly concerned that the educational content of these games might be outweighed by the entertainment value. Already loaded down with curriculum that has to be delivered, many educators feel they don't have the time to spare on anything but direct instruction.
Cyberbullying, Internet & Mobile, Privacy, Professional Development, Resources
Wikiwars
With all the recent attention focused on stories of teenagers charged with distributing child pornography for taking sexually suggestive pictures of themselves, jobs lost due to Facebook and MySpace entries, and libel suits over blog posts, people are justifiably concerned about the permanence of material posted to the Internet. Many a teacher or parent has had to carefully explain to children or teens that whatever they post online might be seen by people other than the intended audience, and might be out there for a very long time.
Where Everybody Knows Your Name
One of the most famous images of online life is the New Yorker cartoon captioned "On the Internet, nobody knows you're a dog." The cartoon, published in 1993, was hugely influential in fixing an image in the public imagination of the Internet as a place where anonymity reigned. It did not take long for that humorous view of anonymity to take on a darker cast, as parents began to fear that Internet predators would use this invisibility to lure their children in the guise of twelve-year-old girls. It's instructive, though, to realize just how long ago this cartoon was published, and how much the Internet has changed since then.
Cyberbullying, Internet & Mobile, Privacy
In time for Safer Internet Day, new resources to fight cyber bullying
Today is Safer Internet Day, an annual international event sponsored by Insafe to promote a safer Internet for children. Recent research on Internet life has shown that the greatest threat to kids online comes from kids themselves, both in the form of risky behaviour and online harassment, or cyber bullying. Cyber bullying can take forms such as harassing e-mails or text messages, social exclusion and spreading private photos and videos, among others, and presents a particular challenge for parents and teachers because it often happens outside the home or classroom. Because the Internet has become an essential part of kids' social lives, cyber bullying can also have more devastating effects as youth feel they have no escape.
Cyberbullying, Events, Internet & Mobile, Professional Development, Resources
Bearing Witness to Bullying
One of the biggest changes in our understanding of bullying has been an increased awareness of the important role witnesses play in any bullying situation. This has been partially because of cyberbullying, which makes it possible for witnesses to be invisible, to join in anonymously, to revictimize a target by forwarding bullying material – or to intervene, to offer support to the target and to bear witness to what they have seen. Just as we're coming to realize how important witnesses to bullying are, though, we need to be careful to recognize how complex their role is.
Queer People in Other Media
Queer people have been involved in producing their own media for as long as alternative media has existed. This landscape has traditionally been dominated by print media such as zines (small-circulation, generally low-cost, publications) and pamphlets or queer film, but with the advent of the electronic age and cheaper and more accessible electronic devices for production, there's been an explosion of queer-produced media of all kinds. The following section explores the ways that queer people have sought to claim space for themselves within media and culture.
Blogging, Comics, Diversity in Media, Queer Representation, Stereotyping, Video Games
Cyberbullying Overview
For most youth, the Internet is all about socializing, and while most of these social interactions are positive, increasing numbers of kids are using the technology to intimidate and harass others – a phenomenon known as cyberbullying.
Cyberbullying, Digital Citizenship, Internet & Mobile
Resources for Teachers - Cyberbullying
Blogging Remove Blogging filter
Cyberbullying Remove Cyberbullying filter


Bill Ochs died on October 5th after a long battle with a cancer he had largely kept to himself, hoping to tell everyone after he had defeated it.
He was a man whose life was music and the music he most loved -- and he loved many kinds of music -- was traditional Irish music.
'Calla's Waltz' -- and Other Irish Banjo Stories!
While reading Dancing to an Irish Reel by Claire Fullerton, I felt as if I had joined a dance myself, part of a song beyond the ordinary world I'd left behind. The setting, Connemara on the West Coast of Ireland, lives on every page—the coastal pathways, a midnight pier, a hillside graveyard.
It's now the third and final day for me at the festival.
Is Romantic Ireland Dead and Gone?
My name is Brendan O'Byrne and I am delighted to be accepted into The Wild Geese community. I am a professional musician, songwriter and composer, and resident musician to Ashford Castle Hotel in Cong, Ireland. I am an artist and love to oil paint.
Alert to Wild Geese Members: There is a special discount available for this seasonal favorite show produced by the Irish Arts Center and Dr. Mick Moloney. contact phone 201-965-6598 or the Wild Geese administrator for further details.
Here's a beautiful old song - in a clip from a festival I played in May of 2014 with my son Jaime.


Last week, we told you about one man's mission to get Steve Harwell, the lead singer of washed-up alternative rock band Smash Mouth, to eat two dozen eggs. A month after John Hendren tweeted at Smash Mouth for the first time, they accepted his challenge on the condition that fans donate $10,000 to St. Jude Children's Research Hospital. In one short week, that goal was exceeded by enthusiastic fans. Today, Harwell told the Huffington Post that he wants to ask his friend Guy Fieri to prepare the eggs. There is also discussion of how Harwell likes his eggs, but if he's going to do it right, they had better be hardboiled like in Cool Hand Luke.


text:
Robert Rauschenberg: Gluts
by Trisha Brown (Author), Mimi Thompson (Author), Susan Davidson (Editor), Philip Rylands (Preface), Robert Rauschenberg (Artist)
In the mid-1980s, Robert Rauschenberg's creative attentions turned toward the visual and plastic properties of junk metal when he began to assemble found metal objects and screenprint his photographic images onto aluminum, bronze, brass and copper. His first body of work in this vein was Gluts, a series begun in 1986 and continued intermittently until 1995, in which ornate metalwork seemingly derived from a bedpost might attach to a slice of mesh wire, or twisted petals of yellow metal might sprout from the remains of an eviscerated toaster. Asked to comment on his novel use of the word "gluts," Rauschenberg said, "It's a time of glut. Greed is rampant... I simply want to present people with their ruins... I think of the Gluts as souvenirs without nostalgia." Published to accompany the Peggy Guggenheim Collection's exhibition Robert Rauschenberg: Gluts (the first show to focus on Rauschenberg's sculpture since 1995), this fully illustrated catalogue features a selection of approximately 40 sculptures drawn from the holdings of institutions and private collections in the United States and abroad. It includes a reassessment of Rauschenberg's work as a sculptor by author and painter Mimi Thompson, an essay by Trisha Brown, an illustrated exhibition history, a preface by Philip Rylands and introduction by Susan Davidson that focuses on Rauschenberg's relationship to the Guggenheim and the artist's engagement with Venice in particular.


today, i read a comment on sonny's blog http://mydunnvillegarden.blogspot.com/ by the "old geezer" http://ronjoewhite.blogspot.com/ and so i went to see who he was.
i found this wonderful testimony that he had written about how the lord had found him and saved him.
WHO IS THE OLD GEEZER?
Believe it or not I wasn't born an Old Geezer.
I lived in Watts and Compton, California until I was almost 8 years old, with my mother, my father and my sister.
When I turned 13 years old I started stealing liquor from some of the local markets and getting drunk with my buddies as often as we could. By the time I was 16 years old I was a full fledged alcoholic. By the time I was 21 years old I had been married and divorced with 2 kids and arrested 3 times for drunk driving.
I remarried in 1972 to a women who had a disabled child and we had one daughter together. She married into hell on earth when she married me and after six years was ready to divorce me.
In 1977 God saved my wife and she started to attend the Baptist church near our home and a bunch of women in her bible study started praying for her rotten drunken husband. In June of 1978 I was at my nieces graduation party (drunk as usual) and fell off some steps and broke out my front tooth. The next day when I woke up I said to myself this has got to stop and I quit drinking 'cold turkey' that day and to this day 'praise be to God' I've never had another drink of alcohol.
Earlier that same year I started a new job as a truck driver in Los Angeles. It was about 1 and 1/2 years later my boss had me work with a Bible thumping Christian truck driver for 2 weeks, who I later found out was a converted drunk. He asked me if I had ever read The Bible. I said yes I read it once about ten years ago. He ask me what did you learn from it? I didn't have a answer for him. He asked me if I had a Bible at home and I said yes my wife had one. He challenged me to go home and read the book of Proverbs.
I went home and opened up my wifes Bible and read through the book of proverbs. I read about wisdom and foolishness, right and wrong living, good and evil and verses about drunks and alcohol that hit me over the head like sludge hammer. I feel under deep conviction about my sinful life and saw myself as living the life of a fool.
It was Easter of 1980 when I shocked the whole family and told them to get ready because we are all going to church. Through personal Bible reading, attending a good Bible teaching church and listening to Christian radio, God had mercy on me and by His grace He gave me the faith to believe on the Lord Jesus Christ and become saved.
Fast forward thirty years: I retired a little over 4 years ago. I've been married going on thirty eight years, I've served in two churches as a deacon, a Sunday school teacher, a usher and have been actively involved in evangelism and discipleship.
The Old Geezer has slowed down a little in the past few years. My primary ministry these days is helping my wife, my kids, grandkids, neighbors and sharing The Good News on: 'The Old Geezer Blog'.
What a wonderful testimony Terry! I'll have to check him out!
Your post on our blog made my day!!! This blogging can get rather lonely when nobody comments. We give so much of ourselves to get our messages and pictures out there. It is nice to feel appreciated. From reading more of your blog, I see how important religion is to you. Every Sunday for over a year, I have posted something "spiritual" on Sunday. I try to incorporate the many religions of Greensboro. So, Sunday would be your day to stop back for a visit. If you haven't discovered them already, visit Monastery Daily Photo and Jerusalem Hills Daily Photo. Even if your religion is different, you will learn a lot.
You have warmed my heart with your precious story of swimming in the ocean (beats shopping any day)!
A strong and honest testimony about God's saving and healing power.
We need to hear more about the wonders of God to get strengthened in our faith.
Too often we willingly share our pains and fears, but like the 9 lepers we go home without thanking.
A bold man has shared his defeats and following great victory.
No we weren't born "Old Geezers," but more and more I see one looking back at me from the mirror.
Praising God for this testimony and it is encouraging me to pray for a relative who has an addiction.
Thank you, Terry, for posting this. It is a wonderful testimony. Isn't it wonderful what our God can do for a person.
He did for me and I thank him for it.


text:
Shaping Our Future
Parishioner Profiles
St. Matthias History
Parish Bulletin Archive
New to St. Matthias?
The Matthian Newsletter
About the Preschool
What is a Sacrament?
What is Faith Formation?
Becoming Catholic – RCIA
Children's Liturgy of the Word Programs
GIFT (Generations in Faith Together)
About Our Ministries
Family & Pastoral Care
Ministries Index
AAA (Annual Appeal)
Family Fun & Food Trucks
The Matthian: Volume 7, Issue 1: Sunday, October 4, 2020
The Matthian:
We're Still Here
Volume 7, Issue 1: Sunday, October 4, 2020
OUTDOOR MASS Each Sunday at 9:30 am
Some ministries have resumed and we are adjusting to virtual meetings.
Welcome to the latest issue of The Matthian.
A nod to the founding members of the parish community, utilizing a new way to communicate and stay in touch.
Feast of St. Francis – Blessing of the Animals
This weekend, parishioners had the option of attending Mass inside the Church on Saturday at 5:00 pm or Sunday morning at 9:30 am outdoors. We celebrated the feast day of St. Francis of Assisi, the patron saint of our Archdiocese and patron saint of animals. Parishioners were invited to bring their dogs and small animals in carriers. 10-15 dogs and one cat was blessed immediately following Mass!
Saturday 5:00 pm Mass is live-streamed to our YouTube channel "Live Streams from St. Matthias in Redwood City." We will no longer be live-streaming the outdoor Mass. Please subscribe to the channel for easier access.
St. Charles will offer one Mass per weekend, Sunday 8:30 am outdoors in the parking lot between the Parish Center and Church. Folks are invited to bring their own chairs. This Mass will also be live streamed to St. Charles' Facebook page.
If you miss the live stream, videos of each weekend Mass are available on YouTube and Facebook and our parish website, www.stmatthiasparish.org.
UPDATE: YouTube no longer supports email notifications to subscribers. Please click here to read updated instructions.
Feast of St. Francis Reflection
Francis of Assisi (1181-1226) was the founder of the Franciscans and is one of the most popular saints in the history of the Church. He is the patron saint of the Archdiocese of San Francisco. Click here to read more.
Subscribe to the St. Matthias Bulletin
Due to the restrictions in place because of the global pandemic, all worship aids were removed from Church except the weekly bulletin. This now contains the readings for Sunday Mass, prayer requests and Mass Intentions. You can receive this resource to your email inbox by subscribing or at Mass. Subscribe to the bulletin by clicking here https://ebulletins.jspaluch.com/#/
NEW: Standing Up to Racism
An Interfaith Discussion: Standing Up to Racism
Will be hosted by Peninsula Multifaith Coalition (of which St. Matthias is a member) on Monday, October 19th at 7:00 pm. This Zoom event will feature speakers: Rev. Kristi Denham – UCC Pastor, April Vargas – Community Organizer, Kelly You & Alex Iliopoulou – Coalition Z, a youth organization promoting positive change and moderated by Rabbi Corey Helfand. Visit https://pmc-standupto-racism.eventbrite.com
League of Women Voters Pros and Cons
We invite you to join us at one of the Zoom webinars listed below. There will be a live Q&A during the presentation.
Sign up at our LWVSSMC website for your choice of webinar. Zoom links for each date will be posted. Copy the Zoom link to your calendar or click on the Zoom link at the time of the webinar. Click here for more information.
Virtual Shadow Dates for Notre Dame High School, Belmont
For families with 8th grade daughters, virtual shadow dates are open at Notre Dame High School in Belmont! 8th graders spend a day experiencing classes, meeting students, and getting a taste of all that Notre Dame has to offer. Click here to read more.
St. Matthias Catholic Church
1685 Cordilleras Road
St. Matthias Mass Schedule
Sunday 9:45 am
St. Charles Mass Schedule
Mon-Fri 5:00 pm
Sunday 8:30, 11:00 am, 5:00pm
© 2017 - 2021 Copyright St. Matthias. All rights reserved.


Hi, my name is Jeremy, owner of James' Interior House Care Maleny. My family and I have lived in Maleny for many years and enjoy being a part of the country style community.
Maleny is one of those places where getting someone to come and clean has its logistical difficulties and that is where I fit in, since I live in the area. People in Maleny like to use local people and local products; it's all about supporting the community.
I have been a James' Home Services franchisee since 2009, commencing my business in Brisbane North West. As we relocated to Maleny I shifted my business here so that I could get the work, family and life balance that I desired.
I receive most of my work now from word of mouth referrals and I pride myself on delivering a service that is top shelf.
The services I provide can be anything from spring cleans, bond cleans, freshen ups of kitchens, bathrooms, toilets, vacuuming and mopping to whatever the client is asking for. No job is too small or too big. All my clients receive a fully written and descriptive quote that is adapted to what you need and how often you need it.
I supply all my own products and equipment and I am professionally trained, so there is nothing for you to do but sit back and enjoy having your home cleaned by an expert.
I deliver a professional service that I guarantee with full insurance and police check accreditation.
Not only do we do a great job but you can also win a holiday travel voucher just by using our services.
James' Interior House Care Maleny | Domestic Cleaners Near You!
I look forward to meeting you and providing you with an obligation-free quote and the opportunity to provide my Gold Medal Service. Call me now on 1800 1 52 637.
Find my business on Facebook here.


We have said it before, but we can not help repeating it: The goal of home theater is not to put you in the movie theater, it is to put you in the movie! And now, as home entertainment systems transition to multi-channel sound, which encompasses home theater, music surround and more, the concept of "virtually" putting you in the action is even more important. Since we started our corporate journey in 1989 this focus has been our guiding principal. Since then we are proud to say that we have become one of the most highly regarded companies specializing in designing complete high performance multi-channel speaker systems. In fact, we are considered by many to rank right up there with the very top surround sound speaker experts.


text:
5 Best Picture Oscar Winners That Launched at the Toronto Film Festival (Photos)
Toronto has become the kingmaker festival for future Best Picture contenders and winners
Jeremy Fuster | September 4, 2019 @ 3:41 PM
While Cannes, Berlin, and Venice are all more exotic and glamorous film festivals, the Toronto International Film Festival has become the kingmaker when it comes to the Academy Awards. Since 2008, all but one of the films that have won the festival's People's Choice Award have gone on to become nominated for Best Picture, and multiple films that premiered there have gone on to win the biggest Oscar prize. Here are five of those films from the past decade.
"Slumdog Millionaire" (2008) -- While the Toronto-to-Oscar pipeline dates back to 1999 with "American Beauty," it reached another level with Danny Boyle's crowd-pleaser about a young Indian man whose childhood helps him conquer "Who Wants to Be A Millionaire." While "Slumdog" premiered at Telluride, it was at Toronto where the buzz hit full swing, winning the People's Choice Award before grossing $377 million worldwide and taking home eight Oscars.
TWC/Lantern Capital
"The King's Speech" (2010) -- Toronto is a major reason why the biopic that has become Tom Hooper's signature role to date beat out more critically acclaimed and popular films like "Inception," "Toy Story 3," and "The Social Network." Hitting every point in the proverbial "Oscar Bait" checklist, "The King's Speech" delighted the industry-heavy crowd in Toronto, creating a buzz among Hollywood's Academy voting bloc so strong that TheWrap's Steve Pond called it as a lock to win Best Picture six months out.
"12 Years A Slave" (2013) -- While a Toronto film can gain buzz for delighting a certain audience's sensibilities, it can do the same by leaving them downright speechless. The careers of Lupita Nyong'o and Chiwetel Ejiofor can be divided into before and after TIFF 2013, as their powerful performances drove home Steve McQueen's message about just how brutal American slavery truly was. Hollywood deemed "12 Years" an important film that must be seen, ensuring its Oscar victory.
Global Road
"Spotlight" (2015) -- Going into TIFF 2015, the big talk was about seeing newly minted Oscar winner Eddie Redmayne play a trans woman in "The Danish Girl" or Charlie Kaufman going stop-motion with "Anomalisa." But out of nowhere came a quiet but riveting retelling of the Boston Globe's 2002 Catholic Church sexual abuse investigation that won over the festivalgoers. "Spotlight" proved to be bigger than the sum of its parts, becoming the first Best Picture winner in over 60 years to only win one other Oscar (Best Adapted Screenplay).
"Green Book" (2018) -- And then there's this year's Best Picture winner, which like "The King's Speech" saw its momentum start with winning the TIFF People's Choice Award. The victory of "Green Book" has been called by some critics the worst Best Picture winner since "Crash," but the Toronto buzz was so strong that nothing could stop it, whether it be other contenders like "Roma" or an interview with the family of Dr. Don Shirley who called the film a "symphony of lies."


text:
Proxies MQTT topics through RabbitMQ broker to Google Cloud Pub Sub.

## Development
Ensure you have Erlang 18.2 and Elixir 1.2 installed. After grabbing the source, enter run (in the amqp_pubsub app):

```
mix deps.get
mix deps.compile
```

## Build
Note: by default, the config environment is set to "dev".

To build amqp_pubsub:

```
mix compile
```

To do a release:

```
mix release
```

To build against prod configuration, compile the project first with prod settings, then do a release :

```
export MIX_ENV=prod
mix compile
mix release
```

To run in interactive shell:

```
iex -S mix
```

## Installation

In `rel/amqp_pubsub/releases/x.y.z`, grab the `amqp_ubsub.tar.gz` file and unpack that to the installation site.

Modify the config file `releases/0.0.1/amqp_pubsub.conf` as needed.

The executable is located at `bin/amqp_pubsub`.


text:
About FOLIO
FOLIO Blog
Platform & Roadmap
Customization & Hosting
Supporting Partners & Contributors
Be Mentioned as a Partner
dev.FOLIO.org
Chat (Sign Up)
Project Wiki
Home About News & Events FOLIO Featured By French Press Agency AEF
FOLIO Featured By French Press Agency AEF
French news agency AEF interviewed Director of Common Service Documentation at Montaigne University, Bordeaux, Grégory Miura about the FOLIO initiative.
Full article in French here: Dépêche AEF n541931
Translated excerpts:
…Grégory Miura, Director of Common Service Documentation at Montaigne University, Bordeaux, explained that French institutions "might now have to make a tough decision between embracing a proprietary technology that would need to guarantee both openness and interoperability, or joining the open source community" …
…The Folio announcement raises the question of strategic positioning in relation to the shared ILS market. This is especially true given that this new collaboration, predominantly North American so far, is open to all public and private institutions that wish to participate, regardless of their size or country of origin…
…According to Miura, the time for change has definitely come: "the last time that French universities were massively re-automated was between 1995 and 2000", when the SUDOC catalog was implemented. Today existing systems mostly date back to this time and are no longer appropriate for the current organization of work or for the new requirements for electronic documentation description and management…
…Miura said that the point of Folio should not be about: "integrating an entire international system as is coming from the United States" in the information system of an institution. For this reason, he insists that French institutions should play an active role in the development of this new service platform not only in order to support an international "vision" based on the protocols, standards and international formats that are "common foundations for the library operations," but also to maintain vigilance on local specificities"…
AEF is an independent and specialized French press agency
The SUDOC catalog is a collection featuring over 10 million bibliographic records (monographs, theses, periodicals series and other types of documents)
© 2016-2020 The Open Library Foundation


Best Of 33 Illustration Seating Chart Maker Band. Here are a few of best rated Best Of 33 Illustration Seating Chart Maker Band pictures on internet. We identified it from reliable resource. It's tagged by seating chart lufthansa a380 and shared at 21 by [author] in [cat] field. We think this kind of Best Of 33 Illustration Seating Chart Maker Band photo can be the most trending niche once we promote it in google plus or facebook.
We attempt to presented in this post since this may be one of wonderful resource for any Best Of 33 Illustration Seating Chart Maker Band ideas. Don't you come here to learn some new unique Best Of 33 Illustration Seating Chart Maker Band ideas? We actually hope you can accept it as one of the reference and many thanks for your effort for browsing our webpage. Make sure you distribute this picture for your beloved mates, families, group via your social networking such as Facebook, Google plus, twitter, Pinterest, or some other bookmarking sites.
These are prepared for obtain, if you'd rather and wish to get it, click save symbol in the page, and it'll be immediately saved to your laptop computer. Finally if you wish to find new and latest photo related to Best Of 33 Illustration Seating Chart Maker Band, please follow us on google plus or book mark this blog, we attempt our best to present you regular up-date with all new and fresh pics. We do hope you love staying right here.


text:
<?php

namespace SimpleNeo4j\ORM\Exception;

class MisconfiguredPropertyException extends \Exception {}


The Social Security Administration (SSA) specifically lists Multiple Sclerosis in its listing of impairments that qualify for disability benefits. However, not all patients who suffer from this condition are eligible for benefits. Your multiple sclerosis symptoms must meet certain criteria for you to qualify for Social Security payments. You must suffer from a severe deterioration in your vision, have difficulty walking or using your hands, suffer partial paralysis of your limbs, have severe muscle fatigue or weakness, suffer from memory loss, or battle nerve disturbances that affect your ability to work.


text:
Oil prices continue to slide after Opec+ agreement
Oil prices remained under pressure on Tuesday, dipping below $30 a barrel before recovering slightly, with traders sceptical that a deal to cut almost 10 per cent of the world's oil supply could prop up a market devastated by the coronavirus pandemic.
Saudi Arabia-led Opec and producers including Russia agreed on Sunday night to remove almost 10m barrels a day from production in May and June — by far the biggest supply cuts agreed by the cartel. But prices fell on Monday and continued to weaken on Tuesday.
Brent, the international benchmark, was down more than 5.5 per cent at $29.92 a barrel in London afternoon trading. West Texas Intermediate, the US marker, was about 5 per cent lower at $21.20.
Although oil prices have rallied 35 per cent from the March low, they remain down more than 50 per cent this year.
Despite the size of the Opec+ cuts, analysts said they would be insufficient and arrive too late to compensate for the loss of up to 30 per cent of global demand as economies shut down to slow the spread of coronavirus.
The IMF also warned on Tuesday that the crisis would leave lasting scars on the global economy, saying most countries should expect their economies to be 5 per cent smaller than planned even after a sharp recovery in 2021.
"If the lukewarm reception of the Opec+ deal is coupled with sluggish economic forecasts, as we suspect it will, any hope of a sustained price rally this year will evaporate faster than the rise in the number of confirmed coronavirus cases," said Tamas Varga of PVM, an oil brokerage.
The oil market also discounted efforts to talk up prices and the impact of the supply reductions, including President Donald Trump's comments on Twitter on Monday that the Opec+ cuts would amount to 20m b/d, not the 9.7m announced in the cartel's communique after the meeting on Sunday night.
Prince Abdulaziz bin Salman, Saudi Arabia's energy minister, made similar claims and pointed to plans by consumer countries to buy 200m barrels of crude oil to fill strategic storage tanks.
But most analysts discounted that figure too, arguing that the stockpiling would have happened anyway because of the huge oil market glut.
"To 'turbo-charge' the impact of the agreement reached, Trump and Opec+ have tried to explain to the market that the cut would be closer to 20m b/d," said Bjornar Tonhaugen, head of oil markets at Rystad Energy. He said this involved "creative accounting", but, even including natural declines, the market losses would "not reach anywhere near 20m b/d".


A decade ago, the entire nation suffered through a financial crisis that led to the brink of a global financial collapse. While Wall Street reckoned with its risky practices, America's families suffered lost wealth of nearly $2 trillion, half of it coming from communities of color who were targeted for high-cost and unsustainable mortgages.
Now a new poll finds that even with the passage of a decade, consumers still support financial regulation and related enforcement. Moreover, when it comes to payday and car-title lending, consumer scorn has grown even stronger over the past year for these small-dollar, debt trap loans that come with triple-digit interest rates.
The 2018 poll, conducted by Lake Research Partners and Chesapeake Beach Consulting, found that among respondents more than 90 percent viewed regulation of financial services to be very important, and registered support across partisan affiliations. Among Republicans, 85 percent supported regulation, compared to 92 percent of independents and 96 percent of Democrats.
Further, a growth in the number of consumers supporting a rule to hold payday lenders accountable increased six percentage points in just the past year. Believing that payday lenders prey upon those who have the fewest financial resources—low-wage earners, working families, and elder Americans, 79 percent of survey respondents want the Consumer Financial Protection Bureau (CFPB) to hold these predatory lenders accountable. A similar poll taken in 2017 tallied support of a CFPB payday rule at 73 percent.
When asked about the lack of enforcement against abuses by payday lenders, 81 percent were concerned about CFPB's inaction. And again, these strong responses crossed party lines: 77 percent of Republicans, 82 percent of independents, and 85 percent of Democrats.
The telephone survey of 1,000 likely 2018 general election voters occurred between June 28 to July 7, 2018, and has a margin of error of +/- 3.1. The effort was jointly underwritten by Americans for Financial Reform (AFR) and the Center for Responsible Lending (CRL).
The current federal deregulation trend can be traced to an executive order signed by President Donald Trump on January 20, 2017, and then published in the Federal Register on February 3. The order directed all federal offices to repeal two existing regulations for every new one proposed. Secondly for Fiscal Year 2017, the incremental cost of every newly proposed regulation could not bring any costs.
To put it plainly, no proposed regulation could cost a cent. The Office of Management and Budget (OMB) was granted the sole authority to review and decide any requested written exceptions.
That official is Mick Mulvaney, who joined the Trump Administration as its OMB Director and has dually served as the Acting CFPB Director since late 2017.
The 2018 survey results speak to the stark differences between CFPB today and its era before Mulvaney's arrival.
As of July 2017, CFPB received approximately 1.3 million consumer complaints that were investigated and in turn led to a series of enforcement actions that totaled $11.9 billion of restitution, forgiveness and other enforcement. As many of these were class action cases, an even larger number of consumers—29 million were helped.
Broad consumer contact and confidence was bolstered by the 41 cities where CFPB held either field hearings on a given issue or public town halls, 169 visits to military installations and 63 appearances to testify before Congress.
"Before Mick Mulvaney's tenure at the agency, the CFPB was a champion for working families — giving back billions of dollars in relief to consumers who were cheated by financial companies," noted Mike Calhoun, CRL president.


Abstract : This paper focuses on blind channel estimation in Alamouti coded systems with one receiving antenna working in indoor scenarios where the flat fading assumption is reasonable. A comparative study of several channel estimation techniques in both simulated and realistic scenarios is presented. The tested methods exploit the orthogonality property of the Alamouti coded channel matrix, and are based on the eigendecomposition of a square matrix made up of second-order statistics (SOS) or higher order statistics (HOS) of the observed signals. An experimental evaluation is carried out on a testbed developed at the University of A Coruña (UDC) and operating at 2.4 GHz. The results show the superior performance of the SOS-based blind channel estimation technique in both line of sight (LOS) and non-LOS (NLOS) channels.


071BLES 004726. 472BLES 006673. 071BLUS 31207123BLES 002531. BLUS 307216. 74BLES 019926. 32BLUS 303563.
If you don't want to spend much on the table or you want to buy them for your kids to try out, buy a table made from different materials like particle board. A particle board is a material which isn't durable and it can bend over time, due to humidity. That tables are light, don't last long and they are very cheap. If you want to buy a test game and you expect from it to fall apart, then particle board is a solution for you. Bismarc Fiel C. Rabang is currently living in Taguig City but originally from Umingan, Pangasinan.


For over forty years, the Summer Research Laboratory at the University of Illinois at Urbana-Champaign has provided scholars from around the world with the opportunity to work in our Library's famous collections in Russian, East European, and Eurasian Studies.
We are pleased to announce that we will be holding the Summer Research Laboratory again this coming year, from June 11 to August 3, 2018. In addition, we are piloting a new program for scholars interested in visiting our campus during the academic year, from November 2017 to May 2018, called the Open Research Laboratory.
With hundreds of thousands of volumes in Russian, East European, and Eurasian languages, alongside extensive microfilm collections of rare and archival materials, the University Library at Illinois ranks among the best research collections in the world. Our Research Laboratory programs provide scholars with the opportunity to work extensively with these resources, at any stage of their work. Many important books and articles have been written in our collections over the years. Graduate students find a trip to Illinois an excellent way to plan their research and begin work on their dissertations.
* Full access to our Library and its physical and electronic collections.
* One on one research consultations with the experienced bibliographers of our Slavic Reference Service.
* Access to scholarly programming and discussion groups on our campus throughout their stay, to help them meet other scholars and learn about new research in progress.
Graduate students, academics, independent scholars, librarians, and government employees are encouraged to apply.
Both programs offer some financial aid in the form of housing and travel stipends, with minor differences as described below. They are made possible by a generous grant from the U.S. Department of State's Title VIII Grant Program. These stipends are available only to U.S. citizens, and are intended to support projects that are relevant to contemporary policy questions.
The ORL is aimed at scholars who wish to visit Illinois any time between November 2017 and May 15, 2018. Applications are now being accepted on a rolling basis. Priority consideration for Spring 2018 will be given to applications received by January 15, 2018.
The SRL is open to all scholars with research interests in Russian, East European and Eurasian Studies for eight weeks this coming summer, from June 11 until August 3, 2018. Each year, during the SRL, we host research workshops and training sessions that may be of interest to visitors: please see here for details.
* travel grants of up to $500 in support of their trip to Urbana-Champaign.
Applications will open on December 2017, with the deadline for grant funding being March 15, 2018. REEEC will continue to accept applications for the Summer Research Lab after the grant deadline, but they will be at a lower priority for housing and travel funds.
The 21st Biennial Conference on Balkan and South Slavic Linguistics, Literature and Folklore will take place from May 24-26, 2018 at Montana State University Billings, in Billings, Montana, USA. Please distribute this message to any of your colleagues who may be interested in participating in this conference.
The conference organizers are now accepting proposals for papers that treat some aspect of Balkan and/or South Slavic linguistics, literature, folklore, or culture. Abstracts should be maximum one page, including examples and bibliography, 12-point font, at least 1" margins, and should not contain name(s) or affiliations(s) of the author(s).
Abstracts should be submitted as an email attachment in PDF format to the conference organizer, Elena Petroska, at the conference email address (bssc2018@msubillings.edu) The paper title, author name(s), affiliation(s), and contact information should be given in the body of the email. The abstract itself should have only the title.
More information about travel arrangements, hotels, and area attractions (Yellowstone and Glacier National Parks) will be sent out later in the year.
The Romanian National Committee of AIESEE has the pleasure to announce the main topic of the 12th Congress of our Association: "Political, Social and Religious Dynamics in South-East Europe". Herewith you will find 33 sessions proposed for this occasion. As usual, the working languages will be French and English.
The congress will be held in Bucharest, between 2 and 7 September 2019 and will be opened to all members and collaborators of AIESSE, as well as to young researchers and PhD students. We would be grateful to you for widely spreading this information to all the institutions and the people who might be interested to participate in the congress.
The details about the registration fee, accommodation and other practical aspects will be communicated in the next letters.
We kindly ask you to send us the titles and abstracts of your contributions at the address congress2019@aiesee.org by 20 December 2017. Please indicate the session of the congress in which you wish to participate.
The triennial International Conference of the AHA affiliate Society for Romanian Studies, "Looking Forward Through the Past," will be held June 26-30, 2018, in București, Romania. In 1918, the National Assembly at Alba Iulia proclaimed the unity of all territories inhabited by Romanians and thereby laid the foundation for the modern Romanian state. Yet the proclamation also insisted on a wide range of principles and forward looking reforms from full rights for all (including ethnic and religious minorities, press, and right to assembly) to land reform and a democratic political system. This unique historical moment arguably represents in a nutshell the issues and dimensions associated with questions of a Romanian identity, a national consciousness and culture, the place of intellectuals in Romanian public life, as well as the politics, policies, and economics of Romanian development, including in comparative and international perspective. "Marea Unire" also served as midwife to the birth of Romanian Studies.
The SRS wishes to take the 100th anniversary of this unique moment in Romanian history as an invitation to reflect upon the past, reassess the moment's impact on the present, and draw lessons for the future, including for Romanian Studies. The conference aims at taking a fresh look at the very creation of contemporary modern Romania. We wish to examine the significance of this historical moment for Romania and Moldova's historical trajectories, domestically and within the wider European, Eurasian and even international contexts with the help of broad historical, political, literary, and cultural disciplinary and interdisciplinary inquiries. We welcome proposals for papers, panels and roundtables from junior and senior scholars working in a variety of disciplines: history, sociology, anthropology and ethnography, political science, philosophy, law and justice studies, literature and linguistics, economics, business, international affairs, religious, gender and sexuality studies, film and media studies, art history, music, architecture, and education, among others.
The language of the conference is English. Submissions and presentations in French and German will be considered, if they are for full panels or roundtables with members from more than one university. Proposals for individual papers, panels, roundtables, book or movie presentations, and art installations should be sent by September 25, 2017 to srs2018conference@gmail.com. Participants will be notified of the acceptance of their proposal by December 4, 2017.
Individual paper proposals should include title, a brief abstract of up to 500 words, a short c.v., and contact information of the presenter. Proposals for panels including 3-4 papers, one chair, and 1-2 discussants should provide a title and description of the panel topic, abstracts of all papers, short c.v., and contact information for all participants. Panel participants should be drawn from at least two different universities. Roundtable proposals of 3-5 participants should include title and description of the topic, short c.v., and contact information for all participants. In addition, the conference organizers will accept proposals for presentations of books, movies and art installations; proposals should include a title, a description, short c.v., and contact information.
Conference registration fees: The fees are 65 USD for scholars from North America and Western Europe; 65 RON for scholars from Romania, Moldova and parts east; and 15 USD for graduate students from all countries. All these conference registration fees include SRS membership for 2018. All conference participants must pay the registration fee for their names to be included in the final program.
To support graduate student scholarship and international participation in the field of Southeast European Studies, the Southeast European Studies Association (SEESA) has established the SEESA Travel Grants to subsidize travel costs for the presentation of papers at international, national, regional, or state conferences. In 2018, the grants will be awarded to graduate students for attendance and presentation at the 21st Biennial Conference on Balkan and South Slavic Linguistics, Literature and Folklore, which will take place at Montana State University, in Billings, Montana, USA, May 24-26, 2018.
Applicants should submit their abstract of no fewer than 500 words, proof that the abstract has been accepted, a CV, a short bibliography of their paper and proof of student status as an email attachment to Bavjola Shatro [shatro.uamd.edu@gmail.com]. Author name(s), affiliation(s), and contact information should be written below the title of the paper.
Questions about the conference may be directed to Bavjola Shatro.
An International Scholarly Conference organized by the Max van der Stoel Institute at South East European University and the Research Center for Areal Linguistics at the Macedonian Academy of Arts and Sciences Balkan peoples in the course of centuries of living in a multicultural and multilingual environment have attempted to interpret the world around them in a common fashion while at the same time preserving a variety of distinctive features, such as language and dialect. Significant cultural interactions, especially during the attested period of the Balkan Linguistic League, have brought about the convergence of inherited linguistic structures in the respective Balkan languages combined with varieties of common lexical elements, all conducive to more effective communication among the peoples involved.
At a time when some political actors are seeking to convince various publics that "they have nothing a common" (a phrase deployed stridently during the Yugoslav Wars of Succession), this conference seeks to bring new perspectives to the roles of multiculturalism and language contact as vital factors in mutual understanding and a shared worldview, a topic that is both timely and in need of deeper scholarly engagement. Papers dealing with the peoples and languages of the Balkans (as well as Balkan peoples and languages living beyond the Balkans) are especially welcome, but any paper relevant to the main themes of the conference is eligible to be submitted for consideration (see below).
The conference will be held 31 August - 1 September 2017 at the Campus of Southeast European University in Tetovo.
The organizers will provide accommodation for participants from abroad.
Abstracts should contain the title, the author's name and affiliation, and a brief description of not more than 500 words (excluding references). The file should be saved as doc, docx, or pdf and the name should be LAST-NAME_TITLE-KEYWORD. Abstracts should be sent as an attachment to mvdsi@seeu.edu.mk no later than 15 May 2017. Potential participants will be informed of their acceptance by 30 May 2017.
In addition, the SRS provides access to extensive print, digital, and microform holdings relating to Eastern Europe, including rare materials acquired via Keith Hitchins and other noted scholars.


If you take your baseball as seriously as we do, you've got to read these books! Vicariously visit the stadium ("A Field Guide to Fenway Park" by Nichole Wadsworth Schrafft), relive the best moments in Red Sox history ("Reversing the Curse" by Dan Shaughnessy), meet your favorite players ("Big Papi" by David Ortiz with Tony Massarotti), and ask all those question's you've always wondered about ("Why is the Foul Pole Fair?" by Vince Staten). We've got something for every fan, available to borrow from the Goffstown Public Library.
Want more? Read about the Library of Congress' current Major Exhibition on Baseball at www.loc.gov/exhibitions/baseball-americana, and view highlights online.


text:
Type: Posts; User: Amuro Aznable
Thread: A Tale of Two Zetas and Char's Heel Turn
by Amuro Aznable
Re: A Tale of Two Zetas and Char's Heel Turn
Puru II isn't in the final shot. She dies after helping Judau navigate from Axis.
TPTB = The Powers That Be
@Nightchaser
Did you like the Dublin Colony Arc with the Z characters teaming up (in a manner of speaking) with the ZZ characters?
It's really the high water mark of the show. Makes you want...
Thread: Would anyone else like to see them Remake F91 as it was originally sopost to be?
Re: Would anyone else like to see them Remake F91 as it was originally sopost to be?
I've been rewatching F91 a lot these past two weeks. I didn't like it very much when I saw it years ago. Now I feel it's an underappreciated gem that deserves more exposure. I wouldn't want to see it...
Thread: Mobile Suit Gundam: The Origin (May contain spoilers)
Re: Mobile Suit Gundam: The Origin (May contain spoilers)
Add Delaz and Ginias Sahalin (Gihren loyalists) to the missed opportunity. Throughout The Origin, we saw Dozle and Kycillia build up and recruit their loyal followers (Ramba Ral, M'Quve, the Black...
The sixth episode of The Origin (Dub and Sub) are both on Hulu now.
I'm about to start watching now.
https://www.hulu.com/mobile-suit-gundam-the-origin
EDIT TO ADD:
Just finished the...
Thread: Trying to Identify an episode
Re: Trying to Identify an episode
It doesn't appear to be a collection of images from one episode. The vinyl collection is for MSG The Movie 3: Encounters In Space.
However, the third MSG movie is comprised of episodes from the...
Oh, yeah! I caught the voice of Paul St. Peter as well. The dude is a major Gundam alumni.
He voiced:
South Burning - 0083 Stardust Memory
Nanto Roos - F91
Carl Hutter- SD Force
I finally watched episode 5 and I thought it was terrific. This and episode 4 are the best The Origin has to offer by far.
I liked how Char wasn't the focus in this episode. The early Origin...
Thread: The Zabi Dynasty: Who Had The Best Subordinates During The OYW?
Re: The Zabi Dynasty: Who Had The Best Subordinates During The OYW?
Hail Kycilia!
https://78.media.tumblr.com/1366700669136df65dfee72bb62f7dd0/tumblr_p5x0hvaDKD1r4pq4io1_1280.jpg
From Gihren's Greed. I think the Sega Saturn game.
Thread: Would you want a "Beltorchika's Children" anime adaptation?
Re: Would you want a "Beltorchika's Children" anime adaptation?
All you would need to do is substitute out Gundam V for Gundam X.
Make Jamil the great-grandson of Char and Nanai
March 7, 2018, 10:44 PM
I'd be up for a Char Counterattack: A New Translation, sure. ;) Lol
Give us Hathaway's Flash too!
Maybe they could "fix" ZZ while they're at it. Make it more in line with Zeta and the lead...
February 18, 2018, 9:32 PM
Thread: Your Favorite Songs From the Gundam Universe
Re: Your Favorite Songs From the Gundam Universe
Shining Finger
https://www.youtube.com/watch?v=ny24zPeQLks
When the Dragon swims, All things will be at the End
https://www.youtube.com/watch?v=vE7OS_fGz6E
February 11, 2018, 11:37 AM
Yeah, I agree. I'd have to rewatch early Zeta and early ZZ to see which party was more obnoxious. Kamille with his tantrums and drama or Judau with his obnoxious behavior and disregard for...
^ Damn, bruh! You really went in on Char.
I was thinking about Gundam Wing and how it retold the UC stories of MSG, Zeta and CCA in a compressed 50 episodes. Unsurprisingly, ZZ was skipped...
Thread: Why do people always complain about Zeon?
Re: Why do people always complain about Zeon?
The statement was made by Gyunei, who had a Newtype infatuation of Quess and was out to embarrass and humiliate Char by any means. Remember, he wanted to kill Amuro to acquire the Gundam and then...
So, you irritated at people castigating Zeon but praising Char with his CCA mindset? Not sure if that's an equitable double standard. If you had Feddie/Titan fans putting Zeon down, then you'd have...
F91: Eternal Wind
1991 Version
https://www.youtube.com/watch?v=9xNXvo62N_k
https://www.youtube.com/watch?v=y4k0s1Z_2Cs
Triumphant and heroic themes!
https://www.youtube.com/watch?v=_3yY8EncET0
https://www.youtube.com/watch?v=nQgXvmtI_ug
https://www.youtube.com/watch?feature=youtu.be&v=AZ8LtuZyRew
Thread: Trying to Figure out which Gundam series I'm looking for
Re: Trying to Figure out which Gundam series I'm looking for
From the Toonami days, when they had uncut Gundams airing at midnight. Your choices would be between Gundam Wing, 0080 War In the Pocket, 08th MS Team or 0083 Stardust Memory.
For giant...
Pretty cool track and even cooler showcase of the various Gundams.
https://www.youtube.com/watch?v=YIOKEQ_taUU
Also this cover of Gundam Seed's Find The Way is amazing! Vietnamese singer...
Rewatched the episode from the scans you posted, as well as Char's speech to the world in Zeta. It is like you said. Char lost faith in humanity and wanted to accelerate humanity's evolution into...
A Tale of Two Zetas and Char's Heel Turn
Tragedy or Triumph
Which of of Zeta Gundam ending do you prefer?
https://youtu.be/luKWYA_jOlA?t=1225
From an Aqueous Star with Love
https://www.youtube.com/watch?v=XSycojV_L1A
https://www.youtube.com/watch?v=KX63XB2N04A
While she was too young to participate in the OYW, it seems that Kycillia was responsible for mentoring Haman Karn in her cadet days. Likely explains why Haman was such a force in Zeta and compelled...
The Zabi Dynasty: Who Had The Best Subordinates During The OYW?
Gihren Zabi
https://68.media.tumblr.com/2e5c34fa3970fd90f91e9eaf6da6294f/tumblr_ntt1g4DNXw1qendyvo1_500.gif
His subordinates are:
Aiguille Delaz
Ginias Sahalin
Colonel Killing


set of cash flows discounted by interest rate.
lasting for a fixed number of years.
lasting for a fixed number of years with a specified offset.
e.g. A company making no money for three years and then crushin' it year four and onward.


text:
Two USJ-R alumni win in WCOPA 2019
USJ-R Correspondent•August 10, 2019
Long Beach, CALIFORNIA–Two graduates of the University of San Jose-Recoletos garnered multiple awards in the 23rd World Championship of Performing Arts (WCOPA) in Long Beach, California.
They are Vingenr Tan and John Willace Tubalde. The contest was held from July 12 to 21.
Tubalde
Forty-year-old Tan is an alumnus of USJ-R High School batch'99. He showcased his talent in the world stage as he competed in the Senior Vocal Division. He also participated in Group Production, Latin, Broadway, Opera, Variety, and Gospel. He received a Gold Medal for the Group Production, Bronze Medal for Latin, Silver Medal for Broadway, and Gold Medal for Opera.
On the other hand, Tubalde won four gold medals, two silver medals, one bronze medal, and two plaques for being named 'champion of the world' – division winner.
Tan and Tubalde are not the only ones from Cebu competing in the prestigious event.
They were joined by Majolica Santos, Christian Cayobit, Marl Dowling, and Erneville Vinculado. Team Cebu was together with their coordinator and Coach Sandra Namocatcat, who was assisted by vocal coach Denis Namocatcat. The group's National Director is Gerry Mercado while the assistant National Director is Annie Mercado. They were the ones who screened the contenders from all over the Visayas.
The WCOPA Philippine representatives were also given a workshop by the award-winning singer Jed Madela, the first Filipino won the " Grand Champion Performer of the World" title in WCOPA 2005. He is also the Visayas Coach and Coordinator.
According to Tan, the contestants were from 74 countries. Meanwhile, there are 126 delegates from the Philippines competing for the different categories.
WCOPA is the only Olympic-style international meet for aspiring performers that is held annually. It is not just a singing competition. It will also pit musicians, actors and models, dancers and variety artists who will compete before judges from the entertainment industry. "It is said to be an entertainment capital of the world."
For Tan, joining the WCOPA 2019 was his dream. His WCOPA 2019 journey taught him a valuable lesson which is to actualize one's dreams.
Written by: (Jan Angelieka Marie F. Villapez BA-COM4) USJ-R Intern
More posts about: Education
USJ-R Correspondent
Official Correspondent of University of San Jose-Recoletos
← MOA Signing between IC University and UNO-Recoletos
STEP- RITTC holds Training Induction Program →


Today is the second video in the new vegan athletes series and I'm excited to introduce you to a brutally honest spitfire of a woman, Samantha Shorkey.
For those of you not familiar, bikini competition is one of many divisions of competitive female bodybuilding and looks for more of a lean than overtly muscular body.
So enough of me yammering on, let's talk to the newly pro Samantha Shorkey about how she came to be a vegan bikini competitor.
I hope you enjoyed hearing from Samantha on her journey to being a pro vegan bikini competitor. Stay tuned for more with Samantha in this series including what she eats in a day and her thoughts on body image in the bodybuilding community.
This Saturday, June 6th, Samantha has her pro show debut in Austin TX, as part of the Plantbuilt team!
Now I'd love to hear what you thought about Samantha's story- let me know in the comments!
I loved Samantha Shorkey's interview.
It is wonderful to have vegan athletes tell their inspiring stories.
They proof that no one needs to eat animals to be strong and healthy.
Oobe is a star, I vote for her.
wow that's so great to hear! and she is certainly stunning!