To Cite: Nabavizadeh F , C Nanda N , Singh A , Mateescu C . Live/Real Time Three-Dimensional Trans Esophageal Echocardiographic Findings in Amplatzer ASD Closure Devices in Adults, Int Cardio Res J. 2017 ; 6(3):e12811.
Six female patients aged from 19 to 73 years, with ostium secundum atrial septal defect underwent closure procedure with Amplatzer septal occluder device. Three-dimensional Echocardiography (3D-TEE) was done during the procedure or one day after the procedure. 3D-TEE provides incremental value over Two- dimensional trans-esophageal echocardiography in measuring Amplatzer septal occluder disc sizes and correlates well with manufacture device size. 3D-TEE will surely prove to increase the technical efficiency and it will become an important tool for the interventionists for periprocedural evaluation of device closures.


Holy Hera! Hercules is One of the Top Books of 2014!
What a surprise I got last night when I checked my Facebook updates. Book blogger Katie Harder-Schauer, part of the Just Another Girl team, sent me a message letting me know The Trials of Hercules had been selected as one of the team's Top Books of 2014!
Next Post It's Time to Reveal the Revamped 13th Hour!


text:
All-day camping will continue to be allowed for people awaiting indoor spaces: City of Victoria
Posted: Apr. 21, 2021 11:26AM
The City of Victoria has announced that all-day camping will be allowed to continue beyond May 1 for individuals who have accepted and are awaiting indoor spaces.
A closed meeting report released by the City reveals a strategy for bylaw enforcement that will support the transition of moving people experiencing homelessness from outdoor parks to indoor spaces.
Anyone who has accepted an offer and is preparing to move from parks will not be required to pack up on a daily basis.
The City says bylaw officers will allow time for moving into transitional housing locations while assisting with downsizing belongings.
"Once someone makes the decision to move inside, we want to do everything we can to support them in that transition and on their pathway to permanent housing," said Mayor Lisa Helps. "That includes taking a compassionate, tailored approach to bylaw enforcement until their new homes are ready to move into."
Anyone who has yet to accept an offer to move indoors, or decides not to accept an offer, will be required to take, down, pack up and remove belongings from parks during the day under new regulations. These regulations, which ban daytime camping in Victoria parks, will become effective May 1. This means that camping will not be allowed between the hours of 7 a.m. and 7 p.m. daily. Any tent or property unlawfully left in place after 7 a.m. will be subject to impound and can be retrieved through Bylaw Services.
Helps says that Council is hoping to see the people currently living outside to take the transitional housing opportunities that are offered.
"Staff have put together a thoughtful, graduated approach to bylaw enforcement that recognizes individual needs while ensuring that the bylaw prohibiting daytime sheltering is enforced. Council supports this direction."
City Council has approved the enforcement strategy and authorized the City Manager and City Solicitor to proceed with a court injunction to enforce the Parks Regulation Bylaw should voluntary compliance not be achieved.
People sheltering outdoors will begin moving into transitional housing in Vic West starting the first week of May and at the Tiny Homes Village near Royal Athletic Park the following week, according to the City. Together, these locations will house approximately 100 individuals.
Victoria adds that since February, 114 people have moved inside from parks and other outdoor areas.
Graham Cox
Janitors at Uptown Shopping Centre in Greater Victoria vote to strike
West Shore RCMP investigating after man allegedly exposed himself to young girls at elementary school

redpajama_set_name: RedPajamaCommonCrawl


text:
Three people wounded in shooting at Atlanta Airport
TEHRAN, Nov. 21 (MNA) – Three people were injured following the shooting at Atlanta Airport in the United States on Saturday afternoon.
The airport was presumably super-busy when the incident took place as the Thanksgiving travel rush is underway in the United States.
A gun discharge that later turned out to be unintentional caused chaos among passengers at Hartsfield-Jackson Atlanta International Airport on Saturday afternoon, Sputnik news agency reported.
According to Atlanta Police, the gun belonging to a passenger was unintentionally discharged at the main security checkpoint. At least three people were injured as a result of the incident, the US Transportation Security Administration (TSA) said later, adding that there "may be more injuries that follow early reports".
"At approximately 1:30 p.m. [18:00 GMT] today, a property search TSO at Hartsfield-Jackson Atlanta International Airport's (ATL) Main Checkpoint began a bag search due to a prohibited item identified by the X-Ray. He advised the passenger not to touch the property, and as he opened the compartment containing the prohibited item, the passenger lunged into the bag and grabbed a firearm, at which point it discharged," the TSA said in a statement.
Videos circulating on social media showed people lying low on the floor and screaming in panic, trying to escape the scene. Flights were reportedly halted as the incident unfolded.
The passenger then fled the airport and this incident is not considered as a deliberate shooting incident.
MA/PR
Morteza Ahmadi Al Hashem
Five people killed, injured after shooting in S Dakota
4 killed, 18 injured in shootings in Chicago: Report
7 killed, injured in shooting at California Halloween party
Gunmen kill 18 at mosque in northern Nigeria's Niger state
Shooting at North Carolina mall leaves three people injured
Idaho shooting in US kills two, injures four people
4 found dead at home in Indiana after report of shots fired
Air Pistol Shooting
US seeks evacuating diplomats' families out of Ukraine
Contradictory reports on death of Saudi Arabia's King Salman
Recent Trends: World
Saudi Invasion
Yemen Crisis
Al Hudaydah
Sana'a Bombing
Bomb Blasts


Thanks to Rick (Quadfish) for overseeing this, the Catskill Fly Fishing Center & Museum for hosting it, and Dette Flies for sponsoring it. By all accounts, it appeared to be a packed house, great turnout. Many SGM board member were present, and I got to sit with, tie with a couple.
The weather cooperated; it was really a nice time seeing so many folks while getting ready for NYS's trout season, now less than two months away.
I'm guessing you might see another photo or two from board members there.
Total agreement here Ed. FlyFest was excellent. Getting ready for fishing season, and connecting with great people was the perfect tonic to chase away the effects of a bitterly cold week. Along with getting to sit and talk with people that I hadn't seen for a long time, I met some wonderful people for the first time and got inspired to tye more soft-hackle/flymph styles. The generous spirit of the Catskill fly fishing community was in full display. Sorry that I didn't snap any photos to contribute here. Thanks to Rick and all of the volunteers that made FlyFest happen.
As part of the FlymphForum contingent, I must say that we were treated royally yesterday. Saw some old friends, met a few folks I had previously known only through this forum, and made some new friends as well. Thank you for extending the invitation to us.
I would also like to add my thanks to Rick for putting this all together. My grandson Noah and I had a wonderful time, he was made to feel right at home by everyone. Thanks especially to Tom Mason,John Waldron and the fellows from the Flymphforum.
You did an outstanding job, putting together the biggest and best fly fest ever!
Thanks guys, but you are the ones who make it happen, I just start (keep) the ball rolling!
I was especially pleased to see so many young folks in attendence!! That contingent from SUNY Syracuse (Trout Bums) just keeps coming and growing! And they know how tie and fish!!!
I'll get some photos up as soon as I get myself organized.
Here is a link to the article in the "Record" from Fly Fest!!
Didn't realize you were an author. Any copies of the book available from you?
I enjoyed seeing everyone at the event, so glad the weather cooperated and the turn out was good.
that's the spirit - my thoughts exactly !


text:
#include "postgres.h"

#include "access/genam.h"
#include "access/heapam.h"
#include "access/xact.h"
#include "catalog/catalog.h"
#include "catalog/catquery.h"
#include "catalog/dependency.h"
#include "catalog/indexing.h"
#include "catalog/pg_authid.h"
#include "catalog/pg_conversion.h"
#include "catalog/pg_database.h"
#include "catalog/pg_language.h"
#include "catalog/pg_namespace.h"
#include "catalog/pg_operator.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_shdepend.h"
#include "catalog/pg_tablespace.h"
#include "catalog/pg_type.h"
#include "commands/conversioncmds.h"
#include "commands/defrem.h"
#include "commands/schemacmds.h"
#include "commands/tablecmds.h"
#include "commands/typecmds.h"
#include "miscadmin.h"
#include "utils/acl.h"
#include "utils/fmgroids.h"
#include "utils/syscache.h"

typedef enum
{
	LOCAL_OBJECT,
	SHARED_OBJECT,
	REMOTE_OBJECT
} objectType;

static int getOidListDiff(Oid *list1, int nlist1, Oid *list2, int nlist2,
			   Oid **diff);
static Oid	classIdGetDbId(Oid classId);
static void shdepLockAndCheckObject(Oid classId, Oid objectId);
static void shdepChangeDep(Relation sdepRel, Oid classid, Oid objid,
			   Oid refclassid, Oid refobjid,
			   SharedDependencyType deptype);
static void shdepAddDependency(Relation sdepRel, Oid classId, Oid objectId,
				   Oid refclassId, Oid refobjId,
				   SharedDependencyType deptype);
static void shdepDropDependency(Relation sdepRel, Oid classId, Oid objectId,
					Oid refclassId, Oid refobjId,
					SharedDependencyType deptype);
static void storeObjectDescription(StringInfo descs, objectType type,
					   ObjectAddress *object,
					   SharedDependencyType deptype,
					   int count);
static bool isSharedObjectPinned(Oid classId, Oid objectId, Relation sdepRel);

/*
 * recordSharedDependencyOn
 *
 * Record a dependency between 2 objects via their respective ObjectAddresses.
 * The first argument is the dependent object, the second the one it
 * references (which must be a shared object).
 *
 * This locks the referenced object and makes sure it still exists.
 * Then it creates an entry in pg_shdepend.  The lock is kept until
 * the end of the transaction.
 *
 * Dependencies on pinned objects are not recorded.
 */
void
recordSharedDependencyOn(ObjectAddress *depender,
						 ObjectAddress *referenced,
						 SharedDependencyType deptype)
{
	Relation	sdepRel;

	/*
	 * Objects in pg_shdepend can't have SubIds.
	 */
	Assert(depender->objectSubId == 0);
	Assert(referenced->objectSubId == 0);

	/*
	 * During bootstrap, do nothing since pg_shdepend may not exist yet.
	 * initdb will fill in appropriate pg_shdepend entries after bootstrap.
	 */
	if (IsBootstrapProcessingMode())
		return;

	sdepRel = heap_open(SharedDependRelationId, RowExclusiveLock);

	/* If the referenced object is pinned, do nothing. */
	if (!isSharedObjectPinned(referenced->classId, referenced->objectId,
							  sdepRel))
	{
		shdepAddDependency(sdepRel, depender->classId, depender->objectId,
						   referenced->classId, referenced->objectId,
						   deptype);
	}

	heap_close(sdepRel, RowExclusiveLock);
}

/*
 * recordDependencyOnOwner
 *
 * A convenient wrapper of recordSharedDependencyOn -- register the specified
 * user as owner of the given object.
 *
 * Note: it's the caller's responsibility to ensure that there isn't an owner
 * entry for the object already.
 */
void
recordDependencyOnOwner(Oid classId, Oid objectId, Oid owner)
{
	ObjectAddress myself,
				referenced;

	myself.classId = classId;
	myself.objectId = objectId;
	myself.objectSubId = 0;

	referenced.classId = AuthIdRelationId;
	referenced.objectId = owner;
	referenced.objectSubId = 0;

	recordSharedDependencyOn(&myself, &referenced, SHARED_DEPENDENCY_OWNER);
}

/*
 * shdepChangeDep
 *
 * Update shared dependency records to account for an updated referenced
 * object.	This is an internal workhorse for operations such as changing
 * an object's owner.
 *
 * There must be no more than one existing entry for the given dependent
 * object and dependency type!	So in practice this can only be used for
 * updating SHARED_DEPENDENCY_OWNER entries, which should have that property.
 *
 * If there is no previous entry, we assume it was referencing a PINned
 * object, so we create a new entry.  If the new referenced object is
 * PINned, we don't create an entry (and drop the old one, if any).
 *
 * sdepRel must be the pg_shdepend relation, already opened and suitably
 * locked.
 */
static void
shdepChangeDep(Relation sdepRel, Oid classid, Oid objid,
			   Oid refclassid, Oid refobjid,
			   SharedDependencyType deptype)
{
	Oid			dbid = classIdGetDbId(classid);
	bool		bGotOne = false;
	HeapTuple	oldtup = NULL;
	HeapTuple	scantup;
	cqContext  *pcqCtx;
	cqContext	cqc;

	/*
	 * Make sure the new referenced object doesn't go away while we record the
	 * dependency.
	 */
	shdepLockAndCheckObject(refclassid, refobjid);

	/*
	 * Look for a previous entry
	 */

	pcqCtx = caql_beginscan(
			caql_addrel(cqclr(&cqc), sdepRel),
			cql("SELECT * FROM pg_shdepend "
				" WHERE dbid = :1 "
				" AND classid = :2 "
				" AND objid = :3 "
				" FOR UPDATE ",
				ObjectIdGetDatum(dbid),
				ObjectIdGetDatum(classid),
				ObjectIdGetDatum(objid)));

	while (HeapTupleIsValid(scantup = caql_getnext(pcqCtx)))
	{
		/* Ignore if not of the target dependency type */
		if (((Form_pg_shdepend) GETSTRUCT(scantup))->deptype != deptype)
			continue;
		/* Caller screwed up if multiple matches */
		if (bGotOne)
			elog(ERROR,
				 "multiple pg_shdepend entries for object %u/%u deptype %c",
				 classid, objid, deptype);
		bGotOne = true;
	}
	caql_endscan(pcqCtx);

	/* XXX XXX XXX XXX XXX XXX XXX XXX XXX
	 * Should match this logic:
	 *
	 *  if isSharedObjectpinned
	 *     if Gotone then drop it
	 *  else
     *     if Gotone
     *     then update it
     *     else insert it
	 *
	 * XXX XXX XXX XXX XXX XXX XXX XXX XXX
	 */

	if (!bGotOne) /* no match */
	{
		/* if no match and pinned, new entry not needed */
		if (isSharedObjectPinned(refclassid, refobjid, sdepRel))
		{
			/* just return -- don't need to free anything because
			 * sdelRel was passed in, and pcqCtx is freed
			 */
			return;
		}

		pcqCtx = caql_beginscan(
				caql_addrel(cqclr(&cqc), sdepRel),
				cql("INSERT INTO pg_shdepend ",
					NULL));

		/* Need to insert new entry */
		Datum		values[Natts_pg_shdepend];
		bool		nulls[Natts_pg_shdepend];

		memset(nulls, 0, sizeof(nulls));

		values[Anum_pg_shdepend_dbid - 1] = ObjectIdGetDatum(dbid);
		values[Anum_pg_shdepend_classid - 1] = ObjectIdGetDatum(classid);
		values[Anum_pg_shdepend_objid - 1] = ObjectIdGetDatum(objid);

		values[Anum_pg_shdepend_refclassid - 1] = ObjectIdGetDatum(refclassid);
		values[Anum_pg_shdepend_refobjid - 1] = ObjectIdGetDatum(refobjid);
		values[Anum_pg_shdepend_deptype - 1] = CharGetDatum(deptype);

		/*
		 * we are reusing oldtup just to avoid declaring a new variable, but
		 * it's certainly a new tuple
		 */
		oldtup = caql_form_tuple(pcqCtx, values, nulls);
		caql_insert(pcqCtx, oldtup);
		/* and Update indexes (implicit) */

		heap_freetuple(oldtup);
		caql_endscan(pcqCtx);
	}
	else
	{
		/* XXX XXX Do the scan again, but do the update/delete this time */

		pcqCtx = caql_beginscan(
				caql_addrel(cqclr(&cqc), sdepRel),
				cql("SELECT * FROM pg_shdepend "
					" WHERE dbid = :1 "
					" AND classid = :2 "
					" AND objid = :3 "
					" FOR UPDATE ",
					ObjectIdGetDatum(dbid),
					ObjectIdGetDatum(classid),
					ObjectIdGetDatum(objid)));

		while (HeapTupleIsValid(scantup = caql_getnext(pcqCtx)))
		{
			/* Ignore if not of the target dependency type */
			if (((Form_pg_shdepend) GETSTRUCT(scantup))->deptype != deptype)
				continue;
			/*
			 * NOTE: already tested for multiple matches - just use
			 * first one
			 */

			if (isSharedObjectPinned(refclassid, refobjid, sdepRel))
			{
				/* No new entry needed, so just delete existing entry if any */
				caql_delete_current(pcqCtx);
			}
			else
			{
				oldtup = heap_copytuple(scantup);

				/* Need to update existing entry */
				Form_pg_shdepend shForm = (Form_pg_shdepend) GETSTRUCT(oldtup);

				/* Since oldtup is a copy, we can just modify it in-memory */
				shForm->refclassid = refclassid;
				shForm->refobjid = refobjid;

				caql_update_current(pcqCtx, oldtup);
				/* and Update indexes (implicit) */

				heap_freetuple(oldtup);
			}
			break;
		}
		caql_endscan(pcqCtx);
	}

}

/*
 * changeDependencyOnOwner
 *
 * Update the shared dependencies to account for the new owner.
 */
void
changeDependencyOnOwner(Oid classId, Oid objectId, Oid newOwnerId)
{
	Relation	sdepRel;

	sdepRel = heap_open(SharedDependRelationId, RowExclusiveLock);

	/* Adjust the SHARED_DEPENDENCY_OWNER entry */
	shdepChangeDep(sdepRel, classId, objectId,
				   AuthIdRelationId, newOwnerId,
				   SHARED_DEPENDENCY_OWNER);

	/*----------
	 * There should never be a SHARED_DEPENDENCY_ACL entry for the owner,
	 * so get rid of it if there is one.  This can happen if the new owner
	 * was previously granted some rights to the object.
	 *
	 * This step is analogous to aclnewowner's removal of duplicate entries
	 * in the ACL.	We have to do it to handle this scenario:
	 *		A grants some rights on an object to B
	 *		ALTER OWNER changes the object's owner to B
	 *		ALTER OWNER changes the object's owner to C
	 * The third step would remove all mention of B from the object's ACL,
	 * but we'd still have a SHARED_DEPENDENCY_ACL for B if we did not do
	 * things this way.
	 *
	 * The rule against having a SHARED_DEPENDENCY_ACL entry for the owner
	 * allows us to fix things up in just this one place, without having
	 * to make the various ALTER OWNER routines each know about it.
	 *----------
	 */
	shdepDropDependency(sdepRel, classId, objectId,
						AuthIdRelationId, newOwnerId,
						SHARED_DEPENDENCY_ACL);

	heap_close(sdepRel, RowExclusiveLock);
}

/*
 * getOidListDiff
 *		Helper for updateAclDependencies.
 *
 * Takes two Oid arrays and returns elements from the first not found in the
 * second.	We assume both arrays are sorted and de-duped, and that the
 * second array does not contain any values not found in the first.
 *
 * NOTE: Both input arrays are pfreed.
 */
static int
getOidListDiff(Oid *list1, int nlist1, Oid *list2, int nlist2, Oid **diff)
{
	Oid		   *result;
	int			i,
				j,
				k = 0;

	AssertArg(nlist1 >= nlist2 && nlist2 >= 0);

	result = palloc(sizeof(Oid) * (nlist1 - nlist2));
	*diff = result;

	for (i = 0, j = 0; i < nlist1 && j < nlist2;)
	{
		if (list1[i] == list2[j])
		{
			i++;
			j++;
		}
		else if (list1[i] < list2[j])
		{
			result[k++] = list1[i];
			i++;
		}
		else
		{
			/* can't happen */
			elog(WARNING, "invalid element %u in shorter list", list2[j]);
			j++;
		}
	}

	for (; i < nlist1; i++)
		result[k++] = list1[i];

	/* We should have copied the exact number of elements */
	AssertState(k == (nlist1 - nlist2));

	if (list1)
		pfree(list1);
	if (list2)
		pfree(list2);

	return k;
}

/*
 * updateAclDependencies
 *		Update the pg_shdepend info for an object's ACL during GRANT/REVOKE.
 *
 * classId, objectId: identify the object whose ACL this is
 * ownerId: role owning the object
 * isGrant: are we adding or removing ACL entries?
 * noldmembers, oldmembers: array of roleids appearing in old ACL
 * nnewmembers, newmembers: array of roleids appearing in new ACL
 *
 * We calculate the difference between the new and old lists of roles,
 * and then insert (if it's a grant) or delete (if it's a revoke) from
 * pg_shdepend as appropiate.
 *
 * Note that we can't insert blindly at grant, because we would end up with
 * duplicate registered dependencies.  We could check for existence of the
 * tuple before inserting, but that seems to be more expensive than what we are
 * doing now.  On the other hand, we can't just delete the tuples blindly at
 * revoke, because the user may still have other privileges.
 *
 * NOTE: Both input arrays must be sorted and de-duped.  They are pfreed
 * before return.
 */
void
updateAclDependencies(Oid classId, Oid objectId, Oid ownerId, bool isGrant,
					  int noldmembers, Oid *oldmembers,
					  int nnewmembers, Oid *newmembers)
{
	Relation	sdepRel;
	Oid		   *diff;
	int			ndiff,
				i;

	/*
	 * Calculate the differences between the old and new lists.
	 */
	if (isGrant)
		ndiff = getOidListDiff(newmembers, nnewmembers,
							   oldmembers, noldmembers, &diff);
	else
		ndiff = getOidListDiff(oldmembers, noldmembers,
							   newmembers, nnewmembers, &diff);

	if (ndiff > 0)
	{
		sdepRel = heap_open(SharedDependRelationId, RowExclusiveLock);

		/* Add or drop the respective dependency */
		for (i = 0; i < ndiff; i++)
		{
			Oid			roleid = diff[i];

			/*
			 * Skip the owner: he has an OWNER shdep entry instead. (This is
			 * not just a space optimization; it makes ALTER OWNER easier. See
			 * notes in changeDependencyOnOwner.)
			 */
			if (roleid == ownerId)
				continue;

			/* Skip pinned roles */
			if (isSharedObjectPinned(AuthIdRelationId, roleid, sdepRel))
				continue;

			if (isGrant)
				shdepAddDependency(sdepRel, classId, objectId,
								   AuthIdRelationId, roleid,
								   SHARED_DEPENDENCY_ACL);
			else
				shdepDropDependency(sdepRel, classId, objectId,
									AuthIdRelationId, roleid,
									SHARED_DEPENDENCY_ACL);
		}

		heap_close(sdepRel, RowExclusiveLock);
	}

	pfree(diff);
}

/*
 * A struct to keep track of dependencies found in other databases.
 */
typedef struct
{
	Oid			dbOid;
	int			count;
} remoteDep;

/*
 * checkSharedDependencies
 *
 * Check whether there are shared dependency entries for a given shared
 * object.	Returns a string containing a newline-separated list of object
 * descriptions that depend on the shared object, or NULL if none is found.
 *
 * We can find three different kinds of dependencies: dependencies on objects
 * of the current database; dependencies on shared objects; and dependencies
 * on objects local to other databases.  We can (and do) provide descriptions
 * of the two former kinds of objects, but we can't do that for "remote"
 * objects, so we just provide a count of them.
 *
 * If we find a SHARED_DEPENDENCY_PIN entry, we can error out early.
 */
char *
checkSharedDependencies(Oid classId, Oid objectId)
{
	HeapTuple	tup;
	cqContext  *pcqCtx;
	int			totalDeps = 0;
	int			numLocalDeps = 0;
	int			numSharedDeps = 0;
	List	   *remDeps = NIL;
	ListCell   *cell;
	ObjectAddress object;
	StringInfoData descs;

	/*
	 * We try to limit the number of reported dependencies to something sane,
	 * both for the user's sake and to avoid blowing out memory.
	 */
#define MAX_REPORTED_DEPS 100

	initStringInfo(&descs);

	pcqCtx = caql_beginscan(
			NULL,
			cql("SELECT * FROM pg_shdepend "
				" WHERE refclassid = :1 "
				" AND refobjid = :2 ",
				ObjectIdGetDatum(classId),
				ObjectIdGetDatum(objectId)));

	while (HeapTupleIsValid(tup = caql_getnext(pcqCtx)))
	{
		Form_pg_shdepend sdepForm = (Form_pg_shdepend) GETSTRUCT(tup);

		/* This case can be dispatched quickly */
		if (sdepForm->deptype == SHARED_DEPENDENCY_PIN)
		{
			object.classId = classId;
			object.objectId = objectId;
			object.objectSubId = 0;
			ereport(ERROR,
					(errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST),
					 errmsg("cannot drop %s because it is required by the database system",
							getObjectDescription(&object))));
		}

		object.classId = sdepForm->classid;
		object.objectId = sdepForm->objid;
		object.objectSubId = 0;

		/*
		 * If it's a dependency local to this database or it's a shared
		 * object, describe it.
		 *
		 * If it's a remote dependency, keep track of it so we can report the
		 * number of them later.
		 */
		if (sdepForm->dbid == MyDatabaseId)
		{
			numLocalDeps++;
			if (++totalDeps <= MAX_REPORTED_DEPS)
				storeObjectDescription(&descs, LOCAL_OBJECT, &object,
									   sdepForm->deptype, 0);
		}
		else if (sdepForm->dbid == InvalidOid)
		{
			numSharedDeps++;
			if (++totalDeps <= MAX_REPORTED_DEPS)
				storeObjectDescription(&descs, SHARED_OBJECT, &object,
									   sdepForm->deptype, 0);
		}
		else
		{
			/* It's not local nor shared, so it must be remote. */
			remoteDep  *dep;
			bool		stored = false;

			/*
			 * XXX this info is kept on a simple List.	Maybe it's not good
			 * for performance, but using a hash table seems needlessly
			 * complex.  The expected number of databases is not high anyway,
			 * I suppose.
			 */
			foreach(cell, remDeps)
			{
				dep = lfirst(cell);
				if (dep->dbOid == sdepForm->dbid)
				{
					dep->count++;
					stored = true;
					break;
				}
			}
			if (!stored)
			{
				dep = (remoteDep *) palloc(sizeof(remoteDep));
				dep->dbOid = sdepForm->dbid;
				dep->count = 1;
				remDeps = lappend(remDeps, dep);
				totalDeps++;
			}
		}
	}

	caql_endscan(pcqCtx);

	if (totalDeps > MAX_REPORTED_DEPS)
	{
		/*
		 * Report seems unreasonably long, so reduce it to per-database info
		 *
		 * Note: we don't ever suppress per-database totals, which should be
		 * OK as long as there aren't too many databases ...
		 */
		descs.len = 0;			/* reset to empty */
		descs.data[0] = '\0';

		if (numLocalDeps > 0)
		{
			appendStringInfo(&descs, _("%d objects in this database"),
							 numLocalDeps);
			if (numSharedDeps > 0)
				appendStringInfoChar(&descs, '\n');
		}
		if (numSharedDeps > 0)
			appendStringInfo(&descs, _("%d shared objects"),
							 numSharedDeps);
	}

	foreach(cell, remDeps)
	{
		remoteDep  *dep = lfirst(cell);

		object.classId = DatabaseRelationId;
		object.objectId = dep->dbOid;
		object.objectSubId = 0;

		storeObjectDescription(&descs, REMOTE_OBJECT, &object,
							   SHARED_DEPENDENCY_INVALID, dep->count);
	}

	list_free_deep(remDeps);

	if (descs.len == 0)
	{
		pfree(descs.data);
		return NULL;
	}

	return descs.data;
}

/*
 * copyTemplateDependencies
 *
 * Routine to create the initial shared dependencies of a new database.
 * We simply copy the dependencies from the template database.
 */
void
copyTemplateDependencies(Oid templateDbId, Oid newDbId)
{
	cqContext  *pcqCtx;
	HeapTuple	tup;
	Datum		values[Natts_pg_shdepend];
	bool		nulls[Natts_pg_shdepend];
	bool		replace[Natts_pg_shdepend];

	/* Scan all entries with dbid = templateDbId */
	pcqCtx = caql_beginscan(
			NULL,
			cql("SELECT * FROM pg_shdepend "
				" WHERE dbid = :1 "
				" FOR UPDATE ",
				ObjectIdGetDatum(templateDbId)));

	/* Set up to copy the tuples except for inserting newDbId */
	memset(values, 0, sizeof(values));
	memset(nulls, false, sizeof(nulls));
	memset(replace, false, sizeof(replace));

	replace[Anum_pg_shdepend_dbid - 1] = true;
	values[Anum_pg_shdepend_dbid - 1] = ObjectIdGetDatum(newDbId);

	/*
	 * Copy the entries of the original database, changing the database Id to
	 * that of the new database.  Note that because we are not copying rows
	 * with dbId == 0 (ie, rows describing dependent shared objects) we won't
	 * copy the ownership dependency of the template database itself; this is
	 * what we want.
	 */
	while (HeapTupleIsValid(tup = caql_getnext(pcqCtx)))
	{
		HeapTuple	newtup;

		newtup = caql_modify_current(pcqCtx, values, nulls, replace);
		caql_insert(pcqCtx, newtup);
		/* and Update indexes (implicit) */

		heap_freetuple(newtup);
	}

	caql_endscan(pcqCtx);
}

/*
 * dropDatabaseDependencies
 *
 * Delete pg_shdepend entries corresponding to a database that's being
 * dropped.
 */
void
dropDatabaseDependencies(Oid databaseId)
{
	Relation	sdepRel;
	cqContext	cqc;
	int			numDel;

	sdepRel = heap_open(SharedDependRelationId, RowExclusiveLock);

	/*
	 * First, delete all the entries that have the database Oid in the dbid
	 * field.
	 */
	numDel = caql_getcount(
			caql_addrel(cqclr(&cqc), sdepRel),
			cql("DELETE FROM pg_shdepend "
				" WHERE dbid = :1 ",
				ObjectIdGetDatum(databaseId)));
	/* We leave the other index fields unspecified */

	/* Now delete all entries corresponding to the database itself */
	shdepDropDependency(sdepRel, DatabaseRelationId, databaseId,
						InvalidOid, InvalidOid,
						SHARED_DEPENDENCY_INVALID);

	heap_close(sdepRel, RowExclusiveLock);
}

/*
 * deleteSharedDependencyRecordsFor
 *
 * Delete all pg_shdepend entries corresponding to an object that's being
 * dropped or modified.  The object is assumed to be either a shared object
 * or local to the current database (the classId tells us which).
 */
void
deleteSharedDependencyRecordsFor(Oid classId, Oid objectId)
{
	Relation	sdepRel;

	sdepRel = heap_open(SharedDependRelationId, RowExclusiveLock);

	shdepDropDependency(sdepRel, classId, objectId,
						InvalidOid, InvalidOid,
						SHARED_DEPENDENCY_INVALID);

	heap_close(sdepRel, RowExclusiveLock);
}

/*
 * shdepAddDependency
 *		Internal workhorse for inserting into pg_shdepend
 *
 * sdepRel must be the pg_shdepend relation, already opened and suitably
 * locked.
 */
static void
shdepAddDependency(Relation sdepRel, Oid classId, Oid objectId,
				   Oid refclassId, Oid refobjId,
				   SharedDependencyType deptype)
{
	HeapTuple	tup;
	Datum		values[Natts_pg_shdepend];
	bool		nulls[Natts_pg_shdepend];
	cqContext  *pcqCtx;
	cqContext	cqc;

	/*
	 * Make sure the object doesn't go away while we record the dependency on
	 * it.	DROP routines should lock the object exclusively before they check
	 * shared dependencies.
	 */
	shdepLockAndCheckObject(refclassId, refobjId);

	pcqCtx = caql_beginscan(
			caql_addrel(cqclr(&cqc), sdepRel),
			cql("INSERT INTO pg_shdepend ",
				NULL));

	memset(nulls, false, sizeof(nulls));

	/*
	 * Form the new tuple and record the dependency.
	 */
	values[Anum_pg_shdepend_dbid - 1] = ObjectIdGetDatum(classIdGetDbId(classId));
	values[Anum_pg_shdepend_classid - 1] = ObjectIdGetDatum(classId);
	values[Anum_pg_shdepend_objid - 1] = ObjectIdGetDatum(objectId);

	values[Anum_pg_shdepend_refclassid - 1] = ObjectIdGetDatum(refclassId);
	values[Anum_pg_shdepend_refobjid - 1] = ObjectIdGetDatum(refobjId);
	values[Anum_pg_shdepend_deptype - 1] = CharGetDatum(deptype);

	tup = caql_form_tuple(pcqCtx, values, nulls);

	caql_insert(pcqCtx, tup);
	/* and Update indexes (implicit) */

	/* clean up */
	heap_freetuple(tup);
	caql_endscan(pcqCtx);
}

/*
 * shdepDropDependency
 *		Internal workhorse for deleting entries from pg_shdepend.
 *
 * We drop entries having the following properties:
 *	dependent object is the one identified by classId/objectId
 *	if refclassId isn't InvalidOid, it must match the entry's refclassid
 *	if refobjId isn't InvalidOid, it must match the entry's refobjid
 *	if deptype isn't SHARED_DEPENDENCY_INVALID, it must match entry's deptype
 *
 * sdepRel must be the pg_shdepend relation, already opened and suitably
 * locked.
 */
static void
shdepDropDependency(Relation sdepRel, Oid classId, Oid objectId,
					Oid refclassId, Oid refobjId,
					SharedDependencyType deptype)
{
	HeapTuple	tup;
	cqContext  *pcqCtx;
	cqContext	cqc;

	/* Scan for entries matching the dependent object */
	pcqCtx = caql_beginscan(
			caql_addrel(cqclr(&cqc), sdepRel),
			cql("SELECT * FROM pg_shdepend "
				" WHERE dbid = :1 "
				" AND classid = :2 "
				" AND objid = :3 "
				" FOR UPDATE ",
				ObjectIdGetDatum(classIdGetDbId(classId)),
				ObjectIdGetDatum(classId),
				ObjectIdGetDatum(objectId)));

	while (HeapTupleIsValid(tup = caql_getnext(pcqCtx)))
	{
		Form_pg_shdepend shdepForm = (Form_pg_shdepend) GETSTRUCT(tup);

		/* Filter entries according to additional parameters */
		if (OidIsValid(refclassId) && shdepForm->refclassid != refclassId)
			continue;
		if (OidIsValid(refobjId) && shdepForm->refobjid != refobjId)
			continue;
		if (deptype != SHARED_DEPENDENCY_INVALID &&
			shdepForm->deptype != deptype)
			continue;

		/* OK, delete it */
		caql_delete_current(pcqCtx);
	}

	caql_endscan(pcqCtx);
}

/*
 * classIdGetDbId
 *
 * Get the database Id that should be used in pg_shdepend, given the OID
 * of the catalog containing the object.  For shared objects, it's 0
 * (InvalidOid); for all other objects, it's the current database Id.
 */
static Oid
classIdGetDbId(Oid classId)
{
	Oid			dbId;

	if (IsSharedRelation(classId))
		dbId = InvalidOid;
	else
		dbId = MyDatabaseId;

	return dbId;
}

/*
 * shdepLockAndCheckObject
 *
 * Lock the object that we are about to record a dependency on.
 * After it's locked, verify that it hasn't been dropped while we
 * weren't looking.  If the object has been dropped, this function
 * does not return!
 */
static void
shdepLockAndCheckObject(Oid classId, Oid objectId)
{
	/* AccessShareLock should be OK, since we are not modifying the object */
	LockSharedObject(classId, objectId, 0, AccessShareLock);

	switch (classId)
	{
		case AuthIdRelationId:
			if (0 == caql_getcount(
						NULL,
						cql("SELECT COUNT(*) FROM pg_authid "
							" WHERE oid = :1 ",
							ObjectIdGetDatum(objectId))))
			{
				ereport(ERROR,
						(errcode(ERRCODE_UNDEFINED_OBJECT),
						 errmsg("role %u was concurrently dropped",
								objectId)));
			}
			break;

			/*
			 * Currently, this routine need not support any other shared
			 * object types besides roles.	If we wanted to record explicit
			 * dependencies on databases or tablespaces, we'd need code along
			 * these lines:
			 */
#ifdef NOT_USED
		case TableSpaceRelationId:
			{
				/* For lack of a syscache on pg_tablespace, do this: */
				char	   *tablespace = get_tablespace_name(objectId);

				if (tablespace == NULL)
					ereport(ERROR,
							(errcode(ERRCODE_UNDEFINED_OBJECT),
							 errmsg("tablespace %u was concurrently dropped",
									objectId)));
				pfree(tablespace);
				break;
			}
#endif

		default:
			elog(ERROR, "unrecognized shared classId: %u", classId);
	}
}

/*
 * storeObjectDescription
 *		Append the description of a dependent object to "descs"
 *
 * While searching for dependencies of a shared object, we stash the
 * descriptions of dependent objects we find in a single string, which we
 * later pass to ereport() in the DETAIL field when somebody attempts to
 * drop a referenced shared object.
 *
 * When type is LOCAL_OBJECT or SHARED_OBJECT, we expect object to be the
 * dependent object, deptype is the dependency type, and count is not used.
 * When type is REMOTE_OBJECT, we expect object to be the database object,
 * and count to be nonzero; deptype is not used in this case.
 */
static void
storeObjectDescription(StringInfo descs, objectType type,
					   ObjectAddress *object,
					   SharedDependencyType deptype,
					   int count)
{
	char	   *objdesc = getObjectDescription(object);

	/* separate entries with a newline */
	if (descs->len != 0)
		appendStringInfoChar(descs, '\n');

	switch (type)
	{
		case LOCAL_OBJECT:
		case SHARED_OBJECT:
			if (deptype == SHARED_DEPENDENCY_OWNER)
				appendStringInfo(descs, _("owner of %s"), objdesc);
			else if (deptype == SHARED_DEPENDENCY_ACL)
				appendStringInfo(descs, _("access to %s"), objdesc);
			else
				elog(ERROR, "unrecognized dependency type: %d",
					 (int) deptype);
			break;

		case REMOTE_OBJECT:
			/* translator: %s will always be "database %s" */
			appendStringInfo(descs, _("%d objects in %s"), count, objdesc);
			break;

		default:
			elog(ERROR, "unrecognized object type: %d", type);
	}

	pfree(objdesc);
}

/*
 * isSharedObjectPinned
 *		Return whether a given shared object has a SHARED_DEPENDENCY_PIN entry.
 *
 * sdepRel must be the pg_shdepend relation, already opened and suitably
 * locked.
 */
static bool
isSharedObjectPinned(Oid classId, Oid objectId, Relation sdepRel)
{
	bool		result = false;
	HeapTuple	tup;
	cqContext	cqc;

	tup = caql_getfirst(
			caql_addrel(cqclr(&cqc), sdepRel),
			cql("SELECT * FROM pg_shdepend "
				" WHERE refclassid = :1 "
				" AND refobjid = :2 ",
				ObjectIdGetDatum(classId),
				ObjectIdGetDatum(objectId)));

	/*
	 * Since we won't generate additional pg_shdepend entries for pinned
	 * objects, there can be at most one entry referencing a pinned object.
	 * Hence, it's sufficient to look at the first returned tuple; we don't
	 * need to loop.
	 */

	if (HeapTupleIsValid(tup))
	{
		Form_pg_shdepend shdepForm = (Form_pg_shdepend) GETSTRUCT(tup);

		if (shdepForm->deptype == SHARED_DEPENDENCY_PIN)
			result = true;
	}

	return result;
}

/*
 * shdepDropOwned
 *
 * Drop the objects owned by any one of the given RoleIds.	If a role has
 * access to an object, the grant will be removed as well (but the object
 * will not, of course.)
 *
 * We can revoke grants immediately while doing the scan, but drops are
 * saved up and done all at once with performMultipleDeletions.  This
 * is necessary so that we don't get failures from trying to delete
 * interdependent objects in the wrong order.
 */
void
shdepDropOwned(List *roleids, DropBehavior behavior)
{
	Relation	sdepRel;
	ListCell   *cell;
	ObjectAddresses *deleteobjs;

	deleteobjs = new_object_addresses();

	sdepRel = heap_open(SharedDependRelationId, AccessExclusiveLock);

	/*
	 * For each role, find the dependent objects and drop them using the
	 * regular (non-shared) dependency management.
	 */
	foreach(cell, roleids)
	{
		Oid			roleid = lfirst_oid(cell);
		HeapTuple	tuple;
		cqContext  *pcqCtx;
		cqContext	cqc;

		/* Doesn't work for pinned objects */
		if (isSharedObjectPinned(AuthIdRelationId, roleid, sdepRel))
		{
			ObjectAddress obj;

			obj.classId = AuthIdRelationId;
			obj.objectId = roleid;
			obj.objectSubId = 0;

			ereport(ERROR,
					(errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST),
				   errmsg("cannot drop objects owned by %s because they are "
						  "required by the database system",
						  getObjectDescription(&obj))));
		}

		pcqCtx = caql_beginscan(
				caql_addrel(cqclr(&cqc), sdepRel),
				cql("SELECT * FROM pg_shdepend "
					" WHERE refclassid = :1 "
					" AND refobjid = :2 "
					" FOR UPDATE ",
					ObjectIdGetDatum(AuthIdRelationId),
					ObjectIdGetDatum(roleid)));

		while (HeapTupleIsValid(tuple = caql_getnext(pcqCtx)))
		{
			ObjectAddress obj;
			GrantObjectType objtype;
			InternalGrant istmt;
			Form_pg_shdepend sdepForm = (Form_pg_shdepend) GETSTRUCT(tuple);

			/* We only operate on objects in the current database */
			if (sdepForm->dbid != MyDatabaseId)
				continue;

			switch (sdepForm->deptype)
			{
					/* Shouldn't happen */
				case SHARED_DEPENDENCY_PIN:
				case SHARED_DEPENDENCY_INVALID:
					elog(ERROR, "unexpected dependency type");
					break;
				case SHARED_DEPENDENCY_ACL:
					switch (sdepForm->classid)
					{
						case RelationRelationId:
							/* it's OK to use RELATION for a sequence */
							istmt.objtype = ACL_OBJECT_RELATION;
							break;
						case DatabaseRelationId:
							istmt.objtype = ACL_OBJECT_DATABASE;
							break;
						case ProcedureRelationId:
							istmt.objtype = ACL_OBJECT_FUNCTION;
							break;
						case LanguageRelationId:
							istmt.objtype = ACL_OBJECT_LANGUAGE;
							break;
						case NamespaceRelationId:
							istmt.objtype = ACL_OBJECT_NAMESPACE;
							break;
						case TableSpaceRelationId:
							istmt.objtype = ACL_OBJECT_TABLESPACE;
							break;
						default:
							elog(ERROR, "unexpected object type %d",
								 sdepForm->classid);
							/* keep compiler quiet */
							objtype = (GrantObjectType) 0;
							break;
					}
					istmt.is_grant = false;
					istmt.objects = list_make1_oid(sdepForm->objid);
					istmt.all_privs = true;
					istmt.privileges = ACL_NO_RIGHTS;
					istmt.grantees = list_make1_oid(roleid);
					istmt.grant_option = false;
					istmt.behavior = DROP_CASCADE;
					istmt.cooked_privs = NIL;

					ExecGrantStmt_oids(&istmt);
					break;
				case SHARED_DEPENDENCY_OWNER:
					/* Save it for deletion below */
					obj.classId = sdepForm->classid;
					obj.objectId = sdepForm->objid;
					obj.objectSubId = 0;
					add_exact_object_address(&obj, deleteobjs);
					break;
			}
		}

		caql_endscan(pcqCtx);
	}

	/* the dependency mechanism does the actual work */
	performMultipleDeletions(deleteobjs, behavior);

	heap_close(sdepRel, AccessExclusiveLock);

	free_object_addresses(deleteobjs);
}

/*
 * shdepReassignOwned
 *
 * Change the owner of objects owned by any of the roles in roleids to
 * newrole.  Grants are not touched.
 */
void
shdepReassignOwned(List *roleids, Oid newrole)
{
	Relation	sdepRel;
	ListCell   *cell;

	sdepRel = heap_open(SharedDependRelationId, AccessShareLock);

	foreach(cell, roleids)
	{
		HeapTuple	tuple;
		cqContext  *pcqCtx;
		cqContext	cqc;
		Oid			roleid = lfirst_oid(cell);

		/* Refuse to work on pinned roles */
		if (isSharedObjectPinned(AuthIdRelationId, roleid, sdepRel))
		{
			ObjectAddress obj;

			obj.classId = AuthIdRelationId;
			obj.objectId = roleid;
			obj.objectSubId = 0;

			ereport(ERROR,
					(errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST),
				   errmsg("cannot drop objects owned by %s because they are "
						  "required by the database system",
						  getObjectDescription(&obj))));

			/*
			 * There's no need to tell the whole truth, which is that we
			 * didn't track these dependencies at all ...
			 */
		}

		pcqCtx = caql_beginscan(
				caql_addrel(cqclr(&cqc), sdepRel),
				cql("SELECT * FROM pg_shdepend "
					" WHERE refclassid = :1 "
					" AND refobjid = :2 ",
					ObjectIdGetDatum(AuthIdRelationId),
					ObjectIdGetDatum(roleid)));

		while (HeapTupleIsValid(tuple = caql_getnext(pcqCtx)))
		{
			Form_pg_shdepend sdepForm = (Form_pg_shdepend) GETSTRUCT(tuple);

			/* We only operate on objects in the current database */
			if (sdepForm->dbid != MyDatabaseId)
				continue;

			/* Unexpected because we checked for pins above */
			if (sdepForm->deptype == SHARED_DEPENDENCY_PIN)
				elog(ERROR, "unexpected shared pin");

			/* We leave non-owner dependencies alone */
			if (sdepForm->deptype != SHARED_DEPENDENCY_OWNER)
				continue;

			/* Issue the appropriate ALTER OWNER call */
			switch (sdepForm->classid)
			{
				case ConversionRelationId:
					AlterConversionOwner_oid(sdepForm->objid, newrole);
					break;

				case TypeRelationId:
					AlterTypeOwnerInternal(sdepForm->objid, newrole, true);
					break;

				case OperatorRelationId:
					AlterOperatorOwner_oid(sdepForm->objid, newrole);
					break;

				case NamespaceRelationId:
					AlterSchemaOwner_oid(sdepForm->objid, newrole);
					break;

				case RelationRelationId:

					/*
					 * Pass recursing = true so that we don't fail on indexes,
					 * owned sequences, etc when we happen to visit them
					 * before their parent table.
					 */
					ATExecChangeOwner(sdepForm->objid, newrole, true);
					break;

				case ProcedureRelationId:
					AlterFunctionOwner_oid(sdepForm->objid, newrole);
					break;

				default:
					elog(ERROR, "unexpected classid %d", sdepForm->classid);
					break;
			}
			/* Make sure the next iteration will see my changes */
			CommandCounterIncrement();
		}

		caql_endscan(pcqCtx);
	}

	heap_close(sdepRel, AccessShareLock);
}

redpajama_set_name: RedPajamaGithub


Enjoy 1 - 2 cups a day and watch the inches melt away.
Delicious gourmet instant coffee and tea designed to help you lose weight and burn fat. Order online and have your beverages delivered to your doorstep.
Medifast Meals for fast and easy weight loss. Lose up to 2 - 5 lbs a week. Delivered to your door. Health Coach honors all Medifast coupons.


These side skirts extensions are meant to add a sporty touch, improve aerodynamics and convert your BMW into an genuine BMW F32/F33/F36 M-Performance.
Side Skirts Extensions M-Sport Design crafted in high quality Polypropylene.
Buy it now Side Skirts Add-on Lip Extensions BMW 4 Series F32 F33 F36 Coupe Cabrio Grand Coupe M-Performance!


I have severe hair fall. How can I treat it?
Hair fall can occur due to a number of reasons. Poor nutrition, chronic illnesses, constant parlour procedures, and stress in your life can all lead to hair fall. Include more protein in your diet in the form of fish, eggs, sprouts, soya etc. Do not use heating devices on your hair. Use an oil containing ingredients like coco-glycerides and garlic that controls or arrest excessive hair fall at least 3 times a week. If your hair fall persists for longer than 6 months, consult a dermatologist.
I have severe dandruff. How to control it and does it cause hair fall?
A little bit of dandruff is normal and natural in everyday life and does not always need medication. Natural remedies like lemon along with coconut based hair oils can address the dryness and reduce flaking effectively. However, severe dandruff may require ingredients like antifungals, so if your dandruff is chronic and persistent, do see a dermatologist. Natural foods like yogurt and walnuts can also help in reducing dandruff.
What should I eat and what vitamins should I take to promote good, healthy hair?
Protein intake is very important for good hair. It is necessary to incorporate protein into every meal. Choose from nuts like peanuts, almonds, walnuts, eggs, sprouts, soya bean, soya milk, low fat cottage cheese, tofu etc. B complex vitamins, especially biotin and amino acid L cysteine are also important. Include plenty of leafy green vegetables in your diet.
I rebonded and coloured my hair post which I'm losing hair. How do I stop this?
Parlour procedures can increase shedding hair fall but mostly they lead to fragility and excessive breakage. Use mild shampoos and conditioners post procedures.
Oil your hair with coconut based hair oils frequently to pre-condition it and make it stronger, preventing breakage.
What shampoo or conditioner should I use to wash my hair? How often should hair be washed?
Always use gentle shampoo conditioner or natural ingredients like aloe vera. You can shampoo your hair as often as needed. Just dry it thoroughly and use an oil replacement to relax it and prevent breakages.
Is oiling good to restore my hair's beauty and repair damage?
Oiling is not only a time tested and effective practice but is also proven to nourish the hair, preserve its beauty and repair damage cause by vagaries of nature, as well as those inflicted by thermal and chemical procedures on the hair. Coco-glycerides, enhanced with ingredients like cactus, repair damage and restores the hair's natural beauty.
How often should I oil my hair for best results?
It is optimal to oil your hair with coconut based hair oils thrice a week for best results.
When should I put oil on my hair? Overnight or just before washing my hair?
For best conditioning for the hair, its best to use coconut based hair oils with the nourishment of coco-glycerides, or enriched with almond, 30 minutes before washing your hair. For itchy scalps or deeper nourishment, use coconut cream enriched with lemon overnight on your scalp.
How long does it take for oiling to show results on hair?
My hair gets very dry at the ends and I'm prone to getting split ends. Can coconut oil help me?
Yes, coconut based hair oils nourish the shaft of the hair from within and reduce dryness. For split ends, it is ideal to use coconut based hair oils, enhanced with the goodness of cactus, to treat the ends effectively.


text:
Morgan Reynolds Publishing
Nonfiction for Young Adults
James Brown Comes to the Screen
This Friday, August 1, the new movie about James Brown will be released. Titled Get On Up, the film stars Chadwick Boseman as Brown. The film also features Viola Davis, Octavia Spencer, Craig Robinson, and Dan Aykroyd, Brown's co-star from Doctor Detroit (and The Blues Brothers). As of this writing, no reviews have been published, so its unclear if Get On Up will be good. It's easy to be dubious though. The trailer makes Get On Up look like a pretty standard biopic. And Boseman doesn't really look like Brown. Of course, nobody really looks like James Brown, so that can't be held against the movie.
Regardless of the movie's eventual quality, James Brown is a compelling character: he was an essential figure in 20th century American history and culture, and his music's influence can still be heard today. His story is a great one: as for a telling of it, I suppose I'll not so humbly recommend Proud: The Story of James Brown by Ronald D. Lankford, our (Morgan Reynolds) biography of the singer. It's a good one.
Born into poverty in the 1930s, Brown revolutionized R&B music into something vital and earth-shaking, and the live shows he put on were intense and dynamic. He influenced generations of musicians that followed him, and helped shaped the sound of modern pop and rap.
Brown was also a radical and influential advocate for civil rights, and inspired many with his song "Say it Loud – I'm Black and I'm Proud." He also toured in Vietnam, performing for American troops.
Brown also struggled with drugs and the law, and strove, not always successfully, to be a family man and a good man. In short, his life was a full one.
To read about James Brown, check out Proud: The Story of James Brown by Ronald D. Lankford (ISBN# 978-1-59935-374-6) from your local library or purchase it from Morgan Reynolds Publishing.
– Josh Barrer,
(All pics appear in Proud: The Story of James Brown)
(And while we are on the topic of movies about the subjects of Morgan Reynolds biographies, don't forget The Imitation Game, starring Benedict Cumberbatch as Alan Turing, due out this November.)
on July 29, 2014 at 9:15 am Leave a Comment
Tags: Alan Turing, Chadwick Boseman, civil rights, Get On Up, James Brown, music, Soul Power
Morgan Reynolds Publishing Links
Head over to our website to check out our book on #GraceAkallo, and her experience as a… instagram.com/p/BBWBhaUoRje/ 3 years ago
February 1st, the 56th anniversary of the #Greensboro sit-ins. In honor of of the sit-ins, our… instagram.com/p/BBQ8KKzIRrb/ 3 years ago
#morganreynoldspublishing #catalog #2016 #education #mediaspecialist #nonfiction… instagram.com/p/BBQ2AAnIRiT/ 3 years ago
Blog post on Apple CEO Tim Cook, and his coming out experience, compared to civil rights activist Bayard Rustin: morganreynoldspublishing.wordpress.com/2014/11/07/tim… 5 years ago
RT @AP: VIDEO: Children's rights activists Malala Yousafzai, Kailash Satyarthi awarded Nobel Peace Prize: apne.ws/1yfJpe8 5 years ago
Follow @morganreynoldsp
Booklist Bookends Blog
Booklist Likely Stories Blog
Publishers Weekly News Blog
Publishers Weekly ShelfTalker
School Library Journal Blog– Nonfiction Matters
YALSA Blog
Alan Turing Amelia Earhart anniversary Anonymous Apple asteroid Aung San Suu Kyi Barack Obama biography Black Power books Burma California law change civil rights Civil Rights Movement Civil War climate change Clinton democracy Dennis Rodman disease Don Nardo E. coli economy Facebook fashion Fourth of July Freedom Rides Gandhi gay rights Google Harper Lee Harvey Milk history HIV cure immigration influenza Kim Jong-un literature malaria Martin Luther King Jr. Mexico Michael Jackson mixed martial arts Morgan Reynolds music Myanmar Nelson Mandela North Korea Obama Occupy Wall Street oil Oprah OWN publishing reading reviews rivalry royal wedding science slavery social media South Africa Steve Jobs Sundance Film Festival Supreme Court threat Tito Ortiz trial Triangle Shirtwaist Factory Fire Twitter UFC 133 wildfires women


When I ask rehab patients about the precipitating event that brought them to therapy, they can at least answer the question. Maybe they tripped on a zucchini vine, slipped on a grape in the grocery store or toppled off a bicycle while swerving to avoid a raccoon, but at least they know what happened.
Not me. I just woke up one day last week, breathless and immobile with back pain, shaking my fists at the gods and moaning, "Poor, poor pitiful me." See? That story is not only boring, it's way too short.
If I were a writer without integrity, I'd make up some spicy details and not even feel that bad about adding them. Actually, I just remembered — while bending over to hand an ice-cream cone to a crying child, I was struck on the trapezius by a falling American Airlines dinner roll. It was horribly painful, especially the abrasions from the sesame seeds raking across my back. Poor, poor pitiful me.
That would be much more exciting and fun to talk about, agreed? But instead, I just feel incapacitated and infirm, without an interesting tale to tell. That's the ultimate lose-lose indignity.
I mention this because it's given me a sudden window into the frustration our residents and therapy patients must feel to be suddenly and unexpectedly unable to do what they love. Even though my situation pales in scope and gravity to what many of them are facing, and I have little doubt I'll ultimately fully recover, I'm still discouraged and angry about it. So whatever they feel and however they express it is entirely understandable.
My back is sore, but Ed isn't sure he'll ever walk again. Who knows how I'd react in a similar situation, given how angry I am at this minor inconvenience?
Actually, I do know, because my trivial situation offers a disturbing window into how I'll probably behave as an actual nursing home resident needing long-term care. Take away my functionality, add a dollop of severe pain and throw in a heaping scoop of dementia and I'll be a rage-filled casserole of unmet need and bad behavior. Whoever has to take care of me will long for the days before antipsychotic reduction initiatives, that's for sure.
That's one of many reasons I so admire therapists, nurses and anyone delivering direct care. They seem to intuitively understand the existential anguish a person goes through when they're suddenly disconnected from what they've always been and done. They never give up seeking the root cause and unmet need, because they know it has to be in there somewhere, even if the resident can't express it.
Most important, they're infinitely patient and without judgment, understanding they can't possibly know what's going on inside the mind of another human — especially one in severe pain. They don't take an angry outburst personally. They don't judge the intent. They just keep caring and smiling and looking for any possible way to provide comfort and support.
Judging from my current experience, if — or more likely, when — one of life's cataclysms brings me to long-term care, I'll still be singing, "Poor, poor pitiful me," while my therapists and care providers keep grinning and bearing it. Whatever I say or do, however negatively or hurtfully I behave, they'll give me the benefit of the doubt.


News cycles haven't been kind to tech talent in the Heartland lately. Amazon's choice of New York and Arlington for its new headquarters sparked plenty of think pieces diving into the quality and quantity of tech talent between the coasts.
Yet whatever issues hold their tech companies back (and access to talent is one of them), many of the Heartland's emerging tech hubs show investor-worthy growth rates. And Amazon did pick Nashville for its Operations Center of Excellence, a more than $230 million investment expected to create 5,000 high-paying full-time jobs.
Would Villa have felt at home in Nashville if Amazon were already there? The influence of such an enormous company could squash the cultural uniqueness of a city that size—and new data shows culture gives Heartland cities their greatest competitive advantage.
It's time to talk about the value of culture.
This year, Powderkeg launched the U.S. Tech Census, a research initiative aimed at understanding the challenges and opportunities in emerging tech hubs between the coasts. The project surveyed more than 1,000 entrepreneurs, investors, and tech professionals combined across eight cities: Boulder, Chattanooga, Cincinnati, Denver, Indianapolis, Knoxville, Memphis, and Nashville. Looking across these markets, two trends stand out.
First, all show growth rates worthy of VC dollars. For instance, the 33 Cincinnati SaaS startups surveyed show an overall median growth rate of 100 percent in annual recurring revenue (ARR) with a mean of 110 percent.
Second, tech talent values company culture above all else. The startups achieving high growth rates recognize that and prioritize creating exciting work cultures. Meanwhile, culture continues to create liabilities for coastal tech companies.
Think about that from a talent angle. Would you rather go to Silicon Valley and fight entrenched brogrammer culture, or would you rather go somewhere else and help build a community culture from scratch?
Data shows talent wants the latter. Company culture is the top reason surveyed tech professionals choose their employers, averaging 27 percent of responses across all U.S. Tech Census Markets. Passion for the product or service follows close behind. Compensation never ranked higher than third.
This makes innovating around culture a no-brainer, especially when recruiting and attrition costs can exceed a Midwest-sized seed round of funding. According to LinkedIn, technology has the highest turnover of any business sector at 13.2 percent.
So is it as easy as invest in culture, and tech talent will come running? Not exactly.
How do tech companies build a magnetic work culture?
The Rust Belt's transformation into the Robot Belt isn't random. Nor is the rise of logistics software companies in Chattanooga, or marketing tech startups in Indianapolis after Salesforce acquired ExactTarget. See a pattern?
The companies in these emerging tech hubs play to their strengths, leveraging not just existing industries, but also what's culturally unique about their cities. That makes it much easier for community resources to emerge and rally around their local tech ecosystems.
In each market surveyed, the majority of the tech workforce grew up and went to college outside of the state. More than 70 percent of Denver respondents and 60 percent of Boulder respondents grew up and/or went to college outside of Colorado. What attracted them?
A local tech culture that prioritizes work-life balance. That speaks to the work done by local organizations to show how Denver and Boulder's frontier spirit and love of the outdoors bleeds into the tech community. The same is happening in Memphis, where many see tech entrepreneurship as a natural evolution of the city's creative energy.
People who left the Heartland to start their career on the West Coast are starting to come back, and those who once never considered the Heartland are starting to see business opportunities worth pursuing.
In every market surveyed in the Tech Census, low cost of living and low business costs were major factors in attracting talent and founders. But low-cost options generally don't win on their own.
Capital and talent: which follows?
Not far from Cincinnati, several seasoned Silicon Valley investors launched Drive Capital in Columbus, seeing the Midwest as "the opportunity of a lifetime." Monique Villa felt the same way about the Southeast when she founded ModernCapital in Nashville.
"From a macro level, we're seeing this big shift where talent is becoming the stronger of the magnets between capital and talent," says Villa. "Traditionally, we've seen talent follow capital, and now we're seeing capital follow talent. I think for that reason, people are going to be building companies everywhere."That's excellent news for the Heartland. Those who do their best work near the Blue Ridge Mountains or the Great Lakes shouldn't have to choose between New York or Silicon Valley. And investors seem to agree. The more emerging tech hubs embrace their local culture, the more talent they'll attract, and the more investors will bring their presence (not just their dollars) into the Heartland.
Matt Hunckler is the CEO of Powderkeg, a connections engine for startups between the coasts.


text:
Published On: Fri, Nov 24th, 2017
A Slider / Villascope | By Peoples Daily
Corruption fight vs resistance
It appears that there are contentions within the Presidency that may be construed as serious inhibitions against President Muhammadu Buhari's intention to fight corruption in the country.
Though the President has identified corruption as one of the major challenges facing the country, recent developments where the Economic and Financial Crimes Commission (EFCC) officials were obstructed from carrying their duties when they moved to arrest the former Director General of the Department of State Security (DSS), Ita Ekpeyong, and the sacked head of the National Intelligence Agency (NIA), Ayo Oke, has become a fresh cause for worry in how far the President could go in the fight against this menace.
It was equally reported that the ex-pension reform task force boss, Abdulrasheed Maina, enjoyed the protection of the DSS and police personnels even when he was on the EFCC wanted list before his eventual sack by the President after the lid on his secret reinstatement into the civil service was blown open.
The confirmation of the perceived rivalry among the EFCC, DSS and NIA, agencies considered to be key to the success or otherwise of the anti graft war, by obstructing the arrest of the two former heads of the DSS and NIA, suspected to have soiled their hands while in office, could only lead to a suspicion that the agencies may be aiding and abetting the suspects.
The stoppage of the arrest of the two men may transmit the wrong message that some officials in and out of power consider themselves as untouchables and thus above the law. If an EFCC, in the course of its duties could arrest others, one wonders why it would be prevented from doing same for these two suspects.
Juxtaposing the roles played by the DSS with the latest development with its reports leading to the eventual refusal of the Senate to confirm the appointment of the Acting Chairman of the EFCC, Ibrahim Magu, one may be tempted to conclude that the anti- graft helmsman is being held in contempt by certain power brokers in the Presidency.
The incidence equally portrayed the likelihood of supremacy battle among the agencies which, of course, may indicate functions overlap. This, however, indicated absence of communication, cooperation and coordination among the three critical agencies in the anti-graft war.
Had there been communication, cooperation and coordination among the three agencies, the DSS and NIA would have been alerted about the EFCC moves and rough edges would have been addressed instead of the 'rofo-rofo' show of might amounting to nothing but supremacy battle.
This inter-agencies disconnect is, to say the least, dangerous to the government's avowal to rid the polity of corruption and corrupt practices among highly rated government officials. Should this be allowed unchecked, the anti-graft war could be imperiled as reality may contrast public perception.
The immediate implication is that public confidence in Buhari's administration's anti-corruption fight may wane and this could further embolden others who may have the propensity to loot public funds.
Already, some critics have gone to town with the arguments that only the President and a few members of his men believe in his anti corruption crusade.
Timothy Adewale, Deputy Director of Socio-Economic Rights and Accountability Project (SERAP), in his response to the development said the rivalry among the agencies could hamper the government whistle-blower policy as it may discourage the public from providing requisite evidence to the authorities.
"Protecting suspected perpetrators from facing justice for corruption may suggest that officials of SSS and NIA are trying to cover-up allegations of corruption against those involved," he said.
Underscoring the need for interdependence among the agencies in the onerous task of fighting corruption, the anti-corruption crusader said "Fighting corruption is not just for the EFCC alone or any corruption-specific mandate agencies but it is for all state security officials and law enforcement agencies to cooperate and work together to support the government to achieve its oft-repeated commitment to combat grand corruption and impunity of perpetrators."
Already, the feud had attracted the attention of lawmakers in the Senate who resolved to institute a probe into the crisis. The pertinent question of why the President has yet to rein-in the heads on the agencies by conscientizing them on the need to work together for the overall success of his anti-graft war has remained a puzzle. Critics believe that the feud between the agencies, especially the EFCC and DSS, ought to have attracted his intervention before their latest macabre dance in the market place.
Public actions of the heads of these important agencies are obviously not in tandem with internationally acceptable 'modus operandi' adopted by men who are serious in the onerous task of fighting corruption.
To this end, the SERAP man, like most Nigerians, submitted that the President should move in and do the needful by probing into the actual cause of these frequent frictions among the agencies. He said "By moving speedily to stop this kind of behaviour by the SSS and NIA officials, Buhari would be making clear that under his watch those accused of grand corruption would not be allowed to circumvent the law no matter their status in the society."
Preventing re-looting of recovered funds
In apparent move to ensure accountability and transparency in the management of the recovered funds, the President has set up a three-man committee to audit the accounts into which the monies, both in local and foreign denominations, are being kept.
Prior to the inauguration of the Audit Committee on the Recovery and Management of Stolen Assets within and Outside Nigeria, there have been rumors that recovered loots may have been re-looted by some unscrupulous officials. There were allegations that certain funds had developed wings.
The President, in his inaugural speech, equally indicated in his speech that there may be meat in the rumors when he said "In the course of implementing this exercise and given the number of agencies who are concurrently pursuing specialized initiatives and making recoveries for Government, it has become obvious that fundamental gaps still exist in ensuring that the recovered assets are accounted for, and managed in an accurate, transparent and logical manner.
It was in realization of this and due to our determination to ensure that in pursuing the anti-graft war, we do not create new room for dishonorable conduct by any individual or agency that I directed, earlier in the year, that all agencies should send in detailed reports of all their recovered assets as at March, 2017."
He continued "The decision to inaugurate this Audit Committee on the Recovery and Management of Stolen Assets within and Outside Nigeria today is therefore the next step in ensuring that all returns filed by the various agencies are accurate and consistent with actual recoveries made."
Sensing possible hindrance to the works of the panel, the President ordered all government ministries, departments and agencies (MDAs), banks and companies to cooperate just as he hinted that required laws may be invoked to ensure compliance.
This step has further rekindled the hope of economic and political watchers who hitherto haboured the fears that the recovered loots may eventually not be of benefit to the country.
Buhari has once again demonstrated his zero tolerance for corruption in his administration. But there are consensus that the President must be willing to go the whole hog by prosecuting anyone found culpable at the end of the audit.
Nigeria's police: The lingering effects of a colonial massacre
My fears for Niger State RAMP 2 program –Project Coordinator
Insecurity: APC Governors to prioritise job creation, good governance in 2021


text:
package com.leetcode.onlinejudge.problems._1_array;

import com.leetcode.interfaces.IProblem;
import com.leetcode.onlinejudge.BaseProblem;

/**
 * Created by Xu on 9/10/14.
 */
public class _2_Remove_Duplicates_from_Sorted_Array_II extends BaseProblem implements IProblem {
    @Override
    public int getVersion() {
        return 2;
    }

    @Override
    public String getSummary() {
        return "Follow up for \"Remove Duplicates\":\n" +
                "What if duplicates are allowed at most twice?\n" +
                "For example,\n" +
                "Given sorted array A = [1,1,1,2,2,3],\n" +
                "Your function should return length = 5, and A is now [1,1,2,2,3].";
    }

    @Override
    public void run() {
        int[] ints = new int[]{1, 1, 1, 2, 2, 3};
        new Solution().removeDuplicates(ints);
    }

    public class Solution {
        public int removeDuplicates(int[] A) {
            if (A == null) {
                return 0;
            }
            if (A.length <= 2) {
                return A.length;
            }
            int index = 2;
            for (int i = 2; i < A.length; i++) {
                if (A[i] != A[index - 2]) {
                    A[index++] = A[i];
                }
            }
            return index;
        }
    }
}


Supply your cafe, coffee shop, or breakfast bar with the farm fresh taste of this Pequea Valley Farm 6 oz. vanilla yogurt. Featuring a deliciously creamy vanilla flavor, this Grade A yogurt is made with all-natural ingredients and packed full of healthy, protective probiotics. Traditionally, Greek yogurt is made by straining the yogurt to remove the whey - the liquid remaining after the milk is curdled - and the end result is a more-solid yogurt with less sugar, fewer carbohydrates, and more protein compared to regular yogurt. Packaged in a 6 oz. cup, this yogurt is perfect for adding as a side item to breakfast, lunch, or to-go meals in your establishment, or as a healthy option for guests at your continental breakfast bar.


text:
Close this website Safe browsing advice
Info & Resources
Everyone who comes to Lifecentre for help has been through the most profound of personal experiences. Our team of dedicated counsellors walk alongside men, women and children of all ages who have been raped or sexually abused. The very core of their humanity and physicality has been violated.
Repairing and preventing the impact of this violation is our passion and commitment.
Lifecentre specialises in counselling survivors of rape and sexual violation, whether this has been a recent incident or historical.
We are open to all male or female survivors, adults and children, regardless of race, colour, nationality or ethnic origin, gender, disability, sexual orientation, educational status or religion.
We offer helpline support with separate telephone helpline services for Under 18s and adults, and a text helpline service for all age groups, run by appropriately trained volunteers.
We offer both face-to-face and email counselling, with professionally trained counsellors, to survivors of all ages and their supporters, whether these be close family members or friends, or partners of survivors affected relationally by sexual violation.
We work to promote public awareness of the issues which surround trauma-inducing life experiences, particularly those of sexual violation, and develop services which will encourage and empower survivors of such events to find a voice. Not only do we seek to guide people along a path of recovery – our aim is to help prevent them from getting hurt in the first place.
We aim to promote the physical, mental, social, cultural and spiritual well-being of our service users.
All Lifecentre personnel follow Lifecentre Policies and Codes of Practice in their work and are committed to our Equal Opportunities Policy.
At each of our counselling venues we keep a bowl of coloured glass pebbles. Each of these pebbles represents someone who has reached out to Lifecentre for counselling – girls, boys, women and men of all ages. Each person has taken their own step of courage and resilience to counteract the footprints of someone else's atrocity. Each person is precious.
We invite all those passing through Lifecentre's doors to hold a pebble for a moment and say a prayer for the person represented, or to honour them in your own way.
"Your help has meant I feel in control again and on top of my emotions. I am so grateful I cannot begin to find the right way to thank you… I can't magic away the past but I can separate my life now from the past back then. When I first started counselling I was unable to do that. But I can totally see the vast difference in my past fears to my current strength today. I also feel like if an issue came up, I can contact you or someone at Lifecentre and they will be there for me too. I could cry! You have been the closest to a magic wand that I can imagine and I feel like this counselling has all fit into place and I am ready to go out there on my own! It feels a bit like how I went out in the car without my instructor for the first time once I had passed my driving test. I knew they were there if I freaked out at some point, but really ready to grab that independence and go at it 'alone'."
woman in her 20s
Follow Lifecentre on Twitter
Follow Lifecentre on Facebook
Call our office: 01243 786349
Email: info@lifecentre.uk.com
Unlocking the past, Surviving the present, Reclaiming the future.
Subscribe to our newsletter & updates about our work, fundraising and events:
Safe Browsing Advice
© 2019. Lifecentre is a registered charity funded by grants and donations No. 1127779, and a company limited by guarantee (Co. No. 6766164) Lifecentre has a comprehensive Data Protection Policy.


Kim taek soo Crazy Rally of 32 times !
Hyun jin Ryu is famous Korean baseball pitcher. He is currently playing in LA Dodgers as third start-up pitcher and won at NLCS game 3 for the first time as an asian player. This video is one of games in Korean league where he accomplished 17 strike-outs.


Host Cheryl Mitchell talks with Megan James, of Town Hall Theater, and Dana Anderson (this show's producer). Growing Bright Futures is a joint production of Treleven, Building Bright Futures, Let's Grow Kids, and Middlebury Community Television. Recorded 11/14/16.


If you develop with LED lamps, you employ much less power, thus decreasing your energy invoice.
If you develop with LED lights, your develop lights don't produce extreme warmth, which might harm your crops and enhance the necessity for air conditioner use.
Not solely do LED lamps use much less power, the LED bulbs even have a for much longer lifespan.
The sunshine from an LED develop lamp will be personalized for the kind of plant or crops you might be rising.
In brief, while you resolve to develop with LED lamps, you make a choice that can profit your crops, your pockets, and the planet Bestand Vesa Display Desk Mount Stand for 17"-27" B07DND2W6W.
How do LED Lights Differ from Conventional Lights?
Old style metallic halide lamps, some of the widespread develop lights used earlier than the LED revolution, works by passing an electrical arc by way of a mixture of completely different gases. The arc tube accommodates harmful gases, together with argon and mercury. When the electrical energy hits these gases, it produces gentle.
Nevertheless, solely 24% of the power metallic halide lamp makes use of truly produces gentle. Though this proportion is increased than the effectivity of an incandescent bulb, it's far decrease than the effectivity of an LED bulb.
LED stands for "light-emitting diode", and refers back to the course of by which an LED makes gentle. An LED makes use of a semiconductor to maneuver electrons and create gentle. As a result of the sunshine is being created on an atomic degree with out the usage of friction, it produces just about no warmth radiation – excellent news for gardeners.
The expertise that allows gardeners to develop with these refined LED lamps is so new that it is solely been round for the reason that late 1990s, when scientists found the best way to make LEDs produce explicit wavelengths of sunshine. Gardeners realized they might develop with LED lights that produced one explicit kind of sunshine, utilizing one kind of LED lighting for flowers, one other for fruit-bearing crops, and one more for seedlings. By utilizing these specialised LED develop lamps, gardeners and greenhouse house owners can drastically enhance their rising effectivity and enhance their outcomes.


There is a reason why this article is captioned "7 ways to increase your income in Nigeria" I could have easily made it "7 ways to increase your income" but I didn't because Nigeria is a unique country, here in Nigeria it is "survival of the fittest." God bless our beloved country Nigeria.
Money won't make you happy etc.
Yet these are the people that need money the most they are as broke as a church rat, yet tagging the rich as the bad ones.
The truth is, to bring your ambitions and desires to fulfillment, you must be successful with money, and in other to achieve this, you have to take your financial future into your own hands, hustle like your life depends on it and increase your income a little at a time, Nigeria is full of opportunity, whether you're 17 or 65, here is how you can grow your income at a time and live the kind of life you've ever wanted.
The first step to increasing your income is by getting a job. I believe you have a job already and if not just get out there and find a job. It doesn't have to be perfect at first; most successful people all have a humble beginning. This could also be a side gig you do alongside your regular work and even though it feels less official treat it like a real job- because it is one.
"In Nigeria, we don't need more unemployed citizen what we need is more unemployed politicians".
Money attracts money it's from the little you have that grows into the bigger ones. If your purse is empty it's going to remain empty but once money starts entering they will keep multiplying and this cannot happen when you are jobless, so get out there and get busy. Make a habit of paying yourself first, at least ten percent of all your income should go into a fixed account, and remember to pay your tithe too.
Budgeting is one of the best ways to grow your income by setting limits on your spending habits.
Parkinson's Law says that expenses always rise to meet income. This law says that no matter how much money people make they tend to spend it all even a little bit more above the income. Their expenses are always in a rising lockstep with their incomes. Today many people are earning several times bigger what they were earning at their initial job, but somehow, they seem to need every single penny of their income to maintain their current lifestyle. No matter the income, it's just never enough.
Now I want you to imagine that your life is like a falling company that you have just taken over. Execute an immediate financial freeze and draw up a budget of your fixed, unavoidable costs per month and also determined to limit your expenditure to this required amount, at least for the time being. Carefully examine every bit of your expense. Question it as though you were analyzing someone else's expenses and look for ways to draw back on it by cutting the expenses. Aim for a minimum of 10 percent reduction in your living cost over the next few months.
Lastly, make it a habit to save 50% from every increase in your income from any source, and master on how to live with the rest. The remaining 50 percent is yours to flex with. Do this for the rest of your life.
The trick here is making your money work for you, while you have a constant source of income it will be wisdom for you to find ways on how your incomes can go out and bring more money for you. Turn them to little soldiers and let them work for you and not just them, their children children's.
The best way to achieve this is through investment, though I may not be in the right position to advise you on how to invest your money due to the inherent risk attach to investing, proper research on how to invest your money may point you in the right direction to your financial freedom.
A piece of advice, real-estate offers a lot of potentials when it comes to investment. Few plots of land in an undeveloped environment can prove to be a bomb in a few years later. Investing in real- estate carry some security compared to other volatile investment.
Often hear people saying money has wings and can fly away anytime if not tamed properly. However, it will be better if a portion of your money can be dedicated to God so you can enjoy more increase on all side.
When your money starts increasing there is going to be all manner of temptations to invest it and make more money, but you should take note that the first principle of investment is security for your capital. Personally, I've lost money, all in the name of getting bigger returns. Study carefully before you part away from your money, having the assurance that it will be safely reclaimed and do not be led away by your own romantic desire to make rapid wealth.
Do you believe that with the potential amount at which you've been paying your landlord, let's say for three years now can lay a foundation for your own house? It is wisdom to build your own house early rather than paying rent. Not alone will this give you a rest of mind, you will also have more option as to how to spend and invest your money.
Most banks are willing to loan out for the cause of building a house and after the house is done you can repay the bank from your tenants' payment and from you since you not paying to a landlord again.
There is no perfect time, now is a perfect time. This, of course, is one of the reasons why the rich always get richer because they invest for the rainy days. There will surely come a time when you won't be able to work again or the country hit recession again, your future investment is going to be your cushion then. There are so many ways to increase your future income, you can do this by investing in real estate, buy a house or buy a little piece of land you can afford now, then forget about it and let it increase in value over the years.
Last on the list is increasing your ability to earn. The hope of increasing your income when you only have a source of income is very slim. You must at least have four sources of income. These provide a safe passage of income for you, knowing that when one stops the other three are still flowing.
Making more money is a mindset and not a physical thing you can easily do, your desire must be strong and definite. General desires of getting rich are nothing but weak longings, because mere wishing is but a little purpose. You've got to have a tangible desire by setting a realistic goal for your income and work towards it. Set even higher ones when the previous goal is met and grow your income the same way until financial freedom.
If this was helpful do not forget to share it with your friends and family on Facebook and you can also subscribe to our blog to get more of this and tons of new tips to make more money.


text:
Die Rheinnixen (French: Les fées du Rhin; English The Rhine Nixies) is a romantic opera in four acts by Jacques Offenbach. The original libretto by Charles-Louis-Étienne Nuitter was translated into German by .

The Elves' Song from Die Rheinnixen was later used in The Tales of Hoffmann, where it became the "Barcarolle" (Belle nuit, ô nuit d'amour) in the 'Giulietta' act; Conrad's drinking song was also re-used in the same act.

Performance history
The first performance was given in a truncated form (owing to the illness of the tenor Alois Ander) on 4 February 1864 at the Hoftheater in Vienna (Theater am Kärntnertor).

The first full performance was given in concert at the Corum, Montpellier, on 30 July 2002 with Regina Schörg (Armgard), Nora Gubisch (Hedwig), Piotr Beczała (Franz), Dalibor Jenis (Conrad), and Peter Klaveness (Gottfried), and the Orchestre National de Montpellier, conducted by Friedemann Layer, which was recorded. The first fully staged performance was given in Ljubljana by the Slovenian National Opera under Dieter Rossberg on 13 January 2005. Performances followed in Trier and at the Opéra de Lyon under Marc Minkowski later in 2005, and in Cottbus in 2006. (These performances, as at the Vienna premiere, were all given in German.) New Sussex Opera gave the British premiere of the work, under the title The Rhine Fairies, in October 2009, conducted by Nicholas Jenkins, with libretto translated into English by Neil Jenkins.

Roles

Synopsis
Place: In and around the castle of Franz von Sickingen, near Kreuznach on the Rhine
Time: During the Knights' Revolt of the 16th century

Act 1
Hedwig's farmhouse

Peasants return from the vineyards near Bingen on the Rhine, singing of the fertility of the land. Gottfried leads a thanksgiving prayer as they approach the house of Hedwig. Hedwig tells Gottfried that she fears for the safety of their lands: she curses war, and worries about her daughter Armgard's melancholy frame of mind. Armgard sings constantly to conceal a hidden grief, and Hedwig recounts a ballad of the fate of young women who sang too much. By refusing to cease her singing, she gives her mother cause to worry that she too will succumb like the spirits in her ballad. Gottfried declares his love for Armgard, an attachment supported by Hedwig. Armgard is, however, unable to accept his devotion, as she reveals that Franz Baldung, her true love, has joined a troop of mercenaries led by the violent Conrad von Wenckheim. Gottfried offers to help bring Franz back, but the peace is broken by the news that plundering mercenaries have attacked nearby farmsteads.

The pillaging troops led by Conrad enter, singing of wine and women, along with Franz, delirious, having lost his memory after a blow to his head, and recalling little of his previous existence. Discovering that the soldiers have arrived on Armgard's name day, Conrad threatens to kill the family unless she sings for them. As Armgard sings she notices Franz among the soldiers. Franz begins to recover his memory, slowly awakens to his past and wants to intervene. Having sung the 'Vaterlandslied' Armgard faints, and Franz recognizes her.

Act 2
Inside Hedwig's farmhouse

Gottfried and the women lament the death of Armgard. The folk legend decrees that Armgard's ghost will go off at dusk to join elves at the enchanted stone in the forest. Hedwig reveals to Gottfried that she was abandoned by the father of Armgard. She hurries to the forest, hoping to find Armgard's shadow, swiftly followed by Gottfried. Franz enters and sings of his love, then Conrad also arrives, forcing Franz to come away to attack Ebernburg Palace. Gottfried has been captured and will be bribed to guide them to it. At nightfall Armgard, alive but in a trance, passes through the scene, wanting to save Franz.

Act 3
The Elfenstein in the forest: rocks, waterfalls, pines – moonlight

Elves and spirits dance and sing in the forest, where Hedwig appears. Armgard tries to pretend to her that she is a spirit, then hides. The men now arrive, expecting to be at the palace, and Conrad boasts of the licentious escapades of his youth. They then realize the trick Gottfried has played on them. He is tied up to be executed next day. Conrad is however sent into a trance by the song of the elves, and Hedwig cries out for revenge.

Act 4
Kreuznach castle surrounded by rocks. Arms, gunpowder, cannons. Night.

Soldiers prepare for an attack. After Franz has threatened suicide unless he sees Armgard, whom he thinks is now a fairy, she enters, explains all that has happened, and they are reconciled in their love. She tells him that their troubles have been a dream and their suffering will give way to renewed love. They leave. Hedwig is dragged in by soldiers. After interrogation she and Conrad recognize each other and she reveals that he is Armgard's father; he thinks he has killed her by forcing her to sing. Gottfried is brought in chains, but once his captors have gone Conrad frees him. Armgard, Franz, Hedwig, and Conrad decide to flee together, but the mercenaries rush in. The elves cast a spell after which some fall into a ravine, while others go off into the next valley. The palace, the local people and local fatherland are all saved.

Musical highlights
Rodney Milnes notes several musical highlights in the score: the overture, with the calm 'barcarolle' contrasted with war-like music, Armgard's  and Franz's entrance aria in act 1, Franz's 12/8 romance with horn plus a trio bouffe for three men in act 2, the ballet music and a duet for mother and daughter in act 3, and two powerful duets in the last act. The work concludes with a combination of the barcarolle and the . Its text is:

O könnt' ich's allen sagen,
Wie meine Pulse schlagen
Für dich, mein Vaterland!
Ich habe dir mein Leben,
Mein Alles hingegeben.
Ich nehm das Glas zur Hand
Und trink' es dir und ruf' es laut:
Du, Vaterland, bist meine Braut!
Du liebes Land, du schönes Land!
Du großes, deutsches Vaterland!

Wer sollte dich nicht ehren,
Nicht deinen Ruhm begehren,
O Heimat hold und traut!
Wo stolze Burgen thronen,
Wo treue Menschen wohnen,
Wo Sangeslust so laut:
Da muss am schönen grünen Rhein
Ein Leben voller Wonne sein!
O liebes Land, o schönes Land,
O schönes, großes, deutsches Vaterland!
O if I were only able to tell everyone
How my heart beats
For thee, my fatherland!
I have given thee my life,
I have given thee everything.
I take the glass
And toast thee and shout loudly:
Thou, my fatherland, art my bride!
Thou art a lovely and beautiful country!
Thou art my big, German fatherland!

Who should not honour thee,
Who should not crave thy glory,
O, my dear country, comely and intimate!
Where proud castles are enthroned,
Where faithful people live,
Where everyone loves to sing:
There, on the beautiful green Rhine,
Life must be full of delight!
O lovely land, o beautiful land,
O beautiful, big, German fatherland!

Recordings
Offenbach: Les fées du Rhin  (in German) – Opéra Orchestre national Montpellier
Conductor: Friedemann Layer
Principal singers: Regina Schörg, Nora Gubisch, Piotr Beczała, Dalibor Jenis
Recording date: 2002
Label: Universal / Accord CD 472 920-2

References

Sources
  (at web.archive.org)

Further reading
Work details, Boosey & Hawkes
Offenbach (1864), Les fées du Rhin (Die Rheinnixen). Arranged by Jean-Christophe Keck, vocal score 574 pages. Bote & Bock , critical edition

External links
 Review of the Montpellier recording by Salvatore Calomino, Opera Today, 11 October 2005. Accessed 16 October 2020
 Review of the recording in Musicweb International, accessed 19 November 2009

Operas by Jacques Offenbach
German-language operas
Operas
Romantische Opern
1864 operas
Operas set in Germany
German patriotic songs

redpajama_set_name: RedPajamaWikipedia


On Saturday 19th November nine intrepid walkers braved a discouraging weather forecast to do a circuit of 8.5 miles from Bennett's Cross. We kept the rain at bay for most of the route along Hameldown, noting the distant view of the lynchets, or mediaeval (and earlier) field strips at Challacombe, the justly famed Grimspound, Hameldon Cross, the anti glider poles and some of the 13 widely spaced cairns. Thanks to Bill we also saw a fine kist , which while actually quite close to the main path, is easily missed. Ignoring as much as possible some heavy showers and hail we descended to Challacombe mediaeval village, and walked up to Headland Warrren farm through a confusing landscape of agriculture, warrens, and mine workings. We noted the dog kennel cave and then made our way past Birch Tor, returning through the workings of Vitifer mine whose deep shafts have recently been fenced off. Hopefully the rather prominent palings will fade into the background in time.
Photos, courtesy of David and Bill show some of the group at Hameldon Cross and Bob nobly doing kist measurement duty.


In the election in May for the Philippine president, billions of pesos were thrown away by politicians in their campaign and by the government which had to supervise that election. With seven candidates for the presidency, Ramos would have to win on a plurality, and this is what he did, with 27 percent of the votes. I said then that under such circumstances, a military coup would be preferable.
James Fenton in a recent article in the Review ("Cory Lives," NYR, July 16) calls my preference radical and absurd. Radical maybe, but absurd? He then concludes that Cory Aquino handed over a "working democracy" to her successor. Now, that is not only absurd but pathetic, considering that James Fenton had lived in the Philippines for three years. For him to have come to this conclusion can only be ascribed to his failure to perceive what Filipino society truly is, insulated as he was by his comfortable position and given the ability to leave my unhappy country at will.
Yes, we have a free press, rambunctious even, which the Singaporeans and Indonesians envy. We had a comparatively free and orderly elections. And why not? We established Asia's first Republic in 1898 with the Malolos Constitution and have been electing officials ever since. Even Marcos went through managed plebiscites and elections to legitimize his regime.
Working Democracy? Foreigners should leave their ethnocentric definitions once they set foot in Manila. For a hundred years, the Philippines has never really achieved a working democracy. The forms are there—not the essence. Then and now, this nation is ruled by an oligarchy which has blatantly used these forms of democracy to perpetuate itself.
My generation, of course, had seen better times, when the Philippines was far ahead of all its Southeast Asian neighbors, when President Magsaysay ran an honest and efficient government, and Mayor Arsenio Lacson, likewise, kept Manila solvent and clean. Where were Taiwan, and South Korea then in the fifties and the sixties but behind us? Both had military governments, strong, decisive, and both had extensive land reform programs.
Fenton glosses over this single most important impetus to development in a country like the Philippines which is ruled by landlords. As for those peasant demonstrators massacred in Mendiola—Cory has blood on her hands; she did not want to meet with the peasant leaders, while on the other hand, she had willingly flown south to meet with the Muslim rebel Misuari and in the north, the renegade priest, Conrado Balweg.
There is no evidence that farmland when divided into smaller parcels for redistribution to peasants has not been productive; on the contrary, production had always increased. If under the land reform program under Cory, lands transferred were often sold by the tenants, it was always for profit. Land reform is not just re-distribution of land—this should be made clear; under Marcos, there were services to make the farmer efficient and independent as well. The Marcos program, as a matter of fact, was much better than the Cory program which was mangled by landlords in Congress.
If Cory did not pay attention to the program, it is not because she was disinterested; it is primarily because her family owns thousands of hectares of agricultural land (Fenton did not mention this), and that, in essence, she is a cacique housewife. Under her term, the vast landholdings of her family remained intact because the tenants "opted" for shares in the corporation that the landholdings became. This is one of the biggest jokes in her land reform program.
It is not true that the military taxes the poor as Fenton states; it is the government that does it indirectly when the poor buy their daily needs at prices they can't afford since more than 60 percent of all Filipino people live below the poverty line. It is also the New People's Army which levies taxes in the areas under their control.
There is no doubt that there are many crooks in uniform because the entire bureaucracy, even the judiciary, has been corrupted. The Cory government had a chance to clean everything up—it did not.
Jim Fenton says the Philippine Military Academy is becoming openly "seditious." Thank God that it is—those young officers are not going to die for the wealthy politicians who run this country.
About the EDSA "revolution" in February 1986, it is true as Fenton says, that the radical left was not there. But Cory was not there either. It was perhaps the only time in this nation's history when there was democracy as it is understood in the West; the poor, the middle class and the elite were there as equals. In a sense, it was a truly democratic "revolution" but Cory made it into a restoration of the oligarchy.
That revolt was led by Juan Ponce Enrile and his followers in the Armed Forces; he inveigled Ramos to join which he did—no one would deny him his role. It was one branch of the military—supported by the people—that stood up to Marcos.
This military is capable of great patriotism. This is in the tradition of our armed forces, from the days of the revolution against Spain, to the Philippine-American War. If the Americans did not have historical amnesia, with their 4,000 killed, and thousands more injured on Philippine soil they would never have gone into Vietnam knowing as they do that they were not simply fighting communism, but Asian nationalism.
The Armed Forces of the Philippines has been in continuous warfare from the days of World War II to the present, embroiled as it was in the Korean War, in the Huk uprising in 1949–53, and in the Muslim and New People's Army rebellions.
Its officer corps comes from the lower and middle classes, most of them graduates from the Philippine Military Academy, a public school which accepts students from all levels if they pass its rigid examinations.
I hope that Jim Fenton is dead wrong in stating that the Ramos government is the extension of the Cory regime. If this is true, then it means the perpetuation of corruption by relatives of the people close to those in power, the incapacity of government to collect taxes, and the deeper into poverty will the lower classes sink.
It is not true that Ramos got many votes because he was Cory's choice. That helped, no doubt, but he and Miriam Santiago got so many votes because people are sick and tired of the traditional politicians. Then, too, there is that perception that Ramos being a general would be able to give the Filipinos a strong government. Finally, people also feel that he does not belong to the oligarchy—his father may have been a foreign affairs secretary, but he comes from a small Pangasinan town and was not known to have so much wealth as the Aquino or Cojuangco families.
It is too early to tell whether Ramos can "empower the people" as he had publicly avowed. But this early, he has already shown the strength which alas, Cory had never shown.
This is typical of the talk of the faction of former defense secretary Juan Ponce Enrile. Although José concedes Fidel Ramos's part in the revolution of 1986, he has not yet written him off as president. Still, José's message is (as I wrote before) that it would be better to trust the patriotism and nationalism and sense of class background of the graduates of the Philippine Military Academy, rather than the empty "forms" of democracy, which lack "essence." This is the same old sentimental, coffee-shop fascism which supported all those coups against Cory and which still, here, openly supports sedition. Down with the sham democracy. Just trust the officer corps.
I note, incidentally, that these admirable Asian nationalists are said to have been fighting continuously since the Second World War, either against their own countrymen or against other fellow Asians. Perhaps it's time for Asian nationalism to enjoy a well-earned rest.