text:
/* $Id: memobj-r0drv-nt.cpp $ */
/** @file
 * IPRT - Ring-0 Memory Objects, NT.
 */

/*
 * Copyright (C) 2006-2015 Oracle Corporation
 *
 * This file is part of VirtualBox Open Source Edition (OSE), as
 * available from http://www.virtualbox.org. This file is free software;
 * you can redistribute it and/or modify it under the terms of the GNU
 * General Public License (GPL) as published by the Free Software
 * Foundation, in version 2 as it comes in the "COPYING" file of the
 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 *
 * The contents of this file may alternatively be used under the terms
 * of the Common Development and Distribution License Version 1.0
 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
 * VirtualBox OSE distribution, in which case the provisions of the
 * CDDL are applicable instead of those of the GPL.
 *
 * You may elect to license modified versions of this file under the
 * terms and conditions of either the GPL or the CDDL or both.
 */

/*******************************************************************************
*   Header Files                                                               *
*******************************************************************************/
#include "the-nt-kernel.h"

#include <iprt/memobj.h>
#include <iprt/alloc.h>
#include <iprt/assert.h>
#include <iprt/log.h>
#include <iprt/param.h>
#include <iprt/string.h>
#include <iprt/process.h>
#include "internal/memobj.h"

/*******************************************************************************
*   Defined Constants And Macros                                               *
*******************************************************************************/
/** Maximum number of bytes we try to lock down in one go.
 * This is supposed to have a limit right below 256MB, but this appears
 * to actually be much lower. The values here have been determined experimentally.
 */
#ifdef RT_ARCH_X86
# define MAX_LOCK_MEM_SIZE   (32*1024*1024) /* 32MB */
#endif
#ifdef RT_ARCH_AMD64
# define MAX_LOCK_MEM_SIZE   (24*1024*1024) /* 24MB */
#endif

/*******************************************************************************
*   Structures and Typedefs                                                    *
*******************************************************************************/
/**
 * The NT version of the memory object structure.
 */
typedef struct RTR0MEMOBJNT
{
    /** The core structure. */
    RTR0MEMOBJINTERNAL  Core;
#ifndef IPRT_TARGET_NT4
    /** Used MmAllocatePagesForMdl(). */
    bool                fAllocatedPagesForMdl;
#endif
    /** Pointer returned by MmSecureVirtualMemory */
    PVOID               pvSecureMem;
    /** The number of PMDLs (memory descriptor lists) in the array. */
    uint32_t            cMdls;
    /** Array of MDL pointers. (variable size) */
    PMDL                apMdls[1];
} RTR0MEMOBJNT, *PRTR0MEMOBJNT;

DECLHIDDEN(int) rtR0MemObjNativeFree(RTR0MEMOBJ pMem)
{
    PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)pMem;

    /*
     * Deal with it on a per type basis (just as a variation).
     */
    switch (pMemNt->Core.enmType)
    {
        case RTR0MEMOBJTYPE_LOW:
#ifndef IPRT_TARGET_NT4
            if (pMemNt->fAllocatedPagesForMdl)
            {
                Assert(pMemNt->Core.pv && pMemNt->cMdls == 1 && pMemNt->apMdls[0]);
                MmUnmapLockedPages(pMemNt->Core.pv, pMemNt->apMdls[0]);
                pMemNt->Core.pv = NULL;
                if (pMemNt->pvSecureMem)
                {
                    MmUnsecureVirtualMemory(pMemNt->pvSecureMem);
                    pMemNt->pvSecureMem = NULL;
                }

                MmFreePagesFromMdl(pMemNt->apMdls[0]);
                ExFreePool(pMemNt->apMdls[0]);
                pMemNt->apMdls[0] = NULL;
                pMemNt->cMdls = 0;
                break;
            }
#endif
            AssertFailed();
            break;

        case RTR0MEMOBJTYPE_PAGE:
            Assert(pMemNt->Core.pv);
            ExFreePool(pMemNt->Core.pv);
            pMemNt->Core.pv = NULL;

            Assert(pMemNt->cMdls == 1 && pMemNt->apMdls[0]);
            IoFreeMdl(pMemNt->apMdls[0]);
            pMemNt->apMdls[0] = NULL;
            pMemNt->cMdls = 0;
            break;

        case RTR0MEMOBJTYPE_CONT:
            Assert(pMemNt->Core.pv);
            MmFreeContiguousMemory(pMemNt->Core.pv);
            pMemNt->Core.pv = NULL;

            Assert(pMemNt->cMdls == 1 && pMemNt->apMdls[0]);
            IoFreeMdl(pMemNt->apMdls[0]);
            pMemNt->apMdls[0] = NULL;
            pMemNt->cMdls = 0;
            break;

        case RTR0MEMOBJTYPE_PHYS:
            /* rtR0MemObjNativeEnterPhys? */
            if (!pMemNt->Core.u.Phys.fAllocated)
            {
#ifndef IPRT_TARGET_NT4
                Assert(!pMemNt->fAllocatedPagesForMdl);
#endif
                /* Nothing to do here. */
                break;
            }
            /* fall thru */

        case RTR0MEMOBJTYPE_PHYS_NC:
#ifndef IPRT_TARGET_NT4
            if (pMemNt->fAllocatedPagesForMdl)
            {
                MmFreePagesFromMdl(pMemNt->apMdls[0]);
                ExFreePool(pMemNt->apMdls[0]);
                pMemNt->apMdls[0] = NULL;
                pMemNt->cMdls = 0;
                break;
            }
#endif
            AssertFailed();
            break;

        case RTR0MEMOBJTYPE_LOCK:
            if (pMemNt->pvSecureMem)
            {
                MmUnsecureVirtualMemory(pMemNt->pvSecureMem);
                pMemNt->pvSecureMem = NULL;
            }
            for (uint32_t i = 0; i < pMemNt->cMdls; i++)
            {
                MmUnlockPages(pMemNt->apMdls[i]);
                IoFreeMdl(pMemNt->apMdls[i]);
                pMemNt->apMdls[i] = NULL;
            }
            break;

        case RTR0MEMOBJTYPE_RES_VIRT:
/*            if (pMemNt->Core.u.ResVirt.R0Process == NIL_RTR0PROCESS)
            {
            }
            else
            {
            }*/
            AssertMsgFailed(("RTR0MEMOBJTYPE_RES_VIRT\n"));
            return VERR_INTERNAL_ERROR;
            break;

        case RTR0MEMOBJTYPE_MAPPING:
        {
            Assert(pMemNt->cMdls == 0 && pMemNt->Core.pv);
            PRTR0MEMOBJNT pMemNtParent = (PRTR0MEMOBJNT)pMemNt->Core.uRel.Child.pParent;
            Assert(pMemNtParent);
            if (pMemNtParent->cMdls)
            {
                Assert(pMemNtParent->cMdls == 1 && pMemNtParent->apMdls[0]);
                Assert(     pMemNt->Core.u.Mapping.R0Process == NIL_RTR0PROCESS
                       ||   pMemNt->Core.u.Mapping.R0Process == RTR0ProcHandleSelf());
                MmUnmapLockedPages(pMemNt->Core.pv, pMemNtParent->apMdls[0]);
            }
            else
            {
                Assert(     pMemNtParent->Core.enmType == RTR0MEMOBJTYPE_PHYS
                       &&   !pMemNtParent->Core.u.Phys.fAllocated);
                Assert(pMemNt->Core.u.Mapping.R0Process == NIL_RTR0PROCESS);
                MmUnmapIoSpace(pMemNt->Core.pv, pMemNt->Core.cb);
            }
            pMemNt->Core.pv = NULL;
            break;
        }

        default:
            AssertMsgFailed(("enmType=%d\n", pMemNt->Core.enmType));
            return VERR_INTERNAL_ERROR;
    }

    return VINF_SUCCESS;
}

DECLHIDDEN(int) rtR0MemObjNativeAllocPage(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable)
{
    AssertMsgReturn(cb <= _1G, ("%#x\n", cb), VERR_OUT_OF_RANGE); /* for safe size_t -> ULONG */

    /*
     * Try allocate the memory and create an MDL for them so
     * we can query the physical addresses and do mappings later
     * without running into out-of-memory conditions and similar problems.
     */
    int rc = VERR_NO_PAGE_MEMORY;
    void *pv = ExAllocatePoolWithTag(NonPagedPool, cb, IPRT_NT_POOL_TAG);
    if (pv)
    {
        PMDL pMdl = IoAllocateMdl(pv, (ULONG)cb, FALSE, FALSE, NULL);
        if (pMdl)
        {
            MmBuildMdlForNonPagedPool(pMdl);
#ifdef RT_ARCH_AMD64
            MmProtectMdlSystemAddress(pMdl, PAGE_EXECUTE_READWRITE);
#endif

            /*
             * Create the IPRT memory object.
             */
            PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)rtR0MemObjNew(sizeof(*pMemNt), RTR0MEMOBJTYPE_PAGE, pv, cb);
            if (pMemNt)
            {
                pMemNt->cMdls = 1;
                pMemNt->apMdls[0] = pMdl;
                *ppMem = &pMemNt->Core;
                return VINF_SUCCESS;
            }

            rc = VERR_NO_MEMORY;
            IoFreeMdl(pMdl);
        }
        ExFreePool(pv);
    }
    return rc;
}

DECLHIDDEN(int) rtR0MemObjNativeAllocLow(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable)
{
    AssertMsgReturn(cb <= _1G, ("%#x\n", cb), VERR_OUT_OF_RANGE); /* for safe size_t -> ULONG */

    /*
     * Try see if we get lucky first...
     * (We could probably just assume we're lucky on NT4.)
     */
    int rc = rtR0MemObjNativeAllocPage(ppMem, cb, fExecutable);
    if (RT_SUCCESS(rc))
    {
        size_t iPage = cb >> PAGE_SHIFT;
        while (iPage-- > 0)
            if (rtR0MemObjNativeGetPagePhysAddr(*ppMem, iPage) >= _4G)
            {
                rc = VERR_NO_LOW_MEMORY;
                break;
            }
        if (RT_SUCCESS(rc))
            return rc;

        /* The following ASSUMES that rtR0MemObjNativeAllocPage returns a completed object. */
        RTR0MemObjFree(*ppMem, false);
        *ppMem = NULL;
    }

#ifndef IPRT_TARGET_NT4
    /*
     * Use MmAllocatePagesForMdl to specify the range of physical addresses we wish to use.
     */
    PHYSICAL_ADDRESS Zero;
    Zero.QuadPart = 0;
    PHYSICAL_ADDRESS HighAddr;
    HighAddr.QuadPart = _4G - 1;
    PMDL pMdl = MmAllocatePagesForMdl(Zero, HighAddr, Zero, cb);
    if (pMdl)
    {
        if (MmGetMdlByteCount(pMdl) >= cb)
        {
            __try
            {
                void *pv = MmMapLockedPagesSpecifyCache(pMdl, KernelMode, MmCached, NULL /* no base address */,
                                                        FALSE /* no bug check on failure */, NormalPagePriority);
                if (pv)
                {
                    PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)rtR0MemObjNew(sizeof(*pMemNt), RTR0MEMOBJTYPE_LOW, pv, cb);
                    if (pMemNt)
                    {
                        pMemNt->fAllocatedPagesForMdl = true;
                        pMemNt->cMdls = 1;
                        pMemNt->apMdls[0] = pMdl;
                        *ppMem = &pMemNt->Core;
                        return VINF_SUCCESS;
                    }
                    MmUnmapLockedPages(pv, pMdl);
                }
            }
            __except(EXCEPTION_EXECUTE_HANDLER)
            {
                NTSTATUS rcNt = GetExceptionCode();
                Log(("rtR0MemObjNativeAllocLow: Exception Code %#x\n", rcNt));
                /* nothing */
            }
        }
        MmFreePagesFromMdl(pMdl);
        ExFreePool(pMdl);
    }
#endif /* !IPRT_TARGET_NT4 */

    /*
     * Fall back on contiguous memory...
     */
    return rtR0MemObjNativeAllocCont(ppMem, cb, fExecutable);
}

/**
 * Internal worker for rtR0MemObjNativeAllocCont(), rtR0MemObjNativeAllocPhys()
 * and rtR0MemObjNativeAllocPhysNC() that takes a max physical address in addition
 * to what rtR0MemObjNativeAllocCont() does.
 *
 * @returns IPRT status code.
 * @param   ppMem           Where to store the pointer to the ring-0 memory object.
 * @param   cb              The size.
 * @param   fExecutable     Whether the mapping should be executable or not.
 * @param   PhysHighest     The highest physical address for the pages in allocation.
 * @param   uAlignment      The alignment of the physical memory to allocate.
 *                          Supported values are PAGE_SIZE, _2M, _4M and _1G.
 */
static int rtR0MemObjNativeAllocContEx(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable, RTHCPHYS PhysHighest,
                                       size_t uAlignment)
{
    AssertMsgReturn(cb <= _1G, ("%#x\n", cb), VERR_OUT_OF_RANGE); /* for safe size_t -> ULONG */
#ifdef IPRT_TARGET_NT4
    if (uAlignment != PAGE_SIZE)
        return VERR_NOT_SUPPORTED;
#endif

    /*
     * Allocate the memory and create an MDL for it.
     */
    PHYSICAL_ADDRESS PhysAddrHighest;
    PhysAddrHighest.QuadPart  = PhysHighest;
#ifndef IPRT_TARGET_NT4
    PHYSICAL_ADDRESS PhysAddrLowest, PhysAddrBoundary;
    PhysAddrLowest.QuadPart   = 0;
    PhysAddrBoundary.QuadPart = (uAlignment == PAGE_SIZE) ? 0 : uAlignment;
    void *pv = MmAllocateContiguousMemorySpecifyCache(cb, PhysAddrLowest, PhysAddrHighest, PhysAddrBoundary, MmCached);
#else
    void *pv = MmAllocateContiguousMemory(cb, PhysAddrHighest);
#endif
    if (!pv)
        return VERR_NO_MEMORY;

    PMDL pMdl = IoAllocateMdl(pv, (ULONG)cb, FALSE, FALSE, NULL);
    if (pMdl)
    {
        MmBuildMdlForNonPagedPool(pMdl);
#ifdef RT_ARCH_AMD64
        MmProtectMdlSystemAddress(pMdl, PAGE_EXECUTE_READWRITE);
#endif

        PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)rtR0MemObjNew(sizeof(*pMemNt), RTR0MEMOBJTYPE_CONT, pv, cb);
        if (pMemNt)
        {
            pMemNt->Core.u.Cont.Phys = (RTHCPHYS)*MmGetMdlPfnArray(pMdl) << PAGE_SHIFT;
            pMemNt->cMdls = 1;
            pMemNt->apMdls[0] = pMdl;
            *ppMem = &pMemNt->Core;
            return VINF_SUCCESS;
        }

        IoFreeMdl(pMdl);
    }
    MmFreeContiguousMemory(pv);
    return VERR_NO_MEMORY;
}

DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable)
{
    return rtR0MemObjNativeAllocContEx(ppMem, cb, fExecutable, _4G-1, PAGE_SIZE /* alignment */);
}

DECLHIDDEN(int) rtR0MemObjNativeAllocPhys(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, size_t uAlignment)
{
#ifndef IPRT_TARGET_NT4
    /*
     * Try and see if we're lucky and get a contiguous chunk from MmAllocatePagesForMdl.
     *
     * This is preferable to using MmAllocateContiguousMemory because there are
     * a few situations where the memory shouldn't be mapped, like for instance
     * VT-x control memory. Since these are rather small allocations (one or
     * two pages) MmAllocatePagesForMdl will probably be able to satisfy the
     * request.
     *
     * If the allocation is big, the chances are *probably* not very good. The
     * current limit is kind of random...
     */
    if (   cb < _128K
        && uAlignment == PAGE_SIZE)

    {
        PHYSICAL_ADDRESS Zero;
        Zero.QuadPart = 0;
        PHYSICAL_ADDRESS HighAddr;
        HighAddr.QuadPart = PhysHighest == NIL_RTHCPHYS ? MAXLONGLONG : PhysHighest;
        PMDL pMdl = MmAllocatePagesForMdl(Zero, HighAddr, Zero, cb);
        if (pMdl)
        {
            if (MmGetMdlByteCount(pMdl) >= cb)
            {
                PPFN_NUMBER paPfns = MmGetMdlPfnArray(pMdl);
                PFN_NUMBER Pfn = paPfns[0] + 1;
                const size_t cPages = cb >> PAGE_SHIFT;
                size_t iPage;
                for (iPage = 1; iPage < cPages; iPage++, Pfn++)
                    if (paPfns[iPage] != Pfn)
                        break;
                if (iPage >= cPages)
                {
                    PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)rtR0MemObjNew(sizeof(*pMemNt), RTR0MEMOBJTYPE_PHYS, NULL, cb);
                    if (pMemNt)
                    {
                        pMemNt->Core.u.Phys.fAllocated = true;
                        pMemNt->Core.u.Phys.PhysBase = (RTHCPHYS)paPfns[0] << PAGE_SHIFT;
                        pMemNt->fAllocatedPagesForMdl = true;
                        pMemNt->cMdls = 1;
                        pMemNt->apMdls[0] = pMdl;
                        *ppMem = &pMemNt->Core;
                        return VINF_SUCCESS;
                    }
                }
            }
            MmFreePagesFromMdl(pMdl);
            ExFreePool(pMdl);
        }
    }
#endif /* !IPRT_TARGET_NT4 */

    return rtR0MemObjNativeAllocContEx(ppMem, cb, false, PhysHighest, uAlignment);
}

DECLHIDDEN(int) rtR0MemObjNativeAllocPhysNC(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest)
{
#ifndef IPRT_TARGET_NT4
    PHYSICAL_ADDRESS Zero;
    Zero.QuadPart = 0;
    PHYSICAL_ADDRESS HighAddr;
    HighAddr.QuadPart = PhysHighest == NIL_RTHCPHYS ? MAXLONGLONG : PhysHighest;
    PMDL pMdl = MmAllocatePagesForMdl(Zero, HighAddr, Zero, cb);
    if (pMdl)
    {
        if (MmGetMdlByteCount(pMdl) >= cb)
        {
            PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)rtR0MemObjNew(sizeof(*pMemNt), RTR0MEMOBJTYPE_PHYS_NC, NULL, cb);
            if (pMemNt)
            {
                pMemNt->fAllocatedPagesForMdl = true;
                pMemNt->cMdls = 1;
                pMemNt->apMdls[0] = pMdl;
                *ppMem = &pMemNt->Core;
                return VINF_SUCCESS;
            }
        }
        MmFreePagesFromMdl(pMdl);
        ExFreePool(pMdl);
    }
    return VERR_NO_MEMORY;
#else   /* IPRT_TARGET_NT4 */
    return VERR_NOT_SUPPORTED;
#endif  /* IPRT_TARGET_NT4 */
}

DECLHIDDEN(int) rtR0MemObjNativeEnterPhys(PPRTR0MEMOBJINTERNAL ppMem, RTHCPHYS Phys, size_t cb, uint32_t uCachePolicy)
{
    AssertReturn(uCachePolicy == RTMEM_CACHE_POLICY_DONT_CARE || uCachePolicy == RTMEM_CACHE_POLICY_MMIO, VERR_NOT_SUPPORTED);

    /*
     * Validate the address range and create a descriptor for it.
     */
    PFN_NUMBER Pfn = (PFN_NUMBER)(Phys >> PAGE_SHIFT);
    if (((RTHCPHYS)Pfn << PAGE_SHIFT) != Phys)
        return VERR_ADDRESS_TOO_BIG;

    /*
     * Create the IPRT memory object.
     */
    PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)rtR0MemObjNew(sizeof(*pMemNt), RTR0MEMOBJTYPE_PHYS, NULL, cb);
    if (pMemNt)
    {
        pMemNt->Core.u.Phys.PhysBase = Phys;
        pMemNt->Core.u.Phys.fAllocated = false;
        pMemNt->Core.u.Phys.uCachePolicy = uCachePolicy;
        *ppMem = &pMemNt->Core;
        return VINF_SUCCESS;
    }
    return VERR_NO_MEMORY;
}

/**
 * Internal worker for locking down pages.
 *
 * @return IPRT status code.
 *
 * @param   ppMem           Where to store the memory object pointer.
 * @param   pv              First page.
 * @param   cb              Number of bytes.
 * @param   fAccess         The desired access, a combination of RTMEM_PROT_READ
 *                          and RTMEM_PROT_WRITE.
 * @param   R0Process       The process \a pv and \a cb refers to.
 */
static int rtR0MemObjNtLock(PPRTR0MEMOBJINTERNAL ppMem, void *pv, size_t cb, uint32_t fAccess, RTR0PROCESS R0Process)
{
    /*
     * Calc the number of MDLs we need and allocate the memory object structure.
     */
    size_t cMdls = cb / MAX_LOCK_MEM_SIZE;
    if (cb % MAX_LOCK_MEM_SIZE)
        cMdls++;
    if (cMdls >= UINT32_MAX)
        return VERR_OUT_OF_RANGE;
    PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJNT, apMdls[cMdls]),
                                                        RTR0MEMOBJTYPE_LOCK, pv, cb);
    if (!pMemNt)
        return VERR_NO_MEMORY;

    /*
     * Loop locking down the sub parts of the memory.
     */
    int         rc = VINF_SUCCESS;
    size_t      cbTotal = 0;
    uint8_t    *pb = (uint8_t *)pv;
    uint32_t    iMdl;
    for (iMdl = 0; iMdl < cMdls; iMdl++)
    {
        /*
         * Calc the Mdl size and allocate it.
         */
        size_t cbCur = cb - cbTotal;
        if (cbCur > MAX_LOCK_MEM_SIZE)
            cbCur = MAX_LOCK_MEM_SIZE;
        AssertMsg(cbCur, ("cbCur: 0!\n"));
        PMDL pMdl = IoAllocateMdl(pb, (ULONG)cbCur, FALSE, FALSE, NULL);
        if (!pMdl)
        {
            rc = VERR_NO_MEMORY;
            break;
        }

        /*
         * Lock the pages.
         */
        __try
        {
            MmProbeAndLockPages(pMdl,
                                R0Process == NIL_RTR0PROCESS ? KernelMode : UserMode,
                                fAccess == RTMEM_PROT_READ
                                ? IoReadAccess
                                : fAccess == RTMEM_PROT_WRITE
                                ? IoWriteAccess
                                : IoModifyAccess);

            pMemNt->apMdls[iMdl] = pMdl;
            pMemNt->cMdls++;
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
            IoFreeMdl(pMdl);
            rc = VERR_LOCK_FAILED;
            break;
        }

        if (R0Process != NIL_RTR0PROCESS)
        {
            /* Make sure the user process can't change the allocation. */
            pMemNt->pvSecureMem = MmSecureVirtualMemory(pv, cb,
                                                        fAccess & RTMEM_PROT_WRITE
                                                        ? PAGE_READWRITE
                                                        : PAGE_READONLY);
            if (!pMemNt->pvSecureMem)
            {
                rc = VERR_NO_MEMORY;
                break;
            }
        }

        /* next */
        cbTotal += cbCur;
        pb      += cbCur;
    }
    if (RT_SUCCESS(rc))
    {
        Assert(pMemNt->cMdls == cMdls);
        pMemNt->Core.u.Lock.R0Process = R0Process;
        *ppMem = &pMemNt->Core;
        return rc;
    }

    /*
     * We failed, perform cleanups.
     */
    while (iMdl-- > 0)
    {
        MmUnlockPages(pMemNt->apMdls[iMdl]);
        IoFreeMdl(pMemNt->apMdls[iMdl]);
        pMemNt->apMdls[iMdl] = NULL;
    }
    if (pMemNt->pvSecureMem)
    {
        MmUnsecureVirtualMemory(pMemNt->pvSecureMem);
        pMemNt->pvSecureMem = NULL;
    }

    rtR0MemObjDelete(&pMemNt->Core);
    return rc;
}

DECLHIDDEN(int) rtR0MemObjNativeLockUser(PPRTR0MEMOBJINTERNAL ppMem, RTR3PTR R3Ptr, size_t cb, uint32_t fAccess,
                                         RTR0PROCESS R0Process)
{
    AssertMsgReturn(R0Process == RTR0ProcHandleSelf(), ("%p != %p\n", R0Process, RTR0ProcHandleSelf()), VERR_NOT_SUPPORTED);
    /* (Can use MmProbeAndLockProcessPages if we need to mess with other processes later.) */
    return rtR0MemObjNtLock(ppMem, (void *)R3Ptr, cb, fAccess, R0Process);
}

DECLHIDDEN(int) rtR0MemObjNativeLockKernel(PPRTR0MEMOBJINTERNAL ppMem, void *pv, size_t cb, uint32_t fAccess)
{
    return rtR0MemObjNtLock(ppMem, pv, cb, fAccess, NIL_RTR0PROCESS);
}

DECLHIDDEN(int) rtR0MemObjNativeReserveKernel(PPRTR0MEMOBJINTERNAL ppMem, void *pvFixed, size_t cb, size_t uAlignment)
{
    /*
     * MmCreateSection(SEC_RESERVE) + MmMapViewInSystemSpace perhaps?
     */
    return VERR_NOT_SUPPORTED;
}

DECLHIDDEN(int) rtR0MemObjNativeReserveUser(PPRTR0MEMOBJINTERNAL ppMem, RTR3PTR R3PtrFixed, size_t cb, size_t uAlignment,
                                            RTR0PROCESS R0Process)
{
    /*
     * ZeCreateSection(SEC_RESERVE) + ZwMapViewOfSection perhaps?
     */
    return VERR_NOT_SUPPORTED;
}

/**
 * Internal worker for rtR0MemObjNativeMapKernel and rtR0MemObjNativeMapUser.
 *
 * @returns IPRT status code.
 * @param   ppMem       Where to store the memory object for the mapping.
 * @param   pMemToMap   The memory object to map.
 * @param   pvFixed     Where to map it. (void *)-1 if anywhere is fine.
 * @param   uAlignment  The alignment requirement for the mapping.
 * @param   fProt       The desired page protection for the mapping.
 * @param   R0Process   If NIL_RTR0PROCESS map into system (kernel) memory.
 *                      If not nil, it's the current process.
 */
static int rtR0MemObjNtMap(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, void *pvFixed, size_t uAlignment,
                           unsigned fProt, RTR0PROCESS R0Process)
{
    int rc = VERR_MAP_FAILED;

    /*
     * Check that the specified alignment is supported.
     */
    if (uAlignment > PAGE_SIZE)
        return VERR_NOT_SUPPORTED;

    /*
     * There are two basic cases here, either we've got an MDL and can
     * map it using MmMapLockedPages, or we've got a contiguous physical
     * range (MMIO most likely) and can use MmMapIoSpace.
     */
    PRTR0MEMOBJNT pMemNtToMap = (PRTR0MEMOBJNT)pMemToMap;
    if (pMemNtToMap->cMdls)
    {
        /* don't attempt map locked regions with more than one mdl. */
        if (pMemNtToMap->cMdls != 1)
            return VERR_NOT_SUPPORTED;

#ifdef IPRT_TARGET_NT4
        /* NT SP0 can't map to a specific address. */
        if (pvFixed != (void *)-1)
            return VERR_NOT_SUPPORTED;
#endif

        /* we can't map anything to the first page, sorry. */
        if (pvFixed == 0)
            return VERR_NOT_SUPPORTED;

        /* only one system mapping for now - no time to figure out MDL restrictions right now. */
        if (    pMemNtToMap->Core.uRel.Parent.cMappings
            &&  R0Process == NIL_RTR0PROCESS)
            return VERR_NOT_SUPPORTED;

        __try
        {
            /** @todo uAlignment */
            /** @todo How to set the protection on the pages? */
#ifdef IPRT_TARGET_NT4
            void *pv = MmMapLockedPages(pMemNtToMap->apMdls[0],
                                        R0Process == NIL_RTR0PROCESS ? KernelMode : UserMode);
#else
            void *pv = MmMapLockedPagesSpecifyCache(pMemNtToMap->apMdls[0],
                                                    R0Process == NIL_RTR0PROCESS ? KernelMode : UserMode,
                                                    MmCached,
                                                    pvFixed != (void *)-1 ? pvFixed : NULL,
                                                    FALSE /* no bug check on failure */,
                                                    NormalPagePriority);
#endif
            if (pv)
            {
                NOREF(fProt);

                PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)rtR0MemObjNew(sizeof(*pMemNt), RTR0MEMOBJTYPE_MAPPING, pv,
                                                                    pMemNtToMap->Core.cb);
                if (pMemNt)
                {
                    pMemNt->Core.u.Mapping.R0Process = R0Process;
                    *ppMem = &pMemNt->Core;
                    return VINF_SUCCESS;
                }

                rc = VERR_NO_MEMORY;
                MmUnmapLockedPages(pv, pMemNtToMap->apMdls[0]);
            }
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
            NTSTATUS rcNt = GetExceptionCode();
            Log(("rtR0MemObjNtMap: Exception Code %#x\n", rcNt));

            /* nothing */
            rc = VERR_MAP_FAILED;
        }

    }
    else
    {
        AssertReturn(   pMemNtToMap->Core.enmType == RTR0MEMOBJTYPE_PHYS
                     && !pMemNtToMap->Core.u.Phys.fAllocated, VERR_INTERNAL_ERROR);

        /* cannot map phys mem to user space (yet). */
        if (R0Process != NIL_RTR0PROCESS)
            return VERR_NOT_SUPPORTED;

        /** @todo uAlignment */
        /** @todo How to set the protection on the pages? */
        PHYSICAL_ADDRESS Phys;
        Phys.QuadPart = pMemNtToMap->Core.u.Phys.PhysBase;
        void *pv = MmMapIoSpace(Phys, pMemNtToMap->Core.cb,
                                pMemNtToMap->Core.u.Phys.uCachePolicy == RTMEM_CACHE_POLICY_MMIO ? MmNonCached : MmCached);
        if (pv)
        {
            PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)rtR0MemObjNew(sizeof(*pMemNt), RTR0MEMOBJTYPE_MAPPING, pv,
                                                                pMemNtToMap->Core.cb);
            if (pMemNt)
            {
                pMemNt->Core.u.Mapping.R0Process = R0Process;
                *ppMem = &pMemNt->Core;
                return VINF_SUCCESS;
            }

            rc = VERR_NO_MEMORY;
            MmUnmapIoSpace(pv, pMemNtToMap->Core.cb);
        }
    }

    NOREF(uAlignment); NOREF(fProt);
    return rc;
}

DECLHIDDEN(int) rtR0MemObjNativeMapKernel(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, void *pvFixed, size_t uAlignment,
                              unsigned fProt, size_t offSub, size_t cbSub)
{
    AssertMsgReturn(!offSub && !cbSub, ("%#x %#x\n", offSub, cbSub), VERR_NOT_SUPPORTED);
    return rtR0MemObjNtMap(ppMem, pMemToMap, pvFixed, uAlignment, fProt, NIL_RTR0PROCESS);
}

DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, RTR3PTR R3PtrFixed, size_t uAlignment, unsigned fProt, RTR0PROCESS R0Process)
{
    AssertReturn(R0Process == RTR0ProcHandleSelf(), VERR_NOT_SUPPORTED);
    return rtR0MemObjNtMap(ppMem, pMemToMap, (void *)R3PtrFixed, uAlignment, fProt, R0Process);
}

DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, size_t cbSub, uint32_t fProt)
{
    NOREF(pMem);
    NOREF(offSub);
    NOREF(cbSub);
    NOREF(fProt);
    return VERR_NOT_SUPPORTED;
}

DECLHIDDEN(RTHCPHYS) rtR0MemObjNativeGetPagePhysAddr(PRTR0MEMOBJINTERNAL pMem, size_t iPage)
{
    PRTR0MEMOBJNT pMemNt = (PRTR0MEMOBJNT)pMem;

    if (pMemNt->cMdls)
    {
        if (pMemNt->cMdls == 1)
        {
            PPFN_NUMBER paPfns = MmGetMdlPfnArray(pMemNt->apMdls[0]);
            return (RTHCPHYS)paPfns[iPage] << PAGE_SHIFT;
        }

        size_t iMdl = iPage / (MAX_LOCK_MEM_SIZE >> PAGE_SHIFT);
        size_t iMdlPfn = iPage % (MAX_LOCK_MEM_SIZE >> PAGE_SHIFT);
        PPFN_NUMBER paPfns = MmGetMdlPfnArray(pMemNt->apMdls[iMdl]);
        return (RTHCPHYS)paPfns[iMdlPfn] << PAGE_SHIFT;
    }

    switch (pMemNt->Core.enmType)
    {
        case RTR0MEMOBJTYPE_MAPPING:
            return rtR0MemObjNativeGetPagePhysAddr(pMemNt->Core.uRel.Child.pParent, iPage);

        case RTR0MEMOBJTYPE_PHYS:
            return pMemNt->Core.u.Phys.PhysBase + (iPage << PAGE_SHIFT);

        case RTR0MEMOBJTYPE_PAGE:
        case RTR0MEMOBJTYPE_PHYS_NC:
        case RTR0MEMOBJTYPE_LOW:
        case RTR0MEMOBJTYPE_CONT:
        case RTR0MEMOBJTYPE_LOCK:
        default:
            AssertMsgFailed(("%d\n", pMemNt->Core.enmType));
        case RTR0MEMOBJTYPE_RES_VIRT:
            return NIL_RTHCPHYS;
    }
}

redpajama_set_name: RedPajamaGithub


text:
PATAGONIA UNKNOWN
Alejandro Sala, Photographer, followed Bruce Chatwin storie, Patagonia Unknown exhibited in New York, a masterpiece.. goes beyond !! His Wild Places..adds originality, beauty, emotions, but most all captures a state of mind a certain times frames. A masterpiece goes beyond, adds originality, beauty, emotions, but most all captures a state of mind a certain times frames. With this photographic reportage, Alejandro Sala takes these features and interprets through his camera lens with the intention to celebrated Bruce Chatwin's Patagonia. Forty years ago, the mastery of Bruce Chatwin created a myth by Writing " In Patagonia", a-legend that continues to live still... The author has travelled extensively throughout Argentina's Patagonia (2005 -2013) to catch the scene of this land and its inhabitants using analogue &digital, photography as a means to tell stories. Alejandro is talent is to use black and white images to narrate his travels. Sala's extraordinary mastery of the technique and his virtuosity in the darkroom, using the traditional analogue process based on the translation of light into precise tonal relationship, intensifies the cleanliness of the whites and the depth of the tonal values and contrasts. His works of art are not only images, but also complex photographic illustration with a notable use of light. Each photo not only tells a story but transmits emotions. Images from the book published in 2014 by Alejandro Sala, that received from Argentina Government in 2016th the Nation Branding for his work about Southern Patagonia, The images work concentrates on the visual power of stunning, captivating landscapes, from the Rio Colorado to Straits of Magellan to the endless desolate plains of Southern Patagonia. PATAGONIA UNKNOWN PHOTOGRAPHY ART BOOK - Hardcover Text: English - Edition 25cm x 25cm, Page: 134, 80 Pictures, 16 Color, 64 Black & White. Release date: March 7, 2019 BUY THE BOOK: https://www.blurb.com/b/9309529-patagonia-unknown PATAGONIA -Images Collections -The South of the Word when the World Finished- PHOTOGRAPHY ART BOOK - Hardcover Text: English - Edition 30cm x 30cm, Page: 68, 44 Pictures, Black & White. Release date: April, 2016 BUY THE BOOK: https://www.blurb.com/b/7055883-patagonia-the-south-of-the-world-when-the-world-fi © Alejandro Sala | architecture+ photography
THE GATE OF THE ANDES
Alejandro Sala | Professional Photographer | AMAZING COLORS | captures images wild-places | Planet Mars ?...is part of an intact, untouched world, that often reminded me of the landscape pictures of Planet Mars sent by NASA in January 2004. The Puna region, on which this images "The Gate of the Andes series " from Book published in 2019, focuses on, spreads on part of the northern territories of Chile and Bolivia, on the southern part of Peru and on the north-eastern Argentinian territories. This region, impossible to describe with words, is part of an intact, untouched world, that often reminded me of the landscape pictures of Planet Mars sent by NASA in January 2004. The analogies are several, especially as far as the scenery is concerned: the landscape is scattered with dunes, craters and saltwater deposits. The Puna is also one of the few existing intact ecosystems in the whole world, enclosed in an upland located at almost 3500 meters (12.000 feet) on the sea level. In a place where the quantity of oxygen is reduced to 50% due to elevation, - 4000m on level sea- where the precipitations are scarce and the aridity and temperature range are very high, it is not surprising that the development of the vegetation is nearly non-existent. Surely the climate change which has been taking place in the last years has only worsened the situation. The global demand of renewable energy has seen a growth of 200% in the last decade, investing the so-called lithium triangle, where the biggest deposits of lithium are to be found: Atacama (Chile), Uyuni (Bolivia) and Antofagasta (Argentina) constitute 80% of the supply of the whole planet. Indeed in the Puna region, the extraction of lithium – also called white gold – represents the price of the development of modern society insofar as it produces a remarkable reduction of the water resources and of the access to drinking water for the inhabitants of the region, in this way modifying the whole ecosystem. MORE: Travel notes by Alejandro Sala photographs in "The Gates of the Andes. The Gate of The Andes Published by AS editions, USA 2019 PHOTOGRAPHY ART BOOK - Hardcover Text: English - Edition 31cm x 28cm, Page: 134, 61 Pictures, 44 Color, 17 Black & White. BUY THE PHOTO ART BOOK: https://it.blurb.com/b/9715671-the-gate-of-the-andes © Alejandro Sala | architecture+ photography
AS •atelier• architecture + photography
PHILOSOPHY & PRACTICE
PHOTOGRAPHY - SERVICES
EXHIBITIONS+BOOKS

redpajama_set_name: RedPajamaCommonCrawl


text:
import unittest
import modipyd
import tests

class TestModipyd(tests.TestCase):
    """Tests modipyd module"""

    def test_logger(self):
        self.assertNotNone(modipyd.LOGGER)

if __name__ == '__main__':
    unittest.main()


Write Solutions' proofreading service will ensure that your written communication is free from errors and mistakes. We will check your important document for typos, spelling mistakes and grammatical errors.
Your communication says a lot about you and your brand. Dull text, spelling mistakes and bad grammar can give an impression of unprofessionalism and poor attention to detail.
So, whether you are writing to existing clients, completing a business-critical tender document or are issuing an important press release, Write Solutions' proofreading service will give you peace of mind knowing there are no embarrassing or potentially costly mistakes.


Dr Ben Cleveland, University of Melbourne, joined us recently for an education forum with educators and designers in Brisbane. DR organised the forum in collaboration with our client John Paul College, one of the state's largest independent schools. The objective was to set some challenging and forward looking foundations for a new master plan project.
Dr Cleveland spoke about how changing approaches to teaching and learning impact on what's required of education designers. The forum speakers also included other educators, designers and a sustainability specialist.
DR has completed master plans for state and independent schools here in Queensland and in Victoria. The curated forum is a strategy the practice uses to create a strong foundation for new master plan projects, drawing on currrent research and the thinking of leading educators.
Dr Ben Cleveland is a Senior Lecturer in the Faculty of Architecture, Building and Planning at the University of Melbourne, and is Associate Director of the Learning Environments Applied Research Network (LEaRN). He currently leads a new reseach project 'Building Connections: Schools as Community Hubs'. The project aims to support school systems and planning authorities to rethink how schools engage with local communities.
DR is active in this area of education research, having worked with the Community Hubs and Partnerships team in Queensland to explore the concept of community hubs in regional and metropolitan settings.


The NAPOLINO TILED OVEN is a much smaller version of our professional Napoli Oven. This is one of the most beautiful residential wood fired pizza ovens anywhere. But don't kid yourself. You can bake the very best 2 minute Pizza, every bit as tasty as the large commercial ovens. If you're looking for a gift for the chef who has everything, may we suggest the Napolino oven. This would certainly be a stand-out present that no one will forget anytime soon. These units come fully assembled in 24"x31" and 28"x35" cooking floor and both are available with and without stands. This oven will heat up to 750 degrees in as little as 20 minutes.
Give us a call and let us tell you more about this wonderful oven.
The Napolino pizza oven is available in two sizes: the Napolino60 offers a 24" cooking floor, while the Napolino70 delivers more cooking space with a larger 28" cooking floor. Each pizza oven is available with or without a metal stand, so that the Napolino can be either placed on a deck or patio using the Forno Bravo stand, or installed on a custom stand or grill island.
Like every Forno Bravo pizza oven, the Napolino ovens are built using high-tech refractories and space-age insulators, ensuring optimal high temperature baking performance for perfect Pizza Napoletana and excellent heat retention for baking and roasting.
The Napolino Series pizza oven features a traditional Naples-style ventilation system, where hot air exhausted from the oven is routed back over the oven dome and then vented through a vertical stainless steel chimney pipe in the center of the oven. This ventilation method helps evenly and efficiently heat the oven dome, as well as help the oven maintain the high temperatures required for baking Pizza Napoletana.
The Napolino pizza oven series is a Naples-style fully assembled oven designed for backyard baking. This beautiful and innovative pizza oven features the traditional center vent and beautifully tiled enclosure found in pizzerias in Naples (and around the world), all in an oven sized for home pizza making, baking, and roasting. The name Napolino, an affectionate, diminutive version of Napoli, says it all.
Made from the Giardino outdoor wood burning pizza oven core, the Napolino wood fired pizza oven provides the industry's fastest heat-up times (20 minutes) and excellent heat retention. This makes it easy to cook authentic wood fired pizzas in under 2 minutes.
Custom colors and tiling available.
We make the oven dome using a 38% alumina (81% alumina and silica) refractory malaterial cast in a two-sided, vibrated form—a higher quality process than many competitor home pizza ovens.
Ultra-premium insulation, both in quality and thickness, for outstanding heat retention. Each pizza oven includes a minimum of 3" of high-tech ceramicinsulation blanket dome and 2" of ceramic board floor insulation — eliminating the need for old-fashioned and inefficient vermiculite or Perlite-based insulating concrete.
This video shows how our new crates make it incredibly easy to receive and move your Napolino with a stand into position.
Countertop Napolino pizza ovens need to be lifted off the pallet and placed manually on your hearth or countertop.


for $174,000 with 3 bedrooms and 2 full baths. This 1,744 square foot home was built in 1953 on a lot size of 0.1891 Acre(s).
Awesome renovated brick rancher located at the corner of Westover Ave & Hampton Rd. New features include the roof, windows, gas furnace, central air unit, kitchen, bathrooms, refinished hardwood floors, etc. The kitchen has new cabinets, counter tops, stainless steel appliances, flooring and lighting. Both bathrooms were redone with a new tub & surround/new shower stall and new fixtures, vanities, toilets, mirrors and lighting. All new ceiling fans in the bedrooms, living room, dining room and family room. The hardwood floors have been refinished and new laminate flooring was installed in the bathrooms and carpet in the family room. New landscaping has been done and the rear driveway was redone.


For the first Minecraft session of 2018, I worked on the train station that I'd started in December.
Here's where I'd left off; I'm going to build a train station over where I have the tracks, and then probably fill in the indentation above with two more floors of buildings.
Here's a higher angle; the walls look like they should go where the grass currently is, just past the stone.
The right side wall, with a larger door that will connect to the rest of the complex.
The left side wall, with a smaller, outside door.
The view between the walls, where the tracks will extend.
Putting a front facade in place.
The side view after adding the facade.
That gave me the basic outline for the train station. I was planning to extend the sloped part of the roof most of the way back, stopping where I reached the depth of the non-indented part of the mountain walls. And I didn't have it slope all the way to the middle of the roof, because I wanted to do something a little different in the middle, working in glass somehow.
Looking at those doors, though, the light wood above them didn't seem quite right. So I decided to look at the doors on the building on top of the mountain, for comparison.
One of the doors on the top of the mountain; I like this red brick as an accent.
The other door up top.
Red brick looks better here.
But lighting is important, otherwise the brick won't have the proper glow.
The current state of the structure.
After fixing that, I started work on the roof.
Extending the roof out from the facade.
A close up view of the roof.
The view on the inside, leaving room for something else in the middle.
The front is pretty plain, hopefully it'll look better once I've aded something else in the middle?
Here it is with glass at the top.
This idea I had of glass at the top didn't magically fix anything; the front, in particular, looked pretty boring. So I decided to spend some time trying to improve that.
First I tried banners; I didn't really like either the shape of the banners or the shade of the red ones, though.
Next was pairing the red brick from above the doors with some of the grey wool that I'd also used as an accent up top; but that grey stripe didn't work for me.
Removing the grey stripe wasn't any better, though: balance was missing.
This is starting to get somewhere: use the grey as an accent, and have a bit more space above the red?
Two strips of grey works well, too. But do I really only want one row of glass?
Filling in the gaps between the grey with glass.
That seemed at least potentially workable, so I went to cap it off to see how it would work as part of a complete roof.
Capping off the glass with a stone top.
The view from the inside; I like how the glass band works along the sides.
A bit of light always helps, though.
That seemed good enough; now to put in the finishing touches. First, filling in the gap in the mountain wall so I'd have a place for the second story.
Building up the mountain exterior straight up from where I'd ended the roof.
Here's the inside view; pretty narrow, my guess is that I'll want to dig into the mountain some?
Adding a little more definition to the entrance.
Installing the train tracks to connect the station with the main city.
Putting rooms above the train station in the side of the mountain.
Creating some buildings that connect the train station to the exit of the passage through the mountain.
Next I went to check on other people. Pat didn't have anything that he wanted to show, but Dan and Miranda had both made some progress.
His area is actually pretty close to the city; now that I know where it is, I can just travel there instead of teleporting.
This flower thing is new; it's built on top of where he was excavating with TNT last month.
A top down view of the flower.
The stem goes down quite far; he'd excavated a lot!
The base of the flower.
A closer look at the terrain nearby.
Zooming back out a bit.
A floating island with a bottom of colored glass.
A top-down view of the floating building.


text:
Robert Platt es un deportista francés que compitió en piragüismo en la modalidad de eslalon. Ganó una medalla de plata en el Campeonato Mundial de Piragüismo en Eslalon de 1979, en la prueba de C2 por equipos.

Palmarés internacional

Referencias

Piragüistas en eslalon de Francia
Nacidos en Basilea

redpajama_set_name: RedPajamaWikipedia


text:
You are Here: Home Latest Posts Events The Best of Consumer Electronics Show (CES) 2016
The Best of Consumer Electronics Show (CES) 2016
Many will claim that this year's CES was not that great. The largest consumer electronics expo of the year was mostly about cars this time around. However, as always CES was the platform for big and upcoming names in tech to demonstrate not just existing products but also cool, futuristic concepts and technology. As there are essentially countless products to go through at CES, we have chosen to highlight the best product in our opinion in each category so let's get started!
Best Automobiles
This one was tough to call because we had an overhyped concept car from Faraday Future which was cool but is at least 6-7 years away from hitting the streets. Therefore the best automobile goes to the Chevrolet BOLT EV. This fully electric production vehicle will be the first car to actually compete against Tesla at the lower end of the market with a starting price under $30,000. The arrival of the BOLT is even more exciting because Tesla is set to unveil their entry level Model 3 automobile sometime within the next few months. The BOLT can travel up to 200 miles on a full charge and has a 0-60mph time of under 7 seconds.
Best Computer
This one was a no brainer. The Razer Blade Stealth easily takes this honour by offering a truly portable gaming option. There were great products from Samsung, Lenovo and HP. The ultrabook is only .52 inches thick and has a beautiful black aluminium body. The $990 laptop comes with a 6th Generation intel Core i& processor, 8GB RAM and a 4k display. The keyboard keys each have an individual LED and can be configured to match your taste.
Source: Android Authority
CES this year did not have that many smartphone options. Still, coming up with a winner was difficult. We were initially torn between Huawei's new Mate 8 and Honor 5X but ultimately ended up with the LeTV LeMax Pro.
Why you ask?
Well it is because the LeMax Pro is the first device to debut with the much anticipated Snapdragon 820 chip. The Snapdragon 820 will go on to power many 2016 flagships and the LeMax Pro gave us an idea of how we can expect the chip to perform. The fact that LeTV managed to beat everyone to unveiling an 820 powered device and that it is also a rising brand in the west makes this accomplishment even more appreciable. Sorry Huawei but luck was just not on your side.
Best Smartwatch
The smartwatch scene at CES was not very exciting either. The Fitbit Blaze raised a few eyebrows but it wasn't very attractive and was more fitness tracker than smartwatch. A surprise entry into this category came from longtime watchmaker CASIO. CASIO unveiled the WSD-F10, a rugged Android Wear powered device that embodies CASIO's classic heavy duty watch style.
The reason this is important is because CASIO is a known watchmaking brand and its interest in the smartwatch market means that the category is going to see some much needed competition. The company made this watch for those who enjoy the great outdoors. The wearable is Military Standard MIL-STD-810G compliant and is water resistant up to 50m. It also comes with the ability to switch to a monochrome barebones mode which will extend battery life to 30 days.
Best Concept
Source: Engadget
The Faraday Future concept car was very interesting but it is not taking away any awards tonight. The company hyped their concept car too much and didn't really have anything that interesting to show. Their vehicle was essentially a dummy which only managed to spark more unanswered questions. The winner for this category may come as a surprise to you.
LG claims the honour with their revolutionary rollable displays. This product could completely change the way we consume media in the future. Its implementations go well beyond smartphones, tablets and TVs. Imagine a car dashboard covered in this material. If LG manages to combine this tech with their work on transparent displays, augmented reality could become very very real and accessible.
Alavi Wahid
Alavi, Executive Editor of Techetron, is your average speckle faced guy with a huge appetite for food and an even greater craving for tech. He is always keeping an eye out for the latest and greatest in the world of technology and is on a constant prowl for the ultimate mobile device. He loves writing, reading tech blogs, playing golf and customizing his gadgets. Connect with me on Google+
bd mobile ok, microsoft surface pro 3 price in bangladesh, microsoft 540 price in bd, symphony h400 photo, facts about drones, primo G5, best app to create powerpoint on ipad, best laptops for college, best laptop brand in bangladesh, walton x4 pro review
Forza Motorsport 6 : Apex[Beta] has come to Windows 10.
Chances are if you like racing games, you've heard of the Forza franchise. Chances are, you haven't played…
Rumor Corner
Rumor Mill Week 3: 5 Top rumors you should not miss
1. Nexus X Rumour has it, Google is working on a new Nexus phone and it shall reportedly…
Samsung To Release Galaxy SIII Mini ?
The tech giant's branch in Germany has started rolling out invitations to the press regarding an event where…
Xiaomi launches Mi 5S and Mi 5S Plus
Xiaomi has finally launched its new flagship line-up, the Xiaomi Mi 5s and the 5s Plus. The Xiaomi…


text:
Scarcity in Paradise
Friday, February 7, 2020 - 13:19. Updated on Friday, April 17, 2020 - 12:39.
Nuku'alofa, Tonga
The first human settlements of Vava'u between 850-810 BC faced scarce fish supplies and limited sustainability of reef foraging efforts. The story of the Lapita people is traced by careful archaeological excavations of their settlements at Ofu, Pangaimotu, Otea and Falevai, marked by the pottery fragments they left behind.
Decorated Lapita ceramic fragments from the Otea site, Kapa Island, Vava'u. Photo: David V. Burley.
By David V. Burley
Vava'u is as close to a tropical paradise as one can possibly imagine. Calm sheltered harbours, blue-green lagoons, white sandy beaches, numerous offshore islets, steeply rising slopes covered in lush green foliage, and breath-taking scenery are images immediately coming to mind. Expectations were high in 2003 as I planned an archaeological project to focus on the islands' first residents. With three seasons of field work in the plan, it was difficult not to smile.
The coral limestone islands of Tonga began to emerge from the ocean two and a half million years ago. 'Uta Vava'u, the largest island in the Vava'u Group, was the first to appear. Eventually formed as an expanded series of platforms, it now loftily rises to over 200 metres on its northwestern coast. Vava'u Tahi, incorporating the 70 other islands in the group, are strewn southward, with ever diminishing size as they stretch toward Ha'apai.
The Vava'u project began with surveys on 'Uta Vava'u and 23 other islands where human settlement may have been possible. Finding Lapita sites is always a complex and difficult task, one needing to consider ancient changes in landscape, sea level and numerous other factors. The search in Vava'u was enhanced immensely by regional geology. Island subsidence had been in sequence with falling sea levels since the time of human arrival. The shorelines examined in 2003 were pretty much the same as encountered by the first Lapita canoes.
That first season of work was successful in finding sites with decorated Lapita ceramics. These occurred on Mafana island, in the village of Ofu on Ofu island, on the southeast coast of Pangaimotu island, and in Otea and Falevai villages on Kapa island. Archaeological excavations at Ofu, Pangaimotu, Otea and Falevai over the next two years give detail and insight into initial human presence.
People first arrived in Vava'u between 850 and 810 BC, establishing themselves on the south central islands offshore of 'Uta Vava'u. The earliest sites at Ofu, Pangaimotu and Otea are all but identical in their age, and they are coincidental with the oldest sites in Ha'apai. This can be explained only by a large-scale and intentional expansion of people from Tongatapu through Ha'apai into Vava'u in the latter decades of the 9th century BC. As written of in earlier stories, it was a brilliant strategy, one laying claim to all of Tonga. We also know that the migration continued beyond Vava'u to Niuatoputapu, this documented in the 1970s discovery and excavation of a Lapita site near Vaipoa village.
The pottery and other artifacts from Vava'u are typical of Lapita assemblages in Tonga. Ceramic decorations have open and simplified motifs, but where occasional vessels retain complex elements and forms. Other artifacts reflect a concern with personal adornment, including shell beads, rings, bracelets and the like. Fine bird bone needles were probably used to attach brightly coloured feathers to mats and baskets.
Bird bone needle from Ofu, Ofu Island, Vava'u. Photo: David V. Burley
The volcanic stone used for 'umu rock, adzes and other artifacts, was assumed to come from Late, a volcano located 60 km to the southwest. A trip to Late in 2003 to collect samples for comparison turned into an exhilarating adventure as our inflatable dinghy came crashing ashore on an inhospitable coast.
Extinct parrot
Excavations in Vava'u continued to document the diversity of bird populations in Tonga prior to human presence. From excavations on Pangaimotu, an extinct form of rail (veka) was recovered and named Hypotaenidia vavauensis, the name reflecting its presence only in Vava'u. At Ofu, 144 bones were collected from a long-eaten meal of the extinct pigeon Ducula shutleri. This species was 2.5 times larger than the lupe currently found in Tonga. It also is the largest species of Ducula yet documented for Oceania. And from both Ofu and Pangaimotu, bones of the extinct parrot Eclectus infectus were identified. A possibility that this species survived into more recent times may be illustrated in a sketch from the Alejandro Malaspina excursion to Vava'u in 1793.
Vava'u bird life aside, excavations of other types of food remains at these sites have an unexpected story to tell. That story, in its essence, is one of scarcity. Fish remains were shockingly limited! The number of fish bones per 100 litres of excavated deposits at Ofu and Otea, for example, is 98% less than similar measures from Lifuka and Ha'afeva islands in Ha'apai. Shellfish counts and species diversity are similarly impoverished, illustrating limited productivity, or at least limited sustainability, for reef foraging efforts. High sediment influx and limited reef growth in many of the inlets and bays on 'Uta Vava'u, and reduced biogenic production from low nutrient levels in western Vava'u, amplify the problems even further. The presence of Lapita settlements on the southcentral islands of Vava'u is a clear reflection of this diminished ecosystem.
The inadequacies of the reef for subsistence requirements was consequential for other aspects of settlement. To ensure a community's food supply, all of the Lapita sites were purposely located next to a wetland or swampy ground. These freshwater enclaves would support taro gardens, even when rainfall patterns were unknown, or where droughts might occur. An American palynologist, Patricia Fall, extracted a core sample from the Avai'o'vuna swamp adjacent to the Lapita site on Pangaimotu island in the late 1990s. Her analysis conclusively identified taro pollen from the period of first human arrival. She also has evidence for Lapita introduction to Vava'u of sugarcane (tō) and cordyline (si).
Polynesian Plainware phase
My archaeological surveys throughout Tonga have not exclusively been related to first settlement. There also has been concern with sites of the following Polynesian Plainware phase. These sites date between 700 and 400 BC and are characterized by undecorated ceramics as the name implies. The Polynesian Plainware phase on Tongatapu and throughout Ha'apai is characterized by major population growth and settlement expansion. This was not the case in Vava'u. Occasional ceramic sherds were found scattered across 'Uta Vava'u and many other islands, but only twelve small Plainware settlements were identified. Most, again, were located on offshore islands to the south. The Vava'u population remained small long after the Lapita period ended.
Otea kelea
Excavation at Otea, Kapa Island, 2005. The compacted layer of kelea shell is located at the head level of Dr. Sean Connaughton (Simon Fraser University). This layer is dated between 450 and 550 AD. Photo: David V. Burley.
Of the stories to be told from the two seasons of excavation, Otea has the most peculiar. This is not about first settlement at Otea, but an event that occurred sometime between 450 and 550 AD.
As excavations were taken downward through washed in clay, later settlement features and other occupation debris, the crew suddenly encountered a 15 to 20 cm thick layer of compacted shell. It was a rubbish layer, laid down as a single occurrence and without other types of archaeological materials mixed in. The layer consisted almost completely of a single species of sea snail, Strombus luhuanus, or kelea as identified by the Tongan excavators. Kelea are present in other deposits at Otea, but the sheer quantity sets this layer apart. My calculation of the volume extracted from the excavation alone was 2.5 cubic metres, the rough equivalent of 150 wheelbarrow loads. This was more than enough shell to fill the back of a half-ton truck.
What the event represents, where the kelea was acquired, how it was transported to Otea, and how so many were cooked are puzzles unresolved. The Otea kelea stand out as an ecological anomaly on what otherwise seemed a landscape of scarcity.
Dr. David V. Burley is a Professor of Archaeology at Simon Fraser University in Burnaby, BC, Canada. He has carried out archaeological studies in Tonga since 1989.
More articles in this series:
'Ata and its archaeology
The Lapita origins of Tongan ngatu and design
Early settlement of Ha'apai brilliantly laid title to islands
Taupita –Tonga's earliest known game
The first Tongans
Partial map of Vava'u Island group. Stars are Lapita settlement sites where excavations were undertaken in 2004 and 2005. The dot is an unexcavated Lapita site on Mafana island.
Kelea shell (Strombus luhuanus) in sieve at Otea, 2005. Many of these specimens are larger than the norm for this species today. Photo: David V. Burley.
Ofu Village beach at dusk, 2003. Mafana Island in the background. Photo: David V. Burley.
Islands to southeast in Vava'u, 2003. Larger islands from front to back are 'Olo'ua, Mafana and Ofu. Early sites with decorated Lapita ceramics occur on Mafana and Ofu. Photo: David V. Burley.
Shoreline on the volcanic island of Late with lava flow and boulders down to waters edge. The volcanic boulders and cobbles provided early settlers in Vava'u with tool stone for adzes, pounders and other artifacts, as well as 'umu rock for cooking. Photo: David V. Burley.
David V. Burley
Tongan prehistory
Lapita settlement


text:
Around the Moon: October Newsletter
I began September by flying to Houston to spend Labor Day with my kids. As always, we visited one of my favorite steak restaurants, Vic & Anthony's. The next night I took my kids to see Drake and Future in concert at the Toyota Center. The following day we had a BBQ at my sister's house and watched college football all day, enjoying a great spread of food, including some amazing bbq from my brother-in-law's 12-foot smoker. After Labor Day, I flew back to Seattle to tape Seahawks All-Access and get the Seahawks regular season underway.
Squaaaaaad! 🔥🔥🔥
A post shared by NFL (@nfl) on Sep 25, 2016 at 9:37am PDT
I traveled down to the S1M offices in Irvine for some important meetings, including Elite Golf Events and Tournaments to finalize our new three-year partnership which will provide our Aggregated Marketing Platform to over 5,700 golf tournaments annually.
The main reason for the trip, however, was our Sports 1 Marketing fantasy football draft. We had a big buffet of game-day food including wings and pizza to accompany our 14-person draft. I have a really solid team led by Eli Manning, David Johnson, and Amari Cooper and even though I got off to a slow start, I'm looking forward to turning my team around.
I flew back up to Seattle for our home opener against the Miami Dolphins, where we had a dogfight. We ended up coming back in the final forty seconds when Russell Wilson hit Doug Baldwin for a short touchdown pass to win the game 12-10.
The following week I had an interesting conference call with Harold Reynolds, former MLB player, and the famous sports film producer Gary Waksman to discuss an upcoming film project. I look forward to being able to share more with you on the project in due time.
The next week I had a lot of interviews locally in the Seattle area to promote our Fashion First fundraiser. In its 16th season, Fashion First is the longest running independent fashion show in Seattle, and this year we raised over $80,000. With those funds, we will be able to provide a record number of scholarships for students in the Western Washington area in 2017. Thank you to everyone who attended and those who graciously donated!
The next morning, I jumped on a flight back down to Southern California to prepare for our Sunday matchup against the LA Rams. On Saturday night, I met up with friends at Nick's Manhattan Beach for dinner, then joined my good friend Colin to celebrate his birthday. The next morning, we opened up the Coliseum after a 24 year NFL absence, in another hard fought divisional game against the Rams. Unfortunately, we ended up losing 9-3 in a defensive thriller.
I flew to Houston on September 20th to be a part of the Taste of the Nation at the Corinthian, which is a historic ballroom in downtown Houston. The purpose of the event was to showcase forty different local restaurants, chefs, and mixologists, as well as raise awareness and money for the No Kid Hungry project. I was mainly there to mingle with fans, take photos, sign autographs, and to help raise awareness for the cause and end childhood hunger.
From Houston, I flew back to Seattle to prepare for our game against the San Francisco 49ers on Sunday afternoon. Our team came out of the locker room with a lot of energy and enthusiasm, scoring on the third play of the game on our way to a 37-18 rout of our division rivals.
After taping Seahawks All-Access on Monday, I had lunch with Richard Adler who is a board member of the Brain Injury Alliance of Washington. They deal with concussions and are focused on ways to make athletics safer for kids to play. I am going to be involved in some of their events and initiatives moving forward because traumatic brain injuries are a subject that's very near and dear to me.
I was involved in a pretty interesting article with The Undefeated about the Carolina Panthers and the impacts and distractions, if any, the Charlotte protests might be for the team, especially Cam Newton. I was also interviewed for another intriguing article by Bleacher Report regarding the highly anticipated game between Louisville and Clemson, who have two of the most dynamic quarterbacks in college football in Lamar Jackson and Deshaun Watson. The article focused on the term "Dual-Threat" which Lamar Jackson has no problem with. Conversely, Deshaun Watson believes it's a racially biased term because he believes it portrays him as a runner and not a passer. My opinion is that I would much rather be labeled a dual threat quarterback, rather than be labeled as one-dimensional. The most important thing for a quarterback is that your passing is always the stronger component of the dual-threat, and NFL teams will find you.
On Thursday night, I hopped on a redeye to New York City to prepare for our Sunday game against the Jets, which we won 27-17. However, prior to that, I had my two daughters fly in from Houston, who are huge football fans. They are even bigger fans of the musical Hamilton, which has won eleven Tony Awards. I surprised them with tickets to the musical, and we spent quality time in the city enjoying the food and sites.
As you can see, the month of September was a very, very busy month as usual. I am very pleased with the outcome of our fundraiser with Fashion First and what we will be able to do with the funds raised. I'm also happy with the start the Seahawks have had at 3-1. I am really looking forward to the month of October, as we have a huge BBQ cook-off fundraiser with the American Royal in Kansas City to benefit the Crescent Moon Foundation. There's not much better than eating delicious food and raising money for more scholarships in the Kansas City area. The Seahawks also have a game at the end of the month at the New Orleans Saints on Halloween, which I am really looking forward to and should be a lot of fun.
David Meltzer's Upcoming Events
The Greenbrier
White Sulphur Springs, WV — October 11th
TEDxMission Viejo
Mission Viejo, CA — October 14th
Tulane Law School
New Orleans, LA — October 17th
Breakfast Meets & Hot Seats
Irvine, CA — October 19th
ENP Global Leadership 2020
New York, NY — October 26th
Dynamic Disruption Sales & Marketing Summit
San Diego, CA — October 27th
SF Executive Club
San Francisco, CA — November 4th
Beverly Hills Bar Association
Beverly Hills, CA — November 16th
AMP Set To Make History on November 23rd at Barclays Center
We will be hosting the first ever Virtual Gift Night at the Barclays Center on November 23rd as the Brooklyn Nets face the Boston Celtics. Our title sponsors will be featured on all traditional media assets in the stadium, and be featured in the Virtual Incentive Program. In total, we will host 34 Virtual Gifts Nights this season split evenly between the Brooklyn Nets and New York Islanders games. Contact us for more information how you can be involved.
Fashion First Seattle
September was fashion month around the world and Crescent Moon Foundation took part on September 16th, at Fashion First Seattle as the sole beneficiary of the evening. Sports 1 also sponsored the fashion show providing the Virtual Incentive Program gift bags to all attendees. The fashion show was a huge success and raised over $80,000 for the Crescent Moon Foundation!
Joe Namath Golf Tournament / New York Trip
The Sports 1 Marketing team made the annual trip to New York for the Joe Namath Celebrity Golf Classic, which features over 110 athletes and celebrities playing alongside attendees at Bethpage state golf course. David made a stop at St. Johns University to speak with the Sports Management Society and visit two of our summer trainees.
David is getting together with Barbara Corcoran, Rob Dyrdek, and many more to bring THINK: The Legacy of Think and Grow Rich film to life. The Indiegogo campaign successfully raised over $100k to finish the final round of funding for the film. THINK is based on the iconic book by Napoleon Hill, Think and Grow Rich, which has inspired leaders such as Bill Gates, Oprah Winfrey, among others. You can learn more about THINK as well as support the campaign by visiting here.
Game On! – UCI & Game Changer
Gamers are taking over the University of California-Irvine campus with a brand new world class eSports arena. Our Aggregated Marketing Platform was used to incentivize the over 1,000+ attendees with $500 in gifts. We kicked off our partnership with Game Changer Charity to raise money for their tremendous cause and look forward to growing our relationship.
David held his 2nd Breakfast Meets and Hot Seats networking breakfast last week, but this time in Carlsbad, CA. In order to empower others to empower others, David continues to mentor in business and life. The event was standing room only again and attendees were given the opportunity to network and put David in the "Hot Seat!" For more information about the next event, please contact Colleen.
What Is Your Perception?
David is leading the charge in creating thought-provoking conversations and challenging the way that people think and live right here in Orange County! On October 14th, TEDxMission Viejo is bringing together an exceptional lineup of speakers to focus on perception. You can register and learn more about the event here.
OC Blues Win First Playoff Match in Club History
We are thrilled for our partners, the OC Blues, on winning the first ever playoff match in club history. We will be there through their playoff run to cheer on the Blues and support the program by distributing the official OC Blues' virtual gift bag to fans at the match.
Orange County Business Journal Honors S1M as Innovators of the Year
Sports 1 Marketing was a finalist for the 2016 Innovator of the Year Award by the Orange County Business Journal. The S1M team attended the award luncheon on September 22nd, 2016 at the Irvine Hotel to accept the award.
Processing for a Cause
Our program, Processing for a Cause, continues to impress! We'd like to welcome our new September enrollees and are excited to continue helping others support their favorite cause and make an impactful difference in the community. For more information, inquire with Scott Carter.
Fantasy Football Draft
NFL is back and so is Fantasy Football! The S1M team held this years draft and had dinner around the coveted S1M Fantasy Lombardi trophy. With all the picks in, let the season – and trash talking – begin!
Athlete Network Connecting With Rio Olympians
Our partner, Athlete Network CEO, Chris Smith, was invited by the USOC to speak at the Athlete Career & Education (ACE) Olympic & Paralympic Summit 2016 in Washington D.C. presented by The Foundation for Global Sports Development. The goal of the summit is to provide an interactive experience for Olympic and Paralympic athletes with tangible takeaways on the next step in their athletic or professional careers and help them with the transition from the highs of Rio back to everyday life. In his address to 300 Olympians, Chris gave tips on how to successfully position the positive traits they have acquired competing at the highest level in sports with potential employers and how to stand out from the crowd.
We have officially moved all operations in-house and built our own radio studio at the S1M offices in Irvine. You can tune in every Tuesday at 5 P.M. PST to listen to David and Jim from our brand new studio on SB Nation Radio. Get engaged and submit your #LoveItOrLeaveIt topics on Twitter to @Sports1Mktg.
The Boys are Back in Town!
Los Angeles officially has an NFL team again and David was able to take his son, Miles, to the Rams' opening game at Los Angeles Memorial Coliseum. While Dave's son was unable to meet his favorite Todd Gurley, they bumped into our good friend Eric Dickerson prior to the game. The Rams got their first win of the season versus the Seattle Seahawks. Go Rams!
Youngry End of Campaign Party
On Monday, September 26th, members of the S1M team attended the Youngry End of Campaign Party in Irvine, CA to network with young entrepreneurs, tech start-ups, and innovative businesses that are reshaping the business landscape of Orange County.
Spartan Races
Can you tame the beast? The Spartan World Championship Weekend just wrapped up in Lake Tahoe. If you missed out this past weekend, check out Spartan's future events: Pittsburgh Sprint 10/8, South Florida Sprint 10/15, Seattle Beast & Sprint Weekend 10/22, and many more here.
California Women Network Hosts 2016 Conference
We will be partnering with Michelle Paterson and Women Network to bring our Aggregated Marketing Platform to the 2016 California Women's Conference! The two-day event will take place on December 7th-8th in Long Beach, California and featured some of the world's top speakers, entrepreneurs, and entertainers. Get your tickets today.
Where Were You When…?
Where Were You When…? continues to highlight some of the greatest moments in sports history! They have officially launched their new website making easier to shop your favorite sports moments. You can shop the brand new shop here.


text:
Horses To Follow » Classic Vintage
Classic Vintage
Classic Vintage put up an encouraging performance on his seasonal debut to finish fourth behind Albaqaa in a Class 2 handicap run over 10 furlongs at Pontefract on Tuesday. Settled nicely in mid-division by Jim Crowley, and on the inside, Amanda Perrett's horse was one of the first horses to come off the bridle when the pace began to pick up on the run to the home turn a half a mile out. Vigourously ridden around the home turn, he stayed on really well up the home straight, making ground up the hill and finishing well to take fourth place, beaten three half-lengths, with daylight between the first four and the rest of the field.
It wasn't surprising that the son of El Prado got outpaced over this distance. He did win twice over a mile as a two-year-old, but both of those wins were on soft ground, and he is much more stamina than he is speed. He started off over 10 furlongs last year as well, but both of his wins were recorded over a mile and a half, both in decent handicaps at Sandown and at Glorious Goodwood. He ran well in the Melrose and in the March Stakes last season, both over a mile and six furlongs, and it may be that that trip will prove to be his optimum this term. He goes on fast ground and on soft ground, a mark of 96 could under-estimate him now, and he will be interesting wherever he goes next and for the season ahead over a mile and a half or more.
© The Irish Field, 1st May 2010


Rachel and Michael's wedding was like another little family reunion for me. As I got to reacquaint myself with the lovely De Monte family all over again. I had previously photographed Rachel's sister Nicole's wedding a few years back and remember it being such a fun filled family.
They chose St Brigid's at Redhill for their ceremony and then the always amazing Moda Portside for their beautiful reception.


Stephen Glass (Hayden Christensen) is a promising young reporter and assistant editor on The New Republic, a Washington-based magazine boasting an 80-plus-year heritage and 'in-flight' status on Air Force One. He has managed to gain popularity and acclaim within the magazine, as well as in his freelance career elsewhere, for providing vivid, humorous anecdotal articles detailing the often absurd or dramatic. After online journalist Adam Penenberg (Steve Zahn) at Forbes Digital begins to investigate 'Hack Heaven', a Glass article on computer hackers extorting a software company, his career and journalistic integrity is soon brought into disrepute. This controversy occurs subsequent to a recent changing of the guard at The New Republic, where popular editor Michael Kelly (Hank Azaria) was ousted in favour of the less-experienced Charles 'Chuck' Lane (Peter Sarsgaard). Is Glass a victim of politics, has he been duped by his sources, or is he just plain lying?
An admittedly abstract concern when adapting a true story about journalistic fraud, is that any dramatic licence taken with the material can be seen as fraudulent itself. Luckily, in the case of Shattered Glass, the scandal was heavily documented and transcribed, to the point where – at least, according to the claims of the supplied audio commentary – much of the events and dialogue is almost entirely verbatim. It's an impressive feat to include so much direct pilfering of reality, without concession to a documentary or vérité format. Perhaps as a consequence, the more conceptual aspects of the story are less compelling, such as its framing device of Glass as narrator giving a magnanimous lecture to a classroom of high school students.
Shattered Glass is screenwriter Billy Ray's (erstwhile co-creator of science-fiction series Earth 2 (1994-1995)) directorial debut, which was followed in 2007 with the thematically similar Breach, starring Ryan Phillipe as a promising young FBI agent accused of spying for the Russians. Partly as a consequence, and partly given the largely office-based, dialogue-driven events, the production never really raises itself above 'competent'. There's nothing in the way of bravura performance or stylistic flourish, but there's also no scenery chewing or distracting editorial trickery. It's a vanilla piece, something very much befitting a story about truth, and the trouble one has in defining it. The ambiguity lies not just in whether Glass is telling the truth (something admittedly unlikely from the outset) or how much of his work is fabrication, but in what exactly motivates Glass. As his behaviour appears increasingly manipulative, how could he possibly justify himself? The question is far from resolved, though the likes of Soderberg's The Informant! (2009) provide a more in-depth account of a similarly-addled figure.
As an actor, it could be said that Hayden Christensen became something of a victim of circumstance; this is assuming one could claim 'victim' after starring in two of the most profitable films in history. Among numerous criticisms of the then-current state of the Star Wars franchise, Hayden was singled out for his poor acting and absence of charisma. Shattered Glass is his only credit between those two gargantuan tentpoles so, if little else, is able to claim back a certain credibility from Darth Vader's steely grip. Hayden acquits himself admirably, channeling a sulky persona and oily, ingratiating charm suitably onto a man of dubious allegiance and legitimacy. Regardless, the real acting highlight is Peter Sarsgaard's turn as Chuck Jones, the recently promoted editor-in-chief who takes over protagonal reins when the investigation gathers wind. He plays it cool throughout, with a wariness and resentment of Glass' bourgeoning celebrity, alongside a quiet professionalism that doesn't let too much slip.
Beyond the ostensibly true events shown in the film, and their broad commentary on the nature of American journalism in the late 90's, more intriguing is the depiction of the rise of modern media. Not much of Hollywood's output has really addressed or tackled the tremendous sea change in communication over the past two decades. They'd still have you think everyone uses Bing, for example. Save for The Social Network (2010), the Hitchcockian scaremongering of The Net (1995), the cyber-anachronism of Hackers (1995) and a handful of other genre thrillers, little real hay has been made of the digital revolution and its myriad impact. It's relatively subtle, but Shattered Glass at least makes distinction between the online journalists of Forbes Digital (who at the time faced an uphill struggle for legitimacy) and the relative complacency of The New Republic. The former can almost instinctively see through Glass' story, particularly regarding the emails and websites he provides as corroboration. The conflict at the heart of the film can be read as between the analogue self-satisfaction of the past, and the digital efficiency of the present. Arguably, one can no longer hide our lies so easily, and the effect is profound.
Shattered Glass does suffer in its transitioning of fact into narrative, and is a slight tale in the wider context of non-fiction cinema. The transition of protagonist from Stephen Glass to Chuck Jones is a little clumsy, plus the finale doesn't contain the rousing catharsis that it seems to be aiming for. The story, however, is fascinating; the film does well in dramatising the events with coherence and fidelity. It also amounts to a compelling morality play and an intriguing character study of Stephen Glass, albeit one that unabashedly lacks a diagnosis.
Over the next few weeks, I'm going to be doing reviews of all the films of Christopher Smith. I think he's one of the most interesting directors working at the moment, and if there were any justice in the world he'd be getting begged by some studio to relaunch some superhero franchise with his own take on the world, front and centre. He's survived working with Danny Dyer and has made some of the darkest and most entertaining films of recent years.
First up, "Creep". This film shares a few similarities with "Cloverfield", in a weird way – in that we start off at a party and then the star heads off into the city and tangles with a monster. Admittedly, the one in this film is a little smaller, and there's less cannon fodder here, but…no, that's the end of that sentence. Franka Potente, oh lovely lovely Franka Potente, star of "Run Lola Run", "The Bourne Identity", and one of the few good episodes of "House", is a slightly struggling model who we see at a party. That guy from a thousand adverts is a sleazeball admirer, so after getting hit on by him she leaves and tries to find a party where George Clooney will apparently be. A series of mishaps and delays later, and she finds herself in a remarkably empty tube station.
One of the great forgotten classics of British horror cinema is "Raw Meat"*, where an increasingly inbred and deranged lineage of people lives inside an abandoned tube system, only venturing near the world of people when they need some food or a new woman to impregnate. It's a magnificently creepy film (and features Edward Woodward's greatest ever screen performance), and I think the majority of "Creep" owes some inspiration to the earlier classic. Christopher Smith mentions it in his commentary, but either he's downplaying it because it's his first film and he doesn't want to appear to be just assembling his favourite bits of other films; or it's a huge coincidence (he says he'd never heard of it when writing the film, but was shown it during production…I think); or that admitting he'd taken too much from it might have triggered legal issues. I think it's a bit from A and a bit from B – I can believe he'd never heard of it, but he maybe was inspired by it afterwards, and made slight changes (there is an explicit reference to the earlier film's "Mind the gap!" catchphrase, if memory serves).
But I digress. "Creep" is this film's mutated tube-dweller, and his origin…well, if you've seen it you'll know, and if you don't you might be bummed out I told you. Suffice to say, he's not quite as human-looking as you or I, and he's pretty upset about it. Franka is forced into his world by an unexpected and entirely unwelcome revisit from Gropey the Advert-Man, and the film then becomes two different films, in a way – we get her journey through the tunnels, attempting to get back to her own world; and we get Creep, and the life he's carved for himself down there.
For a first film, I think this is great. A sensible move is setting it somewhere that people just find unsettling anyway – the late night world of the London Underground. Half his work is already done for him, and for those people who've passed one of the disused stations on the tube and have pondered what could have made its home there, it's even creepier. Franka Potente is great, of course, as is the circular nature of her journey (more on that in my reviews of his later films), and the way the film approaches Creep's character is pretty damn clever too.
It's not perfect. As you may have gathered from the earlier paragraphs, I think it "stands in the tradition of" a few other horror films, and it's a little…slight. I think most other directors would be delighted to have this under their belts, but Christopher Smith just kept on getting better. For those people reading this, I'd really recommend watching "Severance", "Triangle" and "Black Death", so when I inevitably spoil something quite important in one of them, none of you will be upset.
*Well, by forgotten, I clearly mean "mentioned on this film's Wikipedia page, just under a different title".
One of my all-time favourite films is based on an Edgar Allan Poe story – "Masque of the Red Death", made by the great Roger Corman (no doubt immediately before and after a pair of rubber-suit-monster films). It uses colour in a fascinating way, everything is overloaded with it like a William Eggleston photo and Poe's prose is matched beautifully to Vincent Price, Jane Asher and the rest of the cast. In fact, just writing about it makes me want to go and watch it again.
This is all the Spanish I know. Or is it Italian?
"The Raven" is unlikely to dislodge "Masque…" as the favourite film featuring or based on Poe, in the minds of many viewers. John Cusack plays Poe as a sort of over-dramatic, slightly camp alcoholic…he may very well have been all those things, and was certainly the last, but it doesn't quite ring true, and feels slightly out of place. It does calm down a bit later on, or maybe I just stopped noticing it so much, though.
Amazingly, the introductory crawl seems to be fairly close to reality. He was discovered in the street, delirious, wearing clothes that weren't his own, and died in hospital (the film shortens this to having been discovered on a park bench, with the last three weeks of his life a mystery). It weaves in real biographical details and spins a pretty interesting story from them. Poe made virtually nothing from sales of his poems and stories while he was alive, and it shows this alongside a sympathetic newspaper editor who tells the policeman ( Luke Evans, Zeus from "Immortals") that Poe has the spark of genius, damped by melancholy, something I'm guessing he heard too little of during his life. He's popular enough to have a fan, though, who's organising copycat murders based on Poe's stories. We find this out a little before the characters do, although if you're a Poe fan you'll have guessed from the very beginning. Well, if you're a sentient human you'll have just read it on the back cover of the DVD, but I'm attempting to maintain that little illusion.
Alongside these murders is a converging plotline with the beautiful Emily Hamilton (played by Alice Eve), who Poe plans to secretly marry. Her dad, a little on the rich side, amazingly doesn't approve of a penniless lush marrying his daughter, but the tension between them eases when the murderer and Emily's plotlines converge. "The Raven" could be boiled down, slightly cruelly, to "Edgar Allan Poe becomes a crime-fighter", but the lion's share of the film is him attempting to rescue his fiancée and capture the killer who's using his work as inspiration.
This film got some bad reviews. 21% on Rotten Tomatoes, not much better on Metacritic…you know what? It's not terrible. I mean, Cusack's performance is a bit misjudged (and he's a rather handsome, dashing fella, whereas Poe was a bit lumpy and weird-looking: you get the feeling Cusack's Poe could have talked himself into many a bedchamber) and the ending's a bit of a bummer, but it's one of those films where I'm not sure I could put my finger on why it doesn't work. Which renders the last several paragraphs rather pointless, I suppose. Don't worry, dear reader (or if this page gets more than one hit, readers), I promise I'll at least try to get better at this. There's no one main reason, just a vague sense that more could have been made of it.
EDIT: I'm really going to try and find something either very bad or very good on my next trip to Poundland. I may return to the giant shark reviews of my younger days. Reader(s), any ideas?


Supports natural, cellular energy production.
The outward appearance of aging and skin damage actually spreads from the inside out. It all begins with the ravaging effects of free radicals. When the cells of the body are attacked by the free radicals, they begin to die. Dead and damaged cells result in skin that looks and feels aged.
Cellulose and cellulose derivatives, calcium silicate, stearic acid, magnesium stearate, precipitated silica.
Take 2 tablets with water 30 minutes before breakfast. Take 1-2 tablets in the afternoon 30 minutes before food.
Consult your healthcare professional prior to use if you have or suspect a medical condition, are taking prescription drugs, are pregnant or lactating, or are allergic to Alpha-Lipoic Acid or other sulfur-containing compounds. Not intended for use by individuals under the age of 18.


text:
<?php

declare(strict_types=1);

namespace Sylius\Bundle\ApiBundle\Command\Checkout;

use Sylius\Bundle\ApiBundle\Command\OrderTokenValueAwareInterface;

/** @experimental */
class CompleteOrder implements OrderTokenValueAwareInterface
{
    /**
     * @var string|null
     */
    public $orderTokenValue;

    /**
     * @var string|null
     */
    public $notes;

    public function __construct(?string $notes = null)
    {
        $this->notes = $notes;
    }

    public function getOrderTokenValue(): ?string
    {
        return $this->orderTokenValue;
    }

    public function setOrderTokenValue(?string $orderTokenValue): void
    {
        $this->orderTokenValue = $orderTokenValue;
    }
}


This coming May 2010 election is not as the same process of voting just like the past year. The voting process this coming election will be computerized, this means the voting process is faster, this will ensure speedy, orderly and may be a clean process of election results and minimizes electoral fraud. That is why the Commission on Election guaranteed the integrity of the system is 100%. If this computerized election on May 2010 will be successful, it will mark a new beginning and hope for Philippine politics.
However, Filipinos must ensure that they will be able to vote and their votes will be properly accounted for to whom they really have chosen. I hope that this modernization of the election in our country will benefit and improve the wrong impression of everybody about country's politics. But we should still guard our ballots whether it is computerized or manual because Poll automation is not an assurance to cure the cheating in the election and we should also be able to cast our vote because it is a huge responsibility and if we look back at our history our ancestors have fought and died for their right, a right that we should never take for granted. Filipinos are known to be a freedom fighter.
So this coming May 2010 election, we will experience a computerized voting process and will again exercise our right and responsibility to vote. Vote wisely guys!


text:
Fred Lawrence Whipple (5 de noviembre de 1906-30 de agosto de 2004) fue un astrónomo estadounidense, quien propuso el modelo de la "bola de nieve sucia" para los cometas, y cuya contribución al conocimiento de los cuerpos menores del Sistema Solar (cometas, asteroides y meteoroides) fue muy notable.

Semblanza
Nacido en Red Oak (Iowa), Whipple estudió en la Universidad de California, donde se graduó en 1927 y finalizó su doctorado en 1931. Desarrolló toda su carrera docente en la Universidad de Harvard y, desde 1955 hasta 1973, fue director del Observatorio Astrofísico Smithsonian.

En 1950 propuso que los núcleos de los cometas consistían en una mezcla de hielo, óxidos de carbono congelados, metano y amoníaco, formando un conglomerado, donde el cemento de unión estaba constituido por silicatos o rocas vulgares. Este modelo, conocido como modelo de la "bola de nieve sucia", explica por qué los cometas solo forman sus colas características al aproximarse al Sol, ya que el viento solar produce la vaporización de sus componentes volátiles. De entre sus numerosos trabajos y publicaciones cabe destacar: Tierra, Luna y planetas (1968) y Orbitando alrededor del Sol: planetas y satélites del Sistema Solar (1981).

En 1945 inventó el denominado escudo Whipple, un revestimiento de aluminio ideado para proteger a los satélites y a las naves espaciales de las partículas de alta velocidad. El escudo hace explotar las partículas que chocan contra él, vaporizándolas y evitando que causen daños en las aeronaves.

Premios
 Medalla J. Lawrence Smith en 1945.
 Medalla Bruce en 1986.

Véase también
 Escudo Whipple

Eponimia
 El cráter lunar Whipple lleva este nombre en su memoria.
 El asteroide (1940) Whipple también conmemora su nombre.
 El Observatorio Fred Lawrence Whipple igualmente lleva su nombre.

Referencias

Enlaces externos
 El País. Fred L. Whipple, astrónomo experto en cometas

Astrónomos de Estados Unidos
Astrónomos del siglo XX
Medalla J. Lawrence Smith
Medalla Royal Astronomical Society
Medalla Bruce


Information submitted to the Rhode Island Quality Institute (RIQI) as part of this Request for Proposal/Quotation will not be publicly disclosed and will only be used by RIQI and its designees during the RFQ evaluation period.
Any information contained in this RFQ regarding RIQI's systems is considered confidential information.
Do you want one hard copy and one electronic copy of the completed RFQ?
One of either is fine.
Is a WinZip encrypted file attachment containing a Word or PDF format document acceptable?
Is cloud an option for the RDBMS or do you want an on-premise solution only?


Murad Rapid Collegen Infusion is the first skincare care product designed to penetrate the skin with pure collagen. Rapid Collagen Infusion was designed to promote healthy collagen levels, instantly restoring a youthful appearance.
Reduce the appearance of fine lines and wrinkles in 2 hours* with Murad's latest Rapid Collagen Infusion. The fast acting formula helps maintain youthful collagen levels to help fight wrinkles, while plumping dehydrating skin.
- Collagen Support Complex reduces the appearance of wrinkles by increasing the skin's resilience and plumping dehydrated skin.
- Murad's proprietary complex, Cellular Hydro-Lock plumps your skin, smoothing any fine lines or wrinkles.
Collagen exists naturally in your skin, and acts as a building block for smooth, wrinkle-free skin. As we begin to age, less collagen is produced naturally by the body, meaning wrinkles begin to show and skin becomes thinner. Dr. Murad introduced Murad Rapid Collagen Infusion to promote healthy collagen levels, lifting the skin for a smoother, firmer texture.
According to Dr. Murad we lose 1% of collagen every year from the age of 20, which is why it is important to increase our collagen levels as we age.


text:
The IGFAE, among the Spanish institutions that sign with Japan a Memorandum of Understanding to promote the construction of the hyper-Kamiokande international neutrino telescope (HKK)
01 SepThe IGFAE, among the Spanish institutions that sign with Japan a Memorandum of Understanding to promote the construction of the hyper-Kamiokande international neutrino telescope (HKK)
Written by Elena Mora Cuesta
Categorised News, Scientific news
The Galician Institute of High Energy Physics (IGFAE), a joint center of the USC and the Xunta de Galicia, is one of the Spanish centers that will participate in the construction of the Hyper-Kamiokande neutrino detector (HKK). The Ministry of Science and Innovation of the Government of Spain, the Research Organization of High Energy Accelerators (KEK) of Japan and the University of Tokyo (UTokyo) signed in August a memorandum of understanding (MoU) to promote the development of this international telescope.
The objective of this project, which will begin operating in 2027 in Kamioka (Japan), is to demonstrate the theory associated with an essential property of neutrinos that would explain the imbalance between the production of matter and antimatter at the beginning of the Universe. This project will lead, for the next two decades, the exploration of the thermonuclear processes that give rise to the energy of the Sun and that of the processes prior to the collapse of stars that generate supernovae.
Hyper-Kamiokande (Hyper-K) is an aquatic Cherenkov detector located in a gigantic underground tank containing 300,000 tons of water, with a sensitive volume about a factor of 10 larger than its predecessor Super-Kamiokande (Super-K). Credit: Hyper-Kamiokande collaboration.
The Hyper-Kamiokande detector is expected to have a mass eight times greater than its predecessor, the Super-Kamiokande, and will be equipped with newly developed high-sensitivity photosensors. The construction budget was approved in Japan's Parliament in February 2020, which marked the official start of the project. Construction began in May 2021 with the excavation of the access tunnel to the experimental space.
Spanish participation and IGFAE contribution in Hyper-Kamiokande
In total, nineteen countries are interested in participating in this project led by Japan. Spain is the second country to sign the MoU, following Poland's signature in February. The Spanish Hyper-Kamiokande Consortium is made up of nine institutions: the Galician Institute of High Energy Physics (IGFAE) of the University of Santiago de Compostela (USC), the Center for Astroparticles and High Energy Physics (CAPA) of the University of Zaragoza, the International Center for Physics of Donostia (DIPC), the Institute of High Energy Physics (IFAE), the Canfranc Underground Laboratory (LSC), the Autonomous University of Madrid (UAM), the University of Girona (UdG), the University of Oviedo (UO) and the Polytechnic University of Valencia (UPV). It is expected that these institutions will contribute through the development, production and installation of the photosensor protection covers, the ventilation system, the geomagnetic compensation system, electronic circuit modules, radiation sources for calibration and different elements of the nearby detector.
A part of the Spanish contribution to the HKK project will be financed with funds from the Recovery, Transformation and Resilience Plan (PRTR), as one of the actions of the line of strengthening the capacities, infrastructures and equipment of the agents of the Spanish System of Science, Technology and Innovation through the promotion of new actions in large European and international research infrastructures. The action will benefit the Spanish industry that will be responsible for the development of the detector components and will allow the participation of Spanish research groups in the scientific exploitation of HKK.
UTokyo President Teruo Fujii (left), MCIN Research Secretary General Raquel Yotti (center), and KEK CEO Masanori Yamauchi (right) sign the MoU.
Quanta of diversity