text:
//////////////////////////////////////////////////////////////////////////////////////////////////
//
// file: queryFBGeometry.cpp
//
//	Author Sergey Solokhin (Neill3d)
//
//	GitHub page - https://github.com/Neill3d/MoPlugs
//	Licensed under BSD 3-Clause - https://github.com/Neill3d/MoPlugs/blob/master/LICENSE
//
///////////////////////////////////////////////////////////////////////////////////////////////////

#include "queryFBGeometry.h"
#include <GL\glew.h>
//////////////////////////////////////////////////////////////////////////////
// QueryFBGeometry

//! a constructor
QueryFBGeometry::QueryFBGeometry()
	: mNumberOfVertices(0)
	, vertices(nullptr)
{
	mVisualAlignMatrix.Identity();
	//mAnimTranslation = nullptr;
	//mAnimRotation = nullptr;
}

QueryFBGeometry::QueryFBGeometry(FBModel *pModel, FBModel *pColModel, bool doAlign, FBModel *pParentModel, FBMatrix *alignMatrix, FBMatrix *visualAlignMatrix)
	: mNumberOfVertices(0)
	, vertices(nullptr)
{
	mVisualAlignMatrix.Identity();
	Prep(pModel, pColModel, doAlign, pParentModel, alignMatrix, visualAlignMatrix);
	//mAnimTranslation = nullptr;
	//mAnimRotation = nullptr;
}

//! a destructor
QueryFBGeometry::~QueryFBGeometry()
{}

// DONE: apply transform matrix for vertices
bool QueryFBGeometry::Prep(FBModel *pModel, FBModel *pColModel, bool doAlign, FBModel *pParentModel, FBMatrix *alignMatrix, FBMatrix *visualAlignMatrix)
{
	if (pModel == nullptr || pColModel == nullptr)
		return false;

	mModel = pModel;
	mCollision = pColModel;

	FBGeometry *pGeom = pColModel->Geometry;
	if (pGeom == nullptr)
		return false;

#ifdef ORSDK2013
	mNumberOfVertices = pGeom->VertexCount();
	vertices = pGeom->GetVertexes();
#else
	vertices = pGeom->GetPositionsArray(mNumberOfVertices);
#endif

	if (visualAlignMatrix)
		mVisualAlignMatrix = *visualAlignMatrix;
	else
		mVisualAlignMatrix.Identity();

	mTMAsACollision = (pModel == pColModel);

	//
	//

	FBVector3d rot, scale, pos, posCol;
	FBQuaternion q, q1, q2;

	pModel->GetVector(pos, kModelTranslation, true);
	pColModel->GetVector(rot, kModelRotation, true);
	pColModel->GetVector(scale, kModelScaling, true);
	pColModel->GetVector(posCol, kModelTranslation, true);

	FBTRSToMatrix( initMatrix, FBTVector(posCol[0]-pos[0], posCol[1]-pos[1], posCol[2]-pos[2]), rot, FBSVector(scale[0], scale[1], scale[2]) );

	FBMatrix identity;
	identity.Identity();

	if (initMatrix != identity)
	{
		bakeVertices.resize(mNumberOfVertices);

		for (int i=0; i<mNumberOfVertices; ++i)
		{
			FBVertexMatrixMult( bakeVertices[i], initMatrix, vertices[i] );
		}

		vertices = &bakeVertices[0];
	}

	// apply align pivot rotation
	mInvAlignMatrix.Identity();

	if (alignMatrix)
	{
		initMatrix = *alignMatrix;

		if (initMatrix != identity)
		{
			bakeVertices.resize(mNumberOfVertices);

			for (int i=0; i<mNumberOfVertices; ++i)
			{
				FBVertexMatrixMult( bakeVertices[i], initMatrix, vertices[i] );
			}

			vertices = &bakeVertices[0];
		}

		// transform back offset
		mInvAlignMatrix = *alignMatrix;
		mInvAlignMatrix.Transpose();
	}

	return true;
}

void QueryFBGeometry::GetBoundingBox(float *min_vector, float *max_vector) const
{
#ifdef ORSDK2013
	if (nullptr == mCollision)
		return;
#else
	if (mCollision.Ok() == false)
		return;
#endif
	mCollision->GetBoundingBox( (FBVector3d&) pMin, (FBVector3d&) pMax);

	FBVector4d min4( pMin[0], pMin[1], pMin[2], 1.0 );
	FBVector4d max4( pMax[0], pMax[1], pMax[2], 1.0 );

	FBVectorMatrixMult( min4, initMatrix, min4 );
	FBVectorMatrixMult( max4, initMatrix, max4 );

	for (int i=0; i<3; ++i)
	{
		min_vector[i] = min4[i];
		max_vector[i] = max4[i];
	}
}

void QueryFBGeometry::GetBoundingBoxD(double *min_vector, double *max_vector) const
{
#ifdef ORSDK2013
	if (nullptr == mCollision)
		return;
#else
	if (mCollision.Ok() == false)
		return;
#endif
	mCollision->GetBoundingBox( (FBVector3d&) pMin, (FBVector3d&) pMax);

	FBVector4d min4( pMin[0], pMin[1], pMin[2], 1.0 );
	FBVector4d max4( pMax[0], pMax[1], pMax[2], 1.0 );

	FBVectorMatrixMult( min4, initMatrix, min4 );
	FBVectorMatrixMult( max4, initMatrix, max4 );

	for (int i=0; i<3; ++i)
	{
		min_vector[i] = min4[i];
		max_vector[i] = max4[i];
	}
}

void QueryFBGeometry::PrepMatrix(bool global) const
{
#ifdef ORSDK2013
	if (nullptr != mModel)
#else
	if (mModel.Ok() )
#endif
	{
		mModel->GetMatrix( (FBMatrix&) matrix, kModelTransformation, global);
		mModel->GetVector( (FBVector3d&)mPosition, kModelTranslation, global);
		mModel->GetVector( (FBVector3d&)mRotation, kModelRotation, global);
		FBRotationToQuaternion( (FBQuaternion&)mQuat, mRotation, kFBZYX);
		mModel->GetVector( (FBVector3d&)mScale, kModelScaling, global);
	}
}

const double *QueryFBGeometry::GetMatrix(bool global) const
{
#ifdef ORSDK2013
	if (nullptr != mModel)
#else
	if (mModel.Ok())
#endif
	{
		mModel->GetMatrix( (FBMatrix&) matrix, kModelTransformation, global);
	}
	return matrix;
}

void QueryFBGeometry::GetMatrixTR_f(bool global, float *values) const
{
#ifdef ORSDK2013
	if (nullptr != mModel)
#else
	if (mModel.Ok() )
#endif
	{
		FBModel *pParent = mModel->Parent;
		if (global == false && pParent != nullptr)
		{
			FBMatrix parentMatrix;

			pParent->GetMatrix( (FBMatrix&) parentMatrix, kModelRotation, true);
			pParent->GetVector( (FBVector3d&) mPosition, kModelTranslation, true);

			//parentMatrix.Set( mInvAlignMatrix );
			memcpy( parentMatrix, mInvAlignMatrix, sizeof(double) * 16 );

			parentMatrix[12] = mPosition[0];
			parentMatrix[13] = mPosition[1];
			parentMatrix[14] = mPosition[2];

			//
			mModel->GetMatrix( (FBMatrix&) matrix, kModelRotation, true);
			mModel->GetVector( (FBVector3d&)mPosition, kModelTranslation, true);

			matrix[12] = mPosition[0];
			matrix[13] = mPosition[1];
			matrix[14] = mPosition[2];

			//
			FBGetLocalMatrix( (FBMatrix&) matrix, parentMatrix, matrix );
		}
		else
		{
			mModel->GetMatrix( (FBMatrix&) matrix, kModelRotation, global);
			mModel->GetVector( (FBVector3d&)mPosition, kModelTranslation, global);

			FBMatrixMult( (FBMatrix&) matrix, matrix, mInvAlignMatrix );

			memcpy( matrix, mInvAlignMatrix, sizeof(double) * 16 );
			//matrix.Set( mInvAlignMatrix );
			//matrix.Set(mInvAlignMatrix.GetData());

			matrix[12] = mPosition[0];
			matrix[13] = mPosition[1];
			matrix[14] = mPosition[2];
		}

		for (int i=0; i<16; ++i)
			values[i] = (float) matrix[i];
	}
}

void QueryFBGeometry::GetMatrixTR(bool global, double *values) const
{
#ifdef ORSDK2013
	if (nullptr != mModel)
#else
	if (mModel.Ok() )
#endif
	{
		FBModel *pParent = mModel->Parent;
		if (global == false && pParent != nullptr)
		{
			FBMatrix parentMatrix;

			pParent->GetMatrix( (FBMatrix&) parentMatrix, kModelRotation, true);
			pParent->GetVector( (FBVector3d&) mPosition, kModelTranslation, true);

			//parentMatrix.Set( mInvAlignMatrix );
			memcpy( parentMatrix, mInvAlignMatrix, sizeof(double) * 16 );

			parentMatrix[12] = mPosition[0];
			parentMatrix[13] = mPosition[1];
			parentMatrix[14] = mPosition[2];

			//
			mModel->GetMatrix( (FBMatrix&) matrix, kModelRotation, true);
			mModel->GetVector( (FBVector3d&)mPosition, kModelTranslation, true);

			matrix[12] = mPosition[0];
			matrix[13] = mPosition[1];
			matrix[14] = mPosition[2];

			//
			FBGetLocalMatrix( (FBMatrix&) matrix, parentMatrix, matrix );
		}
		else
		{
			mModel->GetMatrix( (FBMatrix&) matrix, kModelRotation, global);
			mModel->GetVector( (FBVector3d&)mPosition, kModelTranslation, global);

			FBMatrixMult( (FBMatrix&) matrix, matrix, mInvAlignMatrix );

			memcpy( matrix, mInvAlignMatrix, sizeof(double) * 16 );
			//matrix.Set( mInvAlignMatrix );
			//matrix.Set(mInvAlignMatrix.GetData());

			matrix[12] = mPosition[0];
			matrix[13] = mPosition[1];
			matrix[14] = mPosition[2];
		}

		for (int i=0; i<16; ++i)
			values[i] = matrix[i];
	}
}

void QueryFBGeometry::GetVisualAlignMatrix(float *values) const
{
	for (int i=0; i<16; ++i)
		values[i] = (float) mVisualAlignMatrix[i];
}

void QueryFBGeometry::GetVisualAlignMatrixD(double *values) const
{
	for (int i=0; i<16; ++i)
		values[i] = mVisualAlignMatrix[i];
}

const double *QueryFBGeometry::GetPosition(bool global) const
{
#ifdef ORSDK2013
	if (nullptr != mModel)
#else
	if (mModel.Ok() )
#endif
	{
		mModel->GetVector( (FBVector3d&)mPosition, kModelTranslation, global);
	}
	return mPosition;
}

void QueryFBGeometry::GetPositionF(float *values) const
{
	values[0] = (float) mPosition[0];
	values[1] = (float) mPosition[1];
	values[2] = (float) mPosition[2];
}

void QueryFBGeometry::GetPositionD(double *values) const
{
	values[0] = mPosition[0];
	values[1] = mPosition[1];
	values[2] = mPosition[2];
}

const double *QueryFBGeometry::GetRotation(bool global) const
{
#ifdef ORSDK2013
	if (nullptr != mModel)
#else
	if (mModel.Ok() )
#endif
	{
		mModel->GetVector( (FBVector3d&)mRotation, kModelRotation, global);
	}
	return mRotation;
}

void QueryFBGeometry::GetRotationF(float *values) const
{
	values[0] = (float) mRotation[0];
	values[1] = (float) mRotation[1];
	values[2] = (float) mRotation[2];
}

void QueryFBGeometry::GetRotationD(double *values) const
{
	values[0] = mRotation[0];
	values[1] = mRotation[1];
	values[2] = mRotation[2];
}

const double *QueryFBGeometry::GetQuaternion(bool global) const
{
#ifdef ORSDK2013
	if (nullptr != mModel)
#else
	if (mModel.Ok() )
#endif
	{
		mModel->GetVector( (FBVector3d&)mRotation, kModelRotation, global);
	}
	FBRotationToQuaternion( (FBQuaternion&)mQuat, mRotation, kFBZYX);
	return mQuat;
}

void QueryFBGeometry::GetQuaternionF(float *values) const
{
	values[0] = (float) mQuat[0];
	values[1] = (float) mQuat[1];
	values[2] = (float) mQuat[2];
	values[3] = (float) mQuat[2];
}

void QueryFBGeometry::GetQuaternionD(double *values) const
{
	values[0] = mQuat[0];
	values[1] = mQuat[1];
	values[2] = mQuat[2];
	values[3] = mQuat[2];
}

const double *QueryFBGeometry::GetScale(bool global) const
{
#ifdef ORSDK2013
	if (nullptr != mModel)
#else
	if (mModel.Ok() )
#endif
	{
		mModel->GetVector( (FBVector3d&)mScale, kModelScaling, global);
	}
	return mScale;
}

void QueryFBGeometry::GetScaleF(float *values) const
{
	values[0] = (float) mScale[0];
	values[1] = (float) mScale[1];
	values[2] = (float) mScale[2];
}

void QueryFBGeometry::GetScaleD(double *values) const
{
	values[0] = mScale[0];
	values[1] = mScale[1];
	values[2] = mScale[2];
}

const int QueryFBGeometry::GetVertexCount() const {
	return mNumberOfVertices;
}
const float *QueryFBGeometry::GetVertexPosition(const int index) const {
	return vertices[index];
}

//

const int QueryFBGeometry::GetPolyCount() const {
	return 0;
}
const QueryFBGeometry::Poly *QueryFBGeometry::GetPoly(const int index) const {
	return nullptr;
}
/*
// function to record a new keyframe
void QueryFBGeometry::SetAnimNodes(FBAnimationNode *translation, FBAnimationNode *rotation)
{
	mAnimTranslation = translation;
	mAnimRotation = rotation;
}

void QueryFBGeometry::RecordTransform( const double _time, const float *matrix)
{

	if (mPlayerControl.IsRecording && mPlayerControl.GetTransportMode() == kFBTransportPlay)
	{
		FBAnimationNode *Data;

		FBTime fbtime;
		fbtime.SetSecondDouble(_time);

		FBMatrix m;
		for (int i=0; i<16; ++i)
			m[i] = (double) matrix[i];

		if (mAnimTranslation)
		{
			FBTVector Pos( &m[12] );

			Data = mAnimTranslation->GetAnimationToRecord();
			if (Data)
			{
				Data->KeyAdd( fbtime, Pos );	// TODO: how to get time ?!
			}
		}
	}

}
*/

////////////////////////////////////////////////////////////////////////////////////
// QueryLevelGeometry

//! a constructor
LevelGeometry::LevelGeometry()
	: mNumberOfVertices(0)
	, mNumberOfPolys(0)
{
}

LevelGeometry::LevelGeometry( FBComponentList &list )
	: mNumberOfVertices(0)
	, mNumberOfPolys(0)
{
	Prep(list);
}

//! a destructor
LevelGeometry::~LevelGeometry()
{
	Free();
}

//
void LevelGeometry::Prep( FBComponentList &list )
{
	int totalNumberOfVerts = 0;
	int totalNumberOfPolys = 0;

	for (int i=0; i<list.GetCount(); ++i)
	{
		FBModel *pModel = (FBModel*) list[i];
		FBGeometry *pGeometry = pModel->Geometry;
		FBMesh *pMesh = pModel->TessellatedMesh; // (FBMesh*) pGeometry;

		totalNumberOfVerts += pMesh->VertexCount();

		for (int j=0; j<pMesh->PolygonCount(); ++j)
			if (pMesh->PolygonVertexCount(j) <= 4)
			{
				totalNumberOfPolys++;
			}

	}

	Allocate(totalNumberOfVerts, totalNumberOfPolys);

	totalNumberOfVerts = 0;
	totalNumberOfPolys = 0;

	auto dstVertex = mVertices.begin();
	auto dstPoly = mPolys.begin();

	for (int i=0; i<list.GetCount(); ++i)
	{
		FBModel *pModel = (FBModel*) list[i];
		FBGeometry *pGeometry = pModel->Geometry;
		FBMesh *pMesh = pModel->TessellatedMesh; // (FBMesh*) pGeometry;

		FBMatrix tm;
		pModel->GetMatrix(tm);

		//
		int count = 0;

		FBVertex *vertices = nullptr;
#ifdef ORSDK2013
		count = pMesh->VertexCount();
		vertices = pMesh->GetVertexes();
#else
		vertices = pMesh->GetPositionsArray(count);
#endif
		// apply TM to make a finish coords of the vertices
		FBVertex *srcVertex = vertices;

		for (int j=0; j<count; ++j)
		{
			FBVertexMatrixMult( *dstVertex, tm, *srcVertex );
			dstVertex++;
			srcVertex++;
		}

		//
		for (int j=0; j<pMesh->PolygonCount(); ++j)
		{
			int polyVertCount = pMesh->PolygonVertexCount(j);

			if (polyVertCount <= 4)
			{
				mPolys[totalNumberOfPolys].count = polyVertCount;

				// SHIFT indices
				for (int k=0; k<polyVertCount; ++k)
					mPolys[totalNumberOfPolys].indices[k] = totalNumberOfVerts + pMesh->PolygonVertexIndex(j, k);
				mPolys[totalNumberOfPolys].matId = 0;

				totalNumberOfPolys++;
			}
		}

		//
		totalNumberOfVerts += count;
	}
}

const int LevelGeometry::GetVertexCount() const
{
	return (int) mVertices.size();
}

const float *LevelGeometry::GetVertexPosition(const int index) const
{
	return &mVertices[index][0];
}

//

const int LevelGeometry::GetPolyCount() const
{
	return (int) mPolys.size();
}

const LevelGeometry::Poly *LevelGeometry::GetPoly(const int index) const
{
	return &mPolys[index];
}

void LevelGeometry::Allocate(int numberOfVerts, int numberOfPolys)
{
	mVertices.resize(numberOfVerts);
	mPolys.resize(numberOfPolys);

	mNumberOfVertices = numberOfVerts;
	mNumberOfPolys = numberOfPolys;
}

void LevelGeometry::Free()
{
	mNumberOfVertices = 0;
	mNumberOfPolys = 0;

	mVertices.clear();
	mPolys.clear();
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// KDTree
///////////////////////////////////////////////////////////////////////////////////////////////////

KDTree::KDTree()
{
	mTree = nullptr;
}

KDTree::~KDTree()
{
	FreeKDTree();
}

// build K-D Tree for this frame
int KDTree::BuildKDTree(int count, double *positions)
{
	FreeKDTree();

	if (count <= 0) return 0;

	double *ref = new double[count * 3];
	for (int i=0; i<count; i++)
	{
		ref[i] = positions[i*3];
		ref[count + i] = positions[i*3+1];
		ref[count*2 + i] = positions[i*3+2];
	}

	int *index = new int[count];
	for (int i=0; i<count; i++)	index[i] = i;
	mTree = build_kdtree( ref, count, 3, index, count, 0 );
	if (!mTree)
	{
		if(index!=nullptr)
		{
			delete [] index;
			index = nullptr;
		}
		if (ref!=nullptr)
		{
			delete [] ref;
			ref = nullptr;
		}
		return 0;
	}
	mTree->dims = 3;

	if(index!=nullptr)
	{
		delete [] index;
		index = nullptr;
	}
	if (ref!=nullptr)
	{
		delete [] ref;
		ref = nullptr;
	}
	return 1;
}

// free kd-tree
int KDTree::FreeKDTree() {

	if (mTree) {
		free_tree(mTree->rootptr);
		free(mTree);
		mTree = nullptr;
	}
	return 1;
}

int KDTree::SearchForNearest(const double *pos, const double dist) const
{
	if (!mTree) return -1;

	double M=0.0;
	run_queries( mTree->rootptr, (double*) pos, 1, 3, &M, (double*) &dist, 102 ); // RETURN_INDEX - 102
	return (int) M;
}

int KDTree::SearchForNearest(const double *pos, const double dist, double *res) const
{
	if (!mTree) return 0;

	run_queries( mTree->rootptr, (double*)pos, 1, 3, res, (double*) &dist, 101 ); // RETURN_POSITION - 102
	return 1;
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// QueryFBPath3D

QueryFBPath3D::QueryFBPath3D()
{
	mGlobalScaling = 1.0;
	mStep = 0.05;
}

QueryFBPath3D::QueryFBPath3D(FBModelPath3D *pModel, const double globalScaling, const int numberOfSteps)
{
	mGlobalScaling = globalScaling;
	mStep = 0.05;
	Prep(pModel, globalScaling);
}

QueryFBPath3D::~QueryFBPath3D()
{
}

void QueryFBPath3D::Prep(FBModelPath3D *pModel, const double globalScaling, const int numberOfSteps)
{
	mCurve = pModel;
#ifdef ORSDK2013
	if (nullptr != mCurve || numberOfSteps <= 0)
#else
	if (mCurve.Ok() == false || numberOfSteps <= 0)
#endif
	{
		return;
	}

	mGlobalScaling = globalScaling;
	//const int numberOfSteps = 1.0 / mStep;
	mStep = 1.0 / numberOfSteps;

	std::vector<FBVector3d>		positions(numberOfSteps, FBVector3d() );

	double u = 0.0;
	for (int i=0; i<numberOfSteps; ++i)
	{
		FBVector4d vec = mCurve->Total_GlobalPathEvaluate(u * 100.0);
		positions[i] = FBVector3d( vec[0]*globalScaling, vec[1]*globalScaling, vec[2]*globalScaling );

		u += mStep;
	}

	mTree.BuildKDTree( (int) positions.size(), positions[0] );
}

void QueryFBPath3D::GetCurrentMatrix(float *values) const
{
#ifdef ORSDK2013
	if (nullptr != mCurve)
#else
	if (mCurve.Ok() == false)
#endif
	{
		return;
	}

	FBMatrix matrix;
	matrix.Identity();

	//mCurve->GetMatrix(matrix);

	for (int i=0; i<16; ++i)
		values[i] = (float) matrix[i];
}

void QueryFBPath3D::GetCurrentMatrixD(double *values) const
{
#ifdef ORSDK2013
	if (nullptr != mCurve)
#else
	if (mCurve.Ok() == false)
#endif
	{
		return;
	}

	FBMatrix matrix;
	matrix.Identity();

	//mCurve->GetMatrix(matrix);

	for (int i=0; i<16; ++i)
		values[i] = matrix[i];
}

void QueryFBPath3D::CurveDerivative (double *result, double u, int index) const
{
#ifdef ORSDK2013
	if (nullptr != mCurve)
#else
	if (mCurve.Ok() == false)
#endif
	{
		return;
	}

	FBVector4d d, d2;

	d = mCurve->Total_GlobalPathEvaluateDerivative(u * 100.0);
	result[0] = d[0] * mGlobalScaling;
	result[1] = d[1] * mGlobalScaling;
	result[2] = d[2] * mGlobalScaling;

	//mLastU = u * 100.0;
	d = mCurve->Total_GlobalPathEvaluate(u * 100.0);
	mLastDerivativeRoot[0] = d[0] * mGlobalScaling;
	mLastDerivativeRoot[1] = d[1] * mGlobalScaling;
	mLastDerivativeRoot[2] = d[2] * mGlobalScaling;

	d2 = mCurve->Total_GlobalPathEvaluateDerivative(u * 100.0);
	mLastDerivative[0] = d2[0] * mGlobalScaling;
	mLastDerivative[1] = d2[1] * mGlobalScaling;
	mLastDerivative[2] = d2[2] * mGlobalScaling;

	FBSub( d, d2, d );
	FBMult( d, d, 1.0 / FBLength(d) );

	result[0] = d[0];
	result[1] = d[1];
	result[2] = d[2];
}

double QueryFBPath3D::FindClosestKnot (double *closestPointOnCurve, const double *point, double dist_thres, int subdivitionSteps) const
{
#ifdef ORSDK2013
	if (nullptr != mCurve)
#else
	if (mCurve.Ok() == false)
#endif
	{
		return 0.0;
	}

	mLastSearchPoint[0] = point[0];
	mLastSearchPoint[1] = point[1];
	mLastSearchPoint[2] = point[2];

	// find closest control points, find closest point in the subdivided segments
	// kd-tree ?
	int result = mTree.SearchForNearest( point, dist_thres );
	mTree.SearchForNearest( point, dist_thres, closestPointOnCurve );

	mLastNearestPoint[0] = closestPointOnCurve[0];
	mLastNearestPoint[1] = closestPointOnCurve[1];
	mLastNearestPoint[2] = closestPointOnCurve[2];

	if (result >= 0)
		return (mStep * result);

	return 0.0;
}

void QueryFBPath3D::DrawDebug() const
{
	double backScaling = 1.0 / mGlobalScaling;

	glPushMatrix();

	glScaled(backScaling, backScaling, backScaling);
	glPointSize(5.0f);

	glBegin(GL_POINTS);

		glColor3d(0.0, 1.0, 0.0);
		glVertex3dv( mLastSearchPoint );

		glColor3d(1.0, 0.0, 0.0);
		glVertex3dv( mLastNearestPoint );
	glEnd();
	glPointSize(1.0f);

	glLineWidth(3.0f);
	glColor3d(0.0, 0.0, 0.0);
	glBegin(GL_LINES);

	glVertex3dv( mLastDerivativeRoot);
	glVertex3dv( mLastDerivative);

	glEnd();
	glLineWidth(1.0f);

	glPopMatrix();
}


text:
Road to Zero
The Optimal Path to Zero RTA's
rta0 | Home
Blog | Home
Team Zero | NEWS
Author: Kathy McMahon
Life and Death in a Rear View Mirror
by Kathy McMahon, Team Zero Advocate
July 1995, Dublin | I came back to consciousness still inside the car, with harsh fumes permeating the air around me. It took a few moments for me to get my bearings.
Then I remembered what I had been doing moments before this – driving towards Tallaght on the Belgard Road with my two wonderful sons in the car.
My last memory was seeing in the rear view mirror a car from behind come towards me at speed. As the moments seemed to become minutes. I tried to accelerate out of the way but the car continued on. There was a bang. Then darkness.
Now sitting in the car, my surroundings came into focus. We were on the other side of the dual carriageway -where we had a head-on impact. I noticed something strange about my body and thought, "I have never sat so straight in my life". Not realizing that I was pinned to the car seat and that my legs would have to be rebuilt with titanium.
I turned to my son Justin sitting in the passenger seat. He was silent, his eyes closed. I spoke his name, "Justin". There was no reply. I called to my younger son in the back seat, also without reply. Looking out the driver's window, a man on his hunkers was speaking to me. I told him "I need to get out, I need to help my sons". He said not to move, that the emergency services were there and going to get us out.
I called Justin in the passenger seat again and pleaded with him to respond. There was silence. He had something in his mouth, holding his airways open. I heard someone speaking to my youngest son in the back seat, telling him he was covering him with a jacket to prevent injury from flying glass as they cut us out of the wreckage. There was no response from him. I began to scream, to plead with God to give me all the pain and just leave my sons alone.
Finally, I heard my youngest son groan and I spoke to him, told him there were people there to help and not to be afraid. I turned my attention to my son in the front passenger seat, pleading with him to speak, to open his eyes. My other son, conscious now, calling his brother's name. Begging him to reply. Then a sudden energy surge felt like something leaving, and we screamed for him to stay, but he was gone.
I must have lost consciousness again because next I found myself in an ambulance and recall the ambulance men telling me I was going to James Connolly Memorial hospital and my sons were gone to St James'. Darkness closed in again.
Unique Potential
"I hope you are saving for university, you have a scholar on your hands" The words came from my son's sixth class teacher, Mr. Durcan, in St Mark's primary school. His statement did not surprise me as I had raised my boy, so I knew.
Those remarks during a January, 1990 Parents/Teacher meeting were repeated in 1995 at a parent/teacher meeting. "If he was my son I would be shouting his name from the rooftops. Do you know how special and unique your son is?"
That last year Justin agreed to do work experience at a local vet's clinic. He had grown to love animals through keeping gerbils. He became very interested in veterinary work from spending lots of time in the vet's surgery. A career in veterinary was definitely on his radar. Or more.
It was a week later before I was again conscious. I was in the intensive care unit in James Connolly Memorial Hospital. I knew my son was no longer with us, I had known from the moment in the car when I felt his energy leave.
I came around just about the time that his human remains were escorted through the cemetery gates, surrounded by all his friends and the people who love him. He had a police escort on his final journey as a mark of respect.
We all must accommodate loss – and I have done so. But it is the waste of Justin's potential and the effect on others that for me is irreplaceable.
If there had been a system which could have warned me that day, I might well have had time to get off the road. In any event, I see the immense benefits of helping prevent other similar incidents. I'm a strong advocate for rta0 and I urge you to be also.
Brexit Fallout
Kathy McMahon: A Life Cut Short
Let's Not Meet by Accident
The Knock on the Door
Kathy McMahon: A Life Cut Short – Road to Zero on Life and Death in a Rear View Mirror
Lena Flynn on The Knock on the Door
Fintan Dunne on The Knock on the Door
Owen Roberts on The Knock on the Door
https://youtu.be/UQ1cJtX_NdM

redpajama_set_name: RedPajamaCommonCrawl


AMP story ads are now available to all publishers.
In July, Google announced a beta for publishers using Google Ad Manager (formerly DoubleClick For Publishers) to serve ads in AMP stories. AMP Story Ads are now out of beta, Google announced Wednesday.
Story Ads are fullscreen that appear within AMP stories, in the way they do on Snapchat, Facebook and Instagram.


How far can low-cost carriers fly long-haul on their no-frills model?
Asia to Europe, Europe to the U.S., Southeast Asia to Hawaii, these new long-haul routes operated by low-cost carriers have created interesting new business for the airlines at the head of the game.
The infographic below reveals the number of weekly departures currently operated by low-cost airlines.
Written by Marisa Garcia and illustrated by Nicolás Venturelli for Airline Passenger Experience (APEX) magazine.
1 Garcia, Marisa. "Going the Distance." Airline Passenger Experience, June-July 2017, Vol 7, Iss.3, pp. 77–80.


text:
Nicole Kidman 5 results
Aaron Sorkin's Inventive Structure for Being the Ricardos Raises the Stakes
https://www.youtube.com/watch?v=cBWOCH8CPhA When it comes to telling stories of real people, Aaron Sorkin knows a thing or two. Not only did he win the Oscar for writing The Social Network (2010), based on Mark Zuckerberg, the WGA recently named the screenplay as number three on their list of the top 101 screenplays in the 21st century! Other ...
Oscar-winner Charles Randolph on Writing Complex Characters in 'Bombshell'
The amazing ripped-from-the-headlines film Bombshell tells the story of the women of took down Fox News CEO Roger Ailes (John Lithgow), specifically Gretchen Carlson (Nicole Kidman) and Megyn Kelly (Charlize Theron), after gross accusations of sexual harassment and assault. Margot Robbie plays Kayla, a fictional character that's an amalgam ...
Aquaman writers use King Arthur legend as inspiration
I sat down with comic book writer Geoff Johns, who developed the story of Aquaman, along with screenwriters David Leslie Johnson-McGoldrick and Will Beall to talk about bringing this story to life. The movie is visually lush, entertaining and full of surprises. It is a thrill-ride of an underwater fantasy lead by Jason Momoa as Arthur, who's half land-dwelling human and half sea-loving Atlantean.
Video: ScreenwritingU interviews writer/director Joel Edgerton on Boy Erased
ScreenwritingU sat down with Australian filmmaker Joel Edgerton to get his take on this emotional story. He writes and directs this film based on the memoir of Garrad Conley. In his early 20s, Conley personally experienced abuse at the hands of Love in Action, the fundamental Christian program for gays. Edgerton himself plays Victor Sykes, lead counselor at the gay conversion ministry who's clearly in over his head.
Lion screenwriter Luke Davies eschews "obvious" screenplay structure to create a spiritual journey
The emotionally powerful film Lion is both a fairytale and a nightmare at the same time. The first half of the movie tells the real-life survival story of an Indian boy named Saroo (Sunny Pawar), who gets lost in a train station when he's just five-years old (the nightmare). The second half of the film focuses on Saroo (Dev Patel), as an ...
Tag: Nicole Kidman


text:
Register your e-mail
Previous edition
Main news items
News by Groups
News by Product
You are in: Home News Year 2017 May Sale Of Digital Content Grows With Advance Electronic Platforms
Sale of digital content grows with advance electronic platforms
Sao Paulo-the success of e-commerce goes far beyond the sale of electronics and apparel, coming also differentiated content. The so-called infoproducts come conquering more and more space in the '' virtual '' booths, companies that expose and disseminate these materials and who rely on a network of affiliates commissioned.
In this genre of marketing, producers do not sell something physical, but a kind of '' knowledge '': tips and lessons through video classes, e-books, handouts, podcasts, among other forms of ad-all in digital form. Affiliates act as '' commercial '' representatives, which discloses the product and are commissioned according to the selling by producers themselves.
Largest in the sector in the country, the Hotmart has 800,000 registered users and more than 70000 registered digital products. The rival Monetizze currently has 500,000 users and 6000 infoproducts for sale. The companies estimate that, in 2016, this market has generated some R $1 billion, with uptrend in 2017.
"This segment stands for democracy, because anyone can become a digital entrepreneur and have their products sold in the online environment," says the virtual business specialist, Bruno Pinheiro. According the consulted content on weight loss and wellness, about contests and language courses tend to be the most sold.
"Online sales grow every day, with more access to the internet, more access to information and, consequently, more shopping. The virtual shopping is more comfortable. With the affiliate network, we give what it takes to sell a particular product, "explains the founder CEO of Monetizze, Marcio Motta, noting that content producers don''t have to worry about the payment intermediation-held by the platform itself. "The conversion is much higher with other people selling for you, complete Motta, who already reports in 2017 1 sales 50% larger than 2016.
The strengthening of such platform should be one of the factors that will boost the growth of 12% in e-commerce designed by the Brazilian Association of Commerce (ABComm) in 2017. In the same period, experts point out that the market infoproducts and their sales platforms coming doubling in size.
Today many affiliates fail to live it and use that medium, through affiliation, such as family income and subsequently to create companies of this segment as well, according to the customer success Manager of Hotmart, Fernando Guimarães. "The person who would like to work from home and do not know how to, can start that way. Can still be an alternative to unemployment, in which the person can identify, join and create your own business, this free of charge to register ", analyzes.
Advance on receivables
One of the advantages we offer platforms for producers and sellers is the anticipation of receivables, in which affiliates can receive the value by which it sold its products on the same day or within a few days, instead of the common term of payments via the internet.
"The affiliate has an income that depends how he invests. If he invests in its products, may have a higher income. This anticipation allows a cash flow to help in his business, "says Guimarães, of Hotmart, that charges interest of 3.99% for 30 days of anticipation. "You can draw on the same day of sale with anticipation. It''s usually pretty bad wait for who bankroll campaigns and other promotions. If the person has no capital, even worse. So we give the money to them, so they can sell more, "adds the Monetizze-Motta, which charges a rate of 5.49%.
Another way for consumers to have access to the product is through the tool of recurrence, in which they can '' sign '' a product for a certain time, and pay in proportion to what was consumed. "Most producers use the recurrence as a means of delivery, both on the credit card slip. Works like a subscription to a content (course, application, etc) and used for a time, often with a smaller value, "illustrates Fernando Guimarães.
For the dissemination of infoproducts, affiliates use a series of digital marketing tools that can present the content to more people. "Google, Facebook and the Outbrain, with their form of discharge, are preferred by users in time to make the propaganda of a given product," Marcio Motta.
The demand for products sold to achieve a real profit is the biggest motivation for the producer get new forms of dissemination. "The business model of infoprodutor is for scale, that is, the more people buy your product, the more your billing. To achieve a large number of people, the infoprodutores also invest in buying traffic, i.e., seek to find their "customers" in online marketing campaigns ", says the expert Bruno Pinheiro.
According to those consulted, it is natural that affiliates seek other ways to leverage the products to increase the number of sales, but the expectation is that the virtual booths to dominate the market of infoproducts including in that respect. "The market infoproducts, see platforms so dominating the market especially by the framework that we give to it. We deliver for them not only a platform, but an entire system that allows them to have a better result, "argues Guimarães, of Hotmart.
DCI - 31/05/2017
News Item translated automatically
Click HERE to see original
DATAMARK LTDA. © Copyright 1998-2019 ®All rights reserved.Av. Brig. Faria Lima,1993 third floor 01452-001 São Paulo/SP


A developer has been picked to rehabilitate the historic Germantown YWCA building, officials announced yesterday.
The Philadelphia Redevelopment Authority (PRA) Board of Directors has chosen minority-owned KBK Enterprises to purchase and re-develop the historic building that sits on the edge of Vernon Park at 5820-24 Germantown Avenue.
KBK Enterprises, which has offices in Columbus, OH and Pittsburgh, PA, has plans for an adaptive-reuse project that will convert the YWCA into 12 1-bedroom and 12 2-bedroom apartments. Half of the units will be affordable and the other half will be market-rate. In addition to the apartments, the plan calls for commercial and office space on the first floor.
The news comes after the city issued an RFP last July for the rehabilitation project. In selecting the final bid, the PRA considered the project concept and how it would align with the Germantown community, the developer's track record, and economic opportunity that the project would provide.
The historic building dates back to 1915, and served as a safe haven for black and white women in Germantown and became deeply involved with the Civil Rights movement. But in more recent years, the abandoned building had fallen victim to fires and decay and was at risk of demolition due to its state.
The development agreement is still be finalized, but if City Council approves the proposal, the rehabilitation will be KBK Enterprise's first Philly-based project, but it has invested $1 billion in real estate across the country. It's currently a part of a $267 million redevelopment project in Detroit that will also include affordable housing.
The Germantown YWCA adaptive reuse is expected to be complete in summer 2019.


text:
The oneAPI Software Abstraction for Heterogeneous Computing
oneAPI is a cross-industry, open, standards-based unified programming model. The oneAPI specification extends existing developer programming models to enable a diverse set of hardware through language, a set of library APIs, and a low-level hardware interface to support cross-architecture programming. It builds upon industry standards and provides an open, cross-platform developer stack to improve productivity and innovation. At the core of oneAPI is the DPC++ programming language, which builds on the ISO C++ and Khronos SYCL standards. DPC++ provides explicit parallel constructs and offload interfaces to support a broad range of accelerators. In addition to DPC++, oneAPI also provides libraries for compute- and data-intensive domains, e.g.: deep learning, scientific computing, video analytics, and media processing. Finally, a low-level hardware interface defines a set of capabilities and services to allow a language runtime system to effectively utilize a hardware accelerator.
Sujata Tibrewala
Jin Zheming
Aksel Alpay
Kumudha Krishnamurthy Narasimhan
Ronan Keryell
James Reinders
Back to Videos & Podcasts


During the spring and especially the summer season, the island has many opportunities to hear music; town and village squares and bars and restaurants become venues for evening performances by young local artists, singers, musicians and bands. Of course, there are also bigger events in the squares of Capoliveri, Portoferraio, Marina di Campo, Marciana Marina, where famous International and Italian artists, such as Zucchero, Irene Grandi, Luca Carboni and Il Volo, have played in concert. Or well-known, local festivals.
European Music Island, Magnetic Festival, Intonazione, Campo lo Feno.
International Festival held every year since 1976. The artistic directors are Maestri Yuri Bashment and George Edelman, who, together with Massimo Scelza, were also the founders. The appointment with great classical and jazz music at the end of the summer includes a dozen concerts that take place in a variety of settings on the island, such as the Napoleonic Vigilanti Theatre, the Sanctuary of the Madonna del Monte and even on the Island of Pianosa. Many of the concerts are exclusively presented unpublished personal productions.
A recently established festival which sees the introduction every year of new ideas and additions to the services offered. From Capoliveri, for example, a shuttle service takes guests to the Ginevro mines where the great shows are held and where, on special evenings, there is also an outdoor buffet dinner for guests. The setting for this festival is very impressive; the old quarry has become a natural amphitheatre for shows and, thanks to a specially designed lighting system, the staging is illuminated with colour. The Magnetic Festival takes place in a week of music-dedicated evenings from classical and baroque music to opera.
The Hermitage of Santa Caterina, in Rio dell'Elba, a sacred place of worship and prayer, far from the village and suspended in the silence of the hills, inspired this important musical project. From an idea of the German photographer and writer Hans Georg Berge, who over thirty years ago saw a new crossroads of artistic creation in this abandoned place, an ancient and contemporary music festival has been established; it is also the rendezvous of intellectuals, photographers, painters, writers, sculptors, as well as home to interesting musical experiments and workshops for music students.
On the west coast of the Island, a scenic and unspoilt place, along the steep cliffs dropping into the sea, the mountain ridge is marked by steep, winding terraces, once created for growing vines.
In this incredibly fascinating setting, overlooking the sea and with the distant view of Corsica, a musical project destined to survive the test of time was born in 1995 from the enthusiasm of a group of friends.
Gradually, the audience grew and with it the calibre of the concerts.
Campo Lo Feno is an association and you'll need to become a member to participate in events; or you might be lucky enough to be invited by one of the members of the group.
If you're a solitary traveller and want to treat yourself some great music, Intonazione could be the perfect solution for you; a very introspective musical moment and also an opportunity to meet artists and intellectuals in interesting workshops.
The last night of the Magnetic Festival is usually accompanied by a large buffet dinner; take the shuttle bus and give yourself a very special evening.
Before booking, make sure your hotel offers a babysitting service, that way your children will be in safe hands whilst you are free to enjoy an evening concert.


text:
Oregon teen, 14, and friend planned to drug, burn his parents alive in home, police say
FOX NEWS - A 14-year-old boy and his 13-year-old friend were arrested after cops foiled a plot to kill the older teenager's parents by drugging them with sleeping pills then setting their home on fire, officials said.
The Benton County Sheriff's Office said in a news release the 14-year-old was arrested on Saturday in Albany, located about 70 miles south of Portland, and his friend was arrested two days later. Neither teen was identified and the parents who were targeted were also not ID'd by authorities.
The 14-year-old's father had contacted the sheriff's office on Thursday after receiving information his son wanted to give him and his wife sleeping pills and light the family house on fire to kill them.
Benton County Undersheriff Greg Ridler told FOX12 it's "not uncommon" for a 14-year-old to wish to have no discipline and have desires "to be free," but this case was different.
Watch the replay: SpaceX successfully launches early morning Starlink mission from Florida
Remembering Columbia: 20 years since disaster that signaled end to space shuttle program
Frontier offering cheaper 'all-you-can-fly' unlimited summer flight pass


ProofHub's project reporting software provides a clear picture of how the resources are being utilized, how the projects are progressing so that you can get rid of the inefficiencies in the projects.
Representing all the critical project information in beautiful graphical format, our project reporting software simplifies resource allocation within projects to spot out inefficiencies, track project progress and increase productivity.
With ProofHub's online reporting tool you can get a clear picture of everything related to your projects. From active projects to open tasks, overdue tasks and milestones across different projects, you get to see everything at one place.
With slipping projects in our reporting tool you get to know about the projects, which might be running beyond their deadline because of overdue tasks and milestones so that you can iterate the plans and get them completed on time.
Get to know about the progress made in each project with project progress snapshot in our online reporting software. It gives you a clear picture of the percentage completion of the project, so that you can manage resources in the project accordingly.
How many tasks are completed in the project? How many are ongoing? And, how many of them are overdue? Tasks reports in our online reporting tool give you detailed information about all these for an in-depth analysis of the projects.
ProofHub's reporting software helps you manage project deadlines more efficiently by letting you keep count of open and overdue milestones. So, you can better allocate resources to achieve milestones quickly and finish projects on time.
ProofHub's online reporting tool gives you a graphical representation of all your resources, and how you are utilizing them across different projects; bringing together all your resources at one place. You can also get a breakdown of individual resource reports as well.
Burn up charts in our reporting tool represent the number of tasks completed, against the total number of tasks assigned so that you can know about the pace at which tasks are being completed in the projects, and iterate if progressing slowly.
Compare your actual time spent on tasks against the estimated time set during the planning phase using our online reporting tool. This will help you to provide better estimates to clients in the future.
That's how ProofHub reporting software helps you stay on top of project and resource information.
With proofhub you can organize all your thoughts, projects, task, people, files, etc... in a simple clean manner. I have 3+ different companies with multiple projects going on in each, each company has several people using proofhub, proofhub allows me to keep a bird's eye on EVERYTHING. And then there is the Awesome Gantt Chart. The Team at Flyhtlab.com loves proofhub!


A designated car park close to the entrance is reserved for Blue Badge holders. There are signposts within the car parks to guide you to the parking facilities. If parking in a designated bay you will need to display your Blue Badge on your windscreen.
Accessible parking bays are charged at the standard rate of £7 per day (£6 if pre-booked online) and are subject to availability.
Do you have an accessibility guide for LEGOLAND Windsor Resort?


asianFubuxoxo . APOLOCUTEX. LaraSweetDream. AdoredByU.
TaniaLorenAPOLOCUTEXPowerOfKarenSweetChocolatex .LaraSweetDreamCrazyCoupleXDhotthairyboyMerraeDay1 .HornyAFGoodOlgaSweetChocolatexBrianaJolie .MartinaWeisJamalHotAvaFlirtAnielaForYou .ElifloYumeePassionTaniaLorenNazina .CuteBabeSweetyAnielaForYouSweetChocolatexNazina .adrianahot4youSweetAnna95CorrisandeMichanelle .APOLOCUTEXAnielaForYouBeautifulLUSTtsNazina .NazinaCuteBabeSweetyEvangelicious11CHANTAL .1juanitaCuteBabeSweetyMarissaMarquezEliflo .AsiannBellMsHelgaSarhaMooreNickiLee .
LittleAlica1juanitaAdonaMazzaraAnasttacia .perlabrownKaraBabyExquisiteDanieletsWildFLOWERxxx .AdonaMazzaraTeenie3sumHealingtheworldMerraeDay1 .LadyPilotperlabrownKlerikSappyCindyMae .JerkingC0CKMysteriousElyssaCinderellaBRSabrinaferilli99 .SebastianGreatXANASWEETlumealone84samyhott11 .SandraTessaNazinaadrianahot4you02SEXYTS4U .APOLOCUTEXSabrinaferilli99NAOMIKJesyWhitmoore .AdonaMazzaraValeri8888tattedup710a0RyanRox .ValeryxRiosSamiracattattedup710MerraeDay1 .SexySwitch4uAdoredByUNazinaperlabrown .


Today, 14101 yen on Amazon Japan.
Selling her along with Hibiki and Miki. $35 each!(except for Hibiki she's $25) PM for a shipping quote!
My friend got me this figure, she's so nice, and the gold is really nice too.
I really hope they remake this one to go along with the new Miki and new(er) Hibiki.
neptunecadet (Vor 6 Jahren) #1498122That's really unfortunate. :( You should post some pictures! Maybe it's not as bad as you think?
yrbullet (Vor 6 Jahren) #1497836*sigh* Just got mine from Mandarake, sadly, she's got yellowed, from what I assume as being left in the box for too long or exposed to sunlight.
Still am glad to have her!
That's really unfortunate. :( You should post some pictures! Maybe it's not as bad as you think?


text:
This library contains `@regex_var` which fills the regular expression straight
from the string; you can type the variable next to the regular expression
you want it to match. It uses the regular expressions Julia provides.(which is PCRE)

Usage:(**Note:** the throwing is currently poorly tested)

    @regex_var input_string "regex string with $var, $(var::SomeType) and $(var::"regex string")" body
    @regex_var input_string "regex string" i_happen_on_mismatch() body

There is also `@regex_case`, which runs the body of the first (fully)matching
regex string.

    @regex_case input_string begin
        if "a thing:.+"
            do_a()
        end
        "b thing:.+" : do_b()
    end
    @regex_case input_string { "a thing:.+" : do_a(), "b thing" : do_b() }

### Regex string structure
In using the macros effectively you need to look at what the arguments are
that enter the macro body. If you look at `:"abc$(var_a)def$(var_b)"` you
see the `Expr` structure does *not* simply contain a string. The arguments
for the regex string is basically an `expr(:macrocall, {:str, interesting_array...})`
Everything except the `interesting_array` is not important.
(but asserted to be there)

Basically each entry has a matcher, starting from the front, you match the
first one, then you start from the *beginning* of the match to match the next
one. The reason to start from the beginning, is that the matches can then be
very general, but be terminated by the next match.

Going through the different elements we have:

*Strings*: they're just matched as mentioned.

Symbols -`$a`- they are completely general matches, the variable is defined
to be whatever between the end of the previous and beginning of the next match.

Symbols with regex -`$(a::"regex")`- are filled with whatever matches, constrained
by when the next match takes place. `$(a::".+")` is `$a`

Symbols with types -`$(a::SomeType)`- uses the regular expression returned from
`matcher_of_type`, the result is then parsed to get the value with
`parse_thing(Type,String)`, both are ment to be extended by users.

Symbols where the symbol-string ends in `!`, they're not one of the programmed-in
exceptions; it will take up the regular expression of the corresponding type
without the `!`. Otherwise it corresponds to regular expressions:

Number sequence	 a::n!
    "[0-9]+"

Lowercase letters	 a::l!
    "[a-z]+"

Letters	 a::L!
    "([a-z]|[A-Z])+"

Whitespace	 a::w!
    "[ \t\n]+"

There are also 'settings' that can be changed with some of them;

**TODO** these dont currently work..

`$now!`,`$n!`: Makes *one* next regular expression search start from the *end* of
the match of the the previous one.

`$always_now!`,`$an!`: Makes all next searches start from the end.

`$not_now!`,`$nn!`: Disables the above.

### Convention on `matcher_of_type`
The convention on `matcher_of_type` is to have the regex of a thing to be
'minimal'. For instance none of the  numbers allow whitespace, neither does
`matcher_of_type(Uint)=="[0-9]+"`; does *not* allow for a `+` infront, whereas
`Integer` does, because it might also be negative. Similarly `Float` *requires* a
dot in it, whereas `Number` doesnt.

In the future i might try add a way to indicate 'allow whitespace around it' or
'widen what is allowed'.

## Examples
Note: perhaps these are a bit arbitrary.

    @regex_var input "The kittens name is $now!$(name::L!) he is $age weeks old." (name,age)
    @regex_var input "$a,$b,$c" (a,b,c) #Comma separated thing.
    @regex_var input ".+$(x::Number)" x #Get the first number.

More edge-case examples

    @regex_var "123q" "$(x::Integer)3" x #returns 12
    @regex_var "123q" "$(x::Integer)." x #Invalid input; 1 matches . so parser gets empty string!
    #Following returns 123,"12"$n! asks to read _just_ the next one as its own match.
    @regex_var "123q123" "$n!$(x::Integer).$(y)3" x,y

## Reference

### matcher_of_type (tp)`
Returns a regular expression string corresponding to the given type or symbol.
Symbols can have inbuild

Definitions should be minimal in what they allow to match.

### parse_thing(tp::Type, str::String)
Tries to parse the string with the type as a guide.

### @regex_var input regex_with_variables throw_out body
Parses the input string, using the regular expressions, and filling variables
within the `regex_with_variables`, which are available in the `body`.
If it mismatches `throw_out` is run, it should return or `throw()` to 'exit',
`throw_out` can also be omitted; then it will always error if it mismatches.

For the nature of the regular expressions, read the readme.

### @regex_case input clauses
Clauses may be in `begin ...... end` or `{clause,clause,clause}` and single clauses
look like

    if "regex_thing"
        then...
    end #Or
    "regex" : then_do()

The regular expressions themselves are just like in @regex_var

## License: MIT
Written by [Jasper den Ouden](http://ojasper.nl/)(entirely, currently) put under
the MIT license, see `doc/mit.txt`.

## TODO
* Get `$now!` to work.
* A 'match' should mean complete match, if throwing is enabled, it should throw
  if last matche doesnt reach the end?
* More test coverage.
* A behavior changer that wides the allowed range, for instance automatically
  allowing whitespace around?
* `parse_thing` on streams.(Regex until the matcher doesnt match anymore)

redpajama_set_name: RedPajamaGithub


They looked at the short life of Declan Sullivan in St. Mary's Church in a suburb of Chicago called Buffalo Grove Monday. They saw Sullivan's life in the memories and words and stories that eulogized him, celebrated the best of a 20-year-old who died tragically - and negligently - on a practice football field at the University of Notre Dame last week.
Declan Sullivan's job was to look at Notre Dame football practices through the lens of a camera, record those practices on videotape. He apparently thought that job required him to do this in 50-mph winds on a hydraulic lift, on a day when he used Twitter to talk about how scared he was about going up there. But no one told him not to go up there.
No one, not even the Notre Dame athletic director standing 20 or 30 yards away from the lift, told him to get down.
So who saw Declan Sullivan's life that day?
Who saw him up on that lift, in those winds, while the big important work of Notre Dame football - moved inside the day before because of high winds - went on?
Maybe the answer, the first of many answers to come, is that no one saw Declan Sullivan until it was too late.
I waited until the weekend to hear what the Notre Dame football coach, Brian Kelly, had to say about the death of Declan Sullivan during one of Kelly's football practices. Kelly isn't just the Notre Dame coach, he is a parent, three children of his own. I waited to hear what the parent, not the football coach, thought about what happened to the oldest Notre Dame child of Alison and Barry Sullivan, who also have a daughter at the school.
"On Wednesday, I made the decision that we could have a productive and safe practice outdoors - productive because the conditions were such, although windy, were not unlike many days that I had practiced at other universities including here at the University of Notre Dame."
Really, Kelly said nothing, other than to establish some kind of legal position, for himself and his school, since the school now faces a list of possible methods of recovery by the Sullivan family: Wrongful death, improper supervision, premises liability. Declan Sullivan was a part of Brian Kelly's program. He was a part of the program whether anybody - including athletic director Jack Swarbrick - saw him, really saw him, on that hydraulic lift or not.
But we don't want to know Notre Dame's legal position. We want answers. In the end, maybe they will only come from Indiana state regulators.
Who told this young man to go up there in weather conditions like those?
Did anyone suggest to the young man that if he didn't go up there, they'd find somebody else who would?
Was Kelly considered to be Declan Sullivan's immediate supervisor, and if he wasn't, which adult associated with the Notre Dame football program was?
Did any adult at practice that day - Kelly, Swarbrick, anybody - really see the young man on top of the lift?
Or was he invisible to everyone until the lift and his life came crashing down?
How did this kid become invisible to every adult present at the LaBar practice facility?
"We have systems in place to make certain and that deal with issues of safety," Brian Kelly said. "Clearly in this instance they failed. We are in the process of examining all of those systems that are in place and are looking for those answers."
No parent talking there. Not even a football coach. Just somebody who seems to have been worked over pretty good by Notre Dame lawyers.
For now, the accident that took Declan Sullivan's life is in the hands of the investigators. Who will determine if the school violated safety rules by allowing the young man to do his job on that lift, in those winds. According to an Associated Press story written by Tom Coyne and Rick Callahan, one of the things investigators want to know is if Sullivan, a film student, received proper training to be on that lift in any weather conditions.
According to the story by Coyne and Callahn, Sullivan dreamed of going to California after graduation to work in the movie business.
"No amount of anger or tears can change this," Sullivan's sister, Wyn, said at Monday's funeral at St. Mary's.
The pastor at St. Mary's, Rev. Marc Reszel, has known the Sullivans for 11 years, watched Declan grow up in his church. Last night he said, "This was about a death in our family today. The death of a young man who died much too soon."
A football made of flowers was on the St. Mary's altar. Declan Sullivan loved Notre Dame football. His parents, in a statement issued last week, talked about their son dying doing something he loved, at a place he loved. Except his love of Notre Dame and love of film shouldn't have killed him. The high winds were an act of God. The act of a 20-year-old being up on that lift certainly was not.
There is already talk of a settlement, because there always is with a death such as this, compensatory damages that could range from $10 million to $20 million. But what possible monetary value can be placed on the life that was celebrated Monday at St. Mary's in Buffalo Grove, Ill., a life cut short by an accident that never should have happened?
The people in the church heard the family stories about Declan Drumm Sullivan Monday, even stories about long hair that he thought would attract girls. They heard prayers and said prayers and were told not to mourn a life like this, but celebrate it. They all saw Declan Sullivan.
How come nobody at that practice field at Notre Dame saw him last week?


This hydration paper is the perfect match for our foam. It sticks on it, and does not create bubbles. 100% of the paper is in contact with the foam, for perfect hydration. It will not curl after the easy setup. It was particularly selected to offer the best performance with hobby paints and level of dilution used in hobby painting.
Free shipping for US, Canada and Western E.U for orders above 35 Euros.


text:
Home » Hitting the Shelves: Omega-3s Show Mega-growth -- May 2008
Retail Market TrendsDairyMeat, Poultry & SeafoodAntioxidants & Nutritionals
Hitting the Shelves: Omega-3s Show Mega-growth -- May 2008
The following information comes courtesy of BNP Media's New Products magazine--Eds.
In the past 10 years, omega-3 fatty acids have exploded onto the global marketplace. Sold as healthy supplements and food additives, omega-3s such as alpha-linolenic acid (ALA), eicosapentaenoic acid (EPA) and docosahexaenoic acid (DHA) are now familiar to many consumers. Consumption of omega-3s is claimed to reduce the risk and improve the conditions of six leading health concerns: heart disease, cancer, vision problems, arthritis, hypertension and lack of mental sharpness. With such a healthy profile, it is no wonder that omega-3 fatty acids have become a desirable additive and supplement for global shoppers.
Food and drink enhanced by healthy omega-3s first emerged in Japan in the late 1990s. For the most part, these innovative products contained added omega-3/DHA, claiming to enhance brain functions such as memory, learning and concentration. In 1997, Nippon Suisan launched Doraemon Sausage, fortified with DHA and claimed to stimulate the brain. With packaging featuring the cartoon character Doraemon, the product was clearly marketed for children. Because omega-3s play such a vital role in brain development, many early products in Asia were designed specifically for children.
Though Asia remains at the cutting edge of functional food development, many of the concepts that first emerged there have now been taken up by companies in the West. Dairy products are at the forefront of omega-3 product development in Europe and North America. However, around the globe, other food categories—such as eggs, bread and snacks--are showing strong, promising growth for omega-3s.
From margarine to yogurt to milk, dairy products enhanced by omega-3 fatty acids are a hot area of new product development. In the Netherlands, Unilever claims its Blue Band Idee! Margarine helps stimulate mental development. Containing the fatty acids DHA and ALA, as well as B vitamins, the margarine is marketed as suitable for the whole family, but it is especially recommended for children's mental development.
Nestlé likewise positions its P'tit Yoco Oméga 3 Framboise Pomme-Poire Yogurt as a healthy product for children in France. Rich in omega-3 to aid in children's brain development, the yogurt is also enriched with calcium and vitamin D.
P'tit Yoco Oméga 3 claims to contain just the right amount of sugar in portions "perfectly adapted to children."
George Weston in Canada advertises the high DHA content of Neilson Dairy Oh! Milk, claiming the product can help support normal development of the brain, eyes and nerves. Featuring a sketch of a cow reading a book on the front of the milk carton, Neilson Dairy Oh! Milk is marketed for growing children. The milk is produced by Ontario dairy cows fed a unique diet containing the omega-3 fatty acid DHA. The milk is also fortified with vitamins A and D.
In addition to omega-3 products for growing children, many Asian products are developed for pregnant or nursing mothers, infants and toddlers. Powdered milks containing omega-3 fatty acids are said to promote the brain development and general health of infants. In the Philippines, for example, Mead Johnson Nutritionals features EnfaMama Nutritional Milk Drink. Formulated especially for pregnant and lactating mothers, the chocolate-flavored milk is enriched with DHA, claiming to support babies' brain development.
Sari Husada markets a vanilla-flavored Growing Up Milk under its Vitalac brand in Indonesia. Containing omega-3 and omega-6 fatty acids AA, DHA, FOS, inulin and lactoferrin, the milk claims to support brain development in children over one year old. The sweet vanilla flavor makes it especially suitable for toddlers.
Eggs, Bread and Snacks
As the health benefits of omega-3 fatty acids become more widely known, food and beverage manufacturers are including them in a myriad of new products. Around the globe, omega-3 health claims are becoming more common on product packaging.
Eggs produced by free-range chickens have been identified as an important natural source of omega-3. In the U.S., Gold Circle Farms has been actively marketing its cage-free eggs as DHA-rich, because its chickens are fed a vegetarian diet rich in omega-3s. The company claims this special diet boosts the DHA content of the egg to 150mg, as opposed to 18mg for a regular egg. Gold Circle Farms positions its eggs as a way to enhance proper brain function, eye development and heart health.
In the U.K., Warburtons markets a bread specifically designed for women, especially pregnant woman. Good Health Loaf for Women contains calcium, folic acid and iron for general women's health. Additionally, each 100g serving of bread contains the recommended daily allowance of omega-3 DHA, which is said to boost brain development in unborn children.
Even snacks have taken on omega-3 fatty acids, raising their nutritional profiles and appealing to health-minded consumers. In the U.K., Biomedical Laboratories features iQ3 Brainstorm! Fish Oil Cereal Bars. Made with omega-3 and omega-6 oils, the bars are marketed for children with the claim that they help concentration, as well as brain and eye function. Made of tasty cereal and real fruit, the packaging ensures parents and kids alike that the bars do not have a fishy taste. Biomedical Laboratories claims that one bar delivers the same omega-3 content as two of the company's iQ3 capsules.
K Group in India also features a snack product enhanced by omega-3s. New Choice Mini Butter Cheese Crackers are butter- and cheese-coated round crackers said to be a good source of DHA, which can improve brain activity, build strong bones, prevent heart attacks and enhance eyesight. Also a good source of calcium, the crackers offer consumers a convenient way to increase DHA in the diet.
As omega-3 fatty acids become more widely known across the globe, the number of new food and drink products touting their benefits will increase. In the U.S. especially, substantiation of the health claims tied to omega-3s through research and recognition will drive new product development at a quick pace.
Mintel Global New Products Database (GNPD) tracks new product launches, trends, ingredients and innovations internationally. For additional information regarding GNPD, visit www.gnpd.com or call Mintel International at 312-932-0600.
Hitting the Shelves: Beautea -- May 2008
Hitting the Shelves: Herbal Water for Health -- May 2008
Hitting the Shelves: Natural Alternatives -- May 2008
Hitting the Shelves: Pickle-sickles -- May 2008
Opportunities in the Western Europe Prepared Meals Sector
Cooked Meats - Counter (Meat) Market in the United States of America - Outlook to 2024...
Opportunities in the Asia-Pacific Prepared Meals Sector
Ambient (Canned) Soup (Soups) Market in the United States of America - Outlook to 2025...


text:
How to Brand Yourself on Facebook
By	Chris O'Byrne	| Feb 10, 2020
Should you build your personal brand on Facebook? The answer is a resounding YES! With more than 2.45 billion monthly active users, you'd be missing out on a huge opportunity if you didn't create your own space on this social platform. So, how do you stand out on social media when everyone is competing for…
BBB12: Interview with Tammie and Rob Chrin
By	Chris O'Byrne	| Feb 7, 2020
Welcome to the Books, Brands, and Business podcast with your host, Chris O'Byrne, from JETLAUNCH.net. My guests today are Tammie and Rob Chrin. Tammie and Rob began selling on Amazon in 2014 testing out retail arbitrage and online arbitrage (RA/OA) and it proved to be very successful all the while doing it part-time. After that…
Personal Brand Example: Steve Larsen
In today's personal brand example, we take a look at Steve Larsen, a Marketing Coach and Entrepreneur. Example: Personal Brand Logo The personal brand logo used by Larsen is simple, yet catches the eye. It includes his first and last name in white font, with his last name bolded. Using both his first and last…
BBB11: Interview with Mike Saunders
Welcome to the Books, Brands, and Business podcast with your host, Chris O'Byrne, from JETLAUNCH.net. My guest today is Mike Saunders, the author of Authority Selling. Mike is also known at the Authority Positioning Strategist and helps to position authors as an influencer in their niche or industry to attract more clients, increase your profits,…
Josh Forti Personal Branding Example
By	Chris O'Byrne	| Jan 27, 2020
In today's personal brand example, we take a look at Josh Forti, an Entrepreneur and Podcast Host. If you're interested in learning more about personal branding, check out our guide. Example: Personal Brand Logo The personal brand logo used by Forti is simple and elegant. He includes his first and last name, not just his initials,…
BBB10: Interview with Robin Colucci
Welcome to the Books, Brands, and Business podcast with your host, Chris O'Byrne, from JETLAUNCH.net. My guest today is Robin Colucci, the author of How to Write a Book That Sells You: Increase Your Credibility, Income, and Impact. Robin is also a sought-after book writing coach who has helped several authors write books that have…
BBB9: Interview with Alex Groenendyk
Welcome to the Books, Brands, and Business podcast with your host, Chris O'Byrne, from JETLAUNCH.net. My guest today is Alex Groenendyk. Alex is the author of This Is Who We Hire: Employers reveal how to: Get a job. Succeed in it. Get promoted. This a really fun interview because Alex reveals how he has sold…
Personal Brand Example: James Smiley
By	Chris O'Byrne	| Dec 26, 2019
In today's personal brand example, we take a look at James Smiley, a Digital Marketing Consultant and Entrepreneur. Example: Personal Brand Logo The personal brand logo used by Smiley is simple, elegant, and straightforward. It includes his initials, JS, in a bolded gold font that is very easy to read, with a black background behind…
BBB8: Interview with John Hoskins
Welcome to the Books, Brands, and Business podcast with your host, Chris O'Byrne, from JETLAUNCH.net. My guest today is John Hoskins. John is the author of Level Five Selling: The Anatomy Of A Quality Sales Call Revealed and his soon-to-be-released book: Level Five Coaching System: How Sales Leaders Are Developing Preeminent Sales Teams. Chris: Hi,…
BBB7: Interview with Jula Pereira
By	Chris O'Byrne	| Dec 9, 2019
Welcome to the Books, Brands, and Business podcast with your host, Chris O'Byrne, from JETLAUNCH.net. My guest today is Jula Pereira. Jula is a sales coach for women and the author of Six Weeks to Sales Confidence: A Guide for Women. Chris: Hi, Jula. Welcome to the podcast. Jula: Hi. Chris: Why don't we just…
JETLAUNCH | www.jetlaunch.net


How Many Babies Will You Have?
What's the most important quality in a romantic partner?
True or false: You're more likely to agree with your parents than disagree with them.
True or false: You consider yourself a romantic person.
Of these, what's your favorite type of movie?
Would you describe yourself as responsible?
When would you like to have your first child?
When I meet the right person.
Until the end of the first date.
Your partner brings you the perfect gift. What is it?
Anything. It's the thought that counts.
Probably, if it seemed like a good match.
If you had kids, would your parents help you raise them?
No way, they wouldn't want to help.
No, I wouldn't want them to help.
They'd probably pitch in occasionally.
Yes, they'd help all the time.
How long should people date before deciding to get married?
If it's the right person, days.
We meet at a coffee shop for a nice latte.
Describe your extended family (cousins, uncles, and so on).
I've got a small extended family, but we're not very close.
I've got a large extended family, but we're not close.
I've got a small extended family, and we're very close.
I've got a large extended family, and we're very close.
How often does your family plan big get-togethers or reunions?
What's the perfect family activity?
Do you think that you'd make a good parent?
Do you think that every kid should grow up with a sibling?
Are you concerned about the stress that comes with raising a child?
How much do you value your free time?
It's incredibly important to me.
It's not really that important.
How much do you value your financial freedom?
Yes, I want to travel extensively.
I'd like to see a few other countries.
I'd like to travel, but it's not a priority.
I'm not interested in traveling.
Feeling butterflies in your stomach.
Everything—I can't pick one part.
What best describes your opinion of children?
You're not really into the whole "parenting" thing. That might change at some point—but then again, you might go child-free, and there's certainly nothing wrong with that. You'll enjoy extra free time, more financial freedom, and more peace and quiet. What's the downside?
You'll have one kid, but you're fine with keeping a small family. That means you'll get the benefits of parenthood without many of the drawbacks—and your bank account will thank you for it. Hopefully, your partner's on the same page!
You'll have a couple of kids, and you'll enjoy the journey, but you're not going to be an Octomom or Octodad anytime soon. There's nothing wrong with having an enormous family, but it's not really your thing.


Delta State Governor, Senator Dr. Ifeanyi Okowa has bagged Nigeria Olympic Committee (NOC) Merit Award, in recognition of his outstanding roles and contributions towards the development of sports in the country.
In a colourful award ceremony held in Asaba on Saturday night, August 4, President of NOC, Engr. Habu Gumel personally presented the award to the governor in a glittering occasion which also, saw the presentation of various awards to such notables personalities as Rt. Hon. Sir Adetokumbo Ademola, Sir Awotire Eleyae, late Alhaji Babayo Shehu, Chief Falilat Ogunkoya-Omotayo, Blessing Okagbare-Ighoteguonor, Sir Isaac Uwadiale lkhuoria, among other outstanding athletes, sports administrators as well as sportsmen and women who have brought pride, joy, fame and glory to Nigeria in the continental and international circuits over the years.
Governor Okowa thanked God for using him as an instrument for the development of sports and urged government at all levels to be committed to the development of sports.
According to the governor, "I must truly thank the President of NOC for the award given to me, it will spur me to talk about sports and encourage the development of sports. We should get more committed to our athletes and sports development and I believe that government can drag the private sector to support the development of sports because, with the support of government and the private sector, our sports men and women can do more.
The governor used the occasion to also appreciate those who have contributed to the success story of the African Athletics Championship, even as he noted that the event has not only impacted positively on the economy of the capital city of Asaba, but has equally served as a platform to encourage the teeming population of young people who witnessed the track and field events, to devote more attention to their participation in sporting activities.
Minister of Sports and Youths Development, Barr. Solomon Dalung, represented by the Permanent Secretary in the Ministry, Mr Adesola Olusade said Governor Okowa has distinguished himself as a patriotic Nigeria by making it possible for Asaba to host the Senior Athletics Championships and commended the NOC for recognising talents that have contributed to the development of sports in the country.
Engr. Gumel commended the committee that selected the award recipients recognising men and women who have won gold for the country and congratulated Governor Okowa for the successful hosting of the Asaba 2018.


text:
import requests
import pytest

def test_code_changes_by_group(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/code-changes')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1
    assert data[0]['commit_count'] > 0

def test_code_changes_by_repo(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/repos/25430/code-changes')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1
    assert data[0]['commit_count'] > 0

def test_code_changes_lines_by_group(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/code-changes-lines')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1
    assert data[0]['added'] >= 0
    assert data[0]['removed'] >= 0

def test_code_changes_lines_by_repo(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/repos/25430/code-changes-lines')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1
    assert data[0]['added'] >= 0
    assert data[0]['removed'] >= 0

def test_sub_projects_by_group(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/sub-projects')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1
    assert data[0]["sub_project_count"] > 0

def test_sub_projects_by_repo(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/repos/25430/sub-projects')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1
    assert data[0]["sub_project_count"] > 0

def test_cii_best_practices_badge_by_repo(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/repos/25430/cii-best-practices-badge')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1

def test_languages_by_group(metrics):
    # TODO need data
    pass

def test_languages_by_repo(metrics):
    # TODO need data
    pass

# def test_license_declared_by_group(metrics):
#     response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/license-declared')
#     data = response.json()
#     assert response.status_code == 200
#     assert len(data) >= 1

# def test_license_declared_by_repo(metrics):
#     response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/repos/25430/license-declared')
#     data = response.json()
#     assert response.status_code == 200
#     assert len(data) >= 1

def test_annual_lines_of_code_count_ranked_by_new_repo_in_repo_group_by_repo(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/repos/25430/annual-lines-of-code-count-ranked-by-new-repo-in-repo-group')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1
    assert data[0]["net"] > 0

def test_annual_lines_of_code_count_ranked_by_new_repo_in_repo_group_by_group(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/annual-lines-of-code-count-ranked-by-new-repo-in-repo-group')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1
    assert data[0]["net"] > 0

def test_annual_lines_of_code_count_ranked_by_repo_in_repo_group_by_repo(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/repos/25430/annual-lines-of-code-count-ranked-by-repo-in-repo-group')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1
    assert data[0]["net"] > 0

def test_annual_lines_of_code_count_ranked_by_repo_in_repo_group_by_group(metrics):
    response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/annual-lines-of-code-count-ranked-by-repo-in-repo-group')
    data = response.json()
    assert response.status_code == 200
    assert len(data) >= 1
    assert data[0]["net"] > 0

# def test_license_coverage_by_group(metrics):
#     response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/license-coverage')
#     data = response.json()
#     assert response.status_code == 200
#     assert len(data) >= 1

# def test_license_coverage_by_repo(metrics):
#     response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/repos/25430/license-coverage')
#     data = response.json()
#     assert response.status_code == 200
#     assert len(data) >= 1

# def test_license_count_by_group(metrics):
#     response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/license-count')
#     data = response.json()
#     assert response.status_code == 200
#     assert len(data) >= 1

# def test_license_count_by_repo(metrics):
#     response = requests.get('http://localhost:5000/api/unstable/repo-groups/10/repos/25430/license-count')
#     data = response.json()
#     assert response.status_code == 200
#     assert len(data) >= 1


HRS India has recently supplied aReactor Circulation Heater for a leading producer of oleochemical products, such as fatty acids, glycerine, esters, technical oils, specialty oleochemicals and biodiesel made from renewable raw materials through use of natural energy resources.
The heat exchanger will be utilized as Critical Process Equipment (CPE) and will be applied in the primary process of breaking down fatty acids. Subsequent separated oils and fats from the process will be used for a variety of applications. The reactor circulation heater has been designed and manufactured to withstand extreme temperature and pressure requirements in strict compliance with ASME and TEMA regulations.
As innovative heat transfer specialists, both HRS Malaysia and HRS India have played key roles in seamlessly meeting the client's critical requirements and securing the continued partnership as the client's preferred supplier for future business.


There are many different preschool program types and names.
What are they and how does directing each one differ?
Some differ based on where the facility is located. Some differ based on your state licensing regulation's description of the program.
You might see a program that is run in a home listed as either a Family Day Care, a Family Child Care or a Family Home Day Care. All of these are run in a residential home.
You might see a preschool program listed as such--Preschool Program, or you may see it listed as a Nursery School. The program names are the same and assigned only to programs that serve a very specific age group. You might see a preschool program even more specifically listed as a Christian (or other) Preschool. Each of these might be run in a home facility or an off site facility.
The name may be ABC Preschool, however, the license will tell you the program type (family day care license-which is home based; preschool license-which is facility based or not in a home setting).
You might see a program listed as a Child Care Center, Group Center or Day Care Center. These programs serve a wider age range AND have a higher number of children (and staff).
You might see a program listed as a Head Start Center. This is a Federally funded program with its own specific guidelines.
There are other names you might see as well such as Montessori School, Reggio Emilia School, etc. These also have their own guidelines in order to carry the name. However, if state licensed, they must follow the minimum guidelines for the type of license they hold (preschool, family day care, etc.).
Regardless of the name of a program, it must follow the licensing guidlines for the license it holds.
I ran a license family day care program. It was run in my home. I only served preschool-aged children ages 3 years to 5 years- even though my license was for birth through 10.
Even though I offered a preschool based program (with regard to activities), I was required to follow the regulations for a family day care program. this included not having more than 6 children without an assistant. (In a program licensed as a preschool facility the ratio would be 1:8). I was required to be part of the USDA food program (not a requirement for a preschool facility).
Suggested Resources I have used in these program types.
A Child Care Center can mean many things.
It is one of many program types.
Let's look at what this, as on of the preschool program types, typically refers to.
When you see the word "Center" in the name of a program, it will most times mean a facility that serves a large number of children.
For the sake of state licensing, the name tells you that their licensing capacity is larger and may limit the age ranges of the groups.
As a Child Care Center, Group Center or Day Care Center, these programs serve a wider age range and do not limit their age grouping to preschool only.
Here is the description of a Child Care Center according to the licensing regulation for a particular state. This will give you an idea of the type of care provided under these program types.
It is important that you discuss the type of center or program that you want to run with your state licensor to be certain that you are providing care within the legal parameters of the state.
"Any facility operated on a regular basis whether known as a day nursery, nursery school, kindergarten, child play school, progressive school, child development center, day care center, pre-school, or known under any other name which receives children, not of common parentage, younger than seven years old, or younger than 16 years old if such children have special needs, for non-residential custody and care during part or all of the day separate from their parent(s).
Child Care center shall not include: any part of a public school system; any part of a private organized educational system, unless the services of such a system are primarily limited to kindergarten, nursery or related pre-school services; a Sunday school conducted by a religious institution; a facility operated by a religious organization where children are cared for during short periods of time while persons responsible for such children are attending religious services; a family child care home; an informal cooperative arrangement among neighbors or relatives; or the occasional care of children with or without compensation therefore."
I know, right?! That was quite a mouthful. There are several reasons for all of this wording! Really, there are!
The first part defines what a Child Care Center IS. It states ages, non-relation of children and that care is provided separate from their parents attendance.
Note where it states "Child Care center shall not include:......". This is stated because the types of care listed there have their own specific license and their own specific expectations and responsibilities with regard to staff qualifications, ratio capacity and possibly local city or town ordinances.
Directing a center requires that the Director have specfic educational trainings and background experiences.
As a Child Care Center Director, you will NOT have time to be a teaching director on a regular basis.
The administration of this type of program requires staff training and professional development; keeping each child's immunization and other records current; overseeing ratios, staffing, family meetings and more.
Consider the Benefit of Support Staff!
It is very common, especially for child care center program types, to have support staff for the director of a center. Such staff may include an Assistant Director and/or an Administrative Assistant (either part or full time).
The Assistant Director job description may include being qualified to teach in a classroom when needed as well as carry out the functions of your position as Director in your absence.
An Administrative Assistant can be assigned responsibilities such as tracking child and staff attendance; child records and forms; staff training requirements and more.
One resource I have found helpful as a Director is the Preschool Director's Survival Guide . It is a book with oodles of forms containing sample wording.
It was the basis for some of the forms I used in my programs.
Over time, I am creating online versions of the forms that I have created and will be offering them on this website for sale.
Click Here To Read About Each Helpful Packet!
A Preschool Program or Nursery School is a program that serves children ages 3-5 years old.
This program type may not have a specific designation with regard to your state licensing agency.
The names "Preschool Program" or "Nursery School" are specific in telling the type of program.
These names tell you that the ages served will be the preschool age group of 3-5 year olds (or 2 1/2 to 6 years olds depending upon the license and the kindergarten cut-off dates in your area).
Many states do not have a designation specifically for a preschool program or nursery school.
In the many states, this type of program would fall under the "Large Group and School Age Child Care" licensing.
"Any program that receives on a regular basis more than ten children who are unrelated to their caregivers and are younger than 14 years old, or 16 years, if such children have special needs, during all or part of the day for non-residential care and education outside of their own homes.
Such programs shall include, but not be limited to, those commonly known as child care centers, day care centers, preschools, nursery schools, child development programs, school age child care programs and before and after school programs, regardless of their location.
Such programs shall not include any part of a public school system; any part of a private organized educational system, unless the services of such a system are primarily limited to kindergarten, nursery or related pre-school services; any part of a program operated by an organized educational system for the children enrolled in that particular system, unless the services of such system are primarily limited to a school age child care program; Sunday schools or classes for religious instruction conducted by a religious institution; a facility operated by a religious organization where children are cared for during short periods of time while persons responsible for such children are attending religious services; an informal cooperative arrangement among neighbors or relatives; or the occasional care of children with or without compensation therefore."
"Preschool means a partial-day early childhood program for children age three and older that provides primarily education services where children do not nap and are not served a meal."
So, once a lunch or nap or longer day is added, in Nebraska, the license designation would no longer qualify as a Preschool Program.
Some state definitions read like stereo instructions at first glance and tend to be very long, run-on sentences separated by a few ";" or commas to break it up.
When reading your state regulations, separate each section between semi-colons into its own sentence for reading purposes. It then begins to make some sense!
The purpose of all the wording is to be clear what IS a group program and what is NOT.
For example, providing care while parents/guardians are in religious services on-site does not require this type of license.
When in doubt, contact your state licensor and ask for explanations!
Of course, a preschool program might also be run in a Family Day Care environment.
In my home program, although I was licensed for infants to school age, I only enrolled preschool children and had their school-aged siblings before and after school. My goal was to provide a home preschool program, I therefore did not enroll infants and toddlers.
As with all program types, time management and organization are important. Administration of a preschool specific program or nursery school is more straight forward than those with mixed age groups.
It is easier to determine if you are within ratio when all children are in the same age group.
It is easier to keep track of immunizations as the children are in the same age range.
Determining staff training is easier as you can choose it based on preschool growth and development trainings as opposed to trainings for infants or school age children.
Click Here to See My Affordable In-Service Training Options for Your Staff!
The Creative Curriculum for Preschool by Diane Trister Dodge.
This book has been, and continues to be, a great resource and help to me in all I do with regard to preschool. I would not run any program without it.
Family Day Care is one of several names you might see for a child care program that is run in a residential home.
Other names you might see for a home based program are Family Child Care Center, Family Daycare Home or Home Day Care.
When you see the word "Family" or "Home" in the program name, it means that the program is run in a residential home in a residentially zoned area.
For the sake of state licensing, the name tells you that their licensing capacity is small. It also means that local city/town ordinances may place additional limits on numbers and ages of children.
Here is the description of Family Child Care from one state. This will give you an idea of the type of care provided.
"Any entity or person who, through contractual arrangement, provides to family child care homes that it has approved as members of said system, central administrative functions including, but not limited to, training of operators of family child care homes; technical assistance and consultation to operators of family child care homes; inspection, supervision, monitoring, and evaluation of family child care homes; referral of children to available family child care homes; and referral of children to available health and social services, provided, however, that family child care system shall not mean a placement agency or a child care center."
Family Day Care or Family Child Care is subject to specific training of operators (equivalent to a director in responsibilities). This is important as many family child care providers have no formal training in early childhood education. The licensing agency, therefore, will help secure training to help home providers grow and develop in the areas they need.
In addition, although it may only be one person providing the care, ALL family members or persons living in the home where the care is provided must be approved by the licensing agency. Approval comes in the way of criminal and sexual record checks.
The Director or "operator" or person running and providing care in the Family Day Care wears all hats! They are the infant/toddler/preschool/school-age provider. They are also the person responsibile for all administrative functions (forms, attendance, menus, etc.) of the program.
They are not called "directors" by most state agencies because that title is used for administrators of larger programs and, as a director, specific training is required above and beyond that required in a home setting.
As with all program types, time management and organization are important. I think it is even more important for home providers to master the key of time management.
When the day is over, you don't "leave" the office or classroom and go home. This is your home!
It can be difficult to separate from care provider time to family time. It is tempting to work on projects, santize toys, rearrange furniture, etc. at 11:00 at night!
Another challenge family day care providers face that other program providers do not face is isolation.
In most cases, the provider works alone. There is no "floater", sub or other co-worker to cover for you to go to the bathroom.
There are no breaks or lunch periods where you can unplug.
You are "on" for 8-10 hours a day, non-stop.
If you are a family day care provider, please look into networking with other providers! It is good for the children in your care and especially for you!
Contact your the Child Care Resource and Referral Agency. Ask them if there is a Family Daycare Network in your area.
If not, ask for a list of home providers in your area from your state licensing division. Call them and START a networking group!
When I provided home care, I was involved in family child care networking group.
We met once a month with all our children either at a park, at another provider's home or for a field trip.
We had a picnic lunch and all enjoyed each other's company.
In addition, we rotated 1 evening meeting per month in each other's homes.
During this meeting, we shared activity ideas for the upcoming month, menus & recipes, discussed field trips, discussed issues or concerns we had (child behavior, working with families, etc.).
I am a big fan of The Creative Curriculum Series by Diane Trister Dodge. They have been and continue to be a great resource to me.
This series has two books I think would be hugely helpful to you.
This is their original book. The Creative Curriculum for Family Child Care will be a wonderful resource for you.
Their current edition, The Creative Curriculum for Family Child Care (2 volume set) is more pricey but well worth the investment. Of course, The Creative Curriculum for Preschool will be helpful for your program planning for the preschoolers in your group.
As home providers you have unique needs in addition to working with a much wider age range than preschool programs. I truly believe these books will help you to provide the quality care you are commited to giving to the families in your care. You won't regret the investment of any or all of these books.
A Christian Preschool or Christian Nursery School is a program that serves children ages 3-5 years old.
This program type will not have a specific designation with regard to your state licensing agency, as it would fall under child care or preschool.
The fact that it is called a Christian Preschool does not give it a special license designation.
It is simply an adjective that will help families to know what that it is a ministry of a religious focus.
The same would be true for a state licensed Hebrew School or German School or Montessori School or other.
It tells us what the philosophy of the school is.
There will be no designation with regard to state licensing based on the religious affiliation. Your program will fall under the same expectations of any other preschool program or child care center.
As with all program types, time management and organization are important. Administration will be the same as with any preschool specific program or nursery school. With regard to paperwork, it is more straight forward than those with mixed age groups.
For the children who do receive immunizations, keeping track of immunization records are similar as the children are on the same track and therefore due for the same immunizations within this age group.
It becomes more complicated when you have mixed age groups as their immunizations schedules are different and therefore, keeping track of updates takes more time and organization!
Being a Christian Preschool is more about who you and your staff are, meaning, the worldview that you approach education. In the case of a Christian Preschool, you and your staff, will have a biblical worldview.
This is the view in which you will approach your program. It will be one of love, kindness, faith and forgiveness. You will support families as they teach their children in the faith.
Being a Christian Preschool dos NOT mean you are a Sunday school program! The primary goal is still to provide a safe and nurturing environment that helps preschool children to grow in all areas of development.
1. You will have a Bible story or devotional time.
2. You will pray before snacks or meals.
3. You will pray for and with each other.
4. In addition to the traditional Interest Learning Centers set up in the classroom, you might also have a Bible Interest Center.
5. In addition to traditional preschool themes throughout the year such as Back To School, Rain Forest, and Chicka Chicka Boom Boom, etc., you will also run Bible based themes such as Creation, Jesus and the Children, and Zacchaeus, etc.
6. Regarding holidays, your focus might be, for example, a Christian Christmas Theme in addition to general or secular Christmas activities. The same would hold true for Easter. You might combine activities from a general or secular Easter theme with specific Holy Week themes such as Palm Sunday and Easter.
As you may know by now, I use The Creative Curriculum for Preschool in all my programs.
For Christian programs, I also like the Director's Manual for Weekday Ministries by Barbara Snell McLain. It is an older book but still very relevant to the unique differences of running a Christian Program with regard to networking and gathering support within the congregation.
This book has information specific to Christian Ministries such as communicating and educating the congregation about the program, Faithful Financing and other ministry specific sections.
As you now know, there are many different preschool program types and names. Some differ in philosophy as well as licensing regulations.
They are similar in the most important way: You are directing your program to provide the best quality care possibly to the children and families in your care!
A final note from me, please be sure you are networking with others in your field. "It is lonely at the top" is a true phrase. As the leader of your team, you are the first one staff or families will come to with questions.........and also with complaints.
Don't go it alone! Your passion and motivation are needed! So Network! I have a Facebook Page just for Directors. Come here to ask questions and share ideas with other Directors!


text:
Pontogenia chrysocoma é uma espécie de anelídeo pertencente à família Aphroditidae.

A autoridade científica da espécie é Baird, tendo sido descrita no ano de 1865.

Trata-se de uma espécie presente no território português, incluindo a sua zona económica exclusiva.

Referências
 Pontogenia chrysocoma - World Register of Marine Species (consultado em 31 de dezembro de 2013).

Ligações externas

 Pontogenia chrysocoma - Biodiversity Heritage Library - Bibliografia
 Pontogenia chrysocoma - NCBI Taxonomy Database
 Pontogenia chrysocoma - Global Biodiversity Information Facility
 Pontogenia chrysocoma - Encyclopedia of Life

Anelídeos de Portugal
chrysocoma
Anelídeos descritos em 1865

redpajama_set_name: RedPajamaWikipedia