text:
/*
 *	 INTERFACE ROUTINES
 *		ExecNestLoop	 - process a nestloop join of two plans
 *		ExecInitNestLoop - initialize the join
 *		ExecEndNestLoop  - shut down the join
 */

#include "postgres.h"

#include "cdb/cdbvars.h"
#include "executor/execdebug.h"
#include "executor/nodeNestloop.h"
#include "optimizer/clauses.h"
#include "utils/lsyscache.h"
#include "miscadmin.h"
#include "utils/memutils.h"

extern bool Test_print_prefetch_joinqual;

static void splitJoinQualExpr(List *joinqual, List **inner_join_keys_p, List **outer_join_keys_p);
static void extractFuncExprArgs(Expr *clause, List **lclauses, List **rclauses);

/* ----------------------------------------------------------------
 *		ExecNestLoop(node)
 *
 * old comments
 *		Returns the tuple joined from inner and outer tuples which
 *		satisfies the qualification clause.
 *
 *		It scans the inner relation to join with current outer tuple.
 *
 *		If none is found, next tuple from the outer relation is retrieved
 *		and the inner relation is scanned from the beginning again to join
 *		with the outer tuple.
 *
 *		NULL is returned if all the remaining outer tuples are tried and
 *		all fail to join with the inner tuples.
 *
 *		NULL is also returned if there is no tuple from inner relation.
 *
 *		Conditions:
 *		  -- outerTuple contains current tuple from outer relation and
 *			 the right son(inner relation) maintains "cursor" at the tuple
 *			 returned previously.
 *				This is achieved by maintaining a scan position on the outer
 *				relation.
 *
 *		Initial States:
 *		  -- the outer child and the inner child
 *			   are prepared to return the first tuple.
 * ----------------------------------------------------------------
 */
static TupleTableSlot *
ExecNestLoop_guts(PlanState *pstate)
{
	NestLoopState *node = castNode(NestLoopState, pstate);
	NestLoop   *nl;
	PlanState  *innerPlan;
	PlanState  *outerPlan;
	TupleTableSlot *outerTupleSlot;
	TupleTableSlot *innerTupleSlot;
	ExprState  *joinqual;
	ExprState  *otherqual;
	ExprContext *econtext;
	ListCell   *lc;

	CHECK_FOR_INTERRUPTS();

	/*
	 * get information from the node
	 */
	ENL1_printf("getting info from node");

	nl = (NestLoop *) node->js.ps.plan;
	joinqual = node->js.joinqual;
	otherqual = node->js.ps.qual;
	outerPlan = outerPlanState(node);
	innerPlan = innerPlanState(node);
	econtext = node->js.ps.ps_ExprContext;

	/*
	 * Reset per-tuple memory context to free any expression evaluation
	 * storage allocated in the previous tuple cycle.
	 */
	ResetExprContext(econtext);

	/*
	 * MPP-4165: My fix for MPP-3300 was correct in that we avoided
	 * the *deadlock* but had very unexpected (and painful)
	 * performance characteristics: we basically de-pipeline and
	 * de-parallelize execution of any query which has motion below
	 * us.
	 *
	 * So now prefetch_inner is set (see createplan.c) if we have *any* motion
	 * below us. If we don't have any motion, it doesn't matter.
	 *
	 * See motion_sanity_walker() for details on how a deadlock may occur.
	 */
	if (node->prefetch_inner)
	{
		/*
		 * Prefetch inner is Greenplum specific behavior.
		 * However, inner plan may depend on outer plan as
		 * outerParams. If so, we have to fake those params
		 * to avoid null pointer reference issue. And because
		 * of the nestParams, those inner results prefetched
		 * will be discarded (following code will rescan inner,
		 * even if inner's top is material node because of chgParam
		 * it will be re-executed too) that it is safe to fake
		 * nestParams here. The target is to materialize motion scan.
		 */
		if (nl->nestParams)
		{
			EState	   *estate = node->js.ps.state;

			econtext->ecxt_outertuple = ExecInitNullTupleSlot(estate,
															  ExecGetResultType(outerPlan),
															 &TTSOpsVirtual);
			fake_outer_params(&(node->js));
		}

		innerTupleSlot = ExecProcNode(innerPlan);
		node->reset_inner = true;
		econtext->ecxt_innertuple = innerTupleSlot;

		if (TupIsNull(innerTupleSlot))
		{
			/*
			 * Finished one complete scan of the inner side. Mark it here
			 * so that we don't keep checking for inner nulls at subsequent
			 * iterations.
			 */
			node->nl_innerSideScanned = true;
		}

		if ((node->js.jointype == JOIN_LASJ_NOTIN) &&
				(!node->nl_innerSideScanned) &&
				(node->nl_InnerJoinKeys && isJoinExprNull(node->nl_InnerJoinKeys, econtext)))
		{
			/*
			 * If LASJ_NOTIN and a null was found on the inner side, all tuples
			 * We'll read no more from either inner or outer subtree. To keep our
			 * in outer sider will be treated as "not in" tuples in inner side.
			 */
			ENL1_printf("Found NULL tuple on the inner side, clean out");
			return NULL;
		}

		ExecReScan(innerPlan);
		ResetExprContext(econtext);

		node->prefetch_inner = false;
		node->reset_inner = false;
	}

	/*
	 * Prefetch JoinQual or NonJoinQual to prevent motion hazard.
	 *
	 * See ExecPrefetchQual() for details.
	 */
	if (node->prefetch_joinqual)
	{
		ExecPrefetchQual(&node->js, true);
		node->prefetch_joinqual = false;
	}

	if (node->prefetch_qual)
	{
		ExecPrefetchQual(&node->js, false);
		node->prefetch_qual = false;
	}

	/*
	 * Ok, everything is setup for the join so now loop until we return a
	 * qualifying join tuple.
	 */
	ENL1_printf("entering main loop");

	for (;;)
	{
		/*
		 * If we don't have an outer tuple, get the next one and reset the
		 * inner scan.
		 */
		if (node->nl_NeedNewOuter)
		{
			ENL1_printf("getting new outer tuple");
			outerTupleSlot = ExecProcNode(outerPlan);

			/*
			 * if there are no more outer tuples, then the join is complete..
			 */
			if (TupIsNull(outerTupleSlot))
			{
				ENL1_printf("no outer tuple, ending join");
				return NULL;
			}

			ENL1_printf("saving new outer tuple information");
			econtext->ecxt_outertuple = outerTupleSlot;
			node->nl_NeedNewOuter = false;
			node->nl_MatchedOuter = false;

			/*
			 * fetch the values of any outer Vars that must be passed to the
			 * inner scan, and store them in the appropriate PARAM_EXEC slots.
			 */
			foreach(lc, nl->nestParams)
			{
				NestLoopParam *nlp = (NestLoopParam *) lfirst(lc);
				int			paramno = nlp->paramno;
				ParamExecData *prm;

				prm = &(econtext->ecxt_param_exec_vals[paramno]);
				/* Param value should be an OUTER_VAR var */
				Assert(IsA(nlp->paramval, Var));
				Assert(nlp->paramval->varno == OUTER_VAR);
				Assert(nlp->paramval->varattno > 0);
				prm->value = slot_getattr(outerTupleSlot,
										  nlp->paramval->varattno,
										  &(prm->isnull));
				/* Flag parameter value as changed */
				innerPlan->chgParam = bms_add_member(innerPlan->chgParam,
													 paramno);
			}

			/*
			 * now rescan the inner plan
			 */
			ENL1_printf("rescanning inner plan");
			if (node->require_inner_reset || node->reset_inner)
			{
				ExecReScan(innerPlan);
				node->reset_inner = false;
			}
		}

		/*
		 * we have an outerTuple, try to get the next inner tuple.
		 */
		ENL1_printf("getting new inner tuple");

		innerTupleSlot = ExecProcNode(innerPlan);

		node->reset_inner = true;
		econtext->ecxt_innertuple = innerTupleSlot;

		if (TupIsNull(innerTupleSlot))
		{
			ENL1_printf("no inner tuple, need new outer tuple");

			node->nl_NeedNewOuter = true;
			/*
			 * Finished one complete scan of the inner side. Mark it here
			 * so that we don't keep checking for inner nulls at subsequent
			 * iterations.
			 */
			node->nl_innerSideScanned = true;

			if (!node->nl_MatchedOuter &&
				(node->js.jointype == JOIN_LEFT ||
				 node->js.jointype == JOIN_ANTI ||
				 node->js.jointype == JOIN_LASJ_NOTIN))
			{
				/*
				 * We are doing an outer join and there were no join matches
				 * for this outer tuple.  Generate a fake join tuple with
				 * nulls for the inner tuple, and return it if it passes the
				 * non-join quals.
				 */
				econtext->ecxt_innertuple = node->nl_NullInnerTupleSlot;

				ENL1_printf("testing qualification for outer-join tuple");

				if (otherqual == NULL || ExecQual(otherqual, econtext))
				{
					/*
					 * qualification was satisfied so we project and return
					 * the slot containing the result tuple using
					 * ExecProject().
					 */
					ENL1_printf("qualification succeeded, projecting tuple");

					return ExecProject(node->js.ps.ps_ProjInfo);
				}
				else
					InstrCountFiltered2(node, 1);
			}

			/*
			 * Otherwise just return to top of loop for a new outer tuple.
			 */
			continue;
		}

		if ((node->js.jointype == JOIN_LASJ_NOTIN) &&
				(!node->nl_innerSideScanned) &&
				(node->nl_InnerJoinKeys && isJoinExprNull(node->nl_InnerJoinKeys, econtext)))
		{
			/*
			 * If LASJ_NOTIN and a null was found on the inner side, all tuples
			 * We'll read no more from either inner or outer subtree. To keep our
			 * in outer sider will be treated as "not in" tuples in inner side.
			 */
			ENL1_printf("Found NULL tuple on the inner side, clean out");
			return NULL;
		}

		/*
		 * at this point we have a new pair of inner and outer tuples so we
		 * test the inner and outer tuples to see if they satisfy the node's
		 * qualification.
		 *
		 * Only the joinquals determine MatchedOuter status, but all quals
		 * must pass to actually return the tuple.
		 */
		ENL1_printf("testing qualification");

        if((node->nl_qualResultForNull && ExecCheck(joinqual, econtext))
                ||(!node->nl_qualResultForNull && ExecQual(joinqual, econtext)))
		{
			node->nl_MatchedOuter = true;

			/* In an antijoin, we never return a matched tuple */
			if (node->js.jointype == JOIN_LASJ_NOTIN || node->js.jointype == JOIN_ANTI)
			{
				node->nl_NeedNewOuter = true;
				continue;		/* return to top of loop */
			}

			/*
			 * If we only need to join to the first matching inner tuple, then
			 * consider returning this one, but after that continue with next
			 * outer tuple.
			 */
			if (node->js.single_match)
				node->nl_NeedNewOuter = true;

			if (otherqual == NULL || ExecQual(otherqual, econtext))
			{
				/*
				 * qualification was satisfied so we project and return the
				 * slot containing the result tuple using ExecProject().
				 */
				ENL1_printf("qualification succeeded, projecting tuple");

				return ExecProject(node->js.ps.ps_ProjInfo);
			}
			else
				InstrCountFiltered2(node, 1);
		}
		else
			InstrCountFiltered1(node, 1);

		/*
		 * Tuple fails qual, so free per-tuple memory and try again.
		 */
		ResetExprContext(econtext);

		ENL1_printf("qualification failed, looping");
	}
}

static TupleTableSlot *
ExecNestLoop(PlanState *pstate)
{
	TupleTableSlot *result;

	result = ExecNestLoop_guts(pstate);

	if (TupIsNull(result))
	{
		/*
		 * CDB: We'll read no more from inner subtree. To keep our
		 * sibling QEs from being starved, tell source QEs not to
		 * clog up the pipeline with our never-to-be-consumed
		 * data.
		 */
		ExecSquelchNode(pstate);
	}

	return result;
}

/* ----------------------------------------------------------------
 *		ExecInitNestLoop
 * ----------------------------------------------------------------
 */
NestLoopState *
ExecInitNestLoop(NestLoop *node, EState *estate, int eflags)
{
	NestLoopState *nlstate;

	/* check for unsupported flags */
	Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK)));

	NL1_printf("ExecInitNestLoop: %s\n",
			   "initializing node");

	/*
	 * create state structure
	 */
	nlstate = makeNode(NestLoopState);
	nlstate->js.ps.plan = (Plan *) node;
	nlstate->js.ps.state = estate;
	nlstate->js.ps.ExecProcNode = ExecNestLoop;

	nlstate->shared_outer = node->shared_outer;

	nlstate->prefetch_inner = node->join.prefetch_inner;
	nlstate->prefetch_joinqual = node->join.prefetch_joinqual;
	nlstate->prefetch_qual = node->join.prefetch_qual;

	if (Test_print_prefetch_joinqual && nlstate->prefetch_joinqual)
		elog(NOTICE,
			 "prefetch join qual in slice %d of plannode %d",
			 currentSliceId, ((Plan *) node)->plan_node_id);

	/*
	 * reuse GUC Test_print_prefetch_joinqual to output debug information for
	 * prefetching non join qual
	 */
	if (Test_print_prefetch_joinqual && nlstate->prefetch_qual)
		elog(NOTICE,
			 "prefetch non join qual in slice %d of plannode %d",
			 currentSliceId, ((Plan *) node)->plan_node_id);

	/*CDB-OLAP*/
	nlstate->reset_inner = false;
	nlstate->require_inner_reset = !node->singleton_outer;

	/*
	 * Miscellaneous initialization
	 *
	 * create expression context for node
	 */
	ExecAssignExprContext(estate, &nlstate->js.ps);

	/*
	 * initialize child nodes
	 *
	 * If we have no parameters to pass into the inner rel from the outer,
	 * tell the inner child that cheap rescans would be good.  If we do have
	 * such parameters, then there is no point in REWIND support at all in the
	 * inner child, because it will always be rescanned with fresh parameter
	 * values.
	 */

	/*
	 * XXX ftian: Because share input need to make the whole thing into a tree,
	 * we can put the underlying share only under one shareinputscan.  During execution,
	 * we need the shareinput node that has underlying subtree be inited/executed first.
	 * This means,
	 * 	1. Init and first ExecProcNode call must be in the same order
	 *	2. Init order above is the same as the tree walking order in cdbmutate.c
	 * For nest loop join, it is more strange than others.  Depends on prefetch_inner,
	 * the execution order may change.  Handle this correctly here.
	 *
	 * Until we find a better way to handle the dependency of ShareInputScan on
	 * execution order, this is pretty much what we have to deal with.
	 */
	if (node->nestParams == NIL)
		eflags |= EXEC_FLAG_REWIND;
	else
		eflags &= ~EXEC_FLAG_REWIND;
	if (nlstate->prefetch_inner)
	{
		innerPlanState(nlstate) = ExecInitNode(innerPlan(node), estate, eflags);
		if (!node->shared_outer)
			outerPlanState(nlstate) = ExecInitNode(outerPlan(node), estate, eflags);
	}
	else
	{
		if (!node->shared_outer)
			outerPlanState(nlstate) = ExecInitNode(outerPlan(node), estate, eflags);
		innerPlanState(nlstate) = ExecInitNode(innerPlan(node), estate, eflags);
	}

	/*
	 * Initialize result slot, type and projection.
	 */
	ExecInitResultTupleSlotTL(&nlstate->js.ps, &TTSOpsVirtual);
	ExecAssignProjectionInfo(&nlstate->js.ps, NULL);

	/*
	 * initialize child expressions
	 */
	nlstate->js.ps.qual =
		ExecInitQual(node->join.plan.qual, (PlanState *) nlstate);
	nlstate->js.jointype = node->join.jointype;

	if (node->join.jointype == JOIN_LASJ_NOTIN)
	{
		List	   *inner_join_keys;
		List	   *outer_join_keys;
		ListCell   *lc;

		/* not initialized yet */
		Assert(nlstate->nl_InnerJoinKeys == NIL);
		Assert(nlstate->nl_OuterJoinKeys == NIL);

		splitJoinQualExpr(node->join.joinqual,
						  &inner_join_keys,
						  &outer_join_keys);
		foreach(lc, inner_join_keys)
		{
			Expr	   *expr = (Expr *) lfirst(lc);
			ExprState  *exprstate;

			exprstate = ExecInitExpr(expr, (PlanState *) nlstate);

			nlstate->nl_InnerJoinKeys = lappend(nlstate->nl_InnerJoinKeys,
												exprstate);
		}
		foreach(lc, outer_join_keys)
		{
			Expr	   *expr = (Expr *) lfirst(lc);
			ExprState  *exprstate;

			exprstate = ExecInitExpr(expr, (PlanState *) nlstate);

			nlstate->nl_OuterJoinKeys = lappend(nlstate->nl_OuterJoinKeys,
												exprstate);
		}

		/*
		 * For LASJ_NOTIN, when we evaluate the join condition, we want to
		 * return true when one of the conditions is NULL, so we exclude
		 * that tuple from the output.
		 */
		nlstate->nl_qualResultForNull = true;
	}
	else
	{
		nlstate->nl_qualResultForNull = false;
	}

	if (nlstate->nl_qualResultForNull)
		nlstate->js.joinqual =
			ExecInitCheck(node->join.joinqual, (PlanState *) nlstate);
	else
		nlstate->js.joinqual =
			ExecInitQual(node->join.joinqual, (PlanState *) nlstate);

	/*
	 * detect whether we need only consider the first matching inner tuple
	 */
	nlstate->js.single_match = (node->join.inner_unique ||
								node->join.jointype == JOIN_SEMI);

	/* set up null tuples for outer joins, if needed */
	switch (node->join.jointype)
	{
		case JOIN_INNER:
		case JOIN_SEMI:
			break;
		case JOIN_LEFT:
		case JOIN_ANTI:
		case JOIN_LASJ_NOTIN:
			nlstate->nl_NullInnerTupleSlot =
				ExecInitNullTupleSlot(estate,
									  ExecGetResultType(innerPlanState(nlstate)),
									  &TTSOpsVirtual);
			break;
		default:
			elog(ERROR, "unrecognized join type: %d",
				 (int) node->join.jointype);
	}

	/*
	 * finally, wipe the current outer tuple clean.
	 */
	nlstate->nl_NeedNewOuter = true;
	nlstate->nl_MatchedOuter = false;

	NL1_printf("ExecInitNestLoop: %s\n",
			   "node initialized");

	return nlstate;
}

/* ----------------------------------------------------------------
 *		ExecEndNestLoop
 *
 *		closes down scans and frees allocated storage
 * ----------------------------------------------------------------
 */
void
ExecEndNestLoop(NestLoopState *node)
{
	NL1_printf("ExecEndNestLoop: %s\n",
			   "ending node processing");

	/*
	 * Free the exprcontext
	 */
	ExecFreeExprContext(&node->js.ps);

	/*
	 * clean out the tuple table
	 */
	ExecClearTuple(node->js.ps.ps_ResultTupleSlot);

	/*
	 * close down subplans
	 */
	if (!node->shared_outer)
		ExecEndNode(outerPlanState(node));
	ExecEndNode(innerPlanState(node));

	NL1_printf("ExecEndNestLoop: %s\n",
			   "node processing ended");
}

/* ----------------------------------------------------------------
 *		ExecReScanNestLoop
 * ----------------------------------------------------------------
 */
void
ExecReScanNestLoop(NestLoopState *node)
{
	PlanState  *outerPlan = outerPlanState(node);

	/*
	 * If outerPlan->chgParam is not null then plan will be automatically
	 * re-scanned by first ExecProcNode.
	 */
	if (outerPlan->chgParam == NULL)
		ExecReScan(outerPlan);

	/*
	 * innerPlan is re-scanned for each new outer tuple and MUST NOT be
	 * re-scanned from here or you'll get troubles from inner index scans when
	 * outer Vars are used as run-time keys...
	 */

	node->nl_NeedNewOuter = true;
	node->nl_MatchedOuter = false;
	node->nl_innerSideScanned = false;
}

/* ----------------------------------------------------------------
 * splitJoinQualExpr
 *
 * Deconstruct the join clauses into outer and inner argument values, so
 * that we can evaluate those subexpressions separately. Note: for constant
 * expression we don't need to split (MPP-21294). However, if constant expressions
 * have peer splittable expressions we *do* split those.
 *
 * This is used for NOTIN joins, as we need to look for NULLs on both
 * inner and outer side.
 *
 * XXX: This would be more appropriate in the planner.
 * ----------------------------------------------------------------
 */
static void
splitJoinQualExpr(List *joinqual, List **inner_join_keys_p, List **outer_join_keys_p)
{
	List *lclauses = NIL;
	List *rclauses = NIL;
	ListCell   *lc;

	foreach(lc, joinqual)
	{
		Expr	   *expr = (Expr *) lfirst(lc);

		switch (expr->type)
		{
			case T_FuncExpr:
			case T_OpExpr:
				extractFuncExprArgs(expr, &lclauses, &rclauses);
				break;

			case T_BoolExpr:
				{
					BoolExpr   *bexpr = (BoolExpr *) expr;
					ListCell   *argslc;

					foreach(argslc, bexpr->args)
					{
						extractFuncExprArgs(lfirst(argslc), &lclauses, &rclauses);
					}
				}
				break;

			case T_Const:
				/*
				 * Constant expressions do not need to be splitted into left and
				 * right as they don't need to be considered for NULL value special
				 * cases
				 */
				break;

			default:
				elog(ERROR, "unexpected expression type in NestLoopJoin qual");
		}
	}

	*inner_join_keys_p = rclauses;
	*outer_join_keys_p = lclauses;
}

/* ----------------------------------------------------------------
 * extractFuncExprArgs
 *
 * Extract the arguments of a FuncExpr or an OpExpr and append them into two
 * given lists:
 *   - lclauses for the left side of the expression,
 *   - rclauses for the right side
 *
 * This function is only used for LASJ. Once we find a NULL from inner side, we
 * can skip the join and just return an empty set as result. This is only true
 * if the equality operator is strict, that is, if a tuple from inner side is
 * NULL then the equality operator returns NULL.
 *
 * If the number of arguments is not two, we just return leaving lclauses and
 * rclauses remaining NULL. In this case, the LASJ join would be actually
 * performed.
 * ----------------------------------------------------------------
 */
static void
extractFuncExprArgs(Expr *clause, List **lclauses, List **rclauses)
{
	if (IsA(clause, OpExpr))
	{
		OpExpr	   *opexpr = (OpExpr *) clause;

		if (list_length(opexpr->args) != 2)
			return;

		if (!op_strict(opexpr->opno))
			return;

		*lclauses = lappend(*lclauses, linitial(opexpr->args));
		*rclauses = lappend(*rclauses, lsecond(opexpr->args));
	}
	else if (IsA(clause, FuncExpr))
	{
		FuncExpr   *fexpr = (FuncExpr *) clause;

		if (list_length(fexpr->args) != 2)
			return;

		if (!func_strict(fexpr->funcid))
			return;

		*lclauses = lappend(*lclauses, linitial(fexpr->args));
		*rclauses = lappend(*rclauses, lsecond(fexpr->args));
	}
	else if (IsA(clause, Const) && ((Const *) clause)->constisnull)
	{
		/*
		 * Greenplum will pull up not-in sublink to a specific join LASJ,
		 * this kind of join's joinqual might contain a NULL const here,
		 * for such case we do not need to split it. A case that can
		 * reach here is:
		 *
		 *   create table t1(a int not null, b int not null);
		 *   create table t2(a int not null, b int not null);
		 *   explain  select 1 from t1 where (NULL, b) not in (select a, b from t2);
		 *
		 * The above SQL in Greenplum will be turned in a join whose qual contains
		 * a bool expr (NULL = t2.a) and (t1.b = t2.b), this piece of expr will be
		 * evaluated to (t1.b = t2.b) and NULL by the following code path:
		 *   subquery_planner
		 *     -> preprocess_qual_conditions(root, (Node *) parse->jointree)
		 *     -> preprocess_expression
		 *     -> eval_const_expressions
		 *     -> eval_const_expressions_mutator
		 *
		 * That is why here we have to consider const case, and only null const
		 * (other const cases, true or false will be simplified during the above
		 * code path).
		 *
		 * We do nothing here for NULL const.
		 *
		 * See Issue: https://github.com/greenplum-db/gpdb/issues/13212 for details.
		 */
	}
	else
		elog(ERROR, "unexpected join qual in JOIN_LASJ_NOTIN join");
}


text:
Q: Unable to validate child nodes with Firebase security I'm clearly missing some fundamental aspect of firebase security, because this shouldn't work.  I would expect it to throw a validation error when attempting to push invalid data.  (Inserting a new node into /nodes)
Rules:
{
  "rules": {
    "nodes": {
      ".read": "auth !== null && auth.provider === 'google'",
      ".write": "auth !== null && auth.provider === 'google'",
      "user": {
        ".validate": "newData.val() === auth.uid"
      },
      "ts": {
        ".validate": "newData.val() <= now && newData.val() >= (now-1000*60*60*24)"
      }
    }
  }
}

Then in my console I try to intentionally insert invalid data:
ref.child('nodes').push({
  'user': 'abc',
  'ts': 123
}, function(err){console.log(err);});

Which logs null, and when I check my database it was inserted, no validation errors!  I know I've got something fundamentally wrong, because a validation rule right after the .read and .write rows of the following disallows any writing. .validate": "newData.hasChildren(['user', 'ts'])",
{
  "nodes" : {
    "-KAgH0BLneWfGu8NymBo" : {
      "ts" : 123,
      "user" : "abc"
    }
  }
}

A: Whoops.  Missing "$node_id"
{
  "rules": {
    "nodes": {
       "$node_id":{
         ".read": "auth !== null && auth.provider === 'google'",
         ".write": "auth !== null && auth.provider === 'google'",
         "user": {
           ".validate": "newData.val() === auth.uid"
         },
         "ts": {
           ".validate": "newData.val() <= now && newData.val() >= (now-1000*60*60*24)"
         }
       }
    }
  }
}

redpajama_set_name: RedPajamaStackExchange


text:
Things to do in Scheveningen
Categories: Places to visit 19 November 2017
Stuart Forster looks at things to do in Scheveningen, the Netherlands' favourite seaside destination.
Scheveningen is arguably the best-known seaside resort in the Netherlands and is by far the most popular. Its famous pier, promenade and numerous beachfront cafes ensure that Scheveningen has wide appeal.
It draws bathers, foodies who enjoy freshly caught seafood, families for days out and people wishing to undertake activities by the coast. If you want to taste a Dutch delicacy while strolling along the Strandweg — the broad promenade overlooking Scheveningen's sandy beach — order a portion of haring (raw herring, served with diced onion) from one of the stalls.
The resort is one of the locations across the Netherlands that mark the onset of the new herring season, each June, with celebratory feasts. Known as flag day — Vlaggetjesdag in Dutch — it sees people donning traditional attire while the country's red, white and blue horizontal tricolour flaps from flagpoles and pokes in miniature from wooden cocktail sticks stuck into succulent slices of herring.
Down on the beach
Of course, you might prefer an ice cream while wandering the Strandweg and can take your pick from a multitude of stalls. Alternatively, you could always sit down for a drink or to dine in one of the pavilions on the beach. Strandclub Doen (Strandweg 9) is a chic cafe with comfortable terrace seating. The laid-back vibe, fostered by the beat lounge music and white décor, is complemented by a menu featuring elegantly prepared fish dishes and barbecued meats. From there you can race down the beach and enter the sea.
During October the average temperature of the North Sea along this part of the Dutch coast remains a relatively balmy 15.6˚C. Bracing by tropical standards, but more than double its January average — a decidedly chilly 6.2˚C. Some of the cold drinks consumed during summer in Scheveningen's cafes end up warmer than that!
In a world that now embraces sunshine and heated pools, it's easy to overlook how attractive immersions in the invigorating water of the North Sea were to bathers during the early years of this spa town's evolution, from 1818 onwards. Some doctors recommended it as beneficial to their patient's health in the early years of the 19th century.
Taking a dip in the sea is still one of the joys of visiting Scheveningen. Strolling to the waterline, with golden sand scrunching under your bare feet, takes some time. The beach feels even broader than it looks when you're walking across it.
A dune landscape painted by Piet Mondrian.
Visiting the Panorama Mesdag
If you're interested in how Scheveningen looked back in the 19th century head to the Panorama Mesdag in The Hague. It's named after Hendrik Willem Mesdag, the principal artist behind the painting. Mesdag was a member of The Hague School, a group of landscape artists known for their realistic paintings and sombre palette.
The vast artwork stands at the location where it was unveiled. Bearing in mind the dimensions of the immersive painting — it has a circumference of 120 metres and stands over 14 metres tall — there are, realistically, few other places capable of easily housing the 360-degree artwork, which counts as Europe's biggest cylindrical oil painting. It depicts Scheveningen as it was in 1880, with fishing boats beached on the golden sand. Cleverly, visitors view the painting from a pavilion surrounded by sand, creating the impression of viewing a beach from the top of a dune.
A windmill and landscape painted by Mondrian.
A stroll in Meijendel Nature Reserve
There are plenty of those around Scheveningen. Tufts of vegetation sprout from the dunes that rise above the beach. Tarmac cycle paths cut through the dunes, which are crisscrossed by trails used by walkers and horse riders.
The dunes northeast of Scheveningen fall within the Meijendel Nature Reserve, which extends as far as Katwijk aan Zee, another popular seaside resort. Deer and foxes count among the wildlife that roams the reserve. In excess of 250 bird species have been spotted in at Meijendel, including common redstarts and willow warblers, whose song resonates above the crashing of waves and bluster of the wind.
The Strandweg runs along the beachfront to the harbour which acts as the divider between Scheveningen's northern and southern beaches. The former is by far the most popular of the two. The more southerly of the beaches is a good tip for a quiet autumn walk. The colourful hulls of fishing boats reflect in the placid water of the harbour. Catch by Simonis (Dr Lelykade 43) is a smart seafood restaurant in an eye-catching contemporary building overlooking the marina. The restaurant sources fish directly from the local auction.
A tree painted by Piet Mondrian.
History or urban myth?
If you read the word Scheveningen and wondered how the seaside town's name is pronounced you certainly wouldn't be the first person to face difficulties in speaking it. According to stories still told today, the word 'Scheveningen' was used as a password by members of the Dutch Resistance during World War Two.
The reason? Most of the occupying Germans pronounced the word markedly differently from Dutch people, so, according to the legend, it quickly identified whether a person was a friend or foe. These days, as a visitor to the Netherlands, you'll be forgiven if you mispronounce Scheveningen when ordering a taxi or buying a tram ticket to get to the resort.
There's plenty to do on a day out. To understand more about marine life step inside the popular Sea Life Scheveningen and view the aquariums. Nestled among the dunes is the Museum Beelden aan Zee where sculptures are displayed. Close by you'll see figures crafted by Tom Otterness, an American sculptor, in the free-to-visit sculpture garden. If waves are lapping the shoreline you could even head along to the Hart Beach surf shop and ride them — lessons are available.
For outstanding views over Scheveningen, take a ride on the Ferris wheel that rotates on the pier. Recently renovated, the pier also features a 55-metre tall tower from which you can zip line 350 metres back to land at speeds of up to 80 kilometres an hour.
That takes you towards the Grand Hotel Amrath Kurhaus, the five-star property that opened in the late 19th century and recently underwent a major restoration to open a spa. Several members of royal families have spent time at the hotel, whose cavernous domed hall evokes the grandeur of bygone times. The terrace of Waves at the Kurhaus, the hotel's restaurant and bar, is a refined place to watch the sunset while enjoying a bite to eat or a refreshing drink.
Whether you're into fine-dining or nibbling from a cone of sauce-topped friets — the Dutch take on French fries — you'll be able to find food to suit your taste in Scheveningen. With activities aplenty, refuelling is one of the many pleasures of a trip to this seaside resort.
If you have other suggestions on things to do in and around Scheveningen, the Netherlands' favourite seaside destination, please feel welcome to leave a comment below.
A woman admires a painting by Piet Mondrian.
Travelling to Scheveningen
I booked a flight from Newcastle International Airport to Amsterdam Airport Schiphol for a short break in the Netherlands. Intercity trains reach The Hague from Schiphol in under 30 minutes. Trams connect The Hague and Scheveningen.
Staying in The Hague
The Hague Marriott Hotel (Johan de Wittlaan 30; tel. +31 (0)70 3525 385) proved a good base as it was within walking distance of the city's Kunst Museum Den Haag, an art museum with the world's most extensive collection of works by Piet Mondrian, and public transport routes. The photos illustrating this post are paintings by Mondrian, displayed at the Gemeentemuseum to commemorate a century since the beginning of the De Stijl art and design movement in 1917.
The Netherlands' tourism information website has information about things to do and see across the Netherlands.
Photos illustrating this post are by Why Eye Photography.
If you enjoyed this post about Scheveningen, the Netherlands' favourite seaside destination, please take a look at other articles from the Netherlands on Go Eat Do. Here's one with local tips for exploring Groningen.
Why not sign up for the free Go Eat Do newsletter? It's a hassle-free way of getting links to posts on a monthly basis.
'Like' the Go Eat Do Facebook page to see more photos and content.
You may also enjoy reading these posts:
Previous Post Previous Article: The Rib Room Ramside Hall restaurant, Durham
Next Post Next Article: Brasserie Midi restaurant in Groningen

redpajama_set_name: RedPajamaCommonCrawl


Makeup Me Mineral Liquid Powder Foundation SPF15 provides the sunscreen and antioxidant protection that ultra-sensitive skin needs. Micro-diffusers keep skin looking flawless. Our oil-free formula is great for all skin types, particularly with large pores or an oily T-zone. An innovative liquid formula which glides on velvety smooth and sets to a soft-powder finish.
Fortified with Vitamins C & E to provide antioxidant protection and Vitamin A to help condition the skin.


Sushi remains an intimidating exotica in Chennai, in spite of the provenance of excellent expat-run Japanese restaurants and access to fresh seafood. If you have been following Indian restaurant trends over the past decade, you will know the secret-sauce that has made sushi into the 'new butter chicken' up in Delhi and Mumbai. The secret is that there is sauce, and lots of it. Enough creamy wasabi mayonnaise to convert, even the most stubborn 'raw-fish' skeptic. Sushi in a Box smartly chooses to enter this fabulously promising genre of fun, accessible Japanese food in Chennai. There is the very instagrammable dining room with sunken seat bunks, surrounded by Manga and striking reds. The menu is much more than just sushi in a box - featuring everything from zaru soba to okonomiyaki, nearly half of which is vegetarian.
Japanese food is still finding its feet in Chennai even though its home to a wide Japanese expat community and abundant fresh seafood. Indian palate is yet to fall in love with the raw flavour of the fare which takes a little time to acquire. Japanese cuisine may have become a raving success in Delhi or Mumbai but in Chennai majority of the diners are still sceptic about eating raw fish. But the crop of expat-run restaurants have started to turn around the thinking of local diners. There are plenty of Japanese restaurants in the city which serves authentic Japanese fare but there are few who have tried to tune down the Japanese-ness to suit the local palate. 'Sushi In A Box' at Teynampet is a quaint little place opened by someone who is already aware about the demands of the locals. They have modified the authentic flavour to satisfy the needs of the local diners.


text:
Jeff Fox on Mendocino County Today: January 19, 2021
Marmon on Mendocino County Today: January 19, 2021
Mendocino County Today: Friday, Oct. 14, 2016
By AVA News Service on October 14, 2016
Punching Grandma
Cannabis Deliberations
CalTrans Money
Parvo Outbreak
Oakland Bound
Whiskey Bottle
Holly Says Yes
Gressett Interview
Neptune's Daughter
Nevius Letter
Bigfoot Hunting
HRC Vote
Hitler Reacts
Salt Doll
JOHN WOLFE was back in Ten Mile Court this week. Wolfe is the former Navarro man facing felony assault charges for punching Ann Knight, a Navarro grandmother, back in July. The DA, in the form of Kevin Davenport, was rightly holding out for felony battery, while Wolfe had hoped to bust down his vicious one-punch attack on the Navarro grandmother to a misdemeanor.
THE ONE PUNCH assault on Mrs. Knight more than an hour after a concert at the Navarro Store, was witnessed by a number of shocked onlookers. Mrs. Knight was seriously injured by Wolfe's blow and has required what amounts to reconstructive surgery. As she has testified, Wolfe's assault traumatized not only her, but her entire family, including her young grandson who is now old enough to know what happened to his grandmother but not old enough to understand the why of it, if there is ever a why in cases like this.
WOLFE had hoped for a much lesser charge of misdemeanor battery, and for a while it looked like his savvy attorney, Patrick Pekin, might have gotten that deal for Wolfe from Assistant DA Tim Stoen, who was in the mix briefly in place of the unyielding Assistant DA Davenport. But Mrs. Knight's testimony so moved everyone in the room, including judge Clay Brennan, that Wolfe was found fully guilty of felony battery. He could get as much as five years in prison when he's finally sentenced.
THE KNIGHTS and Wolfe had been neighbors in Navarro, and Mrs. Knight and Wolfe had worked together at the Boonville Brewery. Tensions were so high in the aftermath of Wolfe's attack on that July night, that he'd fired warning shots to stop angry residents of the area from pursuing him. He was soon fired from his job at the Brewery and he and his wife moved inland to the Ukiah area.
AT THE HEARING this week, Wolfe, according to spectators, came to court confident that he would be found guilty only of a misdemeanor. When it became clear to him that he was going down for a felony the tough guy started to cry.
LITTLE DOG READY FOR BIG STORM TONIGHT
THE FIRST PARAGRAPH of a report on the absence of Supervisor Woodhouse from the new website MendoVoice.com:
"District Three Supervisor Tom Woodhouse's family has issued a statement saying that he is under doctor's care due to an unspecified "medical condition," and that he will "hopefully" return to his duties in November. The short statement does not elaborate on the condition, nor specify with certainty when a return will occur. Until such time as he returns District Three will remain without representation on the Board of Supervisors, and important cannabis related votes will take place with only three sitting members of the board due to Supervisor Hamburg recusing himself from those votes."
THE GUY is seriously ill but the real problem with his absence is he's not around for the endless pot discussions?
SUPERVISOR DAN GJERDE told us Thursday that Woodhouse's absence during October will probably NOT affect the Board's cannabis deliberations since the three remaining Supervisors are more or less in agreement with the current piecemeal steps being taken to deal with the various aspects of pot and its semi-legalization or potential legalization in upcoming months and years. At their next meeting the Board will consider a draft of a cannabis business license process (but probably not vote on it), and then in upcoming weeks additional aspects of local pot regulation and processing will be dealt with.
GJERDE POINTED OUT that the major categories of regulation listed in Measure AF (the Pot Growers' initiative) will be addressed by the Board over the next few months and may (or may not) end up looking like Measure AF segments in part. But the proponents of Measure AF are trying to get it all done at once in their own way to avoid pesky processes like public hearings and environmental impact reports that the Board will tediously wade through before they come up with final versions — presumably under the complicated statewide framework.
WHATEVER THE BOARD comes up with will probably mean higher retail prices for "legal" weed. Which will mean that the pot growers who don't want to go through all the permits, lawyers, water consultants, fees, taxes, rules, restrictions and so forth and prefer to sell on the black market may actually see a window of opportunity to sell somewhat below the legalized high prices.
IT'S ALL NEW TERRITORY, so expect the unexpected.
SUPERVISOR GJERDE also responded to our email question about the funding for the walk and bike Mendocino people. He said, first, he's no longer on the NCO board, but that most of their funding comes from CalTrans through MCOG (Mendocino County of Government/Transportation Planning) and much of that "work" is for schools and school-related transportation. How much? Nobody knows. However, Gjerde said he thinks the five person office is probably nowhere near full-time.
C.R. JOHNSON KNEW WHAT HE WAS DOING
When He Built Fort Bragg
by B.B. Grace
There's no Wikipedia page on C. R. Johnson but there should be. He could have named Fort Bragg "Johnsonville", had he been vain, rather than the visionary he turned out to be. When Johnson obtained the Civil War-era Fort buildings in the formation of what became Union Lumber Company he had a generational family photograph made of his parents, wife and young daughter on the Fort's hospital steps as a message to the future, that message being that buildings play a significant role in portraits. It wasn't the quartermaster's house Johnson chose, as one can observe congressman Jared Huffman occupies it.
Before the Gold Rush and California joining the union in 1850, the redwood near what would become Fort Bragg was being felled for Henry Meigg's sawmill. The old mill is today housed in a museum at Fisherman's Wharf in San Francisco. Meiggs, incidentally, went into hiding in the aftermath of some shady financial shenanigans whose victims wanted to kill him.
Sawmills, post Meiggs, popped up and came down everywhere for forty years along the coast and shipped out south to the growing Bay Area. C. R. Johnson's Union Lumber Company unified the Coast's timber industry, and Fort Bragg's Guest House stands as a living reminder of the prosperity the Johnson's Union Lumber Company brought to the Mendocino Coast.
The Guest House was established where the Fort Bragg Army hospital was located in 1857. The hospital situated on an effigy mound the Natives knew as a good energy place. The mound is sacred and the reason C. R. didn't want anyone living there. He understood the magic of Fort Bragg, and that the Guest House reflected the health of the community.
So why is the Guest House closed, and in such disrepair? The answer from the Historical Society under the leadership of President Mark Ruedrich, part owner of North Coast Brewing Company is, "There's no money" and "The City owns the building".
The Guest House was given to the City of Fort Bragg in 1985 by Georgia Pacific with resolutions that it be a cultural place, preferably a museum, in perpetuity but not to be used at night; And that the House will never host a political event. Preservation of the house, made from old growth redwood the world will never see as lumber again, is crucial in the resolutions transferring ownership from GP to the City of Fort Bragg.
There are no maintenance records for the Guest House available. A deck built with love and pride for the Guest House in 1979 rots with broken glass and metal frames waiting to scratch anyone who dares to come near when the homeless aren't sleeping within it's broken seats and walls. There are frequent calls for various kinds of emergencies to the Fort Bragg Police Department and the Fort Bragg Volunteer Fire Department. But there are no City services other than City landscaping whose employees put love into their work, reinforced by the few volunteer docents who use their own money to make repairs to sparking light fixtures, loose boards, damaged leaking window sills as photographs and artifacts fade, and everyone waits for the City to find the money to properly maintain the historical site.
What they don't know is the City found the money and then buried it. Some might call it a Kick Back In Kind, others may call it a collusion, which may or may not be legal. Who will decide?
In 2010-11 The City of Fort Bragg accepted a Community Development Block Grant for $70,000 to purchase a "Guest House Museum Master Plan; City Wide Economic Development Plan".
In January of 2012, the City of Fort Bragg, in the name of Linda Ruffing, signed a LEASE agreement for the Guest House to the Fort Bragg-Mendocino Coast Historical Society, in the name of Mark Reudrich at $1.00 per year over five years. That lease is up this December. The resolutions accompanying the conditions for House to the City were eliminated from the lease agreement and energy costs divided, are not reflected the September treasurer's reports of the Historical Society.
July 12, 2012 Fort Bragg residents and businesses marveled at the ease with which the North Coast Brewery cut through Coastal Commission Development and environmental concerns when Robert and Donna Rossi of North Coast Brewing Company and their agent Mike Wineland obtained a Fort Bragg City permit to install three new fermentation tanks and increase production to a maximum of 90,000 barrels of beer per year on North Main Street.
In December of 2012 the $70,000 Guest House Museum Master Plan was complete. Credit for the participants are listed with Tess Spade and Marie Jones being named twice. A few of the names listed are common names today: Dave Turner, Mark Ruedrich, David Foucheaux, George Reinhardt, Derek Hoyal, and Scott Dietz, and and a local woman who was shocked to see her name listed as she never heard of the Master Plan she purchased September 27th when requesting papers on the Guest House to seek an ability to form a Foundation to save the House. Linda Ruffing has not responded to the question put to her over a week ago, "Were Master Plan copies issued to those listed within, or were any listed informed they could purchase a 66 page copy from the City?"
The Guest House Museum Master Plan has two Strategic Plans within, the first being the Historical Society running the Museum following Strategic Plan 1, and Strategic Plan 2 that has the City hiring a Guest House Museum Executive Director at $50,000 @ 75% time to implement. The Master Plan architects and engineer inform that $285,000.00 in material and labor, especially cement around the fireplaces needs repair immediately. If the Strategic Plan 1 does not make the repairs to the House by 2015, the City is to immediately make the repairs and expect more repairs. The Master Plan provides for a Foundation, three executive jobs paying $50K, $45K, $50K and docents paid $15.00 an hour. Operating hours were to be 7 days a week 9 to 5. The Master Plan tells the City and Historical Society where to get the money to make repairs and hire help. It networks organizations, schools, businesses, and offered educational and literary opportunity. For $70,000 it's a plan designed to work for Fort Bragg as the Guest House would be in good repair, there would have been $57,000 in Sales, $101,700 in salaries paid, and $47,000 in the bank to enrich the community with festivals, programs, events, partnerships, and traveling exhibits.
To be specific, on Page 57 is a Chart: "5 year pro-forma" for 2013 to 2017, so this would be year 4:
Total income: $68,233
Gross Profit: $59,548
Salaries: $104,011
Net Income: ($35,778)
According to the Master Plan, the City was to have reviewed Strategic Plan under the Historical Society December 2015 and spend $285,000 on repairs. That didn't happen. When asked about the pending renewal of the Guest House Lease, Ruffing claims she and Mark Ruedrich plan to renew as is.
The agreement between Ruffing and Ruedrich works for them as the City can neglect all repairs to the House, not create jobs, or network with the community while North Coast Brewing can claim to have some philanthropic interest in the community and do more than take space for an unsustainable industry dependent on water and fossil fuels.
As I prepared this account, the Fort Bragg police refused to write a report concerning the public safety hazard represented by the deteriorated 1979 deck, but were hopeful something could be done. Scott Schneider, Administrative Services Director of the City is researching to see how OSHA applies and wouldn't take any report on the damaged deck, which by looking at all the papers, the City doesn't claim or list. If there's insurance papers, they haven't been located or shared. A visit to the Fort Bragg District Attorney suggested a call to the Ukiah DA where a voice mail was left and has not been returned. The ghost of C.R. Johnson looks on, wondering at this latter day inability to preserve the physical memory of the town he did so much to build.
Some additional names listed under acknowledgemnts:
Rosalie Gjerde, Johanna Jensen, Vivian La Mothe, David Maki, Jamie Peters, Teresa Rodriguez, Willian Scott, Mike and Denise Stenberg, Richard Storm, Nancy Swithenbank, Vicky Watts
I also have an email through Syvia Bartley from Mark Ruedrich on FB-MCHS paper that he checked with John Smith of the City and Smith's crew will be working on the Guest House soffits and doing roof repairs. It is dated Sept 26th 10:11 am.. I had dropped off a letter to Ruffing about the Guest House repairs. I never heard from her. Instead it appears she contacted Ruedrich. I also have an email from Sylvia Bartley saying only Mark Ruedrich speaks for the Guest House, and why I had to resign to do something.
PARVO OUTBREAK AT SHELTER
Yet another animal care crisis at the county operated Ukiah animal shelter. So far two dogs have died and a third one is being treated at the Mendocino animal hospital.
As far as I know, three puppies came into the shelter October 1 or 2. All three were put in one kennel together in the general outside kennels. One puppy was found dead in the kennel. There are many questions that are unanswered by Shelter staff and management. Were the puppies evaluated by veterinary staff prior to placing them into the general population? Why did it take a whole week before any serious efforts where made to protect the other shelter dogs from exposure to this deadly virus? The adult dog Seth who was infected and died, had he been medically evaluated when entering the shelter? What are the vaccination protocols for incoming dogs? It has been clearly documented by volunteers numerous times in front of the board of Supes that animals often wait 20 and more days before a vet sees the animals. This is not the first deadly disease outbreak at the shelter and it will not be the last one, unless stricter oversight and regulations are enforced and shelter management is held responsible for their inaction.
Monika Fuchs
RIDE NEEDED FOR CANCER PATIENT
Hi Community,
Can you help a Cancer Resource Center client and her husband who are in need of a ride to Oakland next Tuesday, October 18th for medical appointments? The couple will be staying in the Bay Area for several weeks for specialized medical care. They will NOT need to be transported back to Mendocino County during this trip. Of course, gas will be provided. Please call me if you can help or have any questions. Thank you!
Rita Martinez
Client Services Manager, Coast Office
Cancer Resource Centers of Mendocino County
www.crcmendocino.org
WHISKEY AIN'T WORKIN'
October 12, 2016. 6:19 p.m. As the country song goes "the whiskey ain't workin' anymore." This is especially true for a couple that lives in a motorhome that moves from rest stop to rest stop, night after night as they battle their demons. As reported in last week's Union, Davida Peterson went to jail Sept. 19 after she allegedly snuffed out a cigarette in her boyfriend's face. After getting out of jail, she returned to the motorhome and her boyfriend at the rest stop north of Trinidad and everything was OK, until the boyfriend refused to hand over a bottle of whiskey. Peterson became upset and allegedly punched her boyfriend repeatedly in the back, neck and head, then tore off the freezer door and threw it. The boyfriend exited the motorhome and called 911. When deputies arrived, Peterson was gone, but was later found at the Chevron station in Trinidad, in the passenger side of a truck, curled up around a whiskey bottle.
— Kevin Hoover (Courtesy, the Mad River Union)
Letter in support of Measure AF
I am in favor of cannabis regulation in Mendocino County and that is why I am voting yes on AF. I admit it took me until recently to fully read the measure. I had heard from a number of no on AF advocates and was skeptical when some of their claims rang false: no environmental protections? Not accurate. A free-for-all zoning that would ok massive plantings? Not really. Locking our community into a non-democratic policy with no hope of revision? Not true at all. After reviewing AF and talking more with both opponents and supporters, I have chosen to vote Yes on AF, the Heritage Initiative.
My primary concern is that what we have now is a lack of regulation. There have been comments that this policy would create a "land rush" of exploitation but that is precisely what we in Mendocino County have been experiencing already. The streams being sucked dry, poisons endangering habitat and explosive rogue honey oil manufacturing is the reality that we deal with on a regular basis. Measure AF has very real and thoughtful policies to address these transgressions. The measure notes that both state and county agencies will be creating more specific regulations as the field evolves.
I have heard from one opponent that the environmental protections from the State Water Resources Control Board are insufficient and may not be properly enforced. However I have attended many of the State's drafting sessions and they are in the forefront of this regulatory framework. That agency has gone out on a limb by delving into this legal grey area. After investing serious staff time and resources they are not going to ignore their own mandates. To aid enforcement they have designated a comprehensive program supported by hefty fees on the industry.
There is concern this measure gives "permission" to have honey oil labs in the county which worries our fire departments. Actually, AF restricts this production to industrial zoning and requires a safety and fire suppression plan. Currently this type of process is entirely unregulated and causes serious fire hazards all over our county. Mendocino County is the emerging leader in appalling explosions that risk the safety of our residents and massive forest fires. Regulation would decrease this trend.
I have heard that this is a measure created by the industry, which bypasses the public process when I know for a fact that this measure mirrors the state regulations and that the draft was discussed at length with our supervisors and key stakeholders.
While I have respect for many in the 'no' camp I have been discouraged with the fact that at most meetings where this is discussed the Yes on AF has not been invited to address the same group leading to one sided explanations.
Finally, AF offers comprehensive regulation that is available now. Any separate measure from the BOS or other group would not be ready for a significant time. This is a rapidly evolving area of regulation and it is prudent to be prepared to revise this initiative (which is an important provision of AF) rather than risk falling behind the rest of the State. My patience for those who exploit our community is at an end. Find out more for yourself and join me in voting YES on AF.
Holly Madrigal
Willits
I'LL BE RIGHT BACK WITH THE GROCERIES, DEAR
On October 10, 2016 at about 4:00 PM Mendocino County Sheriff's Deputies were dispatched to an unwanted subject at a residence located in the 11000 block of West Road in Redwood Valley. Deputies arrived and contacted an adult male who reported he wanted Alma Nielsen, 31, of Concord, to leave his property. Deputies noticed Nielson was bleeding from a laceration to one of her fingers and the adult male had blood on his hands and chest with bruises to his left forearm. During an investigation, Deputies learned Nielson and the adult male were in a dating relationship and had arrived at the residence in the early morning hours of October 10, 2016 with another adult female. Sometime during the day Nielson had left the residence and drove to Ukiah to purchase some merchandise. Nielsen returned to the residence in the afternoon and went into the adult male's bedroom while armed with a kitchen knife. The adult male, fearing for his safety, disarmed Nielson of the kitchen knife causing the cut to her finger. Nielson then assaulted the adult male causing bruising to his left forearm. Nielson was placed under arrest for Felony Domestic Violence Battery without incident. Nielson was booked into the Mendocino County Jail where she was to be held in lieu of $25,000 bail.
ANOTHER TRUMP VOTER DOWN
Lockett
On October 13, 2016 at approximately 8:20 AM Mendocino County Sheriff Deputies attempted to serve an arrest warrant on William Lockett, 45, of Willits, at a residence (77 Holly Street in Willits). The Deputies were immediately met by Lockett who answered the door when Deputies knocked. Lockett was advised of the arrest warrants and was subsequently taken into custody. Lockett was arrested for inflicting corporal injury to a spouse, dissuading a witness and felony failure to appear. Lockett was booked into the Mendocino County Jail where he was to be held in lieu of $165,000 bail.
ELK? THIS THING IS IN ELK?
A reader asks: Who are these people?
GRESSETT UNCENSORED
Re: Mendocino TV censors Rex Gressett
As a public service, Fort Bragg's radio station KNYO (107.7 FM) gave Mr. Gressett one hour of an "unedited" interview tonight. Here's the link to the "unedited" live stream:
https://www.facebook.com/mendocinosportsplus/posts/1253262248087923
Paul McCarthy (Courtesy, MendocinoSportsPlus)
CATCH OF THE DAY, October 13, 2016
Boccaleoni, Cain, Dean
ROCKY BOCCALEONI, Laytonville. Interfering with police communications, failure to appear.
MICHAEL CAIN, Laytonville. Possession of alcohol or drugs in jail, DUI-suspended license.
THOMAS DEAN, Chico/Ukiah. Under influence, parole violation.
Kryder, Mallett, Mata
AARON KRYDER, Willits. DUI-drugs.
JANET MALLETT, Ukiah. Failure to appear.
RAFAEL MATA JR., Ukiah. Dirk-dagger, resisting.
McGhan, McKenzie, Mitchell
JOHN MCGHAN, McKinleyville/Ukiah. Failure to appear.
DWAYNE McKENZIE, Ukiah. Controlled substance, paraphernalia, failure to appear, probation revocation.
NICOLE MITCHELL, Arcata/Ukiah. Drunk in public, resisting.
Pinnock, Scharage, Vargas, Wood
JESSICA PINNOCK, Fort Bragg. Drunk in public.
LISA SCHRAGE, Willits. Drug possession for sale, probation revocation.
DAMIAN VARGAS, Indio/Ukiah. Unspecified misdemeanor.
DUSTIN WOOD, Ukiah. Shoplifting, possession of controlled substance, probation revocation.
THE MOST DEPRESSING CRIME OF THE WEEK, FRISCO DIVISION
Richmond Station Officers responded to the De Young museum regarding a vandalism incident. Museum employees directed the Officers to the Neptune's Daughter statue. The Officers observed that an arm had been broken off the statue. The museum employee informed the Officers that the arm had since been located in some nearby foliage. This is the second senseless act of vandalism to this statue. This same statue was damaged in a similar way several years ago, and those repairs were estimated to have cost $30,000. The investigation into this disgraceful damage to a museum exhibit is ongoing. Anybody with any information regarding this incident, please contact the SFPD.
AFTER 36 YEARS AT CHRONICLE, IT'S TIME TO MOVE ON
By C.W. Nevius
After 36 years, I'm leaving The Chronicle. My last day will be Dec. 2. (I'll pause so my sometime adversary on issues of homelessness, Jennifer Friedenbach, can begin her happy dance.)
The entire experience, start to finish, has been a delight. The Chronicle sent me all over the world to cover eight Olympic Games, 10 Super Bowls and other major sports events. I rode John McCain's "Straight Talk Express," interviewed Yoko Ono, and I know several homeless individuals by first name. And they know me.
It's hard to imagine a cooler job than writing for a big-city newspaper. It's a ticket behind the scenes, a chance to talk to movers and shakers and, sometimes, an opportunity to be influential.
When people ask why I am leaving, my joke is, "Monday morning." That's when I'd walk up to the entrance of 901 Mission at 8:30 a.m., knowing that in four hours I'd have to come up with a column for the next day's paper. Although I've done it for years, I'm not beyond having sweaty palms on those days.
The deadline stress is part of the job, and if you can't handle that you're not going to last. In all modesty, I think I had the three-times-a-week routine down. It wasn't that I couldn't keep doing that. But did I want to keep doing it?
All of us have life-changing moments. Forty years ago I was teaching English in middle school and coaching the seventh-grade basketball team. I left teaching after four years to cover high school sports for a small, now-defunct, newspaper in Colorado Springs.
Four years after that I drove a battered red Honda Accord halfway across the country to a new job covering the Oakland Raiders for The Chronicle. I didn't know a soul in San Francisco and was so naive about California that I thought I could drive down to Los Angeles on my day off to have lunch.
As it turned out, it was important to move to the Bay Area. I met a beautiful blonde at a party at Bruce Jenkins' house, and now we've been married 31 years. Our two children are terrific — smart and successful — but most of all, truly nice, thoughtful adults. As those who know me say: Do not get him started on his kids.
It's been a long time since I've taken one of those life-changing leaps of faith. And frankly, at 66 years old, the opportunities are dwindling. I began to think about making a dramatic change a couple of months ago, and it became more appealing the more I considered it. I don't have another job waiting, but even if nothing comes up, we'll be OK.
I'll miss the people in the newsroom. Newspaper reporters and editors are the best sort of company. They are witty, cynical, well-read, world-weary (in the best possible way) and tellers of stories. There's a lot of laughing in our newsroom.
I'll also miss the readers. Some tell me they can't imagine how many nasty emails I get. But it's really not bad. There are a lot of supportive notes. And sometimes, when I reply to a really mean one, I get a response back saying something like, "Oh geez, I was kind of having a bad day. Sorry if I was over the top."
I've learned a few things. My son once told me that when he wrote a paper in college, he could hear my voice saying, "Shorter sentences."
When I started here in 1980, I was determined to make an impression. I was writing my butt off, five and six days a week. Honestly, the response was pretty tepid. Then the Raiders reached the playoffs and ended up going all the way to the Super Bowl — and winning it. People started coming up to me and saying, "Your writing has really improved."
That's when I realized that writing is wonderful, but a good story makes the difference.
More than anything, I'm particularly grateful I got to travel the world on The Chronicle's dime. I ate bee larvae in Japan, skied the French Alps, saw 100,000 people attend a cross-country ski race in Norway. And more.
All of it, every day at this job, made me who I am. I like to think I've made an impact.
The other day, I was walking down Market Street and a guy and his wife were eating at a sidewalk table. He looked at me and did a double take.
"Hey," he said. "You're the Chronicle guy."
"Yep," I replied. "I am."
"Honey," he said to his wife, "this is Scott Ostler."
My work here is done.
(The San Francisco Chronicle)
(Photo by Kim Nicolini)
BREAKING NEWS: BIGFOOT HUNTING IS LEGAL IN TEXAS, BUT NOT IN CALIFORNIA!
Let's take a break from the presidential debates and non-stop media coverage of the November 2016 election and deal with a particularly urgent matter — whether or it's legal or not to hunt for the elusive Bigfoot.
Don't try Bigfoot hunting in California – it could result in your arrest and conviction, according to the California Department of Fish and Wildlife (CDFW).
On May 11, 2012, the CDFW issued a statement in response to media reports about a Texas wildlife official proclaiming that bigfoot hunting is legal in the long horn state.
"The Texas Parks and Wildlife Department says that in theory, it would be legal to hunt Bigfoot in their state," stated a CDFW facebook post. "Not so in California!"
"The lack of confirmation of this alleged animal's existence brings into question whether or not it occurs naturally in California," according to the agency. "If Bigfoot occurs naturally in the state, then it would be defined as a non-game mammal pursuant to California Fish and Game Code Section 415."
In order to take a non-game mammal legally in California, it must be listed in the California Code of Regulations, which Bigfoot is not.
"If Bigfoot does not occur naturally in California then it would not be defined as a non-game mammal and could not be taken legally… unless the Bigfoot was causing property damage (in which case it could be depredated) or if a Bigfoot was considered a public safety threat (in which case the animal could be taken)."
If the existence of only one Bigfoot was confirmed, then it could be considered "threatened and endangered" and could potentially be listed as a protected species under the state or federal Endangered Species Acts, according to the agency.
"But if a healthy and growing population of Bigfoot was confirmed, a hunting season for the creature might be considered and could potentially be implemented (unless a law is passed that lists it as a specially protected mammal)," the CDFW said.
However, the agency cautioned, "But even if it was legal to hunt Bigfoot in California, the cryptid would surely prove to be extremely elusive prey for even the most crafty and seasoned of hunters. Because, as history shows, this species is notoriously hard to spot, photograph or document … which means it's likely to be extraordinarily difficult to track down and dispatch."
"Despite its massive frame, the legendary Bigfoot seems to be as light on its feet as Fred Astaire in his hoofing prime … and perplexingly adept at blending into its habitat," the Department quipped.
The Texas Parks and Wildlife Commission has a far different approach to Bigfoot hunting regulations.
According to a Texas Parks and Wildlife Department official, you're free to kill as many Bigfoot as your want, since the giant cryptid isn't listed as an endangered species, reported Live Science magazine on May 11, 2012. (http://www.livescience.com/20248-shooting-bigfoot-legal-texas.html)
"If the Commission does not specifically list an indigenous, nongame species, then the species is considered non-protected nongame wildlife, e.g., coyote, bobcat, mountain lion, cotton-tailed rabbit, etc," wrote Lieutenant David Sinclair, Chief of Staff at the Texas Parks and Wildlife Department, in an email response to Bigfoot enthusiast John Lloyd Scharf. "A nonprotected nongame animal may be hunted on private property with landowner consent by any means, at any time and there is no bag limit or possession limit."
Sharf reported that he replied to Sinclair, "So, it is the case all individuals of an unknown species … could be exterminated without criminal or civil repercussions — essentially causing extinction?"
Bigfoot enthusiasts and researchers have been concerned for years that somebody may kill a Bigfoot if and when the species is finally captured, preventing researchers from studying a live specimen of the species. Some regional governments in the Pacific Northwest, where the most Bigfoot sightings have occurred, have passed resolutions and laws to protect the cryptid, also known as Sasquatch.
In 1992, Whatcom County, Washington officials approved a resolution declaring the County a "sasquatch protection and refuge area." This was a "county resolution," not a new law.
In 1969, Skamania County Washington passed an ordinance prohibiting the killing of Bigfoot.
In 2007, Mike Lake, a Canadian member of parliament from Edmonton, Alberta, introduced a petition calling Bigfoot to be protected under the Canadian version of the endangered species act.
However, these measures are all based on the assumption that Bigfoot is an animal. If a Bigfoot is ever captured or its existence is proven, it may turn out that it is actually a species of hominid related to homo sapiens.
Wouldn't it then be considered murder to kill a Bigfoot? Would Texas still consider Bigfoot a "nonprotected nongame animal?"
Anyway, the message is clear from the California Department of Wildlife: don't kill a Bigfoot if you happen to encounter one while hiking, camping, fishing, hunting or rafting in California.
You will not only deprive science of its unique opportunity to study a live Bigfoot, but will face possible jail time and a big fine under the California Fish and Game Code. And if it is determined that Bigfoot is a close relative of homo sapiens, you may face murder charges.
Below is the email response from Lieutenant Sinclair to Scharf:
Mr. Scharf:
The statute that you cite (Section 61.021) refers only to game birds, game animals, fish, marine animals or other aquatic life. Generally speaking, other nongame wildlife is listed in Chapter 67 (nongame and threatened species) and Chapter 68 (nongame endangered species). "Nongame" means those species of vertebrate and invertebrate wildlife indigenous to Texas that are not classified as game animals, game birds, game fish, fur-bearing animals, endangered species, alligators, marine penaeid shrimp, or oysters. The Parks and Wildlife Commission may adopt regulations to allow a person to take, possess, buy, sell, transport, import, export or propagate nongame wildlife. If the Commission does not specifically list an indigenous, nongame species, then the species is considered non-protected nongame wildlife, e.g., coyote, bobcat, mountain lion, cotton-tailed rabbit, etc. A non-protected nongame animal may be hunted on private property with landowner consent by any means, at any time and there is no bag limit or possession limit.
An exotic animal is an animal that is non-indigenous to Texas. Unless the exotic is an endangered species then exotics may be hunted on private property with landowner consent. A hunting license is required. This does not include the dangerous wild animals that have been held in captivity and released for the purpose of hunting, which is commonly referred to as a "canned hunt".
If you have any questions, please contact Assistant Chief Scott Vaca. I have included his e-mail address. I will be out of the office and in Houston on Friday.
L.David Sinclair Chief of Staff – Division Director I
Texas Parks and Wildlife Department Law Enforcement Division
4200 Smith School Road Austin, TX 78744
Office 512.389.4854 Cell 512.971.2668
Fax 512.389.8400 "Texas Game Wardens Serving Texans Since 1895-Law Enforcement Off the Pavement"
WHAT IT MEANS TO VOTE FOR HRC
(Press release from the Attorney General's Office:)
Attorney General Kamala D. Harris….announced the creation of the California Cyber Crime Center (C4), a new initiative within the California Department of Justice to fight crime in the digital era by bringing state-of-the-art digital forensic capabilities and cyber security expertise to law enforcement across the state.
"As the world becomes increasingly digital and crime evolves, the tools we use to prevent, investigate, and prosecute crime must keep pace. Criminals are operating online with alarming sophistication, committing identity theft, hacking, cyber exploitation, and other crimes that involve technology, and law enforcement must stay one step ahead," said Attorney General Harris. "The California Cyber Crime Center brings legal, technical, and forensic capabilities to law enforcement across the state, helping our partners combat crime and building on our commitment to bring innovation to government."
C4 brings together the eCrime unit, established by Attorney General Harris in 2011 to investigate and prosecute large-scale identity theft and technology crimes; the Network Information Security Section (NISS), the California Department of Justice (DOJ)'s office of cyber security experts; and the Digital Evidence Unit, which was first piloted in the California DOJ Bureau of Forensic Service state crime labs in 2011, making California one of the first states in the nation to develop this capability. The Digital Evidence Unit uses scientific methods to extract and analyze information from technological items like cell phones and offers foundational classes on forensic training for law enforcement. To date, nearly 1,300 law enforcement personnel have been trained through these courses, with approximately 80 agencies per year trained since 2012.
C4 also includes a newly created unit— the Office of Digital Investigations (ODI)—that focuses on emerging technologies like software and data forensics and website reconstruction. ODI provides law enforcement with the capability to restore the digital scene of a crime to aid investigators in uncovering crucial evidence. This unit's technical expertise was critical in the first-in-the-nation criminal convictions of cyber exploitation website operators Kevin Bollaert and Casey Meyering which Attorney General Harris secured last year. Bollaert and Meyering were sentenced to 18 years and three years respectively for running websites where users could post intimate images of unsuspecting victims without their consent.
The final component of C4 is a brand-new Cyber Accelerator, a program that brings together members of the Digital Evidence Unit, the Office of Digital Investigations, and the eCrime Unit to focus on research and development and collaborate on new innovations. The first product developed in the Cyber Accelerator is a Cyber Response Vehicle (CRV)—a re-purposed Mobile Command Vehicle that was retrofitted into a mobile digital forensics laboratory. The CRV allows multiple staff to collect, acquire, and process media, mobile devices, personal computers, servers and other sources of electronically stored information on-site during the course of an investigation.
Attorney General Harris has developed and implemented a range of initiatives to protect the privacy and cyber security of California's residents and businesses. Last year, Attorney General Harris launched an online resource hub with helpful tools for victims, the technology industry, and law enforcement agencies to combat cyber exploitation, where intimate images are shared without consent in order to humiliate or extort the victim. The Attorney General supported legislation signed into law last year by Governor Jerry Brown, Senate Bill 676 (Cannella, R-Ceres) and Assembly Bill 1310 (Gatto, D-Glendale), expanding the tools with which law enforcement can gather evidence in cyber exploitation cases and more effectively prosecute these crimes.
Attorney General Kamala D. Harris created the Privacy Enforcement and Protection Unit in 2012 to focus on protecting consumer and individual privacy through civil prosecution of state and federal privacy laws. The eCrime Unit, created by Attorney General Harris in 2011, opened 22 investigations, filed 23 complaints, and obtained 44 convictions, securing a total of $30.6 million in restitution for victims and taxpayers in 2014-2015 alone.
HITLER REACTS TO TRUMP TAPES
https://www.youtube.com/watch?v=A6qmJkGf-FQ
THE SALT DOLL
Waves of sattwic energy are breaking over
The salt doll that's similar to rigid minds
Eons of a divinely sourced electric current
Surges through the mental and physical forms
Because you see, nobody's really all alone in
The sea of samsara, so now rejoice amidst the
Abominable Kali Yuga, since you've previously
Met pollution and terror and economic shakes
All manifestations of Halloween's dark night
Glowing ugly masks of a presidential election
So go out fearlessly to the beach and sit down
Silently, immersed in perfect nirvikalpa samadhi
–Craig Louis Stehr
Email me at Waikiki Beach: CraigStehr@inbox.com
LouisBedrock October 14, 2016
What should the young
man say, because he is buying
Modess? Should he
blush or not. Or
turn coyly, his head, to
one side, as if in
the exactitude of his emotion he
were not offended? Were
proud? Of what? To buy
a thing like that.
Put that in your nirvikalpa samadh.
what falls
goes slower and slower
combing her hair.
She is the lovely stranger
who married the forest ranger,
the duck and the dog,
and never was seen again.
mr. wendal October 14, 2016
Was Little Dog allowed indoors during the rain last night?
re: C.R. JOHNSON KNEW WHAT HE WAS DOING
The city put out a request for bids to replace the roof earlier this year but didn't receive any. I think they even requested bids a couple of times. Since no one wanted the job Public Works is supposed to patch it up. They are way understaffed and have been for a few years so who knows when they'll get to it.
The deck is another story and it's surprising that it has been allowed to get to such a state. Are you saying that the museum is completely closed now? Ms. Grace, why not address the city council during public comments at the next city council meeting? The more the word gets out, the more likely something will get done. It doesn't reflect well on the city if a treasure like that is left to rot. Tourists who are curious about our history will likely think that we don't care and they will not return, passing the word on to their friends.
The plan seems to be to acquire attractions without thought given to their maintenance costs. It was apparent with the coastal trail and now a proposed TOT is on the ballot to pay for maintaining it. And what will happen when the CV Starr center begins to show its age?
BB Grace October 14, 2016
Even Linda Ruffing said "The Master Plan is wonderful".
The Guest House is open very limied hours as a few docents are dedicated and hanging in there.
The Plan is a sustainable economic development plan with annual targetted goals that stressed how to sustain maintenance, and it also included a $250K archive building, proposed cafe, so much more, how to get funds and enjoy it all.
2017 the Guest House will be 125 years old.
Only Mark Ruedrich can speak for the Historical Society concerning the House to the City. I had to resign to say anything about the Master Plan and I'm saying something because my concerns for public saftey are at the point that I fear an accident or the building to be hurt on my watch.
Jim Updegraff October 14, 2016
I am back from my trip and ready to rejoin the fray. Very nice time visiting relatives and friends. Noted a lot of Trump signs in the rural areas of New England. Don't know if it is nation wide but a group is calling for Columbus Day to be renamed Native Americans Day. A number of counties have done so. Would be nice if Mendocino County would do the same.
malcolmlorne October 14, 2016
Ms. Grace's account is slightly lacking in two respects. Mr. Meiggs' sawmill was located in Mendocino. Meiggs didn't go into hiding, he moved to South America.
C.R. Johnson was hardly the first mill owner in Fort Bragg. Alexander Macpherson operated a sizable sawmill on the Noyo flats from the mid 1850s through the 1870s. Macpherson, who also operated a mill in Albion for a little longer than his Noyo enterprise, has his name misspelled on one of the north-south streets in Fort Bragg.
Malcolm Macdonald
Mr. Macdonald,
Maybe State Parks should change the name of the Ford House to Miegg's House? Meiggs promoted greed, C. R. did not.
The Guest House reflects the health of the Mendocino Coast community. Do you disagree?
Alice Chouteau October 14, 2016
I too, urge BB Grace to present this info about the sorry state of the museum during public input at the next CC meeting. Make it public, and embarrass the folks responsible for this mess. The sooner it is addressed the better.
The FBPD could also focus on keeping the homeless out of the building. Does it have fire sprinklers?
Ms. Chouteau,
It's very interesting to me how the Master Plan emerged. I went to the FB-MCHS 13 Sept meeting to tell them that I was going to have to resign because after being told for years that there is no money and the City owns the House, my concerns for public saftey are cramping my docent style as I'm having to act like this is normal and everything is great. It was very hard for me because my heart is in my job.
At the meeting I was rolling the treasurer's report and agenda in my hands. I didn't want to resign and when I heard the president speaking I looked up and saw a spark or a flash on C. R. Johnson's picture, which as I looked it pulled me in a wonderful golden glow that enveloped me with a wholesome feeling. I woke up on Main Street looking up at the mound that I never saw as a mound before. It was like I had been downloaded with a matrix.
I returned to docent the 22 September and a couple came in who long story short told me how they created a Foundation that took in $16 Million and I should have no problem. They told me what to do. It was stunning, and the man looked like C. R.
That led to me calling someone from the docent desk who called the City looking for Guest House papers to start the foundation.. where all the information I provided is from those appers and the Master Plan, which has the Foundation!!!
So for me it's been amazing, and the City stuff is just part of the Matrix, so I've been researching some of the other areas of the vision, which one reason C. R. built 4 churches is it was important to him that the community of believers worship their God and not the Spirit of the Mound that the hospital was built on. There's so much.
My hope is that the Guest House will get the funding not just for a roof, it needs way more than that. Thank you for your support Alice. Wouldn't it be grand to see bunting and ribbons on Main Street for the 125th Anniversary of the Guest House?
Michael Slaughter October 14, 2016
No more EMF Nevius? Maybe the Chron can bring back EMF Abe Melinkoff.
Evil Mickeyfickeys all
Bruce McEwen October 14, 2016
D maj.); Bottle of wine,
fruit of the vine,
When you gonna let me get (A maj.)so..(D maj.):..ber?
(D): Leave me alone,
lemme go home,
Let me go back and start
(A): Oh oh-oh..(D)…over.
1.D): Ramblin' a..(G)round
this (A) dirty old (D) town,
(D) Singin' for (A) nic-
kles and (D) dimes,
(D)Times gettin' (A) rough,
I (G) ain't got (D) enough,
(D) To get a little (A)bot-
tle of (D) wine.
2.D): Pain in my (A) head,
(G)bugs in my (D) bed,
(D) Pants are so worn (A)
that they (D) shine,
(D) Out on the (A) street
I tell (G) people I (D) meet,
(D) Buy me (A)a bottle of (D) wine.
3.D): Preacher will (A) preach,
(G) teacher will (D) teach,
(D Min.)man will (A)dig in the (D) mine,
(D)I ride the (A)rods,
(G) trustin' in (D )God,
(D) Huggin' my (A)bottle of (D) wine.
A sixties smash from Kraziekhat!
Leave a Reply to BB Grace Cancel reply


text:
Q: converting array into json object? I am having a problem while converting an array into Json object. I have an array which contain json objects/objects, when i convert that array into Json object it combine/concatenate array data rahter than making json array.
lets suppose array have two json objects. when i convert it into json object using
var jsondata = JSON.stringify(array);
var jsn = JSON.parse(jsondata);

here is my code:
var array = new Array();

function addBatch(){
var data = $.toJSON($('#risk').serializeArray());
    //data = [{"name":"user","value":"INCRE"},{"name":"period","value":"100"},{"name":"hori","value":"12"},{"name":"conf","value":"32"}]

    var jsonData = JSON.stringify(data);
    var json=JSON.parse(jsonData);
    console.log('After Converting Json');

    //store data in array
    array.push(json);
}

// function that convert array into json:
function saveBatch(){
                var jsonData = JSON.stringify(array);
        json = JSON.parse(jsonData);
        console.log("Batch: "+json);

}

it give me following output:
[{"name":"user","value":"HIST"},{"name":"period","value":"12"},{"name":"hori","value":"32"},{"name":"conf","value":"12"}],[{"name":"user1","value":"INCRE"},{"name":"period","value":"12"},{"name":"hori","value":"32"},{"name":"conf","value":"12"}]

it should be like this:
[
  [
      {"name":"obj1"},{"value":"data"}
  ],
  [
      {"name":"obj2"},{"value":"data2"}
  ]

]
dont know why this is happening. I search on Google as well but i didn't find any way except
var jsondata = JSON.stringify(array);
    var jsn = JSON.parse(jsondata);

A: What you have doesn't make alot of sense. Are you sure you don't want an array of objects?
var array = new Array();

function addBatch() {
  // Gets data. Returns an array of objects in format [{name: "", value: ""}, ...]
  var data = $.toJSON($('#risk').serializeArray());

  // Extend the `array` with new objects.
  array.concat(data);
}

// function that convert array into json:
function saveBatch() {
    // Convert the array of objects to JSON string.
    var jsonData = JSON.stringify(array);
    console.log(jsonData);
}


text:
October 6 marks 48th anniversary of Egypt's Glorious October 1973 Victory
Wed, 06 Oct 2021 - 11:49 GMT
FILE - Proud Egyptian Soldier
CAIRO – 6 October 2021: Israel captured the Sinai Peninsula, Gaza Strip, West Bank, Old City of Jerusalem, and the Golan Heights in the Six-Day War that began on June 5, 1967.
On October 6, 1973 at 2:00 p.m. (Cairo time) the Egyptian Armed Forces launched its war against the Israeli troops bringing down Bar Lev Line (a series of fortifications).
As a result, the Israeli troops were forced to retreat 15 kilometers eastern the Suez Canal; meanwhile, Syrian troops waged the war near Golan Heights against the Israeli troops.
The war that lasted for almost two weeks paved the way for negotiations that gave rise to the Peace Treaty between Israel and Egypt in 1979, and the liberation of entire Sinai, except for Taba which was recovered by Egypt through international arbitration in 1989.
Egypt's Prime Minister Mostafa Madbouli announced Thursday, October 7, as a public holiday on the occasion of the anniversary of the 6th of October War victory.
The decision applies to ministries, governmental bodies, public facilities, municipalities, public enterprises and public business sector companies.
On Sunday, Minister of Defense and Military Production Mohamed Zaki sent a cable of greetings to President Abdel Fattah el Sisi on the occasion of the 48th anniversary of October war victory.
In his cable, the defense minister said this glorious victory would remain a source of Egyptians' pride for their Armed Forces that are ready to defend the nation and thwart any attempts to jeopardize the country's security and stability.
Chief of Staff Lt. General Mohamed Farid sent a similar cable to President Sisi.
The defense minister and chief of staff also greeted army personnel and those who take part in UN peacekeeping missions on this anniversary.
President Sisi
Egyptian Army
Anwar El Sadat
Bar Lev Line
October 6 Victory
Old City Jerusalem


Well…that time of year is fast approaching and it's not long before the cannabis crusaders come out en mass and converge for some of the biggest smoke ups in UK history. Here's why 2017 is going to break records.
For the first time in UK history we have 7 cities celebrating the historic day of 420 which falls on April 20th each year. It's kind of like the stoners festival of light, but it doesn't matter if the flame goes out…you can just light it up again, and again and again.
There is of course a much more serious reason to part take in 420 each year other than to get as high as possible. It is an opportunity to celebrate all things of the cannabis culture and raise awareness to our presence in normal society. Cannabis has become very normalised in the last 10 years even in Britain and the drug laws which continue to criminalise people are behind the cognitive evolution so many Brits have arrived at. Stop wasting tax payers money on harmless tokers.
If you want to go and join in with the festivities and activists across the country you have a number of events to pick from!
Popular beyond belief, some years we have witnessed over 10,000 tokers migrate to the Royal Park to spark up in defiance of the Misuse of Drugs Act. While there has been a heavy police presence and a number of pointess arrests at some years it has not deterred the flocking of thousands of not just locals to the large open space in central London. Expect to see NORML UK and UKCSC there giving out cannabis information and taking donations for the #Right2Grow campaign.
For the first time Durham will be celebrating 420 with a joint effort from all the local clubs that have emerged in the last few years. It goes without saying that the Durham Police Crime Commissioner Ron Hogg's influence on cannabis policy in the North East has provoked a strong activist and campaigner response that has resulted in some real grassroots activism. Professor Mike Barnes will be coming to give a talk on medical cannabis use too! Durham Cannabis Collective, Durham City Cannabis Club, Wear Valley Cannabis Club, Tyneside Cannabis Club and Durham County Cannabis Club have all made a "joint" effort to create a meaningful first 420 celebration.
The Glasgow Cannabis Social Club will again be squaring up the afternoon on Glasgow Green with a showcase of local musicians, public speakers and plenty of fun. Returning for their 5th year they have received national attention for their well planned events which have gained support from ex Police Chief Jim Duffy, now a member of Law Enforcement Against Prohibition UK who publicly speaks out against the failing drug war.
The Leeds Cannabis Social Club have worked hard at trying to unite the cannabis community of Leeds and West Yorkshire in order to boost the moral and activity in the region. Their efforts have not gone unnoticed and have paid off because their 420 event is growing in popularity each year and a growing number of events are popping up in the region for enthusiats to attend. Leeds 420 in Hyde Park should prove to be their biggest yet so if you are near enough to them and you find yourself with nothing to do on April 20th…you know where it's at!
The LegenDerry Cannabis Club are kicking off their years protesting by joining the rest of the UK cities protesting prohibition. They will be meeting at 4pm to spark up in union to show those watching and the PSNI that there is no need to criminalise such a harmless act – and one that many medicinal patients have to use to have a better quality of life. A show of solidarity is urged for those in Derry, Northern Ireland that support the end of unjust cannabis laws.
They do things differently in Manchester or so they say! Mannijuana return with their annual 420 event which has been left to grow each year without police presence and some grace from the city council to host the event officially going forward in the future. This can only mean good things for the cannabis consumers in the city of Manchester and we hope that the news of the Police Crime Commissioner there this week stating that first time growers, if caught will not be prosecuted – a very welcome step in the right direction.
Each year the Swansea Cannabis Club organise a local gathering down the beach to celebrate and protest in combination. Over 18s only unless accompanied by an adult – for some food, good music and good times. and Don't forget the Cardiff Global Cannabis March is taking place again on May 6th in through Cardiff city center.
Bristol Cannabis Club have announced their intentions to host a gathering on the Downs passed the Zoo.
Something to consider of course for all of these events is cannabis is still a Class B substance (boooo) and as such if you are found in possession of it in public you can be given a warning, a caution with a fine or even be arrested for it. So, bring your own buds at your own risk and only take what you are going to consume. As with all these events, please, no dealing.
If you find yourself wanting to get out of the country for this special time of the year why not head over to The Social Cup by the Suver Nuver Foundation in Amsterdam for 2 days of highly heady cannabis fun? There is a Coffeeshop Cup for Herbs and Hash and an International Concentrates Cup with entrants from all over Europe and the UK, including a "People's Choice" Cup for the best flavour of the day chosen by you! Not only will you get a great experience with some of the latest cannabis strains, you will be entertained with music from reggae artists, Akea Beka the voice of Midnight and UK hip Hop sensations The Four Owls and Ocean Wisdom from High Focus Records. The UK Cannabis Social Clubs will be there with a stand and also be giving a talk on the progress the UK movement has been making as well as Dr Arno Hazekamp who worked at Bedrocan for 15 years growing and studying Medical Cannabis we are excited to hear what he has to say on modern cannabis medicines. It sounds like it's lined up to be a pretty sweet couple of days. View the full details at the website here.


text:
Q: Why isn't my variable updating after calling a method? package my.package.name;

import android.content.DialogInterface;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    int x;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

        something();
        System.out.println(sumX); //this prints 0
    }

    private void something() {
        x = 6;
        System.out.println(sumX); //this prints 6
    }
}

It seems the order of execution is not happening like I want it to. On the console output, x = 0 gets printed before x = 6. Why is that? Does Android run method calls concurrently?

A: I tried your code and worked for me, otherwise to solve your problem you can try this:
    try {
         something();
     } catch (Exception e) {
     } finally {
         System.out.println(x);
     }

or (Not very clear)
something();
Handler handler = new Handler();
final Runnable runnable = new Runnable() {
    public void run() {
        System.out.println(sumX);
    }
};
handler.postDelayed(runnable, 50); //50 millisec (delay)


text:
Q: How to prove $\lim_{a\to -\infty} \sup_n P(\sum_1^n X_j / \sqrt{n} \leq a) = 0$ Let $(X_n)$ be a sequence of independent identically distributed $L^2$ random variables with mean $0$ and variance $1$. I want to prove that
\begin{equation}
\lim_{a\to -\infty} \sup_n P\left(\frac{\sum_1^n X_j} {\sqrt{n}} \leq a\right) = 0\text{.}
\end{equation}
I get this intuitively, since the distribution of $\sum_1^n X_j/\sqrt{n}$ gets close to the standard normal distribution and $a$ goes to $-\infty$. But how can I prove it?

A: Let $S_n = \sum_1^n X_j$ and let $a \lt 0$. By Chebyshev's inequality (and using Var$(S_n) = n$):
$$P\left(\frac{S_n}{\sqrt n}\lt a\right)  = P\left(S_n\lt a\sqrt n \right)$$
$$\le P\left(|S_n|\gt |a|\sqrt n \right) \le \frac{n}{a^2n} = \frac{1}{a^2}$$
Since this is true for all $n$,
$$\sup_n P\left(\frac{S_n}{\sqrt n}\lt a\right) \lt \frac{1}{a^2}$$
Now take $\lim$ as ${a\to-\infty}$.


Tawanda Chambwe holds a BA (Hons) in Economic History and an MA in African Economic History from the University of Zimbabwe. He is interested in African Economic History and Business History with a particular focus on African Entrepreneurship and informal livelihoods within colonial spaces. He is also interested in commercial zones as spaces of interaction between and among Africans on the one hand and the colonial state on the other during the colonial period. Tawanda's current PhD project is looking at the development of African entrepreneurship in Zimbabwe during the colonial period up to the first ten years of independence.