text:
/*@z19.c:Galley Attaching:DetachGalley()@*************************************/
/*                                                                           */
/*  THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.24)                       */
/*  COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston                             */
/*                                                                           */
/*  Jeffrey H. Kingston (jeff@cs.usyd.edu.au)                                */
/*  Basser Department of Computer Science                                    */
/*  The University of Sydney 2006                                            */
/*  AUSTRALIA                                                                */
/*                                                                           */
/*  This program is free software; you can redistribute it and/or modify     */
/*  it under the terms of the GNU General Public License as published by     */
/*  the Free Software Foundation; either Version 2, or (at your option)      */
/*  any later version.                                                       */
/*                                                                           */
/*  This program is distributed in the hope that it will be useful,          */
/*  but WITHOUT ANY WARRANTY; without even the implied warranty of           */
/*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            */
/*  GNU General Public License for more details.                             */
/*                                                                           */
/*  You should have received a copy of the GNU General Public License        */
/*  along with this program; if not, write to the Free Software              */
/*  Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307 USA   */
/*                                                                           */
/*  FILE:         z19.c                                                      */
/*  MODULE:       Galley Attaching                                           */
/*  EXTERNS:      SearchGalley(), AttachGalley(), DetachGalley()             */
/*                                                                           */
/*****************************************************************************/
#include "externs.h"

/*****************************************************************************/
/*                                                                           */
/*  OBJECT InterposeScale(y, scale_factor, dim)                              */
/*                                                                           */
/*  Interpose a @Scale symbol above y with the given scale factor.           */
/*                                                                           */
/*****************************************************************************/

static OBJECT InterposeScale(OBJECT y, int scale_factor, int dim)
{ OBJECT res;
  New(res, SCALE);
  FposCopy(fpos(res), fpos(y));
  if( dim == COLM )
  { bc(constraint(res)) = scale_factor;
    fc(constraint(res)) = 1 * SF;
  }
  else
  { bc(constraint(res)) = 1 * SF;
    fc(constraint(res)) = scale_factor;
  }
  back(res, dim) = (back(y, dim) * scale_factor) / SF;
  fwd(res, dim)  = (fwd(y, dim) * scale_factor) / SF;
  back(res, 1-dim) = back(y, 1-dim);
  fwd(res, 1-dim)  = fwd(y, 1-dim);
  ReplaceNode(res, y);
  Link(res, y);
  return res;
} /* end InterposeScale */

/*****************************************************************************/
/*                                                                           */
/*  OBJECT InterposeWideOrHigh(y, dim)                                       */
/*                                                                           */
/*  Interpose a @Wide or @High symbol above y with the same size as y, with  */
/*  a value which prevents any further increase in the size of y.            */
/*                                                                           */
/*****************************************************************************/

static OBJECT InterposeWideOrHigh(OBJECT y, int dim)
{ OBJECT res;
  New(res, dim == COLM ? WIDE : HIGH);
  FposCopy(fpos(res), fpos(y));
  back(res, dim) = back(y, dim);
  fwd(res, dim)  = fwd(y, dim);
  back(res, 1-dim) = back(y, 1-dim);
  fwd(res, 1-dim)  = fwd(y, 1-dim);
  SetConstraint(constraint(res), MAX_FULL_LENGTH, size(res, dim), MAX_FULL_LENGTH);
  ReplaceNode(res, y);
  Link(res, y);
  return res;
} /* end InterposeWideOrHigh */

/*****************************************************************************/
/*                                                                           */
/*  DetachGalley(hd)                                                         */
/*                                                                           */
/*  Detach galley hd from its target.                                        */
/*                                                                           */
/*****************************************************************************/

void DetachGalley(OBJECT hd)
{ OBJECT prnt, index;
  assert( type(hd) == HEAD && Up(hd) != hd, "DetachGalley: precondition!" );
  debug1(DGA, D, "DetachGalley( %s )", SymName(actual(hd)));
  Parent(prnt, Up(hd));
  assert( Up(prnt) != prnt, "DetachGalley: parent!" );
  New(index, UNATTACHED);
  pinpoint(index) = nilobj;
  MoveLink(Up(hd), index, PARENT);
  Link(NextDown(Up(prnt)), index);
  debug0(DGA, D, "DetachGalley returning.");
} /* end DetachGalley */

/*@::SearchGalley()@**********************************************************/
/*                                                                           */
/*  OBJECT SearchGalley(start, sym, forwards, subgalleys, closures, input)   */
/*                                                                           */
/*  Search a galley and its sub-galleys for a target which uses sym.  The    */
/*  meanings of the flags are as follows:                                    */
/*                                                                           */
/*    forwards     If TRUE, search forwards from just after start, else      */
/*                 search backwards from just before start                   */
/*    subgalleys   If TRUE, search down into sub-galleys of this galley      */
/*    closures     If TRUE, closures in this galley are acceptable results   */
/*    input        If TRUE, InputSym is an acceptable result                 */
/*                                                                           */
/*****************************************************************************/

OBJECT SearchGalley(OBJECT start, OBJECT sym, BOOLEAN forwards,
BOOLEAN subgalleys, BOOLEAN closures, BOOLEAN input)
{ OBJECT y, res, z, zlink, link;
  debug5(DGA, DD, "[ SearchGalley(start, %s, %s, %s, %s, %s)", SymName(sym),
	forwards ? "fwd" : "back", subgalleys ? "subgalleys" : "nosubgalleys",
	closures ? "closures" : "noclosures", input ? "input" : "noinput");
  assert( type(start) == LINK || type(start) == HEAD, "SearchGalley: start!" );

  link = forwards ? NextDown(start) : PrevDown(start);
  res = nilobj;
  while( res == nilobj && type(link) != HEAD )
  { Child(y, link);
    switch( type(y) )
    {
      case UNATTACHED:
      case RECEIVING:

        debug1(DGA, DD, "  examining %s", EchoIndex(y));
	if( subgalleys )
	for( zlink = Down(y); zlink!=y && res==nilobj; zlink=NextDown(zlink) )
	{ Child(z, zlink);
	  res = SearchGalley(z, sym, TRUE, TRUE, TRUE, input);
	}
	if( res == nilobj && input && type(y) == RECEIVING &&
	    actual(actual(y)) == InputSym )
	  res = y;
	break;

      case RECEPTIVE:

        debug1(DGA, DD, "  examining %s", EchoIndex(y));
	if( closures && type(actual(y)) == CLOSURE
		     && SearchUses(actual(actual(y)), sym) )  res = y;
	else if( input && actual(actual(y)) == InputSym )  res = y;
	break;

      default:

	break;

    }
    link = forwards ? NextDown(link) : PrevDown(link);
  }
  debug1(DGA, DD, "] SearchGalley returning %s", EchoIndex(res));
  return res;
} /* end SearchGalley */

/*@@**************************************************************************/
/*                                                                           */
/*  int AttachGalley(hd, inners, suspend_pt)                                 */
/*                                                                           */
/*  Attach galley hd, which may be unsized, to a destination.  This involves */
/*  searching for a destination forward or back from the attachment point of */
/*  hd and promoting up to and including the first definite component of hd. */
/*                                                                           */
/*  Although AttachGalley never flushes any galleys, it may identify some    */
/*  galleys which should be flushed, even if the attach is itself not        */
/*  successful.  These are returned in *inners, or nilobj if none.           */
/*                                                                           */
/*  The integer returned by AttachGalley indicates what happened to hd:      */
/*                                                                           */
/*    ATTACH_KILLED     The galley was sized to begin with but no target     */
/*                      for it could be found.  The galley has been killed   */
/*                      and that's the end of it.                            */
/*                                                                           */
/*    ATTACH_INPUT      When searching for a target for the galley we came   */
/*                      upon InputSym, suggesting that the target might be   */
/*                      still to be read.  So the galley has been linked to  */
/*                      that InputSym and must now wait.                     */
/*                                                                           */
/*    ATTACH_NOTARGET   The galley is unsized and no target could be found   */
/*                      for it.  This is fine, it just means that we can't   */
/*                      flush the galley now and we must try again later.    */
/*                                                                           */
/*    ATTACH_SUSPEND    The galley is sized and a target was found for it,   */
/*                      but the first component of the galley proved to be   */
/*                      indefinite so could not be promoted.  The galley     */
/*                      remains unattached but is moved to just before its   */
/*                      target so that it can find it easily later when its  */
/*                      first component becomes definite and it is flushed.  */
/*                                                                           */
/*    ATTACH_NULL       The galley is sized and a target was found for it,   */
/*                      but the body of the galley proved to be null (i.e.   */
/*                      there were no definite components to be flushed).    */
/*                      This is to be treated just like the normal case      */
/*                      following, except that the target is replaced by     */
/*                      @Null rather than by its body.                       */
/*                                                                           */
/*    ATTACH_ACCEPT     The galley is sized and a target was found for it,   */
/*                      and one component of the galley has been promoted.   */
/*                                                                           */
/*****************************************************************************/

int AttachGalley(OBJECT hd, OBJECT *inners, OBJECT *suspend_pt)
{ OBJECT hd_index;		/* the index of hd in the enclosing galley   */
  OBJECT hd_inners;		/* inner galleys of hd, if unsized           */
  OBJECT dest;			/* the target @Galley hd empties into        */
  OBJECT dest_index;		/* the index of dest                         */
  OBJECT target;		/* the target indefinite containing dest     */
  OBJECT target_index;		/* the index of target                       */
  OBJECT target_galley;		/* the body of target, made into a galley    */
  OBJECT tg_inners;		/* inner galleys of target_galley            */
  BOOLEAN need_precedes;	/* true if destination lies before galley    */
  OBJECT recs;			/* list of recursive definite objects        */
  OBJECT link, y;		/* for scanning through the components of hd */
  CONSTRAINT c;			/* temporary variable holding a constraint   */
  OBJECT env, n1, tmp, zlink, z, sym;	/* placeholders and temporaries	     */
  BOOLEAN was_sized;		/* true if sized(hd) initially               */
  int dim;			/* the galley direction                      */
  FULL_LENGTH perp_back, perp_fwd;
  OBJECT why, junk;

  debug2(DGA, D, "[ AttachGalley(Galley %s into %s)",
	SymName(actual(hd)), SymName(whereto(hd)));
  ifdebug(DGA, DD, DebugGalley(hd, nilobj, 4));
  assert( Up(hd) != hd, "AttachGalley: no index!" );
  Parent(hd_index, Up(hd));
  assert( type(hd_index) == UNATTACHED, "AttachGalley: not UNATTACHED!" );
  hd_inners = tg_inners = nilobj;
  was_sized = sized(hd);
  dim = gall_dir(hd);

  for(;;)
  {
    /*************************************************************************/
    /*                                                                       */
    /*  Search for a destination for hd.  If hd is unsized, search for       */
    /*  inner galleys preceding it first of all, then for receptive objects  */
    /*  following it, possibly in inner galleys.  If no luck, exit.          */
    /*  If hd is sized, search only for receptive objects in the current     */
    /*  galley below the current spot, and fail if cannot find any.          */
    /*                                                                       */
    /*************************************************************************/

    sym = whereto(hd);
    if( sized(hd) )
    {
      /* sized galley case: search on from current spot */
      target_index = SearchGalley(Up(hd_index), sym, TRUE, FALSE, TRUE, TRUE);
      if( target_index == nilobj )
      {
	/* search failed to find any new target, so kill the galley */
	for( link = Down(hd); link != hd; link = NextDown(link) )
	{ Child(y, link);
	  if( type(y) == SPLIT )  Child(y, DownDim(y, dim));
	  if( is_definite(type(y)) )  break;
	}
	if( link != hd )
	  Error(19, 1, "galley %s deleted from here (no target)",
	    WARN, &fpos(y), SymName(actual(hd)));
	if( hd_inners != nilobj )  DisposeObject(hd_inners), hd_inners=nilobj;
	if( tg_inners != nilobj )  DisposeObject(tg_inners), tg_inners=nilobj;
	KillGalley(hd, FALSE);
	*inners = nilobj;
	debug0(DGA, D, "] AttachGalley returning ATTACH_KILLED");
	return ATTACH_KILLED;
      }
      else if( actual(actual(target_index)) == InputSym )
      {
	/* search found input object, so suspend on that */
	DeleteNode(hd_index);
	Link(target_index, hd);
	*inners = nilobj;
	debug0(DGA, D, "] AttachGalley returning ATTACH_INPUT");
	return ATTACH_INPUT;
      }

    }
    else /* unsized galley, either backwards or normal */
    {
      if( foll_or_prec(hd) == GALL_PREC )
      {	target_index= SearchGalley(Up(hd_index), sym, FALSE, TRUE,TRUE,FALSE);
	need_precedes = FALSE;
      }
      else
      {	target_index = SearchGalley(Up(hd_index), sym, FALSE,TRUE,FALSE,FALSE);
	need_precedes = (target_index != nilobj);
	if( target_index == nilobj )
	  target_index = SearchGalley(Up(hd_index), sym, TRUE,TRUE,TRUE,FALSE);
      }

      /* if no luck, exit without error */
      if( target_index == nilobj )
      {	*inners = nilobj;
	debug0(DGA, D, "] AttachGalley returning ATTACH_NOTARGET");
	return ATTACH_NOTARGET;
      }
    }
    assert( type(target_index) == RECEPTIVE, "AttachGalley: target_index!" );
    target = actual(target_index);
    assert( type(target) == CLOSURE, "AttachGalley: target!" );

    /* set target_galley to the expanded value of target */
    debug1(DYY, D, "[ EnterErrorBlock(FALSE) (expanding target %s)",
      SymName(actual(target)));
    EnterErrorBlock(FALSE);
    New(target_galley, HEAD);
    force_gall(target_galley) = FALSE;
    enclose_obj(target_galley) = limiter(target_galley) = nilobj;
    headers(target_galley) = dead_headers(target_galley) = nilobj;
    opt_components(target_galley) = opt_constraints(target_galley) = nilobj;
    gall_dir(target_galley) = external_hor(target) ? COLM : ROWM;
    FposCopy(fpos(target_galley), fpos(target));
    actual(target_galley) = actual(target);
    whereto(target_galley) = ready_galls(target_galley) = nilobj;
    foll_or_prec(target_galley) = GALL_FOLL;
    must_expand(target_galley) = FALSE;
    sized(target_galley) = FALSE;

    /* get perpendicular constraint (none if horizontal galley) */
    if( dim == ROWM )
    {
      Constrained(target, &c, 1-dim, &junk);
      if( !constrained(c) )
        Error(19, 2, "receptive symbol %s has unconstrained width",
	  FATAL, &fpos(target), SymName(actual(target)));
      debug2(DSC, DD, "Constrained( %s, 1-dim ) = %s",
	EchoObject(target), EchoConstraint(&c));
      if( !FitsConstraint(0, 0, c) )
      { debug0(DGA, D, "  reject: target_galley horizontal constraint is -1");
	y = nilobj;
        goto REJECT;
      }
    }
    else /* actually unused */
      SetConstraint(c, MAX_FULL_LENGTH, MAX_FULL_LENGTH, MAX_FULL_LENGTH);

    debug1(DGA, DDD, "  expanding %s", EchoObject(target));
    tmp = CopyObject(target, no_fpos);
    Link(target_galley, tmp);
    env = DetachEnv(tmp);
    debug4(DGM, D, "  external_ver(%s) = %s, external_hor(%s) = %s",
      SymName(actual(target)), bool(external_ver(target)),
      SymName(actual(target)), bool(external_hor(target)));
    SizeGalley(target_galley, env,
	external_ver(target) || external_hor(target),
	threaded(target), non_blocking(target_index),
	trigger_externs(target_index), &save_style(target),
	&c, whereto(hd), &dest_index, &recs, &tg_inners,
	enclose_obj(hd) != nilobj ? CopyObject(enclose_obj(hd), no_fpos):nilobj);
    debug1(DGA, DD, "  SizeGalley tg_inners: %s", DebugInnersNames(tg_inners));
    if( recs != nilobj )  ExpandRecursives(recs);
    dest = actual(dest_index);
    if( underline(dest) == UNDER_UNDEF )  underline(dest) = UNDER_OFF;

    /* verify that hd satisfies any horizontal constraint on dest */
    if( dim == ROWM )
    {
      debug1(DGA, DDD, "  checking hor fit of hd in %s",SymName(actual(dest)));
      Constrained(dest, &c, 1-dim, &junk);
      debug3(DSC, DD, "Constrained( %s, %s ) = %s",
	EchoObject(dest), dimen(1-dim), EchoConstraint(&c));
      assert( constrained(c), "AttachGalley: dest unconstrained!" );
      if( !FitsConstraint(0, 0, c) )
      { debug0(DGA, D, "  reject: hd horizontal constraint is -1");
	y = nilobj;
        goto REJECT;
      }
    }

    /* manifest and size the galley if not done yet */
    if( !sized(hd) )
    {
      debug2(DYY, D, "[ EnterErrorBlock(TRUE) (sizing galley %s into %s)",
	SymName(actual(hd)), SymName(whereto(hd)));
      EnterErrorBlock(TRUE);
      n1 = nilobj;
      Child(y, Down(hd));
      env = DetachEnv(y);
      /*** threaded() only defined in ROWM case
      SizeGalley(hd, env, TRUE, threaded(dest), non_blocking(target_index),
	TRUE, &save_style(dest), &c, nilobj, &n1, &recs, &hd_inners);
      *** */
      SizeGalley(hd, env, TRUE, dim == ROWM ? threaded(dest) : FALSE,
	non_blocking(target_index), TRUE, &save_style(dest), &c, nilobj,
	&n1, &recs, &hd_inners, nilobj);
      debug1(DGA,DD,"  SizeGalley hd_inners: %s", DebugInnersNames(hd_inners));
      if( recs != nilobj )  ExpandRecursives(recs);
      if( need_precedes )		/* need an ordering constraint */
      {	OBJECT index1, index2;
        New(index1, PRECEDES);
	New(index2, FOLLOWS);
	blocked(index2) = FALSE;
	tmp = MakeWord(WORD, STR_EMPTY, no_fpos);
	Link(index1, tmp);  Link(index2, tmp);
	Link(Up(hd_index), index1);
	Link(Down(hd), index2);
	debug0(DGA, D, "  inserting PRECEDES and FOLLOWS");
      }
      LeaveErrorBlock(TRUE);
      debug0(DYY, D, "] LeaveErrorBlock(TRUE) (finished sizing galley)");
    }

    if( dim == ROWM )
    { if( !FitsConstraint(back(hd, 1-dim), fwd(hd, 1-dim), c) )
      { debug3(DGA, D, "  reject: hd %s,%s does not fit target_galley %s",
	  EchoLength(back(hd, 1-dim)), EchoLength(fwd(hd, 1-dim)),
	  EchoConstraint(&c));
        Error(19, 3, "too little horizontal space for galley %s at %s",
	  WARN, &fpos(hd), SymName(actual(hd)), SymName(actual(dest)));
        goto REJECT;
      }
    }

    /* check status of first component of hd */
    debug0(DGA, DDD, "  now ready to attach; hd =");
    ifdebug(DGA, DDD, DebugObject(hd));
    for( link = Down(hd);  link != hd;  link = NextDown(link) )
    {
      Child(y, link);
      debug1(DGA, DDD, "  examining %s", EchoIndex(y));
      if( type(y) == SPLIT )  Child(y, DownDim(y, dim));
      switch( type(y) )
      {

	case EXPAND_IND:
	case SCALE_IND:
	case COVER_IND:
	case GALL_PREC:
	case GALL_FOLL:
	case GALL_FOLL_OR_PREC:
	case GALL_TARG:
	case CROSS_PREC:
	case CROSS_FOLL:
	case CROSS_FOLL_OR_PREC:
	case CROSS_TARG:
	case PAGE_LABEL_IND:

	  break;

	case PRECEDES:
	case UNATTACHED:

	  if( was_sized )
	  { /* SizeGalley was not called, so hd_inners was not set by it */
	    if( hd_inners == nilobj )  New(hd_inners, ACAT);
	    Link(hd_inners, y);
	  }
	  break;

	case RECEPTIVE:

	  goto SUSPEND;

	case RECEIVING:

	  goto SUSPEND;

	case FOLLOWS:

	  Child(tmp, Down(y));
	  if( Up(tmp) == LastUp(tmp) )
	  { link = pred(link, CHILD);
	    debug0(DGA, DD, "  disposing FOLLOWS");
	    DisposeChild(NextDown(link));
	    break;
	  }
	  Parent(tmp, Up(tmp));
	  assert(type(tmp) == PRECEDES, "Attach: PRECEDES!");
	  switch( CheckComponentOrder(tmp, target_index) )
	  {
	    case CLEAR:		DeleteNode(tmp);
				link = pred(link, CHILD);
				DisposeChild(NextDown(link));
				break;

	    case PROMOTE:	break;

	    case BLOCK:		debug0(DGA, DD, "CheckContraint: BLOCK");
				goto SUSPEND;

	    case CLOSE:		debug0(DGA, D, "  reject: CheckContraint");
				goto REJECT;
	  }
	  break;

	case GAP_OBJ:

	  underline(y) = underline(dest);
	  if( !join(gap(y)) )  seen_nojoin(hd) = TRUE;
	  break;

	case BEGIN_HEADER:
	case END_HEADER:
	case SET_HEADER:
	case CLEAR_HEADER:

	  /* do nothing until actually promoted out of here */
	  underline(y) = underline(dest);
	  break;

	case CLOSURE:
	case CROSS:
	case FORCE_CROSS:
	case NULL_CLOS:
	case PAGE_LABEL:

	  underline(y) = underline(dest);
	  break;

	case WORD:
	case QWORD:
	case ONE_COL:
	case ONE_ROW:
	case WIDE:
	case HIGH:
	case HSHIFT:
	case VSHIFT:
	case HSCALE:
	case VSCALE:
	case HCOVER:
	case VCOVER:
	case HCONTRACT:
	case VCONTRACT:
	case HLIMITED:
	case VLIMITED:
	case HEXPAND:
	case VEXPAND:
	case START_HVSPAN:
	case START_HSPAN:
	case START_VSPAN:
	case HSPAN:
	case VSPAN:
	case ROTATE:
	case BACKGROUND:
	case SCALE:
	case KERN_SHRINK:
	case INCGRAPHIC:
	case SINCGRAPHIC:
	case PLAIN_GRAPHIC:
	case GRAPHIC:
	case LINK_SOURCE:
	case LINK_DEST:
	case ACAT:
	case HCAT:
	case VCAT:
	case ROW_THR:
	case COL_THR:

	  underline(y) = underline(dest);
	  if( dim == ROWM )
	  {
	    /* make sure y is not joined to a target below (vertical only) */
	    for( zlink = NextDown(link); zlink != hd; zlink = NextDown(zlink) )
	    { Child(z, zlink);
	      switch( type(z) )
	      {
	        case RECEPTIVE:

		  if( non_blocking(z) )
		  { zlink = PrevDown(zlink);
		    DeleteNode(z);
		  }
		  else
		  { y = z;
		    goto SUSPEND;
		  }
		  break;

	        case RECEIVING:

		  if( non_blocking(z) )
		  { zlink = PrevDown(zlink);
		    while( Down(z) != z )
		    { Child(tmp, Down(y));
		      if( opt_components(tmp) != nilobj )
		      { DisposeObject(opt_components(tmp));
		        opt_components(tmp) = nilobj;
		        debug3(DOG, D, "AttachGalley(%s) de-optimizing %s %s",
			  SymName(actual(hd)), SymName(actual(tmp)), "(join)");
		      }
		      DetachGalley(tmp);
		      KillGalley(tmp, FALSE);
		    }
		    DeleteNode(z);
		  }
		  else
		  { y = z;
		    goto SUSPEND;
		  }
		  break;

	        case GAP_OBJ:

		  if( !join(gap(z)) )  zlink = PrevDown(hd);
		  break;

	        default:	break;
	      }
	    }

	    /* if HCAT, try vertical hyphenation (vertical galleys only) */
	    if( type(y) == HCAT )  VerticalHyphenate(y);
	  }

	  /* check availability of parallel space for the first component */
	  why = nilobj;
	  Constrained(dest, &c, dim, &why);
	  debug3(DGF, DD, "  dest parallel Constrained(%s, %s) = %s",
	    EchoObject(dest), dimen(dim), EchoConstraint(&c));
	  if( !FitsConstraint(back(y, dim), fwd(y, dim), c) )
	  { BOOLEAN scaled;

	    /* if forcing galley doesn't fit, try scaling first component */
	    scaled = FALSE;
	    if( force_gall(hd) && size(y, dim) > 0 )
	    { int scale_factor;
	      scale_factor = ScaleToConstraint(back(y,dim), fwd(y,dim), &c);
	      if( scale_factor > 0.5 * SF )
	      {	char num1[20], num2[20];
		sprintf(num1, "%.1fc", (float) size(y, dim) / CM);
		sprintf(num2, "%.1fc", (float) bfc(c) / CM);
		if( dim == ROWM )
		  Error(19, 4, "%s object too high for %s space; %s inserted",
		    WARN, &fpos(y), num1, num2, KW_SCALE);
		else
		  Error(19, 5, "%s object too wide for %s space; %s inserted",
		    WARN, &fpos(y), num1, num2, KW_SCALE);
		y = InterposeScale(y, scale_factor, dim);
		scaled = TRUE;
	      }
	    }

	    /* otherwise we must reject, and warn the user */
	    if( !scaled )
	    { char num1[20], num2[20];
	      debug3(DGA, D, "  reject: vsize %s,%s in %s; y=",
		EchoLength(back(y, dim)), EchoLength(fwd(y, dim)),
		EchoConstraint(&c));
	      ifdebug(DGA, D, DebugObject(y));
	      if( size(y, dim) > 0 )
	      { sprintf(num1, "%.1fc", (float) size(y, dim) / CM);
	        sprintf(num2, "%.1fc", (float) bfc(c) / CM);
	        if( dim == ROWM )
		  Error(19, 12, "%s object too high for %s space; will try elsewhere",
		    WARN, &fpos(y), num1, num2);
	        else
		  Error(19, 13, "%s object too wide for %s space; will try elsewhere",
		    WARN, &fpos(y), num1, num2);
	      }
	      goto REJECT;
	    }

	  }

	  /* check availability of perpendicular space for first component */
	  if( dim == ROWM )
	  { perp_back = back(hd, 1-dim);  perp_fwd = fwd(hd, 1-dim);
	  }
	  else
	  { perp_back = back(y, 1-dim);  perp_fwd = fwd(y, 1-dim);
	  }
	  Constrained(dest, &c, 1-dim, &junk);
	  debug3(DGF, DD, "  dest perpendicular Constrained(%s, %s) = %s",
	    EchoObject(dest), dimen(1-dim), EchoConstraint(&c));
	  if( !FitsConstraint(perp_back, perp_fwd, c) )
	  { BOOLEAN scaled;

	    /* if forcing galley doesn't fit, try scaling first component */
	    scaled = FALSE;
	    if( force_gall(hd) && perp_back + perp_fwd > 0 )
	    { int scale_factor;
	      scale_factor = ScaleToConstraint(perp_back, perp_fwd, &c);
	      if( scale_factor > 0.5 * SF )
	      {	char num1[20], num2[20];
		sprintf(num1, "%.1fc", (float) (perp_back + perp_fwd) / CM);
		sprintf(num2, "%.1fc", (float) bfc(c) / CM);
		if( 1-dim == ROWM )
		  Error(19, 6, "%s object too high for %s space; %s inserted",
		    WARN, &fpos(y), num1, num2, KW_SCALE);
		else
		  Error(19, 7, "%s object too wide for %s space; %s inserted",
		    WARN, &fpos(y), num1, num2, KW_SCALE);
		y = InterposeScale(y, scale_factor, 1-dim);
		scaled = TRUE;
	      }
	    }

	    /* otherwise we must reject, and warn the user */
	    if( !scaled )
	    {
	      debug3(DGA, D, "  reject: vsize %s,%s in %s; y=",
		EchoLength(perp_back), EchoLength(perp_fwd),
		EchoConstraint(&c));
	      ifdebug(DGA, D, DebugObject(y));
	      goto REJECT;
	    }

	  }

	  /* dest seems OK, so perform its size adjustments */
	  debug0(DSA, D, "calling AdjustSize from AttachGalley (a)");
	  AdjustSize(dest, back(y, dim), fwd(y, dim), dim);
	  debug0(DSA, D, "calling AdjustSize from AttachGalley (b)");
	  AdjustSize(dest, perp_back, perp_fwd, 1-dim);

	  /* now check parallel space for target_galley in target */
	  Constrained(target, &c, dim, &why);
	  debug3(DGF, DD, "  target parallel Constrained(%s, %s) = %s",
	    EchoObject(target), dimen(dim), EchoConstraint(&c));
	  Child(z, LastDown(target_galley));  /* works in all cases? */
	  assert( !is_index(type(z)), "AttachGalley: is_index(z)!" );
	  assert( back(z, dim)>=0 && fwd(z, dim)>=0, "AttachGalley: z size!" );
	  if( !FitsConstraint(back(z, dim), fwd(z, dim), c) )
	  { BOOLEAN scaled;

	    debug2(DGA, D, "  why     = %d %s", (int) why, EchoObject(why));
	    debug2(DGA, D, "  limiter = %d %s", (int) limiter(hd),
	      EchoObject(limiter(hd)));

	    /* if forcing galley doesn't fit, try scaling z */
	    scaled = FALSE;
	    if( force_gall(hd) && size(z, dim) > 0 && limiter(hd) != why )
	    { int scale_factor;
	      scale_factor = ScaleToConstraint(back(z,dim), fwd(z,dim), &c);
	      if( scale_factor > 0.5 * SF )
	      {	char num1[20], num2[20];
		sprintf(num1, "%.1fc", (float) size(z, dim) / CM);
		sprintf(num2, "%.1fc", (float) bfc(c) / CM);
		if( dim == ROWM )
		  Error(19, 8, "%s object too high for %s space; %s inserted",
		    WARN, &fpos(y), num1, num2, KW_SCALE);
		else
		  Error(19, 9, "%s object too wide for %s space; %s inserted",
		    WARN, &fpos(y), num1, num2, KW_SCALE);
		z = InterposeWideOrHigh(z, dim);
		z = InterposeScale(z, scale_factor, dim);
		scaled = TRUE;
	      }
	    }

	    if( !scaled )
	    { char num1[20], num2[20];
	      limiter(hd) = why;
	      debug3(DGA, D, "  set limiter(%s) = %d %s", SymName(actual(hd)),
		(int) limiter(hd), EchoObject(limiter(hd)));
	      debug3(DGA, D, "  reject: size was %s,%s in %s; y =",
		EchoLength(back(z, dim)), EchoLength(fwd(z, dim)),
		EchoConstraint(&c));
	      ifdebug(DGA, D, DebugObject(y));
	      if( size(z, dim) > 0 )
	      { sprintf(num1, "%.1fc", (float) size(z, dim) / CM);
	        sprintf(num2, "%.1fc", (float) bfc(c) / CM);
	        if( dim == ROWM )
		  Error(19, 14, "%s object too high for %s space; will try elsewhere",
		    WARN, &fpos(y), num1, num2);
	        else
		  Error(19, 15, "%s object too wide for %s space; will try elsewhere",
		    WARN, &fpos(y), num1, num2);
	      }
	      goto REJECT;
	    }
	  }
	  limiter(hd) = why;
	  debug3(DGA, D, "  set limiter(%s) = %d %s", SymName(actual(hd)),
	    (int) limiter(hd), EchoObject(limiter(hd)));

	  /* now check perpendicular space for target_galley in target */
	  Constrained(target, &c, 1-dim, &junk);
	  debug3(DGF, DD, "  target perpendicular Constrained(%s, %s) = %s",
	    EchoObject(target), dimen(1-dim), EchoConstraint(&c));
	  Child(z, LastDown(target_galley));  /* works in all cases? */
	  assert( !is_index(type(z)), "AttachGalley: is_index(z)!" );
	  assert( back(z, 1-dim)>=0 && fwd(z, 1-dim)>=0,
	    "AttachGalley: z size (perpendicular)!" );
	  if( !FitsConstraint(back(z, 1-dim), fwd(z, 1-dim), c) )
	  { BOOLEAN scaled;

	    /* if forcing galley doesn't fit, try scaling z */
	    scaled = FALSE;
	    if( force_gall(hd) && size(z, 1-dim) > 0 )
	    { int scale_factor;
	      scale_factor = ScaleToConstraint(back(z,1-dim), fwd(z,1-dim), &c);
	      if( scale_factor > 0.5 * SF )
	      {	char num1[20], num2[20];
		sprintf(num1, "%.1fc", (float) size(z, 1-dim) / CM);
		sprintf(num2, "%.1fc", (float) bfc(c) / CM);
		if( 1-dim == ROWM )
		  Error(19, 10, "%s object too high for %s space; %s inserted",
		    WARN, &fpos(y), num1, num2, KW_SCALE);
		else
		  Error(19, 11, "%s object too wide for %s space; %s inserted",
		    WARN, &fpos(y), num1, num2, KW_SCALE);
		z = InterposeWideOrHigh(z, 1-dim);
		z = InterposeScale(z, scale_factor, 1-dim);
		scaled = TRUE;
	      }
	    }

	    if( !scaled )
	    {
	      debug3(DGA, D, "  reject: size was %s,%s in %s; y =",
		EchoLength(back(z, 1-dim)), EchoLength(fwd(z, 1-dim)),
		EchoConstraint(&c));
	      ifdebug(DGA, D, DebugObject(y));
	      goto REJECT;
	    }
	  }

	  /* target seems OK, so adjust sizes and accept */
	  if( external_hor(target) )
	  {
	    /* don't adjust any sizes, none to adjust */
	    debug0(DSA, D, "not calling AdjustSize from AttachGalley (c)");
	  }
	  else if( external_ver(target) )
	  {
	    /* adjust perp size only, to galley size */
	    debug0(DSA, D, "calling AdjustSize from AttachGalley (d)");
	    AdjustSize(target, back(target_galley, 1-dim),
	      fwd(target_galley, 1-dim), 1-dim);
	  }
	  else
	  {
	    /* adjust both directions, using z (last component) */
	    Child(z, LastDown(target_galley));
	    debug0(DSA, D, "AttachGalley AdjustSize using z =");
	    ifdebug(DSA, D, DebugObject(z));
	    debug0(DSA, D, "calling AdjustSize from AttachGalley (e)");
	    AdjustSize(target, back(z, dim), fwd(z, dim), dim);
	    debug0(DSA, D, "calling AdjustSize from AttachGalley (f)");
	    AdjustSize(target, back(z, 1-dim), fwd(z, 1-dim), 1-dim);
	  }

	  goto ACCEPT;

	default:

	  assert1(FALSE, "AttachGalley:", Image(type(y)));
	  break;

      } /* end switch */
    } /* end for */

    /* null galley: promote whole galley without expanding the target */
    debug0(DGA, D, "  null galley");
    if( tg_inners != nilobj )  DisposeObject(tg_inners), tg_inners = nilobj;
    DisposeObject(target_galley);
    LeaveErrorBlock(FALSE);
    debug0(DYY, D, "] LeaveErrorBlock(FALSE) (null galley)");

    /* kill off any null objects within the galley, then transfer it */
    /* don't use Promote() since it does extra unwanted things here  */
    for( link = Down(hd);  link != hd;  link = NextDown(link) )
    { Child(y, link);
      switch( type(y) )
      {

	case GAP_OBJ:
	case CLOSURE:
	case CROSS:
	case FORCE_CROSS:
	case NULL_CLOS:
	case PAGE_LABEL:

	  link = PrevDown(link);
	  debug1(DGA, D, "  null galley, disposing %s", Image(type(y)));
	  DisposeChild(NextDown(link));
	  break;

	default:

	  break;
      }
    }
    TransferLinks(NextDown(hd), hd, Up(target_index));

    /* attach hd temporarily to target_index */
    MoveLink(Up(hd), target_index, PARENT);
    assert( type(hd_index) == UNATTACHED, "AttachGalley: type(hd_index)!" );
    DeleteNode(hd_index);

    /* return; only hd_inners needs to be flushed now */
    *inners = hd_inners;
    debug0(DGA, D, "] AttachGalley returning ATTACH_NULL");
    return ATTACH_NULL;

    REJECT:

      /* reject first component */
      /* debug1(DGA, D, "  reject %s", EchoObject(y)); */
      debug0(DGA, D, "  reject first component");
      LeaveErrorBlock(TRUE);
      debug0(DYY, D, "] LeaveErrorBlock(TRUE) (REJECT)");
      if( tg_inners != nilobj )  DisposeObject(tg_inners), tg_inners = nilobj;
      DisposeObject(target_galley);
      if( foll_or_prec(hd) == GALL_PREC && !sized(hd) )
      {
	/* move to just before the failed target */
	MoveLink(Up(hd_index), Up(target_index), PARENT);
      }
      else
      {
	/* move to just after the failed target */
	MoveLink(Up(hd_index), NextDown(Up(target_index)), PARENT);
      }
      continue;

    SUSPEND:

      /* suspend at first component */
      debug1(DGA, D, "  suspend %s", EchoIndex(y));
      blocked(y) = TRUE;
      LeaveErrorBlock(FALSE);
      debug0(DYY, D, "] LeaveErrorBlock(FALSE) (SUSPEND)");
      if( tg_inners != nilobj )  DisposeObject(tg_inners), tg_inners = nilobj;
      DisposeObject(target_galley);
      MoveLink(Up(hd_index), Up(target_index), PARENT);
      if( was_sized )
      { /* nothing new to flush if suspending and already sized */
	if( hd_inners != nilobj )  DisposeObject(hd_inners), hd_inners=nilobj;
	*inners = nilobj;
      }
      else
      { /* flush newly discovered inners if not sized before */
	*inners = hd_inners;
      }
      debug0(DGA, D, "] AttachGalley returning ATTACH_SUSPEND");
      *suspend_pt = y;
      return ATTACH_SUSPEND;

    ACCEPT:

      /* accept first component; now committed to the attach */
      debug3(DGA, D, "  accept %s %s %s", Image(type(y)), EchoObject(y),
	EchoFilePos(&fpos(y)));
      LeaveErrorBlock(TRUE);
      debug0(DYY, D, "] LeaveErrorBlock(TRUE) (ACCEPT)");

      /* attach hd to dest */
      MoveLink(Up(hd), dest_index, PARENT);
      assert( type(hd_index) == UNATTACHED, "AttachGalley: type(hd_index)!" );
      DeleteNode(hd_index);

      /* move first component of hd into dest */
      /* nb Interpose must be done after all AdjustSize calls */
      if( dim == ROWM && !external_ver(dest) )
	Interpose(dest, VCAT, hd, y);
      else if( dim == COLM && !external_hor(dest) )
      { Interpose(dest, ACAT, y, y);
	Parent(junk, Up(dest));
	assert( type(junk) == ACAT, "AttachGalley: type(junk) != ACAT!" );
	StyleCopy(save_style(junk), save_style(dest));
	adjust_cat(junk) = padjust(save_style(junk));
      }
      debug1(DGS, D, "calling Promote(hd, %s) from AttachGalley/ACCEPT",
	link == hd ? "hd" : "NextDown(link)");
      Promote(hd, link == hd ? hd : NextDown(link), dest_index, TRUE);

      /* move target_galley into target */
      /* nb Interpose must be done after all AdjustSize calls */
      if( !(external_ver(target) || external_hor(target)) )
      {	Child(z, LastDown(target_galley));
	Interpose(target, VCAT, z, z);
      }
      debug0(DGS, D, "calling Promote(target_galley) from AttachGalley/ACCEPT");
      Promote(target_galley, target_galley, target_index, TRUE);
      DeleteNode(target_galley);
      assert(Down(target_index)==target_index, "AttachGalley: target_ind");
      if( blocked(target_index) )  blocked(dest_index) = TRUE;
      DeleteNode(target_index);

      /* return; both tg_inners and hd_inners need to be flushed now;        */
      /* if was_sized, hd_inners contains the inners of the first component; */
      /* otherwise it contains the inners of all components, from SizeGalley */
      if( tg_inners == nilobj ) *inners = hd_inners;
      else if( hd_inners == nilobj ) *inners = tg_inners;
      else
      {	TransferLinks(Down(hd_inners), hd_inners, tg_inners);
	DeleteNode(hd_inners);
	*inners = tg_inners;
      }
      debug0(DGA, D, "] AttachGalley returning ATTACH_ACCEPT");
      ifdebug(DGA, D,
	if( dim == COLM && !external_hor(dest) )
	{ OBJECT z;
	  Parent(z, Up(dest));
	  debug2(DGA, D, "  COLM dest_encl on exit = %s %s",
	    Image(type(z)), EchoObject(z));
	}
      )
      return ATTACH_ACCEPT;

  } /* end for */
} /* end AttachGalley */


text:
Psychopathic CEOs: Fact or Fiction?
by Karen Landay & P. D. Harms
What's your impression of the average CEO? Is he (and it's usually a he) a good person? Or is he greedy, ruthless, and deceitful? Maybe even a psychopath? If you follow media accounts of fallen or disgraced corporate leaders, it is sometimes difficult not to believe that many, if not most, CEOs are either psychopaths or are, at the very least, prone to serious moral lapses.
But simply engaging in bad behavior does not necessarily mean that the label "psychopath" is appropriate. What exactly do we mean by that term? Are we talking about sadistic, violent people we love to hate, like Joffrey from Game of Thrones? Although Joffrey is a great example of classical conceptions of psychopathy in the clinical literature, psychopathy in business is often much more subtle and much less violent. Psychopathy among business leaders combines negative characteristics, such as impulsivity and a lack of caring or empathy for others, that makes people toxic to be around, with positive characteristics, such as boldness, that can make leaders highly attractive to others nonetheless. Think of television characters such as Dr. Gregory House (House) or Frank Underwood (House of Cards).
But are these insidious individuals really taking over corporate leadership? To find out, we compiled all research studies on this topic to conduct a meta-analysis—a summary study that combines data from many different studies on a specific topic to draw general conclusions.
We found that, although people with psychopathic tendencies are slightly more likely to become business leaders, this modest tendency was nowhere near the level suggested by the media. We also found that leaders with psychopathic tendencies were slightly less effective at their jobs in terms of fostering productivity. When leaders did have psychopathic tendencies, their employees really, really disliked them. Of course, the fact that people hate working for mean and impulsive bosses shouldn't come as a surprise!
However, further analysis of the many studies we examined suggested that there may be an optimal level of psychopathic tendencies for leadership effectiveness. That is, too much is obviously a bad thing, because recklessness and nastiness are likely to produce fear rather than motivation, productivity, and business success. But too little is apparently also a drawback. The boldness associated with psychopathic tendencies may manifest in a leader who is able to make difficult decisions or act in times of uncertainty—when other people are more constrained by fear.
Our work uncovered one final element of interest. When we split the results by leader gender, men with psychopathic tendencies were more likely to become leaders. On the other hand, women with psychopathic tendencies were less likely to be rated as effective leaders. So at least when it comes leadership, men are sometimes rewarded for displaying psychopathic tendencies, but women are punished for the same behaviors.
What does this tell us? The gender double standard is alive and well. Stereotypically "bad" behavior isn't just tolerated in men. It may even be encouraged. Men are "just boys being boys," and many people seem to chuckle and look the other way when men are mean-spirited. Women, however, are often advised to emulate the behavior of men in order to get ahead. Yet, our results suggest that this is a bad idea. As has been the case for decades, women acting in stereotypically "male" ways are actually penalized for it.
Back to the original question: Is the average CEO a good person? There's no way to know for sure, but it's unlikely that he or she is truly a psychopath. That said, our results suggest that we aren't doing a very good job of screening out potentially dangerous and destructive individuals with psychopathic tendencies when selecting leaders. In fact, we are failing to do so at all, at least when it comes to male leaders. And given the amount of power that is invested in corporate and political leaders, that is a real concern.
Landay, K., Harms, P. D., & Credé, M. (2019). Shall we serve the dark lords? A meta-analytic review of psychopathy and leadership. Journal of Applied Psychology, 104(1), 183-196. http://dx.doi.org/10.1037/apl0000357
Karen Landay is a Ph.D. candidate at the University of Alabama. P. D. Harms is an Associate Professor of Management and the Morrissette Faculty Fellow in Leadership and Ethics at the University of Alabama.
Anti-social behavior
The Psychological and Social Importance of Postures During Worship
Learning a New Language as a Refugee: A Bitter Pill? Or Easy as Pie?
Songs that Speak to Us: Personality Predicts Lyrical Preferences
Your Opinions are Not as Popular as You Think They Are: The False Consensus Effect
Equality Makes Same-Sex Couples Happy

redpajama_set_name: RedPajamaCommonCrawl


text:
Residential family centre criticised after parent shook baby whilst living there
The Southport based centre has since made effective improvements since the monitoring visit
Olivia WilliamsLocal Democracy Reporter
The Amber Family Ltd centre on Part Street in Southport (Image: Google View)
A residential family centre has been criticised about its safeguarding procedures after a parent shook a baby.
Amber Family Ltd business on Part Street in Southport hosts families who are being assessed on their parenting skills.
It was visited by officers from Ofsted on November 19 after a response to "poor safeguarding practice identified following a serious safeguarding incident."
A report published on December 17 by the education watchdog said a member of staff failed to follow safeguarding procedures prior to and following an incident when a baby was shaken by their parent.
Second letter of 'no confidence' sent to Blue Coat school bosses, this time by teachers
It added that the provider did not ensure the baby received medical attention in a "timely manner" and this placed the child at further risk of harm.
The family centre also didn't inform the local authority about safeguarding concerns, such as domestic incidents, rough handling of the baby and co-sleeping during the 10 days the family had stayed there for.
Fake cigs ordered by baby monitor and dropped down drainpipe chute in counterfeit tobacco ring
The report added: "As a result, the placing local authority was not able to ensure that appropriate strategies and monitoring were implemented to ensure that the risks were managed effectively."
However Amber Family bosses told the ECHO that a further monitoring visit which was carried out on December 18 saw a significant improvement in management, safeguarding and leadership which will be reflected in a report which is yet to be published.
The original Ofsted report said that an issue with co-sleeping was also a problem at the family centre and on one occasion staff allowed the parents of one child to fall asleep twice with their baby remaining in bed with them.
Plan to transform Widnes and Runcorn submitted without debate
Key question anyone getting a cab in Liverpool should ask before getting in
It said: "Co-sleeping is a regular occurrence for some parents at this residential family centre.
"The provider has an 'unwritten policy' that co-sleeping is not allowed at the residential family centre and that staff must intervene if this happens.
"However, the intervention is not always effective. For example, on one occasion staff allowed the parents of one child to fall asleep twice with their baby remaining in bed with them.
"Although the provider addresses co-sleeping with some parents by providing them with information on safe sleeping, it did not happen for this family."
Historic Liverpool boulevard to be completely transformed as £4m cycling plan starts
The inspection also found risk assessments did not include sufficient up-to-date information relating to serious safeguarding incidents and known vulnerabilities.
It noted the assessments were carried out on referral to the Southport family centre, however these were not updated once the family moved in.
Risks identified at the 13-week placement were recorded in daily logs and key-work sessions but were not always shared with staff and there was no evidence that showed they had read and understood the records and there was no evidence of management checking the records - potentially putting children at risk.
Department store at heart of Southport up for sale amid fears for company's future
The report also said there was only one member of staff on duty at times and added that staff who are failing to follow safeguarding procedures "do not help to ensure that staff are able to provide sufficient care, with competence and skill, to meet the needs of parents and their children."
This compromised the experiences and progress of parents and children residing at the residential family centre and had an impact on the ability of parents and children "to reach their full potential and be protected from harm."
Families who go to Amber Family in Southport are placed there for 13 weeks and are assessed on their abilities as parents.
The centre provides residential assessments that assist local authorities and courts in making decisions which promote the welfare of children.
A spokesperson for Amber Family said: "Amber Family was subject to a monitoring visit on 19th of November.
"A further monitoring visit was undertaken on 18th December and (subject to further quality assurance) an update will be published which confirms that there has been significant improvement in both management and leadership and safeguarding resulting in both compliance notices being met.
"Amber Family has been open since 2014 and in this time has given the opportunity to 177 families from the North West to live together whilst undergoing assessment.
"They have three settings in the North West all of which are rated as 'Good' by Ofsted."


text:
Mark Auslander
New visions on museums, community engagement, art, and science in the public interest
About Mark Auslander
Museum Visions
Acknowledging Race
Art as Symbolic Action
Say Their Names: Kadir Nelson
Posted bymuseummark June 22, 2020 June 24, 2020 Posted inUncategorizedTags:#BlackLivesMatter, #GeorgeFloyd, @SayTheirNames, African American art, Memorialization, Race and Justice
The week of June 22, 2020, sees one of the most brilliant images in the storied history of New Yorker covers, Kadir Nelson's "Say Their Names." Within an elongated body of the murdered George Floyd, we behold a host of other people of color, many murdered or martyred, across four centuries of American history. The New Yorker website contains a fascinating digital scrolling tour of the cover, which in its upper reaches contains the faces of recent victims of police violence, and descends in time through the victims and heroes of the Civil Rights movement, to images of the enslaved at its base.
Floyd, to paraphrase Walt Whitman in Song of Myself, is large, he contains multitudes,. His body serves as a vast graveyard for so many who passed before him, at white hands both known and unknown. Blue periwinkle flowers, which often signaled the graves of enslaved and free persons buried without markers, dot this symbolic final resting place. Are we perhaps also meant to think of the flashing blue lights that haunt the nation's streets and highways, sometimes the last thing seen by those pulled over for driving while black?
On the throat of the vast figure, suffocated by the policeman's knee for the infamous eight minutes and forty six seconds, we see the faces of some of the most recent victims of the nation's undeclared war against its own citizens of color: Ahmed Arbery, Tony McDade, and Trayvon Martin. Throughout this shadowy landscape we see those who, in Ta-Nehisi Coates' terms, were denied fundamental authority over their own bodies, even as they struggled for life and dignity, unto the last breath.
Appropriately, George Floyd's head blocks out two letters of the magazine title, "Y" and "O." Although he was killed in Minneapolis, his death left a jagged wound in the nation's preeminent city, in the entire country, and around the world, a reminder of how many lives across the generations have been blotted out before their time. His death has occasioned acts of planned and spontaneous mourning and remembrance near and far, including in the form of murals and street art, and perhaps most famously, the painting in yellow of the words "Black Lives Matter," on 16th street, directly facing Lafayette Park, from which peaceful protesters were forcefully removed with pepper spray and truncheons for the Presidential photo op. In Concord, Massachusetts, each morning my wife Ellen and I walk on a paved path through the woods, on which two dozen local high school students have conscientiously chalked the names of hundreds of black and brown victims of police shootings, and their efforts are of course echoed now around the planet. There is a fascinating convergence of grieving, for those lost in recent months to Covid-19, a pandemic that has disproportionately impacted communities of color, and the outrage over the violent deaths, one after another after another, of black people.
So far as I can tell, the only white people glimpsed in the work are at its precise center, perhaps over the spot where George Floyd's heart might be, and roughly where he wore a tattoo. We see the shadowy figures of white police offers beating a prone Rodney King in front of stopped vehicle. The nocturnal scene of terror is lighted, appropriately, by the adjacent burning cross of the Klan.
The work's title, "Say their names," occasions a fascinating and necessary history lesson, plumbing the dark depths of American history. Nearly all of us need some help from the website in recalling who precisely we see, although some of the names, such as Dr. Martin Luther King, Jr., Malcolm X, Emmett Till, and Rosa Parks, are familiar to most. The lashed and knotted back of the formerly enslaved man in the bottom right, is recognizablet to many, although his name, "Gordon," is less widely known. Significantly, the left base of the image is filled with over twenty enslaved people in shackles, whose names are beyond recovery. We can try to honor them in silence, but we cannot follow the injunction to "say their names.: They are forever interred in unmarked graves on the plantation, signaled only by the periwinkles.
Misericordia Polyptych [Madonna della Misericordia]. Piero della Francesca. 1460-62
The shape of Floyd's body has many echoes. Perhaps we are meant to think of the dark outlines used in police target practice, or the chalk outlines drawn around victims' bodies on the pavement. We may sense flowing from Floyd's head the torrents of a great river, perhaps an allusion to Langston Hughes' "My soul has grown deep like the rivers." There may an allusion to the classic motif in Christian iconography of the Misericordia, in which Mary's outstretched arms and mantle encompass and protect the multitude of the faithful.
Frontispiece of Leviathan by Abraham Bosse,
Jean Comaroff notes parallels with Abraham Bosse's frontispiece of Thomas Hobbes' "Leviathan," an etching in which the torso of a giant sovereign is composed of the faces of hundreds of persons, a technique that may have borrowed from Giuseppe Arcimboldo's tendency to depict portraits of persons composed out of other elements.)
One particularly poignant association may be the famous depictions of the dark shape of the hold of a slave vessel, crammed with captive human bodies, summoning up the estimated 35,000 journeys that brought enslaved people from Africa to the New World across the centuries. Most of those depicted within Nelson's great body were born long after slavery, but the long shadow of America's founding original sin endures. In a sense the entire nation remains trapped within the slave hold, charged with the unfinished work of making amends and now rising, one hopes, to the work of social repair.
Many of the depicted faces, it should be noted, are smiling, a reminder of the vital spark of life snuffed out by police violence or white mob action. Floyd's face is impassive, perhaps even serene, although his darkened eyes do look out at us, unflinchingly, reminding of us of the great work that lies before us, as we seek to honor his memory, and that of the many thousands gone. These are the faces and the names whom we carry with us, as we together, march forward, once more, in the long-thwarted quest to build the Beloved Community here on Earth.
Making Visible: Hanford Sturgeon and Indigenous Nuclear Art
Invocation of the Muse: Visual Artists in Mark Titus' film The Wild
Mark Auslander, Blog at WordPress.com.


Let's begin with a point of clarification: the supposedly fun thing is sewing with silk, not making Grainline Alders. That is a definitely fun thing that I'm looking forward to doing again. I'm planning at least one more Alder as we speak. Further clarification: I am going to sew with silk again. I have some silks prints in my stash that I love, so I'm going to sew them up. I'm just going to change my processes. Lest I perpetuate the notion that sewing silk is ZOMG hard, let me say that most of the construction on this was easy. I used a size 60 needle most of the time and a size 70 when going through multiple layers. I used silk thread. I tested everything I did on a scrap before doing it on the actual dress since I'd never sewn silk before. As a result, I had few problems. However, when it came to doing the narrow hem and finishing the armholes, I was ready to scream. One supposedly fun thing I will 100% never do again is use silk bias strips to finish armholes. Talk about a pain in the arse. My hem isn't so narrow and my armholes are pretty wobbly. In the future, I'll do a clean-finish lining or use a more stable material for my bias strips, and I'll also use those same strips to stabilize my hem instead of just doing a fold and turn.
You might be wondering why I made a sleeveless lightweight silk dress when it's still pretty cold in Chicago. Well, a week ago I returned from a trip to Florida to visit my grandma. For some reason, whenever I tell people I'm going to visit my grandma in Florida, they groan. They think I'm in for a really bad time. But I have no idea what they're talking about; I love my grandma. I also love the ocean, and she lives right near it. So I look forward to these trips. I'll likely be making them more often in the future because my mother is planning to move to Florida this summer to be with my grandmother, who needs some extra care nowadays. Anyway, in the days leading up to the trip, I freaked out and sewed three summer dresses. I've gained some weight since last summer and I was feeling anxious about my lack of a summer wardrobe. I made this silk Alder plus two dresses out of my recently acquired Vlisco fabric. I'll post about those two soon, along with some thoughts on buying and sewing wax print fabrics.
The funny thing about my summer dress freakout sewing extravaganza was that there was only one day on our trip where summer dresses were really required. I ended up wearing cardigans over my summer dresses most of the time.
For most of our trip it was a bit chilly (for Florida; it was in the 60s) and verrrrry windy. I really wanted to take pictures at the beach because I only ever have pictures of me in my living room, but taking these pictures was a dangerous adventure – the danger mostly consisting of flashing everyone on the beach my underwear. In the picture above, I'm standing strangely because I had just finished yanking my dress down, I believe. But I really liked how my hair is being blown, so I included it. I'd like to style it this way and maybe join a Flock of Seagulls tribute band.
More windyness! I was so excited about splashing in the ocean like a little kid, but we only got to do that on the last day of our trip. It was too cold to even think about getting in the chilly Atlantic before then. But I did put my feet in the water a couple of days when it was too cold to swim. I just lovelovelove the ocean and couldn't stay away.
I'm trying to look pensively into the sea here, but I'm pretty sure I'm grumbling about my fluttery dress. It's not just that it was windy while I was taking these pictures. I was also wondering how I'd ever wear this dress in the windy city. Fun fact: when I was a teenager I read that the origin of the phrase "windy city" was a reporter's description of the windbag politicians in Chicago, not the amount of wind blowing around the city. Chicago is purportedly actually not much windier than other cities. I was sort of insufferable as a teenager, so I loved correcting people when they would talk about Chicago being windy. Then I moved here and had to stop wearing my hair curled because it would turn into a rat's next in short order because of the wind. While Wikipedia still assures me that Chicago isn't significantly windier than other cities, I've read that the way the buildings are constructed and the way the streets are laid out on a grid means that the wind really does come off the lake and whip down some of the streets and around some of the buildings. On UIC's campus, the building where my office is housed always has me complaining to myself as I'm walking inside because the wind just swirls around it like crazy. Legend has it that the campus's brutalist architect (look it up: it's a real architectural term) designed it so that the wind would whip around the building and discourage protestors from gathering around it (it was built in the 60s, so this was a major concern). I'll buy it. As one of those protestors, I'm proud to say that it hasn't kept me away, but it really does make the space more hostile for people to gather.
I think maybe you can tell in the picture above that I'm pretty fed up with the wind. We headed back to the safety of the car after that one.
Now for some pictures where you can actually tell what's going on!
I'm hanging my dress on a lamp above because I'm classy like that and because the only places where I can actually hang things in my apartment are dark.
First silk problem: My collar pieces must have stretched a ton because I ended up with the above. As you can see, I basted it on before I realized the problem. FYI if you haven't made a collar before: the edge of the collar should NOT align with the edge of the button placket! So I had to rip that off, undo my stitching on the collar, cut it down, and restitch it. Annoying, but easily fixable.
You can see in the photo above where the collar should end in relation to the button placket. Yes, mine had stretched quite a bit! I used Tasia's tip to make a collar stand template and I liked the results I got. My topstitching is a bit wobbly, but the shape of my collar stand is good.
Here's the corner where the gathered skirt piece joins up with the rest of the front on view B of the Alder. SO MUCH better than on my first Alder view B, which you see below.
I was too timid in clipping on my first Alder. I made sure not to repeat that mistake this time.
I asked Instagram whether I should make orange or cream buttonholes, and most people agreed that they should be cream. I guess I could have tested out orange buttonholes with cream thread on the buttons themselves, but I felt like both things should be done with the same thread.
There's a finished button and buttonhole on the dress! The buttons seem simple, but I had such a difficult time finding buttons that I liked for this dress. I wanted buttons made of shell or glass, not plastic. Joann's had nothing suitable, so I headed to Soutache, which is a store in Chicago that has tons of trims – buttons, ribbons, rhinestones, feathers, and more. They were the exact opposite – they had so many great options that I had trouble deciding! The owner was very helpful, though, and she and I decided on the shell buttons you see here. If you visit Chicago or if you live here and haven't stopped by yet, I can't recommend Soutache highly enough. These buttons were more expensive than anything at Joann's, but it's very worth it to me for a fine fabric like silk. Vogue in Evanston has a large button selection as well, but they're a bit of a hassle to deal with for a few reasons. Quite often, I find a button I like only to open the box and find that they're sold out of the button. Plus they're on a huge wall that requires you to use a ladder to get to the top shelves. There is a ladder present, but you'll get yelled at if anyone sees you using it. But it's also so hectic that it really isn't feasible to get an employee to stand there all day pulling button boxes for you. Soutache's selection seems to me to be of higher quality and as long as it's not busy (it wasn't when I went), the owner is very happy to help you find what you're looking for. She also left me alone for a bit just to browse, so it's not like she's hovering annoyingly the whole time you're there, which is one of my pet peeves. Bath and Body Works, I'm looking at you. I'm just here for foaming hand soap, please leave me alone.
This just wouldn't be a post on Feminist Stitch if I didn't talk about something I did wrong. My bottom button is improperly spaced because I decided to flip my fabric around when I got to last buttonhole. If my buttonhole foot hangs over the edge of the fabric, it tends to not make such great buttonholes. However, because I'm bad at math and spatial reasoning, I corrected my beginning point in the wrong direction, so the bottom buttonhole is closer to the penultimate one than it should be. I realized this at the precise moment that I'd finished cutting the buttonhole open. I hope it's out of the line of sight enough that most people won't notice. If they do, design feature?
So that's my first time sewing with silk! I'm achieving a lot of sewing milestones lately: silk, blazers, and I'm working on a pair of jeans right now. I've decided to just go for theses things rather than freaking out about them after discussing with another blogger the way we get hung up on certain aspects of sewing more as advanced sewers than we did as beginners. To wit, the first garment I sewed for myself on my own was a denim skirt with flat-felled seams and a front fly. Shortly after that I sewed a Burda magazine pattern for a friend and added a lining to it on my own. I thought nothing of these things at the time. I only became afraid of things after reading Pattern Review and sewing blogs and seeing people talk about things like they were big bad monsters. No more, I say. My jeans are going swimmingly, and I'm excited about the next new thing I'll tackle, whatever it may be.


Wallis is an visual artist, writer, designer of children's toys, social activist, and world traveler. He is a published author of novels, plays and poetry.
Wallis is working on two books, the Gun Sculpture, with Sandra Bromley, and a biography on his encounters with youth. He is working with Harvard students on innovative experiential education curriculum for high-risk and at-risk children and youth. Wallis is the co-founder (with Sandra) of the iHuman Youth Society.
CEASE Man of Honour Award, 2012.
Wallis is presently working on the development of innovative education for high-risk youth using curriculum embedded in the arts. Harvard students are participants in the research project.
Sandra is a recognized artist whose works have appeared in solo and group exhibitions in Europe, Asia, and North America.
Her multidisciplinary, interactive art includes traditional sculpture as well as video, sound, photography, and installation. She works independently and in collaboration with artists and professionals in other disciplines. Sandra's work has taken her to many parts of the world, including Sierra Leone and Cambodia.


Wenvoe, a Welsh village in the Vale of Glamorgan, Wales. Circa 1961.
This Wenvoe, 2081 Black Framed Print Black Framed Art Print is created using state of the art, industry leading Digital printers. The result - a stunning reproduction at an affordable price.


VATICAN CITY (Reuters) - Cardinals advising Pope Francis on how to reform the Vatican believe the Holy See's central government is so problem-ridden that only a total overhaul can fix it, the Vatican said on Thursday.
The unusually stark acknowledgement came on the third and final day of closed-door meetings between the pope and eight cardinals from around the world who are discussing the Vatican's troubled administration and mapping out possible changes in the worldwide Church.
Vatican spokesman Father Federico Lombardi said the cardinals were no longer considering adjustments or changes to a 1998 constitution on the workings of the Vatican's various departments, known as "Pastor Bonus" (Good Shepherd).
"(The cardinals) are leaning towards a constitution with very significant new elements; in short, a new constitution," Lombardi told reporters at a briefing.
The Vatican's central administration, known as the Curia, has been accused of being dysfunctional and riven with infighting and was largely blamed for many of the mishaps and scandals that plagued the papacy of Benedict XVI, who resigned in February.
Bishops around the world have deemed it heavy-handed, autocratic, condescending and overly bureaucratic, and some say it sometimes seemed to have taken on the trappings and intrigue of a Renaissance court.
Francis said in an interview published on Tuesday in an Italian newspaper that one main problem of the Curia was that it was too focused on its own interests and too inward looking.
He said a court atmosphere where Vatican officials act like "courtiers" was "the leprosy of the papacy".
Francis has brought a new style of openness, consultation and simplicity to the Vatican. He has shunned the spacious papal apartment and lives in small quarters in a guest house.
He announced the papal advisory board of cardinals, a revolutionary step for a Church steeped in hierarchical tradition, a mere month after his election as the first non-European pope in 1,300 years and the first from Latin America.
His decision to take advice from the cardinals - from Italy, Chile, India, Germany, Democratic Republic of Congo, the United States, Australia and Honduras - is a clear sign that he intends to take seriously calls from within the Church to decentralize a traditionally top-heavy institution.
Before resigning, Benedict left a secret report for Francis on the problems of the Curia, which were exposed when sensitive documents alleging corruption were stolen from Benedict's desk by his butler and leaked to the media.
There have been suggestions that some Vatican departments should be merged and others closed in order to make the Curia more efficient and to prevent corruption.
However, writing a new Vatican constitution to replace Pastor Bonus, which runs to nine sections, 193 articles and two appendices, will be a major task, and Lombardi said it was unclear how long it would take.
The spokesman said the cardinals felt the role of the Curia should be to serve the 1.2 billion member Roman Catholic Church "rather than the exercise of centralized power".


text:
Hacker News ( unofficial ) (hackernews@pod.jpope.org)'s status on Monday, 25-Mar-2019 22:12:04 CET Hacker News ( unofficial )
The Adult Brain Does Grow New Neurons After All, Study Says
Study points toward lifelong neuron formation in the human brain's hippocampus, with implications for memory and disease
Article word count: 1086
Posted by Elof (karma: 867)
#HackerNews #adult #after #all #brain #does #grow #neurons #new #says #study #the
If the memory center of the human brain can grow new cells, it might help people recover from depression and post-traumatic stress disorder (PTSD), delay the onset of Alzheimer's, deepen our understanding of epilepsy and offer new insights into memory and learning. If not, well then, it's just one other way people are different from rodents and birds.
For decades, scientists have debated whether the birth of new neurons—called neurogenesis—was possible in an area of the brain that is responsible for learning, memory and mood regulation. A growing body of research suggested they could, but then a [1]Nature paper last year raised doubts.
Now, a new study published today in another of the Nature family of journals—[2]Nature Medicine—tips the balance back toward "yes." In light of the new study, "I would say that there is an overwhelming case for the neurogenesis throughout life in humans," Jonas Frisén, a professor at the Karolinska Institute in Sweden, said in an e-mail. Frisén, who was not involved in the new research, wrote a News and Views about the study in the current issue of Nature Medicine.
Not everyone was convinced. Arturo Alvarez-Buylla was the senior author on last year's Nature paper, which questioned the existence of neurogenesis. Alvarez-Buylla, a professor of neurological surgery at the University of California, San Francisco, says he still doubts that new neurons develop in the brain's hippocampus after toddlerhood.
"I don't think this at all settles things out," he says. "I've been studying adult neurogenesis all my life. I wish I could find a place [in humans] where it does happen convincingly."
For decades, [3]some researchers have thought that the brain circuits of primates—including humans—would be too disrupted by the growth of substantial numbers of new neurons. Alvarez-Buylla says he thinks the scientific debate over the existence of neurogenesis should continue. "Basic knowledge is fundamental. Just knowing whether adult neurons get replaced is a fascinating basic problem," he said.
New technologies that can locate cells in the living brain and measure the cells' individual activity, none of which were used in the Nature Medicine study, may eventually put to rest any lingering questions.
A number of researchers praised the new study as thoughtful and carefully conducted. It's a "technical tour de force," and addresses the concerns raised by last year's paper, says Michael Bonaguidi, an assistant professor at the University of Southern California Keck School of Medicine.
The researchers, from Spain, tested a variety of methods of preserving brain tissue from 58 newly deceased people. They found that different methods of preservation led to different conclusions about whether new neurons could develop in the adult and aging brain.
Brain tissue has to be preserved within a few hours after death, and specific chemicals used to preserve the tissue, or the proteins that identify newly developing cells will be destroyed, said Maria Llorens-Martin, the paper's senior author. Other researchers have missed the presence of these cells, because their brain tissue was not as precisely preserved, says Llorens-Martin, a neuroscientist at the Autonomous University of Madrid in Spain.
Jenny Hsieh, a professor at the University of Texas San Antonio who was not involved in the new research, said the study provides a lesson for all scientists who rely on the generosity of brain donations. "If and when we go and look at something in human postmortem, we have to be very cautious about these technical issues."
Llorens-Martin said she began carefully collecting and preserving brain samples in 2010, when she realized that many brains stored in brain banks were not adequately preserved for this kind of research. In their study, she and her colleagues examined the brains of people who died with their memories intact, and those who died at different stages of Alzheimer's disease. She found that the brains of people with Alzheimer's showed few if any signs of new neurons in the hippocampus—with less signal the further along the people were in the course of the disease. This suggests that the loss of new neurons—if it could be detected in the living brain—would be an early indicator of the onset of Alzheimer's, and that promoting new neuronal growth could delay or prevent the disease that now affects more than 5.5 million Americans.
Rusty Gage, president of the Salk Institute for Biological Studies and a neuroscientist and professor there, says he was impressed by the researchers' attention to detail. "Methodologically, it sets the bar for future studies," says Gage, who was not involved in the new research but was the senior author in 1998 of a [4]paper that found the first evidence for neurogenesis. Gage says this new study addresses the concerns raised by Alvarez-Buylla's research. "From my view, this puts to rest that one blip that occurred," he says. "This paper in a very nice way… systematically evaluates all the issues that we all feel are very important."
Neurogenesis in the hippocampus matters, Gage says, because evidence in animals shows that it is essential for pattern separation, "allowing an animal to distinguish between two events that are closely associated with each other." In people, Gage says, the inability to distinguish between two similar events could explain why patients with PTSD keep reliving the same experiences, even though their circumstances have changed. Also, many deficits seen in the early stages of cognitive decline are similar to those seen in animals whose neurogenesis has been halted, he says.
In healthy animals, neurogenesis promotes resilience in stressful situations, Gage says. Mood disorders, including depression, have also been linked to neurogenesis.
Hsieh says her research on epilepsy has found that newborn neurons get miswired, disrupting brain circuits and causing seizures and potential memory loss. In rodents with epilepsy, if researchers prevent the abnormal growth of new neurons, they prevent seizures, Hsieh says, giving her hope that something similar could someday help human patients. Epilepsy increases someone's risk of Alzheimer's as well as depression and anxiety, she says. "So, it's all connected somehow. We believe that the new neurons play a vital role connecting all of these pieces," Hsieh says.
In mice and rats, researchers can stimulate the growth of new neurons by getting the rodents to exercise more or by providing them with environments that are more cognitively or socially stimulating, Llorens-Martin says. "This could not be applied to advanced stages of Alzheimer's disease. But if we could act at earlier stages where mobility is not yet compromised," she says, "who knows, maybe we could slow down or prevent some of the loss of plasticity [in the brain]."
1. https://www.nature.com/articles/nature25975
2. https://www.nature.com/articles/s41591-019-0375-9
3. https://www.scientificamerican.com/article/does-the-adult-brain-really-grow-new-neurons/
4. https://www.nature.com/articles/nm1198_1313
Human hippocampal neurogenesis drops sharply in children to undetectable levels in adults
from Nature
Recruitment of young neurons to the hippocampus decreases rapidly during the first years of life, and neurogenesis does not continue, or is extremely rare, in the adult human brain.
Adult hippocampal neurogenesis is abundant in neurologically healthy subjects and drops sharply in patients with Alzheimer's disease
from Nature Medicine
Newborn neurons are continuously incorporated into the healthy adult human hippocampus up to the ninth decade of life. However, robust adult hippocampal neurogenesis sharply declines during the progression of Alzheimer's disease.
Does the Adult Brain Really Grow New Neurons?
from Scientific American
A new study stirs up debate over a long-held finding, and could dim hopes for the treatment of neurodegenerative diseases
Neurogenesis in the adult human hippocampus


text:
      
Wardrobe Warrior
Charitable Chic
Get Gorgeous
Monday Motivation Mixes
Inspiration Boards
How She Does It
Video Confessional
My Stylish Friends
Athletic Style
Fitness Diaries
Fitspiration
Kristin Booker
Get Inspired/ How She Does It
Kristin Booker • July 21, 2014
How She Does It: Amber Katz of Rouge 18
    
Amber Katz of Rouge 18 is one of my longest-standing friendships in the blogosphere. Known for her rapid-fire wit and genius manipulation of the English language (she's been known to change our collective lexicons on a regular basis…and we love it,) she is also a million-dollar wealth of knowledge when it comes to the beauty industry. If you want to meet the beauty blogger and writer that most of us turn to when we have a problem, you're looking right at her.
I had a chance to get some of Amber's answers on all things loveliness along with a rather timely subject: melt-proof makeup. From the eyeliner that will save you from unintended mishaps to makeup product storage and why DVF will always have a special place in her wardrobe, this is how Amber does it:
On how to keep from looking molten when the atmosphere feels like mayonnaise…
"The first thing is Bobbi Brown Long-Wear Gel Eyeliner. Honestly, I don' t want to hear about anything else: nothing else works, to be quite honest. There are other things that pretend to work as well, and they're waterproof and better than just regular eyeliner, but, like, I have it on right now and it's not moving. I have really oily eyelids and it slides into the corners so I get this weird imprint like I'm trying to do a 60's thing, but I'm not. It looks like a badly executed Twiggy moment, so I really try to avoid that.
Hourglass Immaculate Liquid Powder Mattifying Oil Free Foundation is really good. I put a layer of it on top of Kate Somerville IllumiKate CC Cream. I love it, and I want to say it comes in a good enough array of colors.
I like Becca Mineral Blush, particularly Gypsy. I used to be very anti-powder blush in the summer, but this blush changed my mind. I go between that and Stila Convertible Color, particularly Fuchsia, a great, hot pink powder blush. I also like Armani Beauty Maestro blush, and they make it in a liquid bronzer, which is absolutely amazing. I feel like a lot of liquid bronzers get eaten by my face, as in they can't be seen, but this one stays on.
I also have really veiny eyelids so I do what I can to cover them up so you can't see my circulatory system, and I live for the Napoleon Perdis Enhancer Multipurpose Highlighter, which I use to cover up my eyelid veins. I think it's actually intended to be a highlighter, and he recommends putting it on your brow bones and nose, but it's great for those uses AND for, you know, covering up the veiny eyelid situation.
I don't wear mascara because I have eyelash extensions, but that's also a great tip for summer tip. I go to Courtney Akai. It takes about two hours, so it's a commitment, but it's only two hours every six weeks and once they're done, you don't have to ever worry about having mascara running down your face. It's an investment, but for about $75 for an hour, you can get one of her associates, and they apply as many as they can in an hour.
I got the Brow Restoration at Browhaus last year, which was life changing, but I also still use NARS Brow Gels. I use the dirty blonde hue and the clear one interchangeably. I also love Anastasia Beverly Hills. Also, Benefit Cosmetics Gimme Brow is a must-have. It's a great product; it gives you more brows than you thought you ever had, and unearth brows that you never thought were part of your life."
On keeping that fantastic mane under sweltering conditions…
"Hair is a big struggle for me this time of year. I just got the Oribe Gold Lust line and it's freaking phenomenal. You don't need to have blonde hair to use it; it's perfect for any kind of dry, processed, damaged hair. I also like the Oribe Maximista Thickening Spray; it's so beautiful and gorgeous. I always apply a thickening spray or a mousse to my roots before blow-drying. I've been doing this since the 90's and I don't understand why everyone doesn't do it. It's like, do you want more hair or don't you? I feel like I look like a duck in the rain otherwise.
I also use It's A 10 Miracle Leave-In Conditioning Spray with Keratin the most, I love Living Proof Satin Hair Serum, and then I alternate between oils by Kerastase and Moroccanoil. I apply it to my ends when my hair is wet. I never put it on my hair when it's dry. I don't know why; I just don't like the feeling of oil on my hair when my hair is dry."
On the joys of product organization….
"The answer on how I keep products organized is that they're barely organized. The stuff I want to try is around my living room like decor. The stuff that's in current rotation is in my bathroom and in Sterilite containers as well as a vanity that sits in my bedroom that holds makeup. Backups of things I know I like are in an Ikea Expedit unit that has drawer pull boxes in them to hold products. I want those shelves all over. They're so good."
On the advantages of alone time…
"I just like to be alone. I have to have some alone time, and I struggle saying no to things when I just need to sit on my couch and watch Orange Is The New Black. Reading magazines and/or binge-watching something is how I pamper myself. Massages and beauty treatments are awesome, don't get me wrong, but because of what I do it's more like work. It doesn't feel as relaxing to me as reading or watching tv."
On her own personal style…
"I like a 60's aesthetic when it comes to beauty, and I guess that translates over to what I wear. I like miniskirts. I like feminine cuts but not overly so. I like smocked anything, I like ruffled anything, but it doesn't necessarily have to be in pink. Pink is okay, I just don't tend to wear many "girly" colors. I tend to wear more green, yellow and grey and I like a lot of gold accents. I come from Russian decent and it's VERY evident.
I don't wear a lot of prints, but I like good solid colors. I also always feel good in DVF. I know if I need something, like a date, I always know that I'll look good in that brand. I also don't subscribe to wearing a ton of different sunglasses; I've worn the same Tom Ford sunglasses for the last five years and I have them in two colors. I'm also that way with bags, but shoes are a different story. Sunglasses and bags are pretty simple for me; I'll keep two in rotation at any given time. I also don't wear a lot of jewelry. I feel like wearing big jewelry makes me look like I'm playing dress up. I wear the same earrings every day of my life and I'm currently in a small gold necklace that will remain in rotation until I get tired of it."
On how to get over your fear of trying something new in your beauty routine…
"Wear it at home first, get comfortable with it. Rock it at home first. Look, makeup is easy and you can take it off in five seconds, so try everything. Devote a Sunday night to trying some things in your possession that you already have, maybe some things you bought on a whim and you aren't sure what to do with them. Wear whatever it is around the house, and then wear it to the movies one night. Don't try something new the night of your New Year's Eve party if you're not 100% about it, but a low-key dinner with your friends is a great way to test something."
On overcoming beauty confidence issues…
"I would say if there's something that's really troubling you, it's most likely something you can change. People claim they have terrible hair and there's nothing they can do about it, but of course you can. You go to a stylist you trust, and if you haven't found one yet, keep asking, because they're out there. If you see a woman who has the hair you want on the street, stop her and ask whom she sees. Find the person who has the thing you want where they go to get it. More often than not, she'll just tell you. People aren't usually that secretive about beauty, which is something I like (even though people are sometimes weirdly secretive about their perfumes, but that's another story.) People are complimented when you like what they're doing and they're usually more than happy to share.
I think that little makeovers are really easy and they don't take a ton of time. Doing things like buying a new lipstick, getting lash extensions: more often than not there's something small you can do that can have a great effect. Self-tanner at home, using a good exfoliant: small things make a great impact in how you feel about yourself. A small amount of research can yield big results: check out the blogs, grab a couple of magazines, ask your friends. The answer's closer than you think."
All photos: Kristin Booker. All rights reserved.
Shop Amber's Picks:
Tagsamber katz, beauty advice, beauty bloggers, interviews, makeup advice, rouge 18, summer hair tips, summer makeup tips
Beauty Confessional: Adele Bernhard Get GorgeousNovember 16, 2016 How She Does It: Body Positivity with Alexis Wolfer Get InspiredApril 25, 2016 Obsession of the Day: Shaveworks Pearl Polish Dual Action Body Oil Get GorgeousJuly 14, 2015
Want more FSB in your life? Sign up for the newsletter (which includes subscriber-only BONUS content) and I'll come straight to your inbox!
© 2014 Fashion. Style. Beauty. | Life is short. Live well.
Where one size truly fits all, where all things beautiful are celebrated.


A pioneering technique to capture a snapshot of time in a single picture has been born in Brighton.
Alex May created an algorithm which tracks the motion in a video, and then puts it together.
William Ranieri went to meet the man behind the idea.


The Brewster Historical Farmers Market opens on Sunday, June 23, 2019, at 9:30 a.m. and runs every Sunday until September 8, 2019. The market runs every Sunday until 12:30 p.m. There is no market on September 1. There is a special Harvest Market on Sunday, October 13, 2019, that runs from 10 a.m. till 2 p.m.
The market features local produce, eggs, baked goods, jams, jellies, artisanal food products, grass-fed beef & pork, herbal products, olive oil, honey and other items.
The market is staged at Drummer Boy Park Windmill Village.


text:
Great Opportunity to Take Spirit of Friendship Forward: Indian PM
Mohali: The prime ministers of India and Pakistan shook hands with the players at Mohali before the India-Pakistan game began. The two PMs are watching the game from the VVIP box, but are expected to exit in a few hours to hold informal talks.
On this occasion, Prime Minister Manmohan Singh said this was a "great opportunity to take spirit of friendship forward." Pakistan's Prime Minister, Yousuf Raza Gilani said he was looking forward to a great game and hoped the best team wins.
A large delegation is accompanying Gilani. His team will use the Taj hotel in Chandigarh as its base. The main players include controversial Interior Minister Rehman Malik, who publicly warned his country's cricket team against match-fixing, provoking fierce criticism both within and outside Pakistan.
Team Singh will include Foreign Secretary Nirupama Rao and National Security Advisor Shiv Shankar Menon. Congress party president Sonia Gandhi, as well as Congress General Secretary Rahul Gandhi are not part of the official delegation but is attending the game and the dinner that Dr Singh is hosting at 7.30 pm tonight for the Pakistani delegation at the stadium.
Related Items:cricket diplomacy, Gilani, India-Pakistan semifinal match at <ohali, Manmohan Singh
Syrian Leader to Address Nation Amid Unrest
House Republicans Introduce Bill to Halt US Operation in Libya


Discussion in 'Mac Apps and Mac App Store' started by swiftaw, Dec 13, 2005.
I have mail.app set up to retrieve my email from my gmail account, but today I got a weird error. See attached.
Happened to me too... just now! I ended up deleting gmail from Apple mail.
Option-drag the certificate to your desktop, double-click it and add it to x509 anchor in Keychain to prevent further pop-ups... yeah right. Didn't work.
Mines good at the moment. Had a scare there that my all my gmail preachings to my friends were about to be wasted.


Last week, two bills were introduced that aim to expand the VA's ability to conduct extensive research on marijuana and its efficacy for veterans dealing with varying health conditions due to their service. The legislation introduced by Representatives Lou Correa and Clay Higgins is already gaining support.
This bill would allow a clinical trial to take place regarding marijuana and health outcomes of specific medical conditions, Military Times reports. A couple of those conditions would be PTSD and chronic pain – two of the most common issues challenging veterans and active military members.
A survey conducted by Iran and Afghanistan Veterans of America (IAVA) found that 63% of the members support medical marijuana.
"With the opioid crisis raging across America, it is imperative to the health and safety of our veterans that we find alternative treatments for chronic pain and service-related injuries. It's time the VA did a formal study," Rep. Correa stated.
The debate is expected to begin in the next few weeks within the House Veterans' Affairs Committee regarding both pieces of legislation.


text:
Tag: Games
Donkey Kong 3 finally available outside Japan… but you can't play as Mario
Benjamin Bullard
Tag: Donkey Kong
It only took 33 years, but people who don't mind firing up some emulation software for a trip down memory lane can at last hop and bop with abandon through one of Nintendo's most cloistered early Donkey Kong games, which until recently had been confined only to 1980s-era Japanese personal computers.
Unless you've had access to a very specific type of computer sold in Japan back in the day — as well as a Nintendo-licensed, Japan-only copy of Hudson Soft's Donkey Kong 3: Dai Gyakushuu — you'd definitely be forgiven for not knowing that original series protagonist Mario, who debuted with the original arcade game in 1981, is nowhere to be found here.
But, thanks to the efforts of a fan group who won an auction for a Donkey Kong 3 diskette late in 2017, you can now install the required emulation software and step into the platforming shoes of... Stanley the Bugman?
Yes, Stanley is DK3's main man for the PC-licensed installment. Just don't confuse it with the more familiar Donkey Kong 3 arcade game, even though the quarter-gobbling version also featured Stanley. Unlike the arcade game, the home version of DK3 has swaths of gameplay that feel a whole lot more like Space Invaders or Galaga than a platforming game with jump physics and multidirectional controls.
Video of Donkey Kong 3: Dai Gyakushuu has been dumped! Let's take a look! (X1 Version)
Nintendo Era on YouTube
As for the earlier (and later) games' broadly-told plot of princesses and castles, well, you'll need to fill in the blanks here. According to one of the game diskette's buyers, who uses the handle "famicomical," the story that ties the game's 20 stages together is intentionally not well defined, because "Hudson was interested in hearing the players' interpretations about the progression of the stages, and wanted them to send in their own stories."
Kind of like an early RPG in reverse gear, then? Judging from the footage, that's probably an ambitious way to look at it — but hey, we can't be totally sure until we've played it, right?
If you're interested in the super-detailed account of how this all came together, head over to famicomical's post and learn more than you may ever care to know about what it took to convert this rare Nintendo artifact into a game that's playable, in 2018, on a PC you probably own.
Video of 7 Essential SNES Classic Games | SYFY WIRE


So Asma was 14 in the year of the call to prophethoodof Prophet Muhammad (PBUH) and she was 10 years older than Aisha, so Aisha was four years old in the year of thecall to prophethoodof prophet Muhammad (PBUH), and she was 17 in the thirteenth year after the call to prophethood(at the time of her marriage with the Prophet (PBUH) and she was 19 in the month of Shawwal of the second year after Hegira (her entrance to the house of Prophet Muhammad (PBUH)).
On the other hand, Asma was 100 years old in 73 H. so she was 27 years old in the first year after Hegira.
Asma was 10 years older than Aisha, so Lady Aisha was 17 years old in that time.
So Aisha was 17 years old in the first year after Hegira. We previously proved that the Prophet (PBUH) married her in the second year after Hegira; It means that Aisha was 19 years old when she married the Prophet (PBUH).
In which year did Aishaconverted to Islam?
Another way to calculate the age of Aisha when she married the Prophet (PBUH) indicates the year in which she converted to Islam. According to great scholars of Sunnis, Aisha believed in Islam in the first year after the call to prophethoodand she was among the first 18 people who accepted the call to the Prophet (PBUH).
Ibn-Hisham names Aisha among the people who converted to Islam in the first year after the call to prophethood, while she was a child.
If Aisha was 7 years old (in the first year after the call to prophethood), so he would be 22 in the 2nd year after Hegira (when she entered the house of the Prophet(PBUH)).
If we accept the word of Baladharithat Aisha married the Prophet (PBUH) four years after the marriage of Prophet Muhammad (PBUH) with Lady Suda, i.e. the year 4 H., hence Aisha was 24 years old when she married the Prophet (PBUH).
This figure may change according to the age of Aisha when she converted to Islam.
Thus, the marriage of Aisha with Prophet Muhammad (PBUH) in the age of 6 or 9 is just a lie fabricated by Umayyids and does not correspond with historical facts.
Al-Asqalani al-Shafei, Ahmad-ibn-Ali-ibn-HajarAbulfadhl (D. 852), "Taqrib-al-Tadhhib", Vol. 1, p. 743, edited by Muhammad Awwama, Dar-al-Rashid-Syria Publication, First publication, 1986.
Al-Asqalani al-Shafei, Ahmad-ibn-Ali-ibn-HajarAbulfadhl (D. 852), "al-Isaba fi-al-Tamyiz –al Sahaba", Vol. 7, p. 487, edited by Ali Muhammad Elijawi, Dar-al-Jail Beirut Publication, First publication, 1992.
Al-Namri al-Qurtubi, Abu Umar Yusuf-ibn-Abdullah-ibn-Abd-al-Bar, (D. 463 H.), "The Comprehensive Compilation of the Names of the Prophet's Companions", Vol. 4, pp. 1782-1783, edited by Ali Muhammad Elijawi, Dar-al-Jail Beirut Publication, First publication, 1412 H.
Al-Safadi, Salah-al-ddinKalil-ibn-Eibek (D. 764 H.), "Al-Wafi bi al Wafiat", Vol. 9, p. 36, edited by Ahmad al-Irnaout and Turki Mustafa, Dar Ihyar al-Turath Publication, Beirut, 2000.
Al-Bayhaqi, Ahmad-ibn-al-Husain-ibn-Ali-ibn-Musa Abu-Bakr (D. 458 H.), "Al-Sunan al-Kubra", Vol. 6, p. 204, Maktiba Dar al-Baz Publication – Holy Mecca, edited by Muhammad Abdulqadi Ata, 1994.
Al-dhahabi, Shams-al-ddin Muhammad –ibn-Ahmad-ibn-Uthman, (D. 748 H.), "The Lives of Noble Figures", Vol. 2, p. 289, edited by Shuaib al-Irnaout, Muhammad No'aymal-Arqasusi, al-Risala institute Publication, Beirut, Ninth publication, 1413 H.
Ibn Asakir al-Damishqi al-Shafei, abi-al-Ghasim Ali-ibn-al-Hassan-ibn-al-Hibatullah-ibn-Abdullah, (D. 571 H.), "The History of Damascus and its Merits", edited by Muhab-al-ddinabi-Saeed Umar-ibn-Karama al-Umari, Dar-ul-Fikr Publication, Beirut, 1995.
Ibn-Kathir al-Damishqi, Ismail-ibn-Umar al-Qurashiabu-al-Fidhaa, "The Beginning and the End", Vol. 8, pp. 345,346, Maktiba –al-Maaraf Publication -Beirut.
Mulla Ali al-Qari, Ali-ibn-Sultan Muhammad al-Hiravi, "Mirqat-al-MafatihSharhMishkat al-Masabih", Vol. 1, p. 331, editedby Jamal Eitani, Dar-al-Kutub al-Elmia Publication – Lebanon/Beirut, First publication, 2001.
Al-Sanaani, Muhammad-ibn-Ismail (D. 852 H.), Subul-al-Salam SharhBulugh al-Maram min Adillat-ul-Ahkam", Vol. 1, p. 39, edited by Muhammad AbdulAziz al-Khuli, Dar Ihya al-Turath al-Arabi Publication – Beirut, Fourth publication, 1379 H.
Al-Nawawi, Abu-ZakariaYahya-ibn-Sharif-ibn-Marri, (D. 676 H.), "Tahdhib-al-Asmawal-Lughat", Vol. 2, p. 615, Dar-la-Nashr – Beirut, First publication, 1996.
Al-Mughadasi, Mutahhar-ibn-Tahir (D. 507 H.), "Al-Bad'e v-al-Tarikh", Vol. 4, p. 146, Maktiba al-Thiqafat Publication –al-Diniah – Bur Saeed.
Al-Hamirial-Muafiri, Abdul-Malik-ibn-Hisham-ibn-Ayubabu-Muhammad (D. 213 H.), "Al-Sirah al-Nabawwiah", Vol. 2, p. 92, edited by AbdurraufSaad, Dar-al-Jail Publication, First publication, Beirut, 1411 H.


The ProSightPC application is a suite of tools designed to identify and characterize proteins and peptides from tandem mass spectrometry analysis of intact proteoforms. Users with permanent ProSightPC 3 licenses can upgrade to ProSightPC 4.0 for free and should use this license key: 7U33-1M9H-BFBD-LF17 If you do not have a permanent ProSightPC 3 license, and would like a 60 day demo license, please contact us.
Supports searching top down, middle down and bottom up experiments.
Compatible with CID, ECD, EThcD, HCD, IRMPD and UVPD fragmentation types.
Provides five different searches: Absolute Mass, BioMarker, Sequence Tag, Single Protein and Gene Restricted.
Utilizes Delta-M Mode for identifying unexpected modifications.
Includes three scoring metrics: P-Score, E-Value and C-Score.
Creates SQLite pscw databases based on UniProt formatted FASTA, text and XML files.
Databases created using UniProt formatted text and XML files contain annotated PTMs and SNPs.
Lightweight pscw databases are easy to create and share.
Support for high-throughput LC-MS/MS experiments.
Includes Sequence Gazer: allowing users to review results and add, remove, or change modifications to find better fits.
Directly connects to ProSight Lite.