text:
#ifndef TUPTABLE_H
#define TUPTABLE_H

#include "access/htup.h"
#include "access/tupdesc.h"
#include "access/heapam.h"
#include "access/memtup.h"
#include "storage/buf.h"

/*----------
 * The executor stores tuples in a "tuple table" which is composed of
 * independent TupleTableSlots.  There are several cases we need to handle:
 *		1. physical tuple in a disk buffer page
 *		2. physical tuple constructed in palloc'ed memory
 *		3. "minimal" physical tuple constructed in palloc'ed memory
 *		4. "virtual" tuple consisting of Datum/isnull arrays
 *
 * The first two cases are similar in that they both deal with "materialized"
 * tuples, but resource management is different.  For a tuple in a disk page
 * we need to hold a pin on the buffer until the TupleTableSlot's reference
 * to the tuple is dropped; while for a palloc'd tuple we usually want the
 * tuple pfree'd when the TupleTableSlot's reference is dropped.
 *
 * A "minimal" tuple is handled similarly to a palloc'd regular tuple.
 * At present, minimal tuples never are stored in buffers, so there is no
 * parallel to case 1.	Note that a minimal tuple has no "system columns".
 * (Actually, it could have an OID, but we have no need to access the OID.)
 *
 * A "virtual" tuple is an optimization used to minimize physical data
 * copying in a nest of plan nodes.  Any pass-by-reference Datums in the
 * tuple point to storage that is not directly associated with the
 * TupleTableSlot; generally they will point to part of a tuple stored in
 * a lower plan node's output TupleTableSlot, or to a function result
 * constructed in a plan node's per-tuple econtext.  It is the responsibility
 * of the generating plan node to be sure these resources are not released
 * for as long as the virtual tuple needs to be valid.	We only use virtual
 * tuples in the result slots of plan nodes --- tuples to be copied anywhere
 * else need to be "materialized" into physical tuples.  Note also that a
 * virtual tuple does not have any "system columns".
 *
 * The Datum/isnull arrays of a TupleTableSlot serve double duty.  When the
 * slot contains a virtual tuple, they are the authoritative data.	When the
 * slot contains a physical tuple, the arrays contain data extracted from
 * the tuple.  (In this state, any pass-by-reference Datums point into
 * the physical tuple.)  The extracted information is built "lazily",
 * ie, only as needed.	This serves to avoid repeated extraction of data
 * from the physical tuple.
 *
 * A TupleTableSlot can also be "empty", holding no valid data.  This is
 * the only valid state for a freshly-created slot that has not yet had a
 * tuple descriptor assigned to it.  In this state, tts_isempty must be
 * TRUE, tts_shouldFree FALSE, tts_tuple NULL, tts_buffer InvalidBuffer,
 * and tts_nvalid zero.
 *
 * The tupleDescriptor is simply referenced, not copied, by the TupleTableSlot
 * code.  The caller of ExecSetSlotDescriptor() is responsible for providing
 * a descriptor that will live as long as the slot does.  (Typically, both
 * slots and descriptors are in per-query memory and are freed by memory
 * context deallocation at query end; so it's not worth providing any extra
 * mechanism to do more.  However, the slot will increment the tupdesc
 * reference count if a reference-counted tupdesc is supplied.)
 *
 * When tts_shouldFree is true, the physical tuple is "owned" by the slot
 * and should be freed when the slot's reference to the tuple is dropped.
 *
 * If tts_buffer is not InvalidBuffer, then the slot is holding a pin
 * on the indicated buffer page; drop the pin when we release the
 * slot's reference to that buffer.  (tts_shouldFree should always be
 * false in such a case, since presumably tts_tuple is pointing at the
 * buffer page.)
 *
 * tts_nvalid indicates the number of valid columns in the tts_values/isnull
 * arrays.	When the slot is holding a "virtual" tuple this must be equal
 * to the descriptor's natts.  When the slot is holding a physical tuple
 * this is equal to the number of columns we have extracted (we always
 * extract columns from left to right, so there are no holes).
 *
 * tts_values/tts_isnull are allocated when a descriptor is assigned to the
 * slot; they are of length equal to the descriptor's natts.
 *
 * tts_mintuple must always be NULL if the slot does not hold a "minimal"
 * tuple.  When it does, tts_mintuple points to the actual MinimalTupleData
 * object (the thing to be pfree'd if tts_shouldFree is true).  In this case
 * tts_tuple points at tts_minhdr and the fields of that are set correctly
 * for access to the minimal tuple; in particular, tts_minhdr.t_data points
 * MINIMAL_TUPLE_OFFSET bytes before tts_mintuple.	(tts_mintuple is therefore
 * redundant, but for code simplicity we store it explicitly anyway.)  This
 * case otherwise behaves identically to the regular-physical-tuple case.
 *
 * tts_slow/tts_off are saved state for slot_deform_tuple, and should not
 * be touched by any other code.
 *----------
 */

/* tts_flags */
#define         TTS_ISEMPTY     1
#define         TTS_SHOULDFREE 	2
#define         TTS_VIRTUAL     4

typedef struct TupleTableSlot
{
	NodeTag		type;		/* vestigial ... allows IsA tests */
	int         PRIVATE_tts_flags;      /* TTS_xxx flags */

	/* Heap tuple stuff */
	HeapTuple PRIVATE_tts_heaptuple;
	void    *PRIVATE_tts_htup_buf;
	uint32   PRIVATE_tts_htup_buf_len;

	/* Mem tuple stuff */
	MemTuple PRIVATE_tts_memtuple;
	void 	*PRIVATE_tts_mtup_buf;
	uint32  PRIVATE_tts_mtup_buf_len;
	ItemPointerData PRIVATE_tts_synthetic_ctid;	/* needed if memtuple is stored on disk */

	/* Virtual tuple stuff */
	int 	PRIVATE_tts_nvalid;		/* number of valid virtual tup entries */
	long    PRIVATE_tts_off; 		/* hack to remember state of last decoding. */
	bool    PRIVATE_tts_slow; 		/* hack to remember state of last decoding. */
	Datum 	*PRIVATE_tts_values;		/* virtual tuple values */
	bool 	*PRIVATE_tts_isnull;		/* virtual tuple nulls */

	TupleDesc	tts_tupleDescriptor;	/* slot's tuple descriptor */
	MemTupleBinding *tts_mt_bind;		/* mem tuple's binding */
	MemoryContext 	tts_mcxt;		/* slot itself is in this context */
	Buffer		tts_buffer;		/* tuple's buffer, or InvalidBuffer */

    /* System attributes */
    Oid         tts_tableOid;
} TupleTableSlot;

static inline bool TupIsNull(TupleTableSlot *slot)
{
	return (slot == NULL || (slot->PRIVATE_tts_flags & TTS_ISEMPTY) != 0);
}
static inline void TupClearIsEmpty(TupleTableSlot *slot)
{
	slot->PRIVATE_tts_flags &= (~TTS_ISEMPTY);
}
static inline bool TupShouldFree(TupleTableSlot *slot)
{
	Assert(slot);
	return ((slot->PRIVATE_tts_flags & TTS_SHOULDFREE) != 0);
}
static inline void TupSetShouldFree(TupleTableSlot *slot)
{
	slot->PRIVATE_tts_flags |= TTS_SHOULDFREE;
}
static inline void TupClearShouldFree(TupleTableSlot *slot)
{
	slot->PRIVATE_tts_flags &= (~TTS_SHOULDFREE);
}
static inline bool TupHasHeapTuple(TupleTableSlot *slot)
{
	Assert(slot);
	return slot->PRIVATE_tts_heaptuple != NULL;
}
static inline bool TupHasMemTuple(TupleTableSlot *slot)
{
	Assert(slot);
	return slot->PRIVATE_tts_memtuple != NULL;
}
static inline bool TupHasVirtualTuple(TupleTableSlot *slot)
{
	Assert(slot);
    return (slot->PRIVATE_tts_flags & TTS_VIRTUAL) ? true : false;
}
static inline HeapTuple TupGetHeapTuple(TupleTableSlot *slot)
{
	Assert(TupHasHeapTuple(slot));
	Assert(!is_heaptuple_memtuple(slot->PRIVATE_tts_heaptuple));
	return slot->PRIVATE_tts_heaptuple;
}
static inline MemTuple TupGetMemTuple(TupleTableSlot *slot)
{
	Assert(TupHasMemTuple(slot));
	return slot->PRIVATE_tts_memtuple;
}

static inline void free_heaptuple_memtuple(TupleTableSlot *slot)
{
	if(TupShouldFree(slot))
	{
		if(slot->PRIVATE_tts_heaptuple && slot->PRIVATE_tts_heaptuple != slot->PRIVATE_tts_htup_buf)
			pfree(slot->PRIVATE_tts_heaptuple);

		if(slot->PRIVATE_tts_memtuple && slot->PRIVATE_tts_memtuple != slot->PRIVATE_tts_mtup_buf)
			pfree(slot->PRIVATE_tts_memtuple);
	}

	slot->PRIVATE_tts_heaptuple = NULL;
	slot->PRIVATE_tts_memtuple = NULL;
}

static inline void TupSetVirtualTuple(TupleTableSlot *slot)
{
	Assert(slot);
	slot->PRIVATE_tts_flags |= TTS_VIRTUAL;
}

static inline void TupSetVirtualTupleNValid(TupleTableSlot *slot, int nvalid)
{
        free_heaptuple_memtuple(slot);
        slot->PRIVATE_tts_flags = TTS_VIRTUAL;
        slot->PRIVATE_tts_nvalid = nvalid;
}

static inline Datum *slot_get_values(TupleTableSlot *slot)
{
	return slot->PRIVATE_tts_values;
}

static inline bool *slot_get_isnull(TupleTableSlot *slot)
{
	return slot->PRIVATE_tts_isnull;
}

extern void _slot_getsomeattrs(TupleTableSlot *slot, int attnum);
static inline void slot_getsomeattrs(TupleTableSlot *slot, int attnum)
{

	if(TupHasVirtualTuple(slot))
	{
		if(slot->PRIVATE_tts_nvalid >= attnum)
			return;
	}

	if(TupHasMemTuple(slot))
	{
		int i;
		for(i=0; i<attnum; ++i)
			slot->PRIVATE_tts_values[i] = memtuple_getattr(
					slot->PRIVATE_tts_memtuple, slot->tts_mt_bind,
					i+1, &(slot->PRIVATE_tts_isnull[i]));

		TupSetVirtualTuple(slot);
		slot->PRIVATE_tts_nvalid = attnum;
		return;
	}

	_slot_getsomeattrs(slot, attnum);
	TupSetVirtualTuple(slot);
}

static inline void slot_getallattrs(TupleTableSlot *slot)
{
	slot_getsomeattrs(slot, slot->tts_tupleDescriptor->natts);
}

extern Datum slot_getsysattr(TupleTableSlot *slot, int attnum, bool *isnull);

/*
 * Set the synthetic ctid to a given ctid value.
 *
 * If the slot contains a memtuple or a virtual tuple, the PRIVATE_tts_synthetic_ctid
 * is set to the given ctid value. If the slot contains a heap tuple, then t_self
 * in the heap tuple is set to the given ctid value.
 *
 * This function will set both PRIVATE_tts_synthetic_ctid and heaptuple->t_self when
 * both heap tuple and memtuple or virtual tuple are presented.
 */
static inline void slot_set_ctid(TupleTableSlot *slot, ItemPointer new_ctid)
{
	Assert(slot);

	if (TupHasHeapTuple(slot))
	{
		HeapTuple tuple = TupGetHeapTuple(slot);
		tuple->t_self = *new_ctid;
	}

	if (TupHasMemTuple(slot) || TupHasVirtualTuple(slot))
		slot->PRIVATE_tts_synthetic_ctid = *new_ctid;
}

extern void slot_set_ctid_from_fake(TupleTableSlot *slot, ItemPointerData *fake_ctid);

/*
 * Retrieve the synthetic ctid value from the slot.
 *
 * This function assumes that the PRIVATE_tts_synthetic_ctid and heaptuple->t_self
 * are in sync if both of them are presented in the slot.
 */
static inline ItemPointer slot_get_ctid(TupleTableSlot *slot)
{
	if (TupHasHeapTuple(slot))
	{
		Assert(ItemPointerIsValid(&(slot->PRIVATE_tts_heaptuple->t_self)));
		return &(slot->PRIVATE_tts_heaptuple->t_self);
	}

	return &(slot->PRIVATE_tts_synthetic_ctid);
}

/*
 * Get an attribute from the tuple table slot.
 */
static inline Datum slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull)
{
	Assert(!TupIsNull(slot));
	Assert(attnum <= slot->tts_tupleDescriptor->natts);

	/* System attribute */
	if(attnum <= 0)
		return slot_getsysattr(slot, attnum, isnull);

	/* fast path for virtual tuple */
	if(TupHasVirtualTuple(slot) && slot->PRIVATE_tts_nvalid >= attnum)
	{
		*isnull = slot->PRIVATE_tts_isnull[attnum-1];
		return slot->PRIVATE_tts_values[attnum-1];
	}

	/* Mem tuple: We do not even populate virtual tuple */
	if(TupHasMemTuple(slot))
	{
		Assert(slot->tts_mt_bind);
		return memtuple_getattr(slot->PRIVATE_tts_memtuple, slot->tts_mt_bind, attnum, isnull);
	}

	/* Slow: heap tuple */
	Assert(TupHasHeapTuple(slot));

	_slot_getsomeattrs(slot, attnum);
	Assert(TupHasVirtualTuple(slot) && slot->PRIVATE_tts_nvalid >= attnum);
	*isnull = slot->PRIVATE_tts_isnull[attnum-1];
	return slot->PRIVATE_tts_values[attnum-1];
}

static inline bool slot_attisnull(TupleTableSlot *slot, int attnum)
{
	if(attnum <= 0)
		return false;

	if(TupHasHeapTuple(slot))
		return heap_attisnull_normalattr(slot->PRIVATE_tts_heaptuple, attnum);

	if(TupHasVirtualTuple(slot) && slot->PRIVATE_tts_nvalid >= attnum)
		return slot->PRIVATE_tts_isnull[attnum-1];

	Assert(TupHasMemTuple(slot));
	return memtuple_attisnull(slot->PRIVATE_tts_memtuple, slot->tts_mt_bind, attnum);
}

/*
 * Tuple table data structure: an array of TupleTableSlots.
 */
typedef struct TupleTableData
{
	int			size;			/* size of the table (number of slots) */
	int			next;			/* next available slot number */
	TupleTableSlot array[1];	/* VARIABLE LENGTH ARRAY - must be last */
} TupleTableData;				/* VARIABLE LENGTH STRUCT */

typedef TupleTableData *TupleTable;

/* in executor/execTuples.c */
extern void init_slot(TupleTableSlot *slot, TupleDesc tupdesc);

extern TupleTable ExecCreateTupleTable(int tableSize);
extern void ExecDropTupleTable(TupleTable table, bool shouldFree);
extern TupleTableSlot *MakeSingleTupleTableSlot(TupleDesc tupdesc);
extern void ExecDropSingleTupleTableSlot(TupleTableSlot *slot);
extern TupleTableSlot *ExecAllocTableSlot(TupleTable table);
extern void ExecSetSlotDescriptor(TupleTableSlot *slot, TupleDesc tupdesc);

extern TupleTableSlot *ExecStoreHeapTuple(HeapTuple tuple,
			   TupleTableSlot *slot,
			   Buffer buffer,
			   bool shouldFree);
extern TupleTableSlot *ExecStoreMemTuple(MemTuple mtup,
					  TupleTableSlot *slot,
					  bool shouldFree);

extern TupleTableSlot *ExecClearTuple(TupleTableSlot *slot);
extern TupleTableSlot *ExecStoreVirtualTuple(TupleTableSlot *slot);
extern TupleTableSlot *ExecStoreAllNullTuple(TupleTableSlot *slot);

extern HeapTuple ExecCopySlotHeapTuple(TupleTableSlot *slot);
extern HeapTuple ExecCopySlotHeapTupleTo(TupleTableSlot *slot, MemoryContext pctxt, char *dest, unsigned int *len);
extern MemTuple ExecCopySlotMemTuple(TupleTableSlot *slot);
extern MemTuple ExecCopySlotMemTupleTo(TupleTableSlot *slot, MemoryContext pctxt, char *dest, unsigned int *len);

extern HeapTuple ExecFetchSlotHeapTuple(TupleTableSlot *slot);
extern MemTuple ExecFetchSlotMemTuple(TupleTableSlot *slot, bool inline_toast);

extern Datum ExecFetchSlotTupleDatum(TupleTableSlot *slot);

static inline void *ExecFetchSlotGenericTuple(TupleTableSlot *slot, bool mtup_inline_toast)
{
	Assert(!TupIsNull(slot));
	if (slot->PRIVATE_tts_memtuple == NULL && slot->PRIVATE_tts_heaptuple != NULL)
		return (void *) slot->PRIVATE_tts_heaptuple;

	return ExecFetchSlotMemTuple(slot, mtup_inline_toast);
}

static inline TupleTableSlot *ExecStoreGenericTuple(void *tup, TupleTableSlot *slot, bool shouldFree)
{
	if(is_heaptuple_memtuple((HeapTuple) tup))
		return ExecStoreMemTuple((MemTuple) tup, slot, shouldFree);

	return ExecStoreHeapTuple((HeapTuple) tup, slot, InvalidBuffer, shouldFree);
}

static inline HeapTuple ExecCopyGenericTuple(TupleTableSlot *slot)
{
	Assert(!TupIsNull(slot));
	if(slot->PRIVATE_tts_heaptuple != NULL && slot->PRIVATE_tts_memtuple == NULL)
		return ExecCopySlotHeapTuple(slot);
	return (HeapTuple) ExecCopySlotMemTuple(slot);
}

extern TupleTableSlot *ExecCopySlot(TupleTableSlot *dstslot, TupleTableSlot *srcslot);

extern void ExecModifyMemTuple(TupleTableSlot *slot, Datum *values, bool *isnull, bool *doRepl);
#endif   /* TUPTABLE_H */


text:
ART VallARTa Invites you to its Photographic Exhibition "Through Magical Eyes"
Estefanía Montes
ART VallARTa (Pilitas 213, Amapas), invites you to its photographic exhibition called "Through Magical Eyes", where you will be able to admire the amazing artwork of Samuel Reséndiz (Puerto Vallarta) and Cassidy Andryana Walker (Washington).
Samuel Reséndiz is a talented Vallarta's photographer, which artwork has been awarded for capturing unique and extraordinary moments offered by nature, specially the sea life. Recently, some of its pieces are exhibited at the iconic Soumaya Museum in Mexico City, due to being one of the 50 winners of the contest "México en una Foto", by the organization "Lo Hecho en México".
Cassidy Andryana Walker is a well known photographer from Richland, Washington, who stands out for her various portraits, as well as her surrealistic work and some fashion runways. Walker participated in the New York Fashion Week 2019, besides her artwork has been published in Vogue Italia, Vulkan Magazine, Picton Magazine y Elegant Magazine, among others.
This exhibition started on Friday December 27th 2019, it's open to the public and will be available from Monday to Saturday until January 11th 2020, from 10:00am to 4:00pm. For more information about this and future events, visit ART VallARTa's official website.
Related Articles & News
Hacienda San Ángel Gourmet Invites You to its Reopening Festivities
To celebrate its seasonal reopening, restaurant Hacienda San Ángel Gourmet, has launched a series of...
September of Chiles en Nogada at Café des Artistes
ART VallARTa (Pilitas 213, Amapas), invites you to its photographic exhibition called "Through Magical...
Cyndi Alpenia
Archie's Wok
"In a meeting that we had with the magazine's founder, he told us about his dream of making a quality and luxury publication because he was convinced that Puerto Vallarta needed that. For that reason, we have advertised in Vallarta Lifestyles since its beginnings. These days, our brand is very well positioned thanks to the strategic distribution of the magazine, as it helps us reach more potential customers which is a great benefit for us."
Carl Timothy
Timothy Real Estate Group
"We have been clients of Vallarta Lifestyles since 1999, the year in which we arrived to this destination. Back then, it was the only publication where you could really do local marketing. These days, in spite of the arrival of new technologies, we keep advertising, because it is a really important complement for our marketing strategy."
Galería Contempo
Basilio Badillo 252, Emiliano Zapata
info@galeriacontempo.com Visit Website
Regata International Bahía de Banderas
Sport Fishing Charters

redpajama_set_name: RedPajamaCommonCrawl


text:
KindleReviews
The Abrupt Physics of Dying
By nagaisayonara
Written by Paul E Hardisty — Anyone who has traveled through the Arab world or knows a little Arabic will know the phrase in'shallah – God willing. It's a catch-all phrase covering anything from the weather to your chances of making it through the night alive. And it's a phrase that permeates The Abrupt Physics of Dying, a new eco-thriller by university professor and hydrologist Paul E Hardisty. Yet this novel is not about Islam, nor is it about terrorism in the sense that it's commonly understood.
The year is 1994, and Claymore Straker is a South African-born contractor working with the big oil company Petro-Tex to secure environment approval for oil drills in the desert. His method is to offer facilitation payments to local villagers – people too poor or desperate to realise they're being conned. Just as Clay is beginning to question the ethics of his job, he's hijacked at gunpoint.
Clay and his driver, a pious Muslim named Abdulkader who leaves everything in the hands of God, find two men with AK-47s in their car as they are traveling through the vast nothingness of Yemen. The gunmen guide them up the wadi, or valley in English, to a man who calls himself Al Shams – The Sun. Al Shams happens to be the terrorist who killed Clay's colleague Thierry Champard. He wants Clay to find proof that Petro-Tex is poisoning villagers around their new processing facility. He wants it done without arousing any military interest, and then to get the word out to the world. In order to make him oblige, Al Shams takes Abdulkader hostage, and says he will kill the driver if Clay does not find proof by the new moon.
Clay's search turns up an accountant who refuses to pay Clay's cheques, a boss who hates him, and a Bulgarian security officer named Zdravko who just happens to be a trigger-happy psychopath. But he can't find the evidence he needs. He's about to give up when he spies a beautiful woman. Rania is half-French, half-Arabic, and happens to be a foreign journalist for the AFP. However she refuses to publish anything without proof. They part, but it certainly won't be the last they see of each other.
In the meantime Clay is taking water tests and examining the villages Al Sham mentioned. Children are sick and dying, women are miscarrying, and the most likely culprit is the water they drink, bathe in and use for laundry. To trace impurities back to the new processing plant Clay needs to run a series of tests and samples, and is receiving no help from the authorities. With every step he finds himself making new enemies, to the point where it seems no one is on his side. He finds himself interrogated, imprisoned and beaten – all to stop him from uncovering the truth, which itself seems to evade him.
The number and severity of beatings that Clay receives is astonishing, to the point where it's hard to suspend disbelief. Injuries and traumas that would kill any one of us in any environment, coupled with horrifying conditions, often make this book tough to swallow.
From the beginning to the end – both of which are played out at gunpoint – this novel is non-stop action. It's thrilling, but also highly sophisticated, and offers a startling look at what developed countries will do in their hunger for resources. It's tightly plotted, although falls apart slightly during two or three moments of realisation, when it suddenly becomes obvious to Clay that his friends are not actually who they say they are, without it really being made clear enough as you read. This, coupled with the number of foreign terms slipped into the text, something which peaks with an old South African soldier named Crowbar, can make for a confusing read. But The Abrupt Physics of Dying is certainly worth the moments of confusion. It gives a great insight into a part of the world that doesn't often get a look-in in the world of crime fiction.
Orenda Books
abduction Claymore Straker eco-thriller Middle East oil companies Paul E Hardisty The Abrupt Physics of Dying Yemen
Keith Nixon: Top five books of 2014
MarinaSofia: Top five books of 2014
Outsider by Rob Sinclair
A Ryker Returns Thriller. As far as we are concerned Ryker can keep returning, as long as the thrills and spills match the excitement generated in Outsider, that is. This is an entertaining action thriller with plenty of fireworks, an enigmatic lone wolf hero with…
Appointment in Tehran by James Stejskal
If you remember the 1979 crisis when radical Iranian students seized the US embassy in Tehran and took more than 50 Americans hostage, you'll read James Stejskal's riveting new thriller with an increasing sense of foreboding. That's especially if you also recall that the US…
Falling by TJ Newman
This airline thriller is an exciting debut for author TJ Newman. She puts her decade of experience as a flight attendant to good use in conveying an in-depth understanding of the mindsets of passengers, crew and air traffic control, not to mention realistic details regarding…


Centra Medical Group, the provider and clinic arm of Centra Health, maintains more than 60 primary care and specialty practices throughout Central Virginia, employing more than 450 providers. In all, you'll have more than 8,000 employees on your team. Add those facts to our lineup of nationally recognized treatment facilities and you're looking at an easy decision for your next career move.
Throughout our region, you'll find an extraordinary quality of life in friendly communities with remarkably diverse and affordable housing options. Whether you prefer urban lofts, historic mansions, suburban estates, waterfront condos, or traditional, tree-lined residential neighborhoods, it's all waiting for you here. Taxes and utility rates are very moderate, contributing to a low overall cost of living.
You'll especially enjoy Central Virginia's mild climate, beautiful seasons, and our close proximity to mountains, lakes, and ski resorts. There's also the convenience of being just a few hours away from coastal beaches and major metro areas such as Richmond, Charlotte, and Washington, DC.


text:
Q: QnA Maker Manage knowledge - Problem Adding new URL I have problems adding a new URL when I manage knowledge base in QnAMaker.
I've tried adding this Url but I get the error:

Failed to extract QnAs from the source "URL" - Unsupported / Invalid url(s). Failed to extract Q&A from the source.

I've tested deleting the footer, publishing the page and in this case the URL works properly.
Also, I tested other very similar URLs, like this one and this has been parsed successfully.
What could be the problem?

A: It would appear that something with the way the questions are encoded on that page is preventing QnAMaker's services from reading the text of the question/answer pairs. In order to get those questions, I was able to copy paste the whole list:

I put them all into a word doc (or equivalent program), and then saved it as a PDF:

Then uploaded this to QnA Maker, where it was able to read the question/answer pairs just fine.

The reason I used a PDF as opposed to a .txt file is so the alternate characters (the Spanish  ? for example) would render as well as the bullets from the final question that caused so much grief for the initial renderer.

A: After left feedback in azure site, QnA Maker Team fixed it. Now, the url is parsed properly.

redpajama_set_name: RedPajamaStackExchange


- Do you often have similar worries? Well, a budget might soothe your troubled mind.
A personal budget is just a basic financial plan to allocate certain portions of your salary towards your expenses. Often in life, we might be so overwhelmed by our financial obligations that we might need a plan to proceed. This 'plan' is your budget. Creating a monthly budget and following it strictly is a great habit. It helps you protect your finances. It keeps you grounded and makes sure that you spend your money responsibly.
Creating your own monthly budget is as simple as a child's play. You do not need to learn algebra and trigonometry for it. However, mymoneykarma is here to get you started. Read on to understand the areas that you need to consider while drawing your monthly budget.
Figure out your take-home income. Your salary might have certain deductions for provident fund, income tax, professional tax, etc. Subtract those deductions and find out how much you take home each month from your full-time job. Apart from this, if you make some money from a part-time job, rented-out property or a side gig, add those earnings to find out your total income.
Plan a monthly budget that will cover all your necessities, most of your wants, and still leave more than enough for savings.
Planning a budget is the easiest part, following it diligently is tough. You might fail to live up to your plan initially, but you need to keep track of your progress. Record whatever you are spending. You could do it in the typical old-fashioned way by writing down your expenses somewhere, or you could use an app or a website. Monefy is a personal finance management tool which you could consider.
Set up automatic payments for your bills and savings so that you do not blow the budget by overspending.
Revisit your budget from time to time to inspect whether it is working as planned. Make adjustments to suit your expense needs. As your income, expenses and priorities change, revise the budget accordingly.
Each person has different levels of income, areas of expenses and priorities, and your budget should be custom-made to suit your purpose. However, it might take you a while to figure out your own strategy and till then you can follow the popular 50-30-20 budget plan.
Most financial advisors recommend that you allocate around 50% of your total income towards your necessities, 30% for your wants and the remaining 20% for savings and debt settlement. This lucid but realistic plan will keep your finances on track in the long run. You will have enough for your daily needs, be able to indulge in luxuries occasionally, manage your debt effectively and retire comfortably with enough savings. But before you set forth on this plan, you must learn to prioritize; you must learn to establish a clear divide between your needs and wants. No budget plan can be of help if you don't get these basics right.
Approximately 50% of your post-deductions income should be dedicated to your basic needs. What are those basic needs? Well, they are your fundamental living expenses. Your rent or housing costs, groceries, transportation, utilities, medical expenses, insurance, child care expenses and minimum loan payments are the various categories of 'needs.' By 'minimum loan payments,' I am referring to the minimum amount of repayment that is compulsory every month - whatever you pay over and above that is a part of the 'debt repayment' section of your budget.
If your basic needs shoot over 50% of your income, you might have to adjust your expenses by sacrificing a bit from the 'wants' section of your budget for a while and look for ways to bring down a few costs. You might find a cheaper cell phone plan or disconnect your Netflix subscription till you are back on the planned budget. You should always look for ways to reduce your expenses, even if your necessities are well within the 50% cap. By doing so, you will have more funds to settle your debts and increase your savings.
Debts are financial burdens - the earlier you settle them, the better off you are. Savings, on the other hand, are your fall-back option in case of a sudden crisis or for a peaceful future. At least 20% of your income should be devoted to these two. The way you split between the two is entirely your personal preference. You could choose to get rid of the debt first and then focus on savings, or you could do both simultaneously. However, never stall your debt repayments - it grows exponentially, and you will inevitably end up in deeper debt.
You must consider the bigger financial picture and learn to prioritize. Here are a few suggestions from mymoneykarma on how you can prioritize.
Emergency fund: Your first priority should be to build an emergency fund for yourself. Start with the bare minimum, but contribute that amount every month to this fund. The emergency fund serves as a financial cushion for times of crisis. Accumulate enough to support your living expenses for 2-3 months in case you lose your job or suffer medically or meet with an unexpected urgency.
Toxic debts: Once you have satisfactorily built your emergency fund, focus on settling toxic debts. Toxic debts are heavy debts from credit cards, personal loans, medical bills, etc. These debts will grow at an alarming rate as they incur a high rate of interest. You might end up paying twice or thrice the amount you had originally borrowed. Try to settle them before they go out of your reach. Once you have paid off these obnoxious debts, focus on paying all other outstanding credit balances in full.
If you have anything left after satisfactorily putting enough money into your retirement plan, you should know that you are managing your finances really well. Congratulations on your success! As a reward, you get to keep the remaining amount for yourself. Save it up for irregular expenses such as a much-coveted trip or a new car. Why should you borrow money for these expenses if you have enough already?
First of all, make sure that you have successfully separated your 'wants' from your 'needs.' Your living expenses qualify as 'needs,' but inessential expenses like dining out, entertainment, gifts, travel, etc. fall under the 'wants' section.
Sometimes there might be a very thin line of difference between the two: your cable connection, your gym membership - are they your wants or your needs? The decision is entirely yours. If you have a strong will to get out of debt as quickly as possible, you would be able to determine whether a few of your 'needs' can be moved to the 'wants' section. Similarly, your financial situation might call for sacrifice - you might have to let go of a couple of your 'wants' so that you recover from debt quickly. However, don't be so stringent with your budget that it leaves you no space for fun at all. The call is entirely yours - think and act wisely.
When you get the hang of these nuances, try to customize your budget as per your needs. Make sure to leave enough space in your budget for a little wiggle - you might underestimate an expense, or forget about one. Your budget should be a tool to help you approach your finances in a well-planned manner; it shouldn't be a punishment that makes you scrimp at each step. A poorly drawn budget will demotivate you, whereas a perfectly balanced budget will keep you happy and make you stick to it.


You know how we were bigging up the announcements of Reading and Leeds Festival's line-ups the other day, and how you should sort yourself out with a ticket if you wanted to see Radiohead, Arctic Monkeys and Kings of Leon (Not to mention a host of other decent bands)? Well if you didn't get on it your only going to be disappointed, as they've almost entirely sold out.
All of the weekend tickets for this year's bonanza of music are gone, and all that remain are a few day tickets for the Leeds leg of the festival. So if you're in Yorkshire and want to see these groups, then get on the case.


text:
namespace device {

LocationSystemPermissionStatus FakeGeolocationManager::GetSystemPermission()
    const {
  return status_;
}

void FakeGeolocationManager::SetSystemPermission(
    LocationSystemPermissionStatus status) {
  status_ = status;
  NotifyPermissionObservers(status_);
}

void FakeGeolocationManager::FakePositionUpdated(
    const mojom::Geoposition& position) {
  NotifyPositionObservers(position);
}

void FakeGeolocationManager::StartWatchingPosition(bool high_accuracy) {
  watching_position_ = true;
}

void FakeGeolocationManager::StopWatchingPosition() {
  watching_position_ = false;
}

}  // namespace device

redpajama_set_name: RedPajamaGithub


text:
What is Spiritual Friendship?
Spiritual Friendship Stories
Ecommentary
Generations Project
What? Why?
by Soo-Inn Tan | Mar 20, 2020 | 2020, Articles, Christian Living, COVID-19, Faith, God, God's Sovereignty, Malaysia, World Issues
Taken from Johns Hopkins University of Medicine
KUCHING: The nation's first Covid-19-related death was recorded in Sarawak on Tuesday (March 17), the state disaster management committee announced.
The victim, 60-year-old Pastor David Cheng (pic), from Emmanuel Baptist Church here, passed away at 11am at Sarawak General Hospital (SGH). (The Star)
The first reported death from the Covid-19 virus in Malaysia was a pastor from Kuching, Sarawak. He had underlying health issues, hypertension and diabetes, but so do many other people. So why was the first Covid-19 fatality in Malaysia a Christian and a much-loved pastor?
The major source of the spread of the virus in Malaysia was a religious event held in Kuala Lumpur.
The Muslim gathering held at the end of last month at the sprawling Sri Petaling mosque complex here has emerged as a source of hundreds of new coronavirus infections spanning Southeast Asia. (New Straits Times)
Perhaps some of us may have seen the infections as the Lord thwarting an event that promoted the spread of Islam. How then do we explain the fact that the first death from the virus was a follower of Jesus?
A number of Christian leaders have been quoting Psalm 91 as teaching that God promises to protect His people from disease. The promise seems clear enough:
Whoever dwells in the shelter of the Most High
will rest in the shadow of the Almighty.
I will say of the Lord, "He is my refuge and my fortress,
my God, in whom I trust."
Surely he will save you
from the fowler's snare
and from the deadly pestilence.
He will cover you with his feathers,
and under his wings you will find refuge;
his faithfulness will be your shield and rampart.
You will not fear the terror of night,
nor the arrow that flies by day,
nor the pestilence that stalks in the darkness,
nor the plague that destroys at midday.
(Psalm 91:1–6 NIV)
Surely God is a God of His word. On the basis of this Psalm, God's people should fear no disease. How then do you account for the death of Pastor Cheng? Craig C. Broyles writes:
For certain believers this Psalm provides some of the most comforting promises of the Bible. For others these promises are some of its most unrealistic. For the faithful who have experienced tragedy, these promises smack of being cruel. (Craig C. Boyles, Psalms [Peabody, MA: Hendrickson, 1999], 362.)
I don't think there is any easy way to resolve this tension. But looking at the Psalm in its entirety, we see that God doesn't quite say that we will be free of trouble, only that He will rescue us from our troubles.
"Because he loves me," says the Lord, "I will rescue him;
I will protect him, for he acknowledges my name.
He will call on me, and I will answer him;
I will be with him in trouble,
I will deliver him and honor him.
(Psalm 91:14–16 NIV)
We are not guaranteed freedom from all pestilence. But we needn't fear it even if it strikes because God will rescue us. The heart of the promise is not freedom from troubles but the assurance of God's presence — "I will be with him". Paul understood this. He writes:
Who shall separate us from the love of Christ? Shall trouble or hardship or persecution or famine or nakedness or danger or sword? As it is written:
we are considered as sheep to be slaughtered."
No, in all these things we are more than conquerors through him who loved us. For I am convinced that neither death nor life, neither angels nor demons, neither the present nor the future, nor any powers, neither height nor depth, nor anything else in all creation, will be able to separate us from the love of God that is in Christ Jesus our Lord.
(Romans 8:35–39 NIV)
We can face anything that life throws at us because we know that we dwell in the presence of Abba Father. He might choose to protect us from harm, or He might choose, for example in the story of Job, to allow us to go through hardship, but He will deliver us in the end, one way or another.
How then should we respond to the death of Pastor Cheng and other followers of Jesus?
First, we grieve with those who grieve. Pastor Cheng is not a statistic. He is a human being and so are all those who perished because of the virus. They have grieving family and friends. We grieve with them. Although we will be reunited with saints who have died in Christ, we will miss them this side of heaven.
Next, we don't presume on God's grace and therefore we take common-sense steps to avoid infection. After all, Paul told Timothy "Stop drinking only water, and use a little wine because of your stomach and your frequent illnesses." (1 Timothy 5:23 NIV) He didn't tell Timothy to claim Psalm 91 and not to worry about his frequent stomach illnesses.
Third, we love our neighbours. Anchored in God's presence we reach out in love to all who suffer, whatever their race or religion. All human life is precious and we are called to love our neighbours as we love ourselves. Perhaps the Lord allowed the first person to die of the virus in Malaysia to be a Christian to remind God's people this is not a game of religion one-upmanship.
Finally, and I believe it was Charles Colson who reminded us, if God were to shield His people from the pains of a fallen world, we will not be able to see how believers and unbelievers respond to a similar crisis — whether the presence of God makes any difference. None of us wants to live through a virus pandemic, but God has allowed it. Let God's people arise and show what it means to face the storms of life with Christ in our lives.
I am sure there will be many more questions that we will face before this crisis is over, but one thing we know for sure — God is with us.
"Over all over all
He's the ruler over all
And my life in Him is secured"
(Pastor David Cheng)
kong mun on March 20, 2020 at 12:58 pm
Theodicy is a tough issue. But it's human nature to try to frame this through human wisdom yet taking cues from Job, we get subtle but clear indications it is far beyond our capability. Perhaps, it's not even about asking the questions or finding an answer to our specific questions.
Yeoh Chee Koon on March 23, 2020 at 5:57 pm
I like this statement. "This is not a game of religion one-upmanship!"
Graceworks Private Limited
22 Sin Ming Lane
#04-76 Midview City
Email: enquiries@graceworks.com.sg
Call: +65 6752 3403
SIGN UP FOR GRACEWORKS ECOMMENTARY
© 2022 Graceworks Private Limited


Age Limit : Candidates upper age limit should be between 21 to 54 years as on 21.09.2015. Age relaxation is applicable as per rules.
Educational Qualification : Candidates should possess Graduation/ Diploma in Civil Engineering with relevant experience.
Selection Process : Selection will be based on Performance in qualification, experience & interview.
How to Apply : All Eligible candidates may apply online through the website rites.com from 02.09.2015 to 21.09.2015 & send completely filled application along with 2 recent passport size colour photographs, Proof of identity and address, self attested copies of relevant documents in support of age, qualification, caste, experience etc., through post to Assistant Manager (P)/ Rectt., RITES Ltd., RITES Bhawan, Plot No.1, Sector-29, Gurgaon – 122001, Haryana on or before 30.09.2015.
Last Date for The Registration of Application Form : 21.09.2015.


Age: It went live on November 13th 2001, making it over 16 years, 5 months old.
It is hosted by American Registry For Internet Numbers (Virginia, Chantilly,) using Apache/2 web server. There are 2 Nameservers, ns1.secureserver777.com, and ns2.secureserver777.com. The programming language environment is PHP/5.2.9.
PING (69.167.166.68) 56(84) bytes of data.
Pinging the server, resulted in a 18.8 ms response.


When you buy a SSL certificate from Comodo, it is signed by Comodo and therefore trusted. How is it signed though? Why can't anyone sign the certificate pretending to be Comodo?
Comodo have a root certificate whose public key is included in your web browser. The private key that matches the public key is used to sign SSL certificates that Comodo issue, and it can't be faked because no one else has the private key that matches the public key in the web browser.
Not the answer you're looking for? Browse other questions tagged security https security-certificate certificate-generation or ask your own question.
What happens when a temporary self-signed SSL certificate is replaced with a trusted certificate?


HER film output may be rather low-key these days but Uma Thurman is still no stranger to blockbuster drama, as her current court battle is proving.
The gloves are well and truly off in the toxic custody fight between the actress and her ex-fiancée, London-based hedge-fund boss Arpad Busson.
The case has unfolded in theatrical style in Manhattan's Supreme Court this week, where even the judge appeared to lose patience with them.
So far, it seems neither party has any interest in being "reasonable".
Multi-millionaire Arpad, 53, has painted Uma, 46, as a pill-popping, temperamental mother who is prone to severe mood swings and treated pregnancy like a "business deal".
It also emerged in court that the Pulp Fiction star suffered from attention deficit hyperactivity disorder (ADHD) and a "learning difficulty".
Meanwhile Arpad — known as "Arki" — has been grilled about an alleged addiction to hookers and cheating on a college admissions test, and portrayed as an errant dad who cancels plans with his daughter to attend concerts and football games.
Even a court-appointed psychologist, Dr Sara Weiss, who gave evidence this week, proclaimed the warring couple's relationship was so toxic that it risks damaging Luna.
French financier Arpad reignited the long-running custody battle last year, arguing that he should be able to spend ten days a month with Luna and take her to his home in London and to the Bahamas for holidays.
Meanwhile Uma, whose last film was the critically panned Burnt in 2015, says he does not use the time he already has.
She wants to restrict his ability to travel with Luna, and instead have him visit their daughter regularly in New York, where she is based.
Unable to agree, they went to court. Clearly sensing the row would not be pretty, Uma last week attempted to bar journalists from the proceedings.
But Arpad, who has two teenage sons from a previous relationship with supermodel Elle Macpherson, clearly had no problem with airing their dirty laundry in public, saying the case has significance for a foreign father with a US-born child.
The judge ruled it should be heard in open court — a decision which had Uma closing her eyes, witheringly.
Things got worse when Bronstein accused her of using a dangerous cocktail of prescription medicines and alcohol to treat mental illness.
He also claimed she needed psychological help and had a bad temper with her children — she is also mum to Maya, 18, and Levon, 15, by her second husband Ethan Hawke.
Dr Weiss said Uma had admitted taking triazolam, Wellbutrin and klonopin — drugs which treat depression, anxiety and insomnia.
Her lawyers denied that she had a mental illness but said she had ADHD and a mild learning disability.
Arpad has by no means emerged unscathed from the mud-slinging.
Under cross-examination, he admitted telling Uma he had paid someone to take his Baccalaureate exam for him. But he denied telling her he was addicted to prostitutes.
She told how Luna was once sent to the Bahamas to be with her father who then left to see a Rolling Stones concert in Cuba.
And another time Arpad had Luna flown to London but left her with his ex, Macpherson, while he went to a football match.
Dr Weiss added that Arpad was a "good father" and that Luna enjoys her time with him.
Arpad admitted that he demanded ex-girlfriend Elle share anything Uma ever said to her.
The lawyer also brought up an embarrassing interview in which the model told how she hired "mannies" to give her son male role models as their dad was rarely around.
Arpad went on to admit that two years ago he had agreed with Uma to give up all rights to his daughter in exchange for paying no child support.
It is little wonder the custody row has become so nasty, given the tempestuous nature of Uma and Arpad's relationship when they were together.
After being introduced at a dinner party in Milan in 2007 they dated on and off for seven years.
They got engaged in 2008, throwing a lavish bash at Arpad's £10million London home in Kensington, attended by Elton John, Sting and Claudia Schiffer.
They broke it off the next year but got back together in 2011. In July 2012 Uma, whose first husband was the actor Gary Oldman, gave birth to daughter Rosalind Arusha Arkadina Altalune Florence Thurman-Busson — "Luna" for short.
But in 2014 she and Arpad called time on their second engagement.
Arpad told the court they were going through a break-up — and fighting over Uma's £1.2million engagement ring he claimed she refused to return — when they conceived Luna.
He also claimed that Uma got through so many nannies he couldn't remember all their names and was highly critical of a private nursery she chose.
Arpad, who runs Swiss investment company Gottex Fund Management, first launched a custody bid for Luna in October 2014. He and Uma appeared to reach a settlement in September 2015.
But he went back to court last August demanding increased custody.
One reason Arpad wants to change the terms of the arrangement, says his lawyer, is because it has been hard for him to travel to New York after a fungal infection resulted in him having part of his lung removed.
Dr Weiss told the court that Arpad was trying to spend more time with Luna in London and the Bahamas to avoid spending more than 120 days in America, which would make him liable for US tax.
But Arpad told Judge Cooper he would be prepared to buy a home in New York if he was allowed more time with Luna.
His oldest son Flynn, 18, was also dragged into the drama, testifying that Luna has a close relationship with his father's family.
Uma asked that the student not be cross-examined and blew him a kiss.
In a rare moment of poignancy Arpad said that Luna was a "great little dancer". It was the only time Uma nodded and smiled.
It is rumoured Arpad fell for Uma after watching her in 1994 film Pulp Fiction.
He reportedly gushed that she is as intelligent as she is beautiful and if they spent 100 years together they would not run out of things to say.
Judging by the frosty relations observed between them this week, that day came far sooner than he imagined.


New member Greg Crabtree will be hosting Introductory Electronics Theory for all who are interested. These lessons will focus on the basic principles and concepts (Ohms Law, etc) that make all electronic circuits work. This is to support whatever hands-on project you're working on at Quelab.
These lessons will start as a kind of open study group, meeting every week, with both group and individual sessions. We'll start with the basics and work up from there to whatever topic you are interested in. You do not need any electronics background to get started, members can join the study group at any time, and you don't have to attend every session. If you already know the basics, but want to learn more about an advanced topic, please ask and we'll dive into it with you if we can.
About the teacher: Greg Crabtree has a degree in Electronics (1986), another degree in Renewable Energy (2006), and has worked professionally for nearly 30 years in electronics as a TV & Radio broadcast engineer, recording studio engineer, marine electronics tech (ship radar & navigation systems), avionics technician, and solar energy systems. Greg has also been a high school teacher, a musician and music teacher, and a private pilot.