text:
/*-------------------------------------------------------------------------
 *
 * Created:		H5Gtraverse.c
 *			Sep 13 2005
 *			Quincey Koziol <koziol@ncsa.uiuc.edu>
 *
 * Purpose:		Functions for traversing group hierarchy
 *
 *-------------------------------------------------------------------------
 */

/****************/
/* Module Setup */
/****************/

#include "H5Gmodule.h"          /* This source code file is part of the H5G module */

/***********/
/* Headers */
/***********/
#include "H5private.h"		/* Generic Functions			*/
#include "H5CXprivate.h"        /* API Contexts                         */
#include "H5Dprivate.h"         /* Datasets                             */
#include "H5Eprivate.h"		/* Error handling		  	*/
#include "H5Fprivate.h"		/* File access				*/
#include "H5Gpkg.h"		/* Groups		  		*/
#include "H5HLprivate.h"	/* Local Heaps				*/
#include "H5Iprivate.h"		/* IDs					*/
#include "H5Lprivate.h"		/* Links				*/
#include "H5MMprivate.h"	/* Memory management			*/
#include "H5Ppublic.h"		/* Property Lists			*/
#include "H5WBprivate.h"        /* Wrapped Buffers                      */

/****************/
/* Local Macros */
/****************/

/******************/
/* Local Typedefs */
/******************/

/* User data for path traversal routine */
typedef struct {
    /* down */
    hbool_t chk_exists;         /* Flag to indicate we are checking if object exists */

    /* up */
    H5G_loc_t *obj_loc;         /* Object location */
    hbool_t exists;             /* Indicate if object exists */
} H5G_trav_slink_t;

/********************/
/* Package Typedefs */
/********************/

/********************/
/* Local Prototypes */
/********************/
static herr_t H5G__traverse_slink_cb(H5G_loc_t *grp_loc, const char *name,
    const H5O_link_t *lnk, H5G_loc_t *obj_loc, void *_udata/*in,out*/,
    H5G_own_loc_t *own_loc/*out*/);
static herr_t H5G__traverse_ud(const H5G_loc_t *grp_loc, const H5O_link_t *lnk,
    H5G_loc_t *obj_loc/*in,out*/, unsigned target, hbool_t *obj_exists);
static herr_t H5G__traverse_slink(const H5G_loc_t *grp_loc, const H5O_link_t *lnk,
    H5G_loc_t *obj_loc/*in,out*/, unsigned target, hbool_t *obj_exists);
static herr_t H5G__traverse_real(const H5G_loc_t *loc, const char *name,
    unsigned target, H5G_traverse_t op, void *op_data);

/*********************/
/* Package Variables */
/*********************/

/*****************************/
/* Library Private Variables */
/*****************************/

/*******************/
/* Local Variables */
/*******************/

/*-------------------------------------------------------------------------
 * Function:	H5G__traverse_slink_cb
 *
 * Purpose:	Callback for soft link traversal.  This routine sets the
 *              correct information for the object location.
 *
 * Return:	Non-negative on success/Negative on failure
 *
 * Programmer:	Quincey Koziol
 *              Tuesday, September 13, 2005
 *
 *-------------------------------------------------------------------------
 */
static herr_t
H5G__traverse_slink_cb(H5G_loc_t H5_ATTR_UNUSED *grp_loc, const char H5_ATTR_UNUSED *name,
    const H5O_link_t H5_ATTR_UNUSED *lnk, H5G_loc_t *obj_loc, void *_udata/*in,out*/,
    H5G_own_loc_t *own_loc/*out*/)
{
    H5G_trav_slink_t *udata = (H5G_trav_slink_t *)_udata;   /* User data passed in */
    herr_t ret_value = SUCCEED;         /* Return value */

    FUNC_ENTER_STATIC

    /* Check for dangling soft link */
    if(obj_loc == NULL) {
        if(udata->chk_exists)
            udata->exists = FALSE;
        else
            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "component not found")
    } /* end if */
    else {
        /* Copy new location information for resolved object */
        H5O_loc_copy(udata->obj_loc->oloc, obj_loc->oloc, H5_COPY_DEEP);

        /* Indicate that the object exists */
        udata->exists = TRUE;
    } /* end else */

done:
    /* Indicate that this callback didn't take ownership of the group *
     * location for the object */
    *own_loc = H5G_OWN_NONE;

    FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G__traverse_slink_cb() */

/*-------------------------------------------------------------------------
 * Function:	H5G__traverse_ud
 *
 * Purpose:	Callback for user-defined link traversal.  Sets up a
 *              location ID and passes it to the user traversal callback.
 *
 * Return:	Non-negative on success/Negative on failure
 *
 * Programmer:	Quincey Koziol
 *              Tuesday, September 13, 2005
 *
 *-------------------------------------------------------------------------
 */
static herr_t
H5G__traverse_ud(const H5G_loc_t *grp_loc/*in,out*/, const H5O_link_t *lnk,
    H5G_loc_t *obj_loc/*in,out*/, unsigned target, hbool_t *obj_exists)
{
    const H5L_class_t   *link_class;       /* User-defined link class */
    hid_t               cb_return = -1;         /* The ID the user-defined callback returned */
    H5G_loc_t           grp_loc_copy;
    H5G_name_t          grp_path_copy;
    H5O_loc_t           grp_oloc_copy;
    H5G_loc_t           new_loc;                /* Group location for newly opened external object */
    H5G_t              *grp;
    hid_t               cur_grp = (-1);
    herr_t              ret_value = SUCCEED;    /* Return value */

    FUNC_ENTER_STATIC

    /* Sanity check */
    HDassert(grp_loc);
    HDassert(lnk);
    HDassert(lnk->type >= H5L_TYPE_UD_MIN);
    HDassert(obj_loc);

    /* Get the link class for this type of link. */
    if(NULL == (link_class = H5L_find_class(lnk->type)))
        HGOTO_ERROR(H5E_SYM, H5E_NOTREGISTERED, FAIL, "unable to get UD link class")

    /* Set up location for user-defined callback.  Use a copy of our current
     * grp_loc. */
    grp_loc_copy.path = &grp_path_copy;
    grp_loc_copy.oloc = &grp_oloc_copy;
    H5G_loc_reset(&grp_loc_copy);
    if(H5G_loc_copy(&grp_loc_copy, grp_loc, H5_COPY_DEEP) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_CANTCOPY, FAIL, "unable to copy object location")

    /* Create a group ID to pass to the user-defined callback */
    if(NULL == (grp = H5G_open(&grp_loc_copy)))
        HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open group")
    if((cur_grp = H5I_register(H5I_GROUP, grp, FALSE)) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_CANTREGISTER, FAIL, "unable to register group")

    /* User-defined callback function */
    /* (Backwardly compatible with v0 H5L_class_t traverssal callback) */
    if(link_class->version == H5L_LINK_CLASS_T_VERS_0)
        cb_return = (((const H5L_class_0_t *)link_class)->trav_func)(lnk->name, cur_grp, lnk->u.ud.udata, lnk->u.ud.size, H5CX_get_lapl());
    else
        cb_return = (link_class->trav_func)(lnk->name, cur_grp, lnk->u.ud.udata, lnk->u.ud.size, H5CX_get_lapl(), H5CX_get_dxpl());

    /* Check for failing to locate the object */
    if(cb_return < 0) {
        /* Check if we just needed to know if the object exists */
        if(target & H5G_TARGET_EXISTS) {
            /* Clear any errors from the stack */
            H5E_clear_stack(NULL);

            /* Indicate that the object doesn't exist */
            *obj_exists = FALSE;

            /* Get out now */
            HGOTO_DONE(SUCCEED);
        } /* end if */
        /* else, we really needed to open the object */
        else
            HGOTO_ERROR(H5E_SYM, H5E_BADATOM, FAIL, "traversal callback returned invalid ID")
    } /* end if */

    /* Get the object location information from the ID the user callback returned */
    if(H5G_loc(cb_return, &new_loc) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, FAIL, "unable to get object location from ID")

    /* Release any previous location information for the object */
    H5G_loc_free(obj_loc);

    /* Copy new object's location information */
    H5G_loc_copy(obj_loc, &new_loc, H5_COPY_DEEP);

    /* Hold the file open until we free this object header (otherwise the
     * object location will be invalidated when the file closes).
     */
    if(H5O_loc_hold_file(obj_loc->oloc) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to hold file open")

    /* We have a copy of the location and we're holding the file open.
     * Close the open ID the user passed back.
     */
    if(H5I_dec_ref(cb_return) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to close atom from UD callback")
    cb_return = (hid_t)(-1);

done:
    /* Close location given to callback. */
    if(cur_grp > 0 && H5I_dec_ref(cur_grp) < 0)
        HDONE_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to close atom for current location")

    if(ret_value < 0 && cb_return > 0 && H5I_dec_ref(cb_return) < 0)
        HDONE_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to close atom from UD callback")

    FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G__traverse_ud() */

/*-------------------------------------------------------------------------
 * Function:	H5G__traverse_slink
 *
 * Purpose:	Traverses symbolic link.  The link head appears in the group
 *		whose entry is GRP_LOC and the link tail entry is OBJ_LOC.
 *
 * Return:	Success:	Non-negative, OBJ_LOC will contain information
 *				about the object to which the link points
 *
 *		Failure:	Negative
 *
 * Programmer:	Robb Matzke
 *              Friday, April 10, 1998
 *
 *-------------------------------------------------------------------------
 */
static herr_t
H5G__traverse_slink(const H5G_loc_t *grp_loc, const H5O_link_t *lnk,
    H5G_loc_t *obj_loc/*in,out*/, unsigned target, hbool_t *obj_exists)
{
    H5G_trav_slink_t      udata;                  /* User data to pass to link traversal callback */
    H5G_name_t          tmp_obj_path;           /* Temporary copy of object's path */
    hbool_t             tmp_obj_path_set = FALSE;       /* Flag to indicate that tmp object path is initialized */
    H5O_loc_t           tmp_grp_oloc;           /* Temporary copy of group entry */
    H5G_name_t          tmp_grp_path;           /* Temporary copy of group's path */
    H5G_loc_t           tmp_grp_loc;            /* Temporary copy of group's location */
    hbool_t             tmp_grp_loc_set = FALSE;       /* Flag to indicate that tmp group location is initialized */
    herr_t              ret_value = SUCCEED;    /* Return value */

    FUNC_ENTER_STATIC

    /* Sanity check */
    HDassert(grp_loc);
    HDassert(lnk);
    HDassert(lnk->type == H5L_TYPE_SOFT);

    /* Set up temporary location */
    tmp_grp_loc.oloc = &tmp_grp_oloc;
    tmp_grp_loc.path = &tmp_grp_path;

    /* Portably initialize the temporary objects */
    H5G_loc_reset(&tmp_grp_loc);
    H5G_name_reset(&tmp_obj_path);

    /* Clone the group location, so we can track the names properly */
    /* ("tracking the names properly" means to ignore the effects of the
     *  link traversal on the object's & group's paths - QAK)
     */
    H5G_loc_copy(&tmp_grp_loc, grp_loc, H5_COPY_DEEP);
    tmp_grp_loc_set = TRUE;

    /* Hold the object's group hier. path to restore later */
    /* (Part of "tracking the names properly") */
    H5G_name_copy(&tmp_obj_path, obj_loc->path, H5_COPY_SHALLOW);
    tmp_obj_path_set = TRUE;

    /* Set up user data for traversal callback */
    udata.chk_exists = (target & H5G_TARGET_EXISTS) ? TRUE : FALSE;
    udata.exists = FALSE;
    udata.obj_loc = obj_loc;

    /* Traverse the link */
    if(H5G__traverse_real(&tmp_grp_loc, lnk->u.soft.name, target, H5G__traverse_slink_cb, &udata) < 0)
	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to follow symbolic link")

    /* Pass back information about whether the object exists */
    *obj_exists = udata.exists;

done:
    /* Restore object's group hier. path */
    if(tmp_obj_path_set) {
        H5G_name_free(obj_loc->path);
        H5G_name_copy(obj_loc->path, &tmp_obj_path, H5_COPY_SHALLOW);
    } /* end if */

    /* Release cloned copy of group location */
    if(tmp_grp_loc_set)
        H5G_loc_free(&tmp_grp_loc);

    FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G__traverse_slink() */

/*-------------------------------------------------------------------------
 * Function:	H5G__traverse_special
 *
 * Purpose:	Handle traversing special link situations
 *
 * Return:	Non-negative on success/Negative on failure
 *
 * Programmer:	Quincey Koziol
 *		koziol@hdfgroup.org
 *		Nov 20 2006
 *
 *-------------------------------------------------------------------------
 */
herr_t
H5G__traverse_special(const H5G_loc_t *grp_loc, const H5O_link_t *lnk,
    unsigned target, hbool_t last_comp, H5G_loc_t *obj_loc,
    hbool_t *obj_exists)
{
    size_t nlinks;                      /* # of soft / UD links left to traverse */
    herr_t ret_value = SUCCEED;         /* Return value */

    FUNC_ENTER_PACKAGE

    /* Sanity check */
    HDassert(grp_loc);
    HDassert(lnk);
    HDassert(obj_loc);

    /*
     * If we found a symbolic link then we should follow it.  But if this
     * is the last component of the name and the H5G_TARGET_SLINK bit of
     * TARGET is set then we don't follow it.
     */
    if(H5L_TYPE_SOFT == lnk->type &&
            (0 == (target & H5G_TARGET_SLINK) || !last_comp)) {
        /* Get the # of soft / UD links left to traverse */
        if(H5CX_get_nlinks(&nlinks) < 0)
            HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to retrieve # of soft / UD links to traverse")

        /* Decrement # of links and range check */
        if((nlinks)-- <= 0)
            HGOTO_ERROR(H5E_LINK, H5E_NLINKS, FAIL, "too many links")

        /* Update the # of links in the API context */
        if(H5CX_set_nlinks(nlinks) < 0)
            HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't update # of soft / UD links to traverse")

        /* Traverse soft link */
        if(H5G__traverse_slink(grp_loc, lnk, obj_loc, (target & H5G_TARGET_EXISTS), obj_exists) < 0)
            HGOTO_ERROR(H5E_LINK, H5E_TRAVERSE, FAIL, "symbolic link traversal failed")
    } /* end if */

    /*
     * If we found a user-defined link then we should follow it.  But if this
     * is the last component of the name and the H5G_TARGET_UDLINK bit of
     * TARGET is set then we don't follow it.
     */
    if(lnk->type >= H5L_TYPE_UD_MIN &&
            (0 == (target & H5G_TARGET_UDLINK) || !last_comp) ) {
        /* Get the # of soft / UD links left to traverse */
        if(H5CX_get_nlinks(&nlinks) < 0)
            HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to retrieve # of soft / UD links to traverse")

        /* Decrement # of links and range check */
        if((nlinks)-- <= 0)
            HGOTO_ERROR(H5E_LINK, H5E_NLINKS, FAIL, "too many links")

        /* Update the # of links in the API context */
        if(H5CX_set_nlinks(nlinks) < 0)
            HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't update # of soft / UD links to traverse")

        /* Traverse user-defined link */
        if(H5G__traverse_ud(grp_loc, lnk, obj_loc, (target & H5G_TARGET_EXISTS), obj_exists) < 0)
            HGOTO_ERROR(H5E_LINK, H5E_TRAVERSE, FAIL, "user-defined link traversal failed")
    } /* end if */

    /*
     * Resolve mount points to the mounted group.  Do not do this step if
     * the H5G_TARGET_MOUNT bit of TARGET is set and this is the last
     * component of the name.
     *
     * (If this link is a hard link, try to perform mount point traversal)
     *
     * (Note that the soft and external link traversal above can change
     *  the status of the object (into a hard link), so don't use an 'else'
     *  statement here. -QAK)
     */
    if(H5F_addr_defined(obj_loc->oloc->addr) &&
            (0 == (target & H5G_TARGET_MOUNT) || !last_comp)) {
        if(H5F_traverse_mount(obj_loc->oloc/*in,out*/) < 0)
            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "mount point traversal failed")
    } /* end if */

    /* If the grp_loc is the only thing holding an external file open
     * and obj_loc is in the same file, obj_loc should also hold the
     * file open so that closing the grp_loc doesn't close the file.
     */
    if(grp_loc->oloc->holding_file && grp_loc->oloc->file == obj_loc->oloc->file)
        if(H5O_loc_hold_file(obj_loc->oloc) < 0)
            HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to hold file open")

done:
    FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G__traverse_special() */

/*-------------------------------------------------------------------------
 * Function:	H5G__traverse_real
 *
 * Purpose:	Internal version of path traversal routine
 *
 * Return:	Success:	Non-negative if name can be fully resolved.
 *
 *		Failure:	Negative if the name could not be fully
 *				resolved.
 *
 * Programmer:	Robb Matzke
 *		matzke@llnl.gov
 *		Aug 11 1997
 *
 *-------------------------------------------------------------------------
 */
static herr_t
H5G__traverse_real(const H5G_loc_t *_loc, const char *name, unsigned target,
    H5G_traverse_t op, void *op_data)
{
    H5G_loc_t           loc;            /* Location of start object     */
    H5O_loc_t           grp_oloc;	/* Object loc. for current group */
    H5G_name_t		grp_path;	/* Path for current group	*/
    H5G_loc_t           grp_loc;        /* Location of group            */
    H5O_loc_t		obj_oloc;	/* Object found			*/
    H5G_name_t		obj_path;	/* Path for object found	*/
    H5G_loc_t           obj_loc;        /* Location of object           */
    size_t		nchars;		/* component name length	*/
    H5O_link_t          lnk;            /* Link information for object  */
    hbool_t link_valid = FALSE;         /* Flag to indicate that the link information is valid */
    hbool_t obj_loc_valid = FALSE;      /* Flag to indicate that the object location is valid */
    H5G_own_loc_t own_loc = H5G_OWN_NONE; /* Enum to indicate whether callback took ownership of locations*/
    hbool_t group_copy = FALSE;         /* Flag to indicate that the group entry is copied */
    char                comp_buf[1024];     /* Temporary buffer for path components */
    char                *comp;          /* Pointer to buffer for path components */
    H5WB_t              *wb = NULL;     /* Wrapped buffer for temporary buffer */
    hbool_t last_comp = FALSE;          /* Flag to indicate that a component is the last component in the name */
    herr_t              ret_value = SUCCEED;       /* Return value */

    FUNC_ENTER_STATIC

    /* Check parameters */
    HDassert(_loc);
    HDassert(name);
    HDassert(op);

    /*
     * Where does the searching start?  For absolute names it starts at the
     * root of the file; for relative names it starts at CWG.
     */
    /* Check if we need to get the root group's entry */
    if('/' == *name) {
        H5G_t *root_grp;         /* Temporary pointer to root group of file */

        /* Look up root group for starting location */
        root_grp = H5G_rootof(_loc->oloc->file);
        HDassert(root_grp);

        /* Set the location entry to the root group's info */
        loc.oloc = &(root_grp->oloc);
        loc.path = &(root_grp->path);
    } /* end if */
    else {
        loc.oloc = _loc->oloc;
        loc.path = _loc->path;
    } /* end else */

    /* Set up group & object locations */
    grp_loc.oloc = &grp_oloc;
    grp_loc.path = &grp_path;
    obj_loc.oloc = &obj_oloc;
    obj_loc.path = &obj_path;

#if defined(H5_USING_MEMCHECKER) || !defined(NDEBUG)
    /* Clear group location */
    if(H5G_loc_reset(&grp_loc) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to reset location")
#endif /* H5_USING_MEMCHECKER */

    /* Deep copy of the starting location to group location */
    if(H5G_loc_copy(&grp_loc, &loc, H5_COPY_DEEP) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to copy location")
    group_copy = TRUE;

    /* Clear object location */
    if(H5G_loc_reset(&obj_loc) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to reset location")

    /* Wrap the local buffer for serialized header info */
    if(NULL == (wb = H5WB_wrap(comp_buf, sizeof(comp_buf))))
        HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't wrap buffer")

    /* Get a pointer to a buffer that's large enough  */
    if(NULL == (comp = (char *)H5WB_actual(wb, (HDstrlen(name) + 1))))
        HGOTO_ERROR(H5E_SYM, H5E_NOSPACE, FAIL, "can't get actual buffer")

    /* Traverse the path */
    while((name = H5G__component(name, &nchars)) && *name) {
        const char *s;                  /* Temporary string pointer */
        htri_t lookup_status;           /* Status from object lookup */
        hbool_t obj_exists;             /* Whether the object exists */

	/*
	 * Copy the component name into a null-terminated buffer so
	 * we can pass it down to the other symbol table functions.
	 */
	HDmemcpy(comp, name, nchars);
	comp[nchars] = '\0';

	/*
	 * The special name `.' is a no-op.
	 */
	if('.' == comp[0] && !comp[1]) {
	    name += nchars;
	    continue;
	} /* end if */

        /* Check if this is the last component of the name */
        if(!((s = H5G__component(name + nchars, NULL)) && *s))
            last_comp = TRUE;

        /* If there's valid information in the link, reset it */
        if(link_valid) {
            H5O_msg_reset(H5O_LINK_ID, &lnk);
            link_valid = FALSE;
        } /* end if */

        /* Get information for object in current group */
        if((lookup_status = H5G__obj_lookup(grp_loc.oloc, comp, &lnk/*out*/)) < 0)
            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "can't look up component")
        obj_exists = FALSE;

        /* If the lookup was OK, build object location and traverse special links, etc. */
        if(lookup_status) {
            /* Sanity check link and indicate it's valid */
            HDassert(lnk.type >= H5L_TYPE_HARD);
            HDassert(!HDstrcmp(comp, lnk.name));
            link_valid = TRUE;

            /* Build object location from the link */
            if(H5G__link_to_loc(&grp_loc, &lnk, &obj_loc) < 0)
                HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "cannot initialize object location")
            obj_loc_valid = TRUE;

            /* Assume object exists */
            obj_exists = TRUE;

            /* Perform any special traversals that the link needs */
            /* (soft links, user-defined links, file mounting, etc.) */
            if(H5G__traverse_special(&grp_loc, &lnk, target, last_comp, &obj_loc, &obj_exists) < 0)
                HGOTO_ERROR(H5E_LINK, H5E_TRAVERSE, FAIL, "special link traversal failed")
        } /* end if */

        /* Check for last component in name provided */
        if(last_comp) {
            H5O_link_t         *cb_lnk;    /* Pointer to link info for callback */
            H5G_loc_t          *cb_loc;    /* Pointer to object location for callback */

            /* Set callback parameters appropriately, based on link being found */
            if(lookup_status) {
                cb_lnk = &lnk;
                if(obj_exists)
                    cb_loc = &obj_loc;
                else
                    cb_loc = NULL;
            } /* end if */
            else {
                HDassert(!obj_loc_valid);
                cb_lnk = NULL;
                cb_loc = NULL;
            } /* end else */

            /* Call 'operator' routine */
            if((op)(&grp_loc, comp, cb_lnk, cb_loc, op_data, &own_loc) < 0)
                HGOTO_ERROR(H5E_SYM, H5E_CALLBACK, FAIL, "traversal operator failed")

            HGOTO_DONE(SUCCEED)
        } /* end if */

        /* Handle lookup failures now */
        if(!lookup_status) {
            /* If an intermediate group doesn't exist & flag is set, create the group */
            if(target & H5G_CRT_INTMD_GROUP) {
                const H5O_ginfo_t def_ginfo = H5G_CRT_GROUP_INFO_DEF;   /* Default group info settings */
                const H5O_linfo_t def_linfo = H5G_CRT_LINK_INFO_DEF;    /* Default link info settings */
                const H5O_pline_t def_pline = H5O_CRT_PIPELINE_DEF;     /* Default filter pipeline settings */
                H5O_ginfo_t	par_ginfo;	/* Group info settings for parent group */
                H5O_linfo_t	par_linfo;	/* Link info settings for parent group */
                H5O_pline_t	par_pline;	/* Filter pipeline settings for parent group */
                H5O_linfo_t	tmp_linfo;	/* Temporary link info settings */
                htri_t          exists;         /* Whether a group or link info message exists */
                const H5O_ginfo_t *ginfo;	/* Group info settings for new group */
                const H5O_linfo_t *linfo;	/* Link info settings for new group */
                const H5O_pline_t *pline;	/* Filter pipeline settings for new group */
                H5G_obj_create_t gcrt_info;     /* Group creation info */

                /* Check for the parent group having a group info message */
                /* (OK if not found) */
                if((exists = H5O_msg_exists(grp_loc.oloc, H5O_GINFO_ID)) < 0)
                    HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to read object header")
                if(exists) {
                    /* Get the group info for parent group */
                    if(NULL == H5O_msg_read(grp_loc.oloc, H5O_GINFO_ID, &par_ginfo))
                        HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "group info message not present")

                    /* Use parent group info settings */
                    ginfo = &par_ginfo;
                } /* end if */
                else
                    /* Use default group info settings */
                    ginfo = &def_ginfo;

                /* Check for the parent group having a link info message */
                /* (OK if not found) */
                /* Get the link info for parent group */
                if((exists = H5G__obj_get_linfo(grp_loc.oloc, &par_linfo)) < 0)
                    HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to read object header")
                if(exists) {
                    /* Only keep the creation order information from the parent
                     *  group's link info
                     */
                    HDmemcpy(&tmp_linfo, &def_linfo, sizeof(H5O_linfo_t));
                    tmp_linfo.track_corder = par_linfo.track_corder;
                    tmp_linfo.index_corder = par_linfo.index_corder;
                    linfo = &tmp_linfo;
                } /* end if */
                else
                    /* Use default link info settings */
                    linfo = &def_linfo;

                /* Check for the parent group having a filter pipeline message */
                /* (OK if not found) */
                if((exists = H5O_msg_exists(grp_loc.oloc, H5O_PLINE_ID)) < 0)
                    HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to read object header")
                if(exists) {
                    /* Get the filter pipeline for parent group */
                    if(NULL == H5O_msg_read(grp_loc.oloc, H5O_PLINE_ID, &par_pline))
                        HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "filter pipeline message not present")

                    /* Use parent filter pipeline settings */
                    pline = &par_pline;
                } /* end if */
                else
                    /* Use default filter pipeline settings */
                    pline = &def_pline;

                /* Create the intermediate group */
/* XXX: Should we allow user to control the group creation params here? -QAK */
                gcrt_info.gcpl_id = H5P_GROUP_CREATE_DEFAULT;
                gcrt_info.cache_type = H5G_NOTHING_CACHED;
                HDmemset(&gcrt_info.cache, 0, sizeof(gcrt_info.cache));
                if(H5G__obj_create_real(grp_oloc.file, ginfo, linfo, pline, &gcrt_info, obj_loc.oloc/*out*/) < 0)
                    HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to create group entry")

                /* Insert new group into current group's symbol table */
                if(H5G__loc_insert(&grp_loc, comp, &obj_loc, H5O_TYPE_GROUP, &gcrt_info) < 0)
                    HGOTO_ERROR(H5E_SYM, H5E_CANTINSERT, FAIL, "unable to insert intermediate group")

                /* Decrement refcount on intermediate group's object header in memory */
                if(H5O_dec_rc_by_loc(obj_loc.oloc) < 0)
                    HGOTO_ERROR(H5E_SYM, H5E_CANTDEC, FAIL, "unable to decrement refcount on newly created object")

                /* Close new group */
                if(H5O_close(obj_loc.oloc, NULL) < 0)
                    HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to close")

                /* If the parent group was holding the file open, the
                 * newly-created group should, as well.
                 */
                if(grp_loc.oloc->holding_file)
                    if(H5O_loc_hold_file(obj_loc.oloc) < 0)
                        HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to hold file open")

                /* Reset any non-default object header messages */
                if(ginfo != &def_ginfo)
                    /* (Casting away const OK - QAK) */
                    if(H5O_msg_reset(H5O_GINFO_ID, (void *)ginfo) < 0)
                        HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to reset group info message")
                if(linfo != &def_linfo)
                    /* (Casting away const OK - QAK) */
                    if(H5O_msg_reset(H5O_LINFO_ID, (void *)linfo) < 0)
                        HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to reset link info message")
                if(pline != &def_pline)
                    /* (Casting away const OK - QAK) */
                    if(H5O_msg_reset(H5O_PLINE_ID, (void *)pline) < 0)
                        HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to reset I/O pipeline message")
            } /* end if */
            else
                HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "component not found")
        } /* end if */

	/*
	 * Advance to the next component of the path.
	 */

        /* Transfer "ownership" of the object's information to the group object */
        H5G_loc_free(&grp_loc);
        H5G_loc_copy(&grp_loc, &obj_loc, H5_COPY_SHALLOW);
        H5G_loc_reset(&obj_loc);
        obj_loc_valid = FALSE;

	/* Advance to next component in string */
	name += nchars;
    } /* end while */

    /* Call 'operator' routine */
    /* If we've fallen through to here, the name must be something like just '.'
     * and we should issue the callback on that. -QAK
     * Since we don't have a group location or a link to the object we pass in
     * NULL.
     */
    HDassert(group_copy);
    if((op)(NULL, ".", NULL, &grp_loc, op_data, &own_loc) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_CANTNEXT, FAIL, "traversal operator failed")

    /* If the callback took ownership of the object location, it actually has
     * ownership of grp_loc.  It shouldn't have tried to take ownership of
     * the "group location", which was NULL. */
     HDassert(!(own_loc & H5G_OWN_GRP_LOC));
     if(own_loc & H5G_OWN_OBJ_LOC)
         own_loc |= H5G_OWN_GRP_LOC;

done:
    /* If there's been an error, the callback doesn't really get ownership of
     * any location and we should close them both */
    if(ret_value < 0)
        own_loc = H5G_OWN_NONE;

    /* Free all open locations.  This also closes any open external files. */
    if(obj_loc_valid && !(own_loc & H5G_OWN_OBJ_LOC))
        H5G_loc_free(&obj_loc);
    if(group_copy && !(own_loc & H5G_OWN_GRP_LOC))
        H5G_loc_free(&grp_loc);

    /* If there's valid information in the link, reset it */
    if(link_valid)
        if(H5O_msg_reset(H5O_LINK_ID, &lnk) < 0)
            HDONE_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to reset link message")

    /* Release temporary component buffer */
    if(wb && H5WB_unwrap(wb) < 0)
        HDONE_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't release wrapped buffer")

   FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G__traverse_real() */

/*-------------------------------------------------------------------------
 * Function:	H5G_traverse
 *
 * Purpose:	Traverse a path from a location & perform an operation when
 *              the last component of the name is reached.
 *
 * Return:	Success:	Non-negative if path can be fully traversed.
 *		Failure:	Negative if the path could not be fully
 *				traversed.
 *
 * Programmer:	Quincey Koziol
 *		koziol@ncsa.uiuc.edu
 *		Sep 13 2005
 *
 *-------------------------------------------------------------------------
 */
herr_t
H5G_traverse(const H5G_loc_t *loc, const char *name, unsigned target, H5G_traverse_t op,
    void *op_data)
{
    size_t orig_nlinks;                 /* Original value for # of soft / UD links able to traverse */
    herr_t ret_value = SUCCEED;         /* Return value */

    FUNC_ENTER_NOAPI(FAIL)

    /* Check args */
    if(!name || !*name)
        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "no name given")
    if(!loc)
        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "no starting location")
    if(!op)
        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "no operation provided")

    /* Retrieve the original # of soft / UD links that are able to be traversed */
    /* (So that multiple calls to H5G_traverse don't incorrectly look
     *  like they've traversed too many.  Nested calls, like in H5L__move(),
     *  may need their own mechanism to set & reset the # of links to traverse)
     */
    if(H5CX_get_nlinks(&orig_nlinks) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to retrieve # of soft / UD links to traverse")

    /* Set up invalid tag. This is a precautionary step only. Setting an invalid
       tag here will ensure that no metadata accessed while doing the traversal
       is given an improper tag, unless another one is specifically set up
       first. This will ensure we're not accidentally tagging something we
       shouldn't be during the traversal. Note that for best tagging assertion
       coverage, setting H5C_DO_TAGGING_SANITY_CHECKS is advised. */
    H5_BEGIN_TAG(H5AC__INVALID_TAG);

    /* Go perform "real" traversal */
    if(H5G__traverse_real(loc, name, target, op, op_data) < 0)
        HGOTO_ERROR_TAG(H5E_SYM, H5E_NOTFOUND, FAIL, "internal path traversal failed")

    /* Reset tag after traversal */
    H5_END_TAG

    /* Reset the # of soft / UD links that can be traversed */
    if(H5CX_set_nlinks(orig_nlinks) < 0)
        HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't reset # of soft / UD links to traverse")

done:
   FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G_traverse() */

redpajama_set_name: RedPajamaGithub


Timed perfectly for Anzac day, historians Marilyn Lake, Henry Reynolds, Mark McKenna, Joy Damousi and Carina Donaldson are going to ruffle a few feathers with the release of their provocative book What's Wrong With Anzac?
The problem with Anzac, Lake asserts in the book's introduction, is that nobody ever questions it. And why would we? After Australia Day was compromised by so-called black armband history, it's become our "real" national day, as Mark McKenna discusses in his contribution, extracted in newmatilda.com today. It's a great story: brave young men selflessly sacrifice the best years of their lives for a cause they know is right. Courage against insurmountable odds. Doing the right thing even while you know you will fail. It's a great story. Isn't it?
Inga Clendinnen certainly thought so when she wrote an eloquent Quarterly Essay entitled The History Question: Who Owns The Past? She named Anzac Day as an example of an event that many people "own" — and which thus has as many meanings as there are Australians. That was in 2006, during the period of reflection the historical profession went through in the wake of the first history war.
Now Lake and Reynolds have proposed an alternative narrative on the significance of Anzac Day. Clendinnen has already taken the authors to task over the scholarly basis of the book. The media loves this sort of division — but although it looks like a polarised historical fist-fight, there's actually a much more sober and nuanced argument underway.
In her introduction, Lake notes that to criticise the Anzac tradition is akin to treason. She reflects on the responses to a critical article she wrote on the topic published in The Age in 2009. Many cited a personal connection to the tradition — regardless of whether they were critiquing or defending the Anzacs.
Clendinnen also addressed the personal nature of Anzac Day in her essay when she acknowledged that "war" for her meant World Wars I and II whereas to other, younger Australians, "war" meant Vietnam — and that this had an impact on their assessment of the Anzac myth. One of the strengths of What's Wrong With Anzac? is that it directly confronts these personal connections, and poses a tough question: Why should your family's service history matter in terms of how Australian you really are?
The answer to this question is complicated by the changes in Australian society over the last century.
Australians in the late 19th century believed that wars were clashes between races — and just as evolution weeded out the sick and weak, only the strongest and fittest race would survive. This version of Social Darwinism underpinned the racism of the late 19th century and the early 20th century. Another consequence was that Australia sent men off to fight and die in two world wars for a British Empire that they felt was a brotherhood of whites, destined to struggle against other races until one or the other was wiped out.
In 1945, around 4 million living Australians, out of a population of around 7 million, had served or been affected by two world wars that took a total of 10 years to fight. It makes sense that military service would attract such a civic premium for returned servicemen and war widows.
Things have changed since 1945. We're now a country of 22 million people that has seen successive waves of immigration from all over the globe. We've fought in many wars since then — Korea, Malaysia, Vietnam, Iraq (twice), Afghanistan, East Timor — yet we have still not seen war on our soil. Apart from our soldiers, the only people who have seen what war is like up close are those who flocked to Australia to escape it, often from countries where Australia had deployed troops.
To a significant number of Australians, war is a traumatic memory that impelled them to leave their homes in search of a better life. And here is the problem — if Anzac Day is our "real" national day, as Clendinnen and the contributors to What's Wrong With Anzac? variously assert, then how can first and second-generation Australians truly be part of the nation? What do we do to the social fabric of our society by publicly treating war in a way that so jars with their personal stories?
The Anzac myth places a premium on military service, and holds that it was at Gallipoli — and not before — that our nation was truly born. What's Wrong With Anzac? points out that as a result of Anzac, we as a nation unquestioningly revere those who serve in our military, but are incapable of recognising civil achievements, like Federation — the true birth of the nation — or the extension of suffrage to women, in which Australia led the world. The Anzacs overshadow all of these concerns and encourage us to believe that only military service and sacrifice on the field of battle have any bearing on history.
In the closing chapters of the book, the authors look at the resurgence of Anzac. They assert that debate in Australia around recent military interventions has been silenced by the Anzac tradition. The problem, they argue, is that because we value military service so highly, and identify war with nation-building, we are incapable of critically approaching involvement in wars.
The Anzac myth tells us that war happens in other people's countries. We go to war not because of any connection to the countries we fight in, but because of the countries we fight alongside, Britain, America, and the rest of the first world. We don't start wars, we go to help stop them, and we pride ourselves on the martial prowess of our armed forces even as we pay lip service to the truism that war is hell.
But it's that martial prowess, and the assumption that we go to war to help people, that underpinned Anzac in 1918 and underpins it still. In Australia today, to criticise involvement in a war is the same as criticising the "heroes" that fight these wars for us. All debate on the morality or justness of a conflict melts away the second troops are committed, because while we can criticise politicians for warmongering, the troops are sacred.
This means that, eight years after debate over our involvement in Iraq started, we still haven't had any serious inquiry into why we joined the fray — and why we have stayed there so long. Britain is in the midst of such an inquiry, but here in Australia, we aren't even talking about the war anymore. Afghanistan is the same.
Deep down, at the core of the Anzac myth is the assumption that wars make men and nations — so we need to keep having them.
The book will, in its own words, open up a new front in the history wars, and I think it's about time. Unlike often-feted, sometimes-hated novelist Kate Grenville, I don't think anyone is "up on a ladder, looking down at the history wars".
History is something that we all have a say in, but it's also something we can't avoid, even when we want to. I think we should have history wars. I think the history wars are an essential part of Australia's growing up. Under Howard, the nation experienced a schism over Aboriginal history — and the shocking idea that British settlers may have invaded a populated continent rather than settled a terra nullius.
This new challenge issued by Lake and Reynolds to the way we see ourselves is equally important. We need to critically assess the way we see our own history. We need to divorce our personal memories from our national history, and we need to acknowledge when it's gone too far.


text:
package org.netling.concurrent;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Represents future data of the parameterized type {@code V} and allows waiting on it. An exception may also be
 * delivered to a waiter, and will be of the parameterized type {@code T}.
 * <p/>
 * For atomic operations on a future, e.g. checking if a value is set and if it is not then setting it - in other words,
 * Compare-And-Set type operations - the associated lock for the future should be acquired while doing so.
 */
public class Future<V, T extends Throwable> {

    private final Logger log = LoggerFactory.getLogger(getClass());

    private final String name;
    private final ExceptionChainer<T> chainer;
    private final ReentrantLock lock;
    private final Condition cond;

    private V val;
    private T pendingEx;

    /**
     * Creates this future with given {@code name} and exception {@code chainer}. Allocates a new {@link
     * java.util.concurrent.locks.Lock lock} object for this future.
     *
     * @param name    name of this future
     * @param chainer {@link ExceptionChainer} that will be used for chaining exceptions
     */
    public Future(String name, ExceptionChainer<T> chainer) {
        this(name, chainer, null);
    }

    /**
     * Creates this future with given {@code name}, exception {@code chainer}, and associated {@code lock}.
     *
     * @param name    name of this future
     * @param chainer {@link ExceptionChainer} that will be used for chaining exceptions
     * @param lock    lock to use
     */
    public Future(String name, ExceptionChainer<T> chainer, ReentrantLock lock) {
        this.name = name;
        this.chainer = chainer;
        this.lock = lock == null ? new ReentrantLock() : lock;
        this.cond = this.lock.newCondition();
    }

    /**
     * Set this future's value to {@code val}. Any waiters will be delivered this value.
     *
     * @param val the value
     */
    public void set(V val) {
        lock();
        try {
            log.debug("Setting <<{}>> to `{}`", name, val);
            this.val = val;
            cond.signalAll();
        } finally {
            unlock();
        }
    }

    /**
     * Queues error that will be thrown in any waiting thread or any thread that attempts to wait on this future
     * hereafter.
     *
     * @param e the error
     */
    public void error(Throwable e) {
        lock();
        try {
            pendingEx = chainer.chain(e);
            cond.signalAll();
        } finally {
            unlock();
        }
    }

    /** Clears this future by setting its value and queued exception to {@code null}. */
    public void clear() {
        lock();
        try {
            pendingEx = null;
            set(null);
        } finally {
            unlock();
        }
    }

    /**
     * Wait indefinitely for this future's value to be set.
     *
     * @return the value
     *
     * @throws T in case another thread informs the future of an error meanwhile
     */
    public V get()
            throws T {
        return get(0, TimeUnit.SECONDS);
    }

    /**
     * Wait for {@code timeout} duration for this future's value to be set.
     *
     * @param timeout the timeout
     * @param unit    time unit for the timeout
     *
     * @return the value
     *
     * @throws T in case another thread informs the future of an error meanwhile, or the timeout expires
     */
    public V get(long timeout, TimeUnit unit)
            throws T {
        lock();
        try {
            if (pendingEx != null)
                throw pendingEx;
            if (val != null)
                return val;
            log.debug("Awaiting <<{}>>", name);
            while (val == null && pendingEx == null)
                if (timeout == 0)
                    cond.await();
                else if (!cond.await(timeout, unit))
                    throw chainer.chain(new TimeoutException("Timeout expired"));
            if (pendingEx != null) {
                log.error("<<{}>> woke to: {}", name, pendingEx.toString());
                throw pendingEx;
            }
            return val;
        } catch (InterruptedException ie) {
            throw chainer.chain(ie);
        } finally {
            unlock();
        }
    }

    /** @return whether this future has a value set, and no error waiting to pop. */
    public boolean isSet() {
        lock();
        try {
            return pendingEx == null && val != null;
        } finally {
            unlock();
        }
    }

    /** @return whether this future currently has an error set. */
    public boolean hasError() {
        lock();
        try {
            return pendingEx != null;
        } finally {
            unlock();
        }
    }

    /** @return whether this future has threads waiting on it. */
    public boolean hasWaiters() {
        lock();
        try {
            return lock.hasWaiters(cond);
        } finally {
            unlock();
        }
    }

    /**
     * Lock using the associated lock. Use as part of a {@code try-finally} construct in conjunction with {@link
     * #unlock()}.
     */
    public void lock() {
        lock.lock();
    }

    /**
     * Unlock using the associated lock. Use as part of a {@code try-finally} construct in conjunction with {@link
     * #lock()}.
     */
    public void unlock() {
        lock.unlock();
    }

}


Smoke dances from a fire under a lean two as a mother cooks breakfast for her children. The little boy wanders among the team curious about everything. He giggles as we make silly faces at him. Little huts and makeshift homes are scattered among the hillside and along the trail we are walking. The trail exist between the villages and where the silkworm hunters go. Today we walked four hours down valley along the river to a small establishment made up of three buildings. It is a tea house between villages. It is a crossroad for us with one direction leading back to Chaipur, where we will ultimately go and the other direction to the village of Sangita and Laxmi, two of the Nepali girls on our team. Tomorrow we will go see their villages and watch/learn as they celebrate brother and sister day. For tonight we are nestled in to what appears to be a cornfield/potato field.


Vicarious authority given by an authorizing or legal body to an applicant.
Leave; allowance, sufferance; tolerance, toleration; liberty, law, license, concession, grace; indulgence (lenity) [See Lenity]; favor, dispensation, exemption, release; connivance; vouchsafement.
Both of these bases mean "permission, approval." The base lawd* is more general and can also mean "praise." It refers to the laudatory sense of approval or permission. lic* refers to more formal permitting and includes the senses of certification.
licos* pos abs ess sta Permitted, approved, sanctioned, licensed, certified.
licod* dat tr To authorize (a person).
licolv* abl pa To lose authorization that was previously given.
licend* dat term tr To receive authorization from an authority.


text:
I Tick You: How does Atiku perform on the millennial's checklist?
July 25, 2017 | Editor
by Alexander O. Onukwue
There is no official 'Millenial's Checklist' by which every potential candidate for the Presidency in Nigeria is screened. Beside the requirement for a School Certificate and the approved age of 40, nobody is considered too old or too crude to run.
But if the evidence of the last 10 years is anything to go by, Nigeria could do with a basic checklist with which to make a preliminary assessment of the persons who put themselves forward for public office. If it is not, that should be part of the agitations in support of the Not Too Young To Run bill.
He's not quite yet the man of the moment, but the PDP people of Adamawa are beginning to water the ground for their biggest political asset to make himself more valuable. They say he is not being used to full capacity in the APC; it can only be supposed that they have big plans for him.
But how do these capabilities compare against the expectations of the Nigerian millennial?
Experience vs Age
Being a two-term Vice President is not exactly an automatic claim to competence and experience, but the man Atiku Abubakar has been in the political arena since his run for the Governorship of then Gongola state in 1991. As much as there is the eagerness amongst young people to be given a chance to contest executive positions, they also want someone who has an understanding of the complexity of Nigeria's issues. But Atiku would be a 72-year old Presidential candidate if he chooses to do so, a definite red flag given the age of current President Muhammadu Buhari.
Philanthropist vs Pillager
He has been described as a self-made man, who created his business and success out of personal means. From his beginnings in real estate, Atiku's businesses include Intels, an oil servicing firm, as well as the American University of Nigeria (AUN). Young people want a leader who can run the country with the acumen of a businessman. However, his time with the Nigerian Customs Service has been viewed as the period when he actually "arrived". The perception of an irreversibly corrupt Atiku Abubakar is not uncommon.
Democratic vs Authoritarian
Atiku was Governor of Adamawa in 1998 but that was about as close he came with being an executive in the Military era. He had emerged in the third position on the SDP's primaries for the 1993 elections. Unlike two of the last four Presidents, Atiku did not have a military career and as such, will not be judged as a reforming democrat. Atiku was favoured by the Supreme Court to allow him run for the 2007 elections under the Action Congress after moves by Obasanjo to subdue his ambition. Can he be trusted to also be a true democrat who upholds justice and equity?
Tags: 2019, atiku abubakar, Checklist, Millennials, Politics
SANUSI SAIDU
Me Im supporting Atiku, I want him to be our next President- I shared same believe with Atiku that the Nigerian system of Governance need certain transformation & he is the only person out of all the big men we have in the country that I can point 1-2-3 of his investment inside the country for the development of Nigeria.
July 31, 2017 - 8:56 am Reply
Winning! LSF|PR wins 4 Sabre awards, named finalist in the platinum category (Africa) and Diamond category (EMEA)
One of Nigeria's leading PR agencies, LSF|PR has been announced as the winner of four SABRE Awards, the world's largest ...
Op-ed Editor November 6, 2017
Appointees list: The Presidency has no knowledge of its staff?
by Alexander O. Onukwue The little matter of proving that the greater percentage of its appointments has not been skewed ...
Ekweume Abroad: There was a Hospital in Ibom
by Alexander O. Onukwue If only there was a hospital in Nigeria which was built at a cost of N41 ...
Ezinne November 4, 2017
Why the attention over flying former Vice President Ekwueme abroad is noisy
by Alexander O. Onukwue President Buhari, on Friday evening, approved the overseas treatment for currently ailing former Vice President, Dr ...
Azeez November 4, 2017
The YNaija Cover this morning – the 4th of November
Follow the links to read the stories and analyses on YNaija: I have not declared interest to run for President ...
Budget 2018? What did we learn from budget 2017?
by Alexander O. Onukwue After delays due to disagreements between the Executive and the National Assembly, the 2017 budget was ...

redpajama_set_name: RedPajamaCommonCrawl


text:
'Innkeepers' about to make its Torrington debut at Warner Theatre
MIKE AGOGLIATI
Contributed photo A scene from 'Innkeepers' featuring Pat Healy and Sarah Paxton.
TORRINGTON -- When the premiere of the "Innkeepers," a film by acclaimed horror maker, Ti West comes to the city next month, it will receive all the fanfare a Hollywood premiere would typically get.
The film was shot entirely at the Yankee Pedlar inn on Main Street in downtown Torrington and depicts the hotel's final days being open. Two workers are on a mission to find if the hotel is indeed haunted by the ghost of a woman who killed herself on her wedding day after her husband stood her up. A series of strange events take place as old guests begin to check in.
Whether the hotel is actually haunted remains to be seen, although residents have reported encounters over the years in the hotel, which first opened in 1891.
The film stars Sarah Paxton, Kelly McGillis and Pat Healy, and was filmed during the spring and summer of 2010. It will open at the Warner Theatre at the official Connecticut Premiere Feb 8, complete with the red-carpet treatment.
Warner marketing director Steve Criss said Sunday that the theatre is the perfect place for the premiere and said equipment to show the film will be brought in for the show.
"This is a great community focal point for the city, and what better place to show the film of one of our neighbors than the theatre across the street," Criss said. "It's only appropriate for the Warner to show the film."
Sanjay Patel, one of three co-owners of the Yankee Pedlar said he is excited about the film showing at his neighbor's venue about his hotel.
"There aren't too many opportunities like this, and we are excited to have the film premiere here in Torrington where it was filmed," Patel said during an interview Sunday afternoon. "You are going to get a unique view into the hotel from all of the shots."
Patel also confirmed plans for a pre-film party and post-film party the day of the event. From 4 to 7 p.m. the hotel will host a paranormal booth, photography booth, live entertainment, appetizers and free access to the movie sets. Following the movie, the party will include everything from the pre-party and also a raffle. More information can be found at www.pedlarinn.com.
"This is exciting for the city," Mayor Ryan Bingham said during an interview Friday. "The movie has been On Demand on the television, and many people have remarked about how good a film is. It will definitely be a treat to see it on the big screen."
Bingham added that he has seen the movie and said, "It's scary, but a great story as well." Tickets are on sale at the Warner Theatre box office and Criss said they are selling well.
Reach Mike Agogliati by email at magogliati@registercitizen.com and by telephone at (860) 489-3121 Ext. 324. On Twitter @mikeagogliati and @registercitizen.


Starting 31 March, the airline will fly three times a week from Madrid to the capital of the Champagne region.
This summer it will also open new routes to Bergen, Oslo, Bari, Zadar and Verona –tickets are now on sale.
In June, Iberia flights to Mexico City will be increased to three per day –the largest capacity to any Iberia destination in Latin America.
The Spanish airline is also expanding services to Bogota, Lima, Montevideo, Quito, and Rio de Janeiro.
MADRID, SPAIN, 2019-Jan-30 — /Travel PR News/ — Starting in June, Iberia will launch a thrice-weekly direct service from Madrid to Châlons-Vatry, in the French region of Châlons-en-Champagne, to be operated by Iberia Regional Air Nostrum.
Iberia Express will fly twice weekly to Bari, Italy from 1 July to 13 September, and to Zadar, Croatia, from 2 July to 31 August. Zadar is the fourth Iberia Group destination in Croatia, where it also serves Dubrovnik, Zagreb and Split.
Iberia Regional Air Nostrum will also fly to Verona thrice weekly in August.
Mexico City is a strategic destination for Iberia, which is boosting its service to three daily return flights starting this summer season.
In April the number of weekly Madrid-Mexico City return flights will reach 17, rising to to 19 in May and to 21 –three daily– from June through September. The Mexican capital will thus become Iberia's most high-capacity destination in all of Latin America.
Starting 1 July, three additional flights to Bogota, for a total of 10 per week.
Also starting 1 July, daily flights to/from Rio de Janeiro and Montevideo, up from five flights per week.
Quito will also be served daily, with one additional weekly flight.
Three additional Iberia flights per week between Madrid and Lima will bring the weekly total to 10.
This entry was posted in Airlines, Airports, Business, Flights, Travel, Travel Services, Travelers and tagged airline, Châlons-Vatry, flights, FRANCE, iberia, Madrid. Bookmark the permalink.


Do you have questions about countries and cities?
Do you think how to organize a vacation?
Do not know how to get to an interesting place?
Looking for independent advice from knowledgeable people? Our consultants answer all these questions absolutely free of charge. Use the unique service right now and get useful information that will save you time, effort and money.


text:
Wild Girls Slot
Wanna try to play for real money?
Get 200%
on first deposit
Welcome Bonus $5000
Welcome Bonus $100
Slot information
Slot Type:
Paylines:
Reels:
Wild Girls Online Slot
Unlike most slots with three reels, this game uses as many as three special images: a simple "wild", a wild symbol with a multiplier and a scatter. In a real game, a progressive jackpot is available.
The largest reward is given for a combination of wild symbols - 2,500 of initial bets. The maximum prize for a combination of scatter is 250 of total bets. There is also available risk game in Wild Girls Online Slot.
How to play Wild Girls slot for free
Our site provides a free licensed copy of the game Wild Girls from Wazdan. At the time of launching the application, the player receives 100 credits to the account. This amount is used during the game to set bets. The user's task is to collect winning combinations of three images on any of the five fixed paylines.
The control panel of the machine is made as concisely as possible:
The only changeable slot parameter is the size of the total bet. In the Bet window, the user sets the desired spin value in the range of 0.10-100 credits. The maximum bet in one click is assigned by the Max Bet key;
Spins are started by a round button in the center of the screen. One-click activates one spin. The Autoplay key is also provided, however, in the demo version of the slot, the option of automatic spins is not available;
If at least one winning combination appears on the screen, the Gamble key appears above the round start button. This button activates the risk game;
At the bottom of the screen, there are three windows displaying game data: Credit - the amount on the user's balance; Total Bet - duplicates the indicator of the Bet window (shows the total bet); Win - winnings obtained as a result of rotation.
At the bottom of the screen are additional keys. The gear icon opens up additional slot settings. In the pop-up menu, the user can expand the game to full screen, assign the start of rotation with the space bar, accelerate the animation of the rotations. Speaker - controls the soundtrack of the game. A button with a question mark opens a window with the rules of the game and a description of the operation of the buttons on the control panel. The "i" key expands the payout table.
Many bonuses and free spins await you in an incredibly large number of free slot machines on our website.
Symbols and awards of the Wild Girls Slot
To get prizes on the Wild Girls slot, you need to collect prize combinations. These are sequences of identical symbols located on one of the paylines. The size of the prize is calculated based on the line bet. This parameter ranges from 0.02-20, depending on the selected total bet.
The payout table shows the prize for combinations in credits when playing with a linear bet of 0.02:
lemons and cherries - 0.2;
oranges - 0.3;
plums - 0.4;
BAR - 0.6;
grapes - 0.8;
watermelons - 1.20;
sevens - 2.
In addition to simple characters, special images participate in the game:
The brunette on the motorcycle is wild, falling out on the first and third reels. Such an image replaces the missing picture in combination;
Red-haired girl on a motorcycle - "wild" with a multiplier. Falling out on the second reel, it replaces the missing image in the combination and doubles the payout for it;
Scatter - image with the inscription Mystery. The symbol brings a reward by falling on three arbitrary cells of the playing field, without taking into account the pay line. By clicking on any of the scatter, the user receives 5-25 total bets as a reward. None of the "wild" characters replace the scatter.
"Wild" symbols interact with each other. The combination of simple images can be extended by two types of wild at the same time, and the gain for the combination will be doubled. The user receives a win for the combination of wild. When the images of girls fall on one pay line, the sequence brings 50 credits at a bet rate of 0.02.
You can play other slot machines of this genre here.
Risk game of the Wild Girls Slot
Prizes received for prize combinations can be increased using a risk game. Pressing the Gamble key opens an additional screen with a blinking card.
Red key - makes a bet on red suits;
Black button - puts on black;
Take key - closes the game for doubling, transferring the winnings to the user's game balance.
A nice feature of the risk game on the Wild Girls slot is the ability to save half the amount played. The ½ Take key allows you to take half of the prize and bet the remaining half. Thus, if the choice of color is incorrect, the user will save part of the winnings.
In the demo version, the progressive jackpot counter in the upper left corner of the screen is given as an example. Ways to get the jackpot in the rules of the game are not indicated.


text:
module Types
  class PostReceiverType < BaseObject
    graphql_name "PostReceiver"

    field :id, ID, null: false
    field :user, UserType,
          null: false,
          description: 'The user it belongs to',
          resolve: ->(obj, _args, _ctx) { Util::RecordLoader.for(User).load(obj.user_id) }
    field :post, PostType,
          null: false,
          description: 'The post it belongs to',
          resolve: ->(obj, _args, _ctx) { Util::RecordLoader.for(Post).load(obj.post_id) }
    field :created_at, GraphQL::Types::ISO8601DateTime,
          null: false,
          description: 'The time the PostReceiver was created'
    field :updated_at, GraphQL::Types::ISO8601DateTime,
          null: false,
          description: 'The time the PostReceiver was last updated'
  end
end


text:
About Our Alumni
Your Alumni Council
Alumni Recognised
Postgraduate Alumni University Medal
Honours Alumni University Medal
Alumni Fellows
Alumni honours
Upcoming Class Reunions
Organise Your Own Reunion
Networks & Associations
Art History and Curatorship
John Bray Law
Welcome New Graduates
Reconnect with your University
Current: Associate Professor Kristin Carson-Chahhoud
Associate Professor Kristin Carson-Chahhoud
Posted on May 31 2019 by a1225161
Recipient of the James McWha Rising Star Award 2019
Associate Professor Kristin Carson-Chahhoud had never been to university when she was accepted in 2011 to the University of Adelaide, resulting in a PhD focussing on tobacco avoidance.
She completed her thesis, which earned her the Dean's Commendation for Doctoral Thesis Excellence, while working full-time for SA Health as one of the youngest Senior Medical Research Scientists.
Kristin, named 2015 SA Young Australian of the Year, has received a South Australian Tall Poppy award and a 100 Women of Influence award, among a wealth of other accolades.
For Kristin, the emphasis on tobacco avoidance came down to the opportunity to spark change.
"Working in respiratory as a Senior Researcher, I could see the impact that tobacco was having on people's lives and that it was one of the key modifiable risk factors," she said.
"It was something I knew could potentially make a difference, a real-world difference, in individuals and in communities as a whole."
Kristin aims to close the gap between clinical research trials and real-world patient care.
"I want my research to make a difference and to improve patient care, and I want to see the changes happen in the real world and in real time."
Tagged in alumni recognition, alumni, DAA 2019, Distinguished Alumni Awards
alumni@adelaide.edu.au
lumen e-magazine
Buy alumni gifts
Authorised by: Media and Comms, External Relations
Maintained by: Media and Comms, External Relations
Last updated: 6 Jun 2019


Common Ground is a community of people making life happen together. With our app, staying connected is only one tap away! You will be able to watch and listen to live streamed messages that are practical and relevant to every day life, you also get notifications on events, activities, and opportunities to connect with the community through love projects, to make life happen!
* Cloud Based Journal: Your Pursue Journal is accessible online anytime at www.PursueJournal.com. This allows you to be able to add entries anywhere, anytime and they are automatically linked to your Common Ground app.


Music composer Ofro and lyricist-singer Arivu have come up with a political rap album titled 'Therukural' (voice of the street). The intention of the duo is to create awareness about the upcoming election through this album.
Chennai: Two youths, lyricist-singer Arivu and music composer Ofro have used their talents to bring awareness about the upcoming election in Tamil Nadu in an innovative way. The duo have composed a political hip-hop album titled 'Therukural' (voice of the street) with an aim to create awareness about the upcoming election.
Polling in the 39 seats of Tamil Nadu and the lone seat of Puducherry would be held on April 18, the second phase of the Lok Sabha elections.
The song speaks about issues like Cauvery, black money, and major issues faced by people of Tamil Nadu.
The duo has been performing its first number "Yenna Naan Unakku anti-Indian ah" (Are you really calling me an anti-Indian?) during stage shows to a good response for over a year.
The anti-Indian factor in the song has a story behind it. It is in reference to BJP national secretary H Raja's controversial comment in 2017 when he was speaking to media.
Raja told media, "I am not prepared to answer you. You are anti-Indian". This statement went viral on social media. This comment inspired Arivu to use "anti-Indian" as the theme for his song.
Arivu said that the line in the song would not create controversy because they are not trying to target any political party and the duo are just against the ideology that separates people.
Arivu came to the world of music with the song 'Urimayai Meetpom' from Rajinikanth's 'Kaala' last year. He studied engineering and also holds an MBA from Coimbatore. He also added that his parents are unhappy and worried about his passion, his career path and usage of political messages in his songs.
Nick Jonas wrote 8 songs dedicated to his ex-girlfriends; will Priyanka Chopra get one, too?


text:
Jazan: 65 Catheterization Procedures for Children on Dialysis at King Fahad Central Hospital
The Interventional Radiology Department of King Fahad Central Hospital- Jazan, in about a year, performed 65 catheterization procedures for children on dialysis. By Allah's Grace, and with the help of a highly qualified and skilled Saudi medical staff, the medical procedure contributed to saving the lives of many children with kidney failure. The department features two consultants, four technicians, and three nurses.
This medical procedure, through the interventional radiology, is an important treatment for children who cannot have dialysis access on their arms and instead a catheter is tunneled in the child's neck vein. In sometimes, the procedure is used as a rapid intervention for emergency and critical cases.
On the other hand, the Ministry of Health (MOH) has launched the Self-Assessment System for Private Healthcare Facilities, which is expected to achieve a significant shift in dissemination of self-control culture in the private sector; thus, contributing to raising the quality of health services.
According to MOH, the system aims to introduce the standards to be adhered to by the private healthcare institutions, as well as promoting the concept of self-control via an electronic system.
MOH said that it has launched an educational campaign through the social media to acquaint the health institutions with the self-control system's goals and benefits before start using it, and carrying out corrective actions, as well as briefing citizens on MOH's efforts to raise the level of health service quality and patient safety. It pointed out that the new system achieves many benefits, including informing the health institutions about the health requirements and promptly providing updates on them, in addition to measuring commitment to systems and regulations and proposing corrective measures.
It added that the system will be launched in phases, the first one for hospitals in Riyadh, Jeddah and eastern region followed by hospitals in other regions, then will be launched throughout the year during specified assessment periods.
The system comes as an extension of the health service e-platform project which aims to unify all public and private sectors' e-services under the umbrella of a reliable and integrated electronic portal (the e-platform for health services).
Last Update 10 May 2018 04:23 PM


text:
Macalpin
Kenneth I
Donald I
Constantine I
Aodh
Eochaid & Giric
Donald II
Malcolm I
Indulf
Dubh
Kenneth II
Constantine III
Kenneth III
Malcolm II
Lulach
Duncan I
Malcolm III
Donald III
Duncan II
Maud of Huntingdon
Henry of Huntingdon
Malcolm IV
William the Lion
David of Huntingdon
Margaret of Norway
Balliol
John Balliol
Dvorguilla of Galloway
The Black Comyn
The Red Comyn
Andrew Moray
Edward Balliol
Robert de Brus
Isabella of Mar
Elizabeth de Burgh
The Heart of Robert the Bruce
Marjorie Bruce
Edward Bruce
The Black Douglas
David II
Joan of the Tower
Black Agnes
Stewart Origins
Robert II
Robert III
The Wolf of Badenoch
David Stewart
Joan Beaufort
James II
Mary of Guelders
James III
Margaret of Denmark
Alexander, Duke of Albany
James IV
Margaret Tudor
Madeleine of Valois
Mary of Guise
Mary, Queen of Scots
Francis II of France
Lady Margaret Douglas
Henry Stuart, Lord Darnley
James Hepburn, Earl of Bothwell
James Stewart, Earl of Moray
The Britons
Dunadd Hillfort
Dunfermline Abbey
Arbroath Abbey
Wallace Monument
The Regalia
Stone of Destiny
Monymusk Reliquary
ROYAL ORDERS
Order of the Thistle
One of Scotland's grandest castles, Stirling Castle perches dramatically on the crag of Castle Hill at Stirling, an extinct volcano, towering 250 feet above the plain below,with steep cliffs on three sides.
Stirling's importance developed from the fact that it controlled the lowest crossing point of the River Forth. The earliest recorded castle at Stirling was used by King Malcolm III Canmore in the eleventh century, in 1110, his descendant King Alexander I dedicated a chapel there and his successor, King David I, used the castle as a royal administration centre and residence. The castle we see today dates mainly from the fifteenth and sixteenth centuries, while a few structures dating from the fourteenth century still survive.
Many famous events in Scottish history took place at the castle, including the murder of the eighth Earl of Douglas by King James II in 1452, it was captured by Robert the Bruce and unsuccesfully besieged by Bonnie Prince Charlie during the '45 rebellion. In all the castle has been besieged eight times, several of which occured during the Scottish Wars of Independence. In addition, several of Scotland's Kings and Queens have been crowned at Stirling Castle.
Mary Queen of Scots spent the early part of her childhood at the castle from 27 July 1543 to February 1548, when she was moved to Dumbarton Castle and eventually left for France. Mary's coronation took place in the Chapel Royal at Stirling in 1543. Following the death of her first husband, Francois II of France, Mary returned to her native Scotland in 1561, and visited Stirling Castle frequently.
The recently restored Great Hall (pictured right), otherwise known as Parliament Hall, was built by King James IV and has been described as "the grandest secular building erected in Scotland in the late Middle Ages". Measuring 42 by 14.25 metres (138 by 46.8 feet), it has a superb hammerbeam roof, which is a modern reconstruction of the sixteenth century original. The hall includes Renaissance details, such as intersecting tracery on the windows, within a conventional medieval plan. The hall boasts five fireplaces, and large side windows lighting the dais, where the king was once seated.
Stirling Castle has just completed a £12 million project to return the now magnificent royal lodgings to how they might have looked in the 1540s, when the castle was the childhood home of Mary Queen of Scots. An ambitious restoration project, it has researched and hand-crafted suitable furnishings, frescoes, and replicas to furnish the rooms in the Royal Palace.
The Royal Palace is located to the left of the gatehouse, and forms the south side of the Inner Close. A three-storey building with an ornate facade of tall windows and niches which contain a selection of carved figures and Renaissance sculptures. It was built for King James V and his second wife, Mary of Guise. Begun in the 1530's in a combination of Renaissance architecture, and late-gothic detail, it was largely complete by the time of James' death in December 1542.
The Palace comprises the Royal Lodgings of the king and queen. Both the king's and queen's suites are situated on the same floor and arranged around a courtyard. Each apartment has three spacious rooms, an Outer Hall, an Inner Hall and a Bedchamber.
The ceiling of the King's Presence Chamber was originally decorated with a series of carved oak portrait roundels of kings, queens, and courtiers known as the Stirling Heads, described as "among the finest examples of Scottish Renaissance wood-carving now extant." The carvings were taken down following a ceiling collapse in 1777, and of an estimated 56 original heads, 38 survive.
Four recreations of The Hunt of the Unicorn tapestries, created by the Tapestry Studio at West Dean College, now hang in the restored Queen's Presence Chamber in the Royal Palace.It is believed that a similar series of Unicorn tapestries were part of the royal collection of King James IV. The tapestries took more than three years to weave.
The Chapel Royal was first constructed by King James IV in 1501. His great grandson James VI rebuilt the Chapel Royal especially for the baptism of his heir Prince Henry, who was born in Stirling Castle. The old Chapel Royal, where Mary Queen of Scots was crowned in 1543, was demolished when the present one was constructed. It was elaborately redecorated for Charles I's coronation visit to Scotland in 1633, when a frieze was painted by the artist Valentine Jenkin which still survives to the present day.
The throne room and the Unicorn Tapestry
The Great Kitchens at Stirling dramatically bring to life how lavish banquets were created in the time of James IV with sensory and interactive exhibits. The vaults beneath the palace contain an interesting, child friendly exhibition covering various aspects of castle life.
The stunning views from the castle's battlements overlook two historic battlefields, that of the Battle of Stirling Bridge, fought on 11 September 1297, when the forces of William Wallace and Andrew Moray defeated the combined English forces of John de Warenne, 6th Earl of Surrey, and Hugh de Cressingham and the Battlefield of Bannockburn, where on 24 June 1314, Robert the Bruce led the Scottish forces to victory over the armies of King Edward II. The Victorian Gothic Wallace Monument, which stands on the summit of nearby Abbey Craig and was erected in the nineteenth century, is also visible.
The Queen's Bedchamber
The Argyll and Sutherland Highlanders Museum in Stirling Castle traces over 200 years of one of Scotland's elite military regiments, The Argyll and Sutherland Highlanders. The Museum's galleries have a unique collection of material which provides an insight into the events, locations, people and themes of war.
The castle has two gardens, the southern one includes a bowling green. The King's Knot, a sixteenth century formal garden, lies below the castle's west wall now only visible as earthworks, but once including hedges and knot-patterned parterres. The gardens were built on the site of a medieval jousting arena. Beyond the King's Knot, stretching far into the distance, lay the King's Park, once the royal hunting forest.
The King's Outer Hall and Bedchamber
Stirling Castle is now in the care of Historic Scotland.
Copyright © 2004 - 2018 www.englishmonarchs.co.uk All rights reserved ® Scottish Monarchs


Perfectly positioned and only minutes walk to Curl Curl Beach this original home offers the ideal lifestyle for the Summer living.
Timber cottage with 2 bedrooms, lounge, eat in kitchen with adjoining sunroom with district views. Under house laundry and toilet. Rear level enclosed yard.
+ Modern kitchen with eat in dining area.
+ Spacious separate lounge room.
+ Two King size bedrooms.
+ Original bathroom and second toilet downstairs.
+ Versatile third room ideal for a home office.
+ Off street parking for 1 car with unrestricted on street parking.
+ Level and secure rear garden.


I am happy to say that I am proud of my parents. They raised me, brought me to America and continue to be close friends. What more could a boy want?
I share a common philosophy, compatible hobbies and a strong bond of camaraderie with my parents. Not only they have seen me grow up but, over the years, I've seen them grow and evolve and improve to the point where they have my respect and admiration for reasons other than kinship. Both Ted and Tanya have many talents. They lead by example: when I grow up, I want to be more like them.
Hard to imagine that these two youngsters have been together since 1971. Not only that, but they got their Masters' Degrees before getting me!
Tanya's most recently developed gift lends itself to on-line display: the B&W image was done on film a while back, the color picture is a recent digital photo. Her most recent work is in a new dynamic gallery.


Those scared of heights and a little embarrassment need not apply. If you've ever seen those funny looking bicycles and wondered how they manage to stay upright… well here's your chance to find out. If you were looking for a great way to grab the locals attention then this is definitely it.


text:
The Center for Humans and Nature is a nonprofit, non-partisan organization with a mission to explore and promote human responsibilities in relation to nature. The organization is headquartered in Libertyville, Illinois.

History
The organization was founded in 2003 by Strachan Donnelley, Ph.D.  a philosopher and ethicist who began his career at the Hastings Center.

Donnelley founded the Center to explore the role of ethical thinking—based in an environmental ethics—for informing individual and political decision-making.

About the Center for Humans and Nature
The Center provides in-depth and diverse perspectives about what it means to be human in an interconnected world.

Contributors and Editorial Fellows for the Center's publications and projects have included philosophers, biologists, ecologists, lawyers, political scientists, anthropologists, artists, poets, and economists."

The Center has co-hosted events with the Chicago Botanic Garden, Lincoln Park Zoo, Peggy Notebaert Nature Museum, School of the Art Institute of Chicago, American Museum of Natural History, Western Colorado University, Wisconsin Public Radio, Point Reyes Books, and New School at Commonweal. The Center has also partnered with the nationally syndicated public radio show To the Best of Our Knowledge on a podcast series. Event and podcast participants have included Robin Wall Kimmerer, David Abram, Jane Goodall, Kathleen Dean Moore, Sharon Blackie, Enrique Salmon, Suzanne Simard, Gary Paul Nabhan, and Julian Agyeman.

Publications and Media
The Center for Humans and Nature publishes stories and ideas online and in print that explore our relationships and responsibilities to nature and provide in-depth and diverse perspectives related to arts, humanity, and nature.

Stories & Ideas
The Center for Humans and Nature's online digital publications are housed under Stories & Ideas. These "Stories & Ideas" are featured in a diversity of forms—essays, art, interviews, poems, reviews, and videos—with a variety of contributors sharing their diverse perspectives on themes such as: Animals & Plants, Care, Climate Change, Community, Cosmos, Culture, Healing, Justice, Land & Water, Language, Practice, Reciprocity, Sacred, Sovereignty, and Urban Nature.

Contributors have included Rebecca Solnit, adrienne maree brown, Tommy Orange, Mary Midgley, David Sloan Wilson, Benjamin Barber, Robin Kimmerer, David Abram, Maude Barlow, Herman Daly, Bill McKibben, Sharon Olds, Nalini Nadkarni, Hans Joachim Schellnhuber, Vandana Shiva, and James Gustave Speth, among others.

Minding Nature
The Center publishes Minding Nature, formerly a tri-annual journal (2008–2021), and currently an annual journal that "explores ecological responsibilities, values, and practices."

Center for Humans and Nature Press
The Center for Humans and Nature Press is the Center's independent publishing wing—exploring themes of human interconnection with nature and human responsibilities to the whole community of life. The Center for Humans and Nature Press print publications include the five-volume book series, Kinship: Belonging in a World Relations. Edited by Gavin Van Horn, Robin Wall Kimmerer, and John Hausdoerffer, Kinship is a five-book anthology that explores humanity's deep interconnections with the living world. The five Kinship volumes—Planet, Place, Partners, Persons, Practice—offer essays, interviews, poetry, and stories that highlight the interdependence that exists between humans and nonhuman beings. The Kinship book series is part of a larger project that also includes the Making Kin online art exhibition and the Kinship with the More-Than–Human World podcast in partnership with To the Best of Our Knowledge.

References

External links
 https://www.humansandnature.org/

Environmental organizations based in Chicago

redpajama_set_name: RedPajamaWikipedia


text:
Category: Around Pittsburgh
April 29, 2019 Comments
Q&A with American Dinosaur Abroad author Ilja Nieuwland
Ilja Nieuwland is the author of American Dinosaur Abroad: A Cultural History of Carnegie's Plaster Diplodocus. He is a historian of science–in particular paleontology–attached to the Huygens Institute of the Royal Netherlands Academy of Arts and Sciences in Amsterdam. American Dinosaur Abroad covers the discovery in 1899 of the Diplodocus carnegii—or Dippy, as it's known today—by a team of paleontologists sponsored by Andrew Carnegie. Then the longest and largest dinosaur on record, the Diplodocus skeleton was replicated into plaster casts that were gifted to different nations by Carnegie in the years leading up to World War I. In this largely untold history, Nieuwland…
March 8, 2019 Comments
A Portrait of Middle-Class Family Life: The Spencers of Pittsburgh's Shadyside
Ethel Spencer, the third daughter of the seven Spencer children born between 1884 and 1895, was a curious and observant child. She wrote her childhood memoir in 1959 while she was professor at Carnegie Tech (today's Carnegie Mellon University). It served as a memento of the joy-filled years she shared with her brothers and sisters in Pittsburgh's affluent Shadyside neighborhood. The Spencers of Amberson Avenue, later published by the University of Pittsburgh Press in 1983, explores the family of Charles Hart Spencer, an employee of Henry Clay Frick, and his wife Mary Acheson from the viewpoint of young Ethel. Through the eyes of Ethel, the reader is…
memoir middle class Pittsburgh shadyside spencers
February 20, 2018 Comments
Johnstown Girls and Blues Walked In author Kathleen George on Lena Horne, Pittsburgh as setting, and her research process
Pittsburgh is more than just a home for author Kathleen George: the city and its people are a source of inspiration. A native of Johnstown, George has lived in the city for many years, teaches theatre arts and creative writing at the University of Pittsburgh, and has written several novels and short stories based in the Pittsburgh region, including The Johnstown Girls. Her latest, The Blues Walked In, is a period fiction novel set against the backdrop of Pittsburgh's once-bustling Hill District. It's 1936, and a nineteen year-old Lena Horne is walking to her father's hotel in the Hill after a long tour with Nobel Sissel's orchestra. Along the…
September 21, 2017 Comments
Patricia M. DeMarco discusses global sustainability at the Phipps Conservatory
On September 19th, the University of Pittsburgh Press and author Patricia M. DeMarco celebrated the publication of her book Pathways to Our Sustainable Future: A Global Perspective from Pittsburgh. An enthusiastic crowd of about 100 filled the Tropical Forest area of Phipps Conservatory and Botanical Gardens in Oakland. Attendees included Max King, President and CEO of The Pittsburgh Foundation and his wife Peggy, David Feingold, President of Chatham University, Bernard Goldstein, former Dean of the Pitt Graduate School of Public Health and Member of the National Academy of Sciences and his wife Rossalyn, Terry Collins, Theresa Heinz Professor of Green…
June 7, 2017 Comments
The Slide and Chuck Noll: A Win for Any Pittsburgh Dad
This Father's Day let dad brush up on his Pittsburgh sports history with The Slide: Leyland, Bonds, and the Star-Crossed Pittsburgh Pirates by father-son writing duo Richard and Stephen Peterson and Chuck Noll: His Life's Work by Michael MacCambridge. The Petersons trace Pirates baseball history from the 1970s to today, including the twenty-year bump along the road. MacCambridge gives life to the man who brought the Pittsburgh Steelers to the forefront of the National Football League, but removed himself from the spotlight. This is the first comprehensive biography of Chuck Noll. With both books, you get a newfound understanding of the…
Chuck Noll Father's Day Major League Baseball Michael MacCambridge National Football League Pirates Baseball Pittsburgh Richard Peterson Steelers Football Stephen Peterson
#ReadSmarter2020 Agnes Lynch Starrett Poetry Prize Butterflies Butterfly House Catherine L Newell Chesley Bonestell Chuck Noll drue heinz literature prize Earnest ed ochester Eleanor Boudreau Environment Father's Day fiction Field Guide jane mccafferty kate wisel Major League Baseball memoir Michael MacCambridge middle class min jin lee Monarch Butterflies Mother Nature National Football League Patricia DeMarco Pennsylvania Pirates Baseball Pitt Pittsburgh Read Smarter Richard Peterson shadyside spencers Steelers Football Stephen Peterson sustainability University Press Week UPWeek2019
2020 Drue Heinz Prize Winner Explores Stories about Korea with a Contemporary Perspective
Read Smarter: Regional Fiction from University Presses
Congratulations to Eleanor Boudreau, winner of the 2019 Agnes Lynch Starrett Poetry Prize!
University Press Week 2019: How to Practice Compassion
University Press Week 2019: How To Build Community


As the saying goes, when you do what you love, you'll never work a day in your life. It's a lovely thought, but I'm not sure I can get on board with it entirely. Many people are not living the life they think they want, the Instagram life that looks like an extended highlight reel of happiness. Never a quiet moment.
If perfection is what you're after, then I'm sorry to say but you're in for some disappointment. Perfect doesn't actually exist (and if it did, it would be quite dull after a while). Life is not all sunshine and rainbows – it can sometimes be difficult, and boring, and painful, and a bit of a grind – but that is the balance of life. You can't have ups without downs, it's the bits in between that are where we find our growth. If you think of the best moments of your life, they are usually as a result of overcoming some adversity or pushing yourself past where you thought you could go. Those are the truly rewarding moments in life.
In reality, very few of us will get paid to do the thing we love the most, and fewer still will get paid enough to actually live on. The key is to find rewards in the ordinary aspects of life. Regardless of what your job is, if you can find the challenge in it, and have a degree of control over the decisions you make then you can be fulfilled.
Sports icons and movie stars have some of the most envied jobs in the world, but assuming that playing the sport, or acting is the best part of those jobs, consider how much time they actually get to spend doing that. The dream job for most young guys is that of a professional footballer. They only spend 90 minutes a week (assuming they are even in the team) doing the fun bit of their job. Assuming a normal full-time job is 40 hours a week that translates to less than 4% of their time. The rest is spent either having to do the same drills over and over again on the training ground, or else sitting on coaches and aeroplanes, or spending several nights in some hotel room away from their family. Now don't get me wrong, they have a very enviable lifestyle – and they get paid an absolute fortune for the privilege – but there is also a lot of boring stuff they have to go through as well.
It can be easy to glance enviously someone else's life, thinking how fortunate they are, but the chances are you're only seeing the very best bits. You don't get to see the other 96% of the time, filled with the same stretches of boredom and grind that we all experience at some stage. Once you realise that, then you can see the wonderful opportunities that are available in all our lives.
In 2003, a little-known band released their debut album, without much fanfare or expectation. 'Permission To Land' was the album, The Darkness was the band. Overnight they became a household name, playing major venues across the world, and though largely seen as a bit of a joke, they were undoubtedly talented musicians who created an album unlike anything else at the time- packed full of great riffs and earworm choruses. Permission To Land is still one of my all-time favourite albums; impossible to listen to without a big grin on my face.
Two years later, the follow-up, 'One Way Ticket To Hell…And Back' was released and, well, flopped. A couple of half decent songs weren't quite enough to make up for the rest of the album, which lacked all of the charm and fun of the original. As quickly as they had burst onto the scene, The Darkness disappeared into obscurity. The wheels had already started coming off by this point, with lead singer Justin Hawkins eventually having a bit of a breakdown.
This situation is far from unique to The Darkness. Known variously across the world as either the 'sophomore slump', 'second album syndrome' or 'second-year blues' this phenomenon refers to when a follow-up album (or film, book, athlete, sports team) fails to hit the heights of the debut effort. A quick google will reveal countless lists of examples, from The Strokes to The Stone Roses. Seemingly the more successful the debut, the harder it is to follow. Lightning doesn't strike twice as they say.
On one hand, the first effort has been crafted over a lifetime, and without the expectation has been crafted lovingly from a place of truth. The follow up however will only have a year or two, and often less, to try and capitalize on the 'buzz'. But if the talent is there, then why should the quality drop off so much between efforts? I think the problem comes when the focus is lost. Very few people create with the expectation of becoming rich and famous. They do it because they love it – because it's what they feel in their heart. Once they start believing the hype, they're no longer creating what they feel, they're creating what will be the most successful. They stop trying to make another great piece of work and instead try to make what they think others will want.
Money is a great servant but a terrible master.
The people who avoid second album syndrome are the ones who stay true to themselves, the ones who make what they make for themselves, and no one else. Most of us will not experience creating something which is beloved by millions, but it's still easy for us to get caught up in our own hype. If you find yourself at a crossroads, remember what got you started in the first place. Do what you do because you love doing it, not for any other reason. Being distracted by things outside of your control like money or what other people might want will nearly always end up in failure.
Oh, and in case you were wondering, this story has a happy ending. The Darkness are still going. After several stints in rehab, lineup changes and infighting, they took a further 7 years to release their third album, and while it was hardly a commercial success it was at least critically appreciated. Now sober, happy and healthy, they have continued to release a new album every couple of years and touring regularly. They remembered why they became musicians in the first place, and once again make the music they want to make.


text:
These are the core elements that build our brand
Download all assets
Last updated: April, 2021
2. Colors
3. Typography
The KnowledgeBase logo should be used whenever possible to maintain brand recognition and consistency. Please refer to clear space, sizing and usage on backgrounds guidelines for best practices.
The horizontal logo is the primary logo and should be used in most instances. The stacked logo is for large-scale use.
Download logo assets
Don't know when to use which? Go to Usage on background section
Download all logos for digital Download all logos for print
Download the logos of our family of products
All files are designed to maintain the right dimensions in case you wish to showcase more than one of them next to each other.
Contained Marks
Download all logos
Clear space
The KnowledgeBase logotype and symbol should always be surrounded by a minimum area of clearspace. This space ensures that headlines, text, and other elements do not encroach on our branding.
In most cases, it's better to give the logo even more space, but just make sure it has a clear space of at least a letter "e".
Normal version
Stacked version
The minimum sizes vary for print and digital. Please refer to the corresponding guidelines and be mindful when using the logotype for different applications.
Usage on backgrounds
The full-color logos should be used only on white, black, or gray colored backgrounds. Avoid using full-color logos on photographs unless the logo sits on a black or white area of the image
Full logo
The KnowledgeBase primary color palette is composed of four core colors: yellow, blue, black and white. These colors should be used regularly in marketing materials to reinforce the KnowledgeBase brand.
Brand identity Colors
RGB: 255, 208, 0
CMYK: 0, 5, 100, 0
PMS: 109 C
RGB: 27, 27, 32
CMYK: 76, 65, 66, 90
RGB: 255, 255, 255
CMYK: 0, 0, 0, 0
RGB: 0, 102, 255
CMYK: 95, 60, 0, 0
RGB: 227, 13, 52
KnowledgeBase Purple
RGB: 145, 70, 255
PMS: 7441 C
Our primary typeface, Colfax, is used for headlines, subheadlines, CTA's, and body text. It works equally well in print and digital applications. Please use Colfax in all communication materials whenever possible.
Look here for other product assets: livechat.design, chatbot.design and helpdesk.design.
Go to knowledgebase.ai ›


Pondering an extension of last Friday's post, Finger Length Ratio, I thought you'd welcome something more, well, colorful. That led me to finger painting. Since my recollection of the topic was limited to artwork hung prominently on our refrigerator when my offspring were in elementary school, my reaction to what I found was WOW!
Before justifying my reaction, I'd better mention that Ruth Faison Shaw introduced finger painting to art education and, in 1931, patented a non-toxic, gelatinous paint that would be safe for children. Adults decided to try it out, and they--finger painting artists--moved on to donning surgical gloves so they could finger paint with oils, acrylics, soft pastels and just about anything in addition to Ms. Shaw's finger paint.
In working on my website I stumbled upon this article and just wanted to say thank you for including me and my artwork. I will be soon starting to work on several large series featuring Florida Native wildlife and an Active Lifestyle series as well.