text:
#include "include/core/SkTypes.h"

#ifdef SK_HAS_HEIF_LIBRARY
#include "include/codec/SkCodec.h"
#include "include/core/SkStream.h"
#include "include/private/SkColorData.h"
#include "src/codec/SkCodecPriv.h"
#include "src/codec/SkHeifCodec.h"
#include "src/core/SkEndian.h"

#define FOURCC(c1, c2, c3, c4) \
    ((c1) << 24 | (c2) << 16 | (c3) << 8 | (c4))

bool SkHeifCodec::IsSupported(const void* buffer, size_t bytesRead,
                              SkEncodedImageFormat* format) {
    // Parse the ftyp box up to bytesRead to determine if this is HEIF or AVIF.
    // Any valid ftyp box should have at least 8 bytes.
    if (bytesRead < 8) {
        return false;
    }

    uint32_t* ptr = (uint32_t*)buffer;
    uint64_t chunkSize = SkEndian_SwapBE32(ptr[0]);
    uint32_t chunkType = SkEndian_SwapBE32(ptr[1]);

    if (chunkType != FOURCC('f', 't', 'y', 'p')) {
        return false;
    }

    int64_t offset = 8;
    if (chunkSize == 1) {
        // This indicates that the next 8 bytes represent the chunk size,
        // and chunk data comes after that.
        if (bytesRead < 16) {
            return false;
        }
        auto* chunkSizePtr = SkTAddOffset<const uint64_t>(buffer, offset);
        chunkSize = SkEndian_SwapBE64(*chunkSizePtr);
        if (chunkSize < 16) {
            // The smallest valid chunk is 16 bytes long in this case.
            return false;
        }
        offset += 8;
    } else if (chunkSize < 8) {
        // The smallest valid chunk is 8 bytes long.
        return false;
    }

    if (chunkSize > bytesRead) {
        chunkSize = bytesRead;
    }
    int64_t chunkDataSize = chunkSize - offset;
    // It should at least have major brand (4-byte) and minor version (4-bytes).
    // The rest of the chunk (if any) is a list of (4-byte) compatible brands.
    if (chunkDataSize < 8) {
        return false;
    }

    uint32_t numCompatibleBrands = (chunkDataSize - 8) / 4;
    bool isHeif = false;
    for (size_t i = 0; i < numCompatibleBrands + 2; ++i) {
        if (i == 1) {
            // Skip this index, it refers to the minorVersion,
            // not a brand.
            continue;
        }
        auto* brandPtr = SkTAddOffset<const uint32_t>(buffer, offset + 4 * i);
        uint32_t brand = SkEndian_SwapBE32(*brandPtr);
        if (brand == FOURCC('m', 'i', 'f', '1') || brand == FOURCC('h', 'e', 'i', 'c')
         || brand == FOURCC('m', 's', 'f', '1') || brand == FOURCC('h', 'e', 'v', 'c')
         || brand == FOURCC('a', 'v', 'i', 'f') || brand == FOURCC('a', 'v', 'i', 's')) {
            // AVIF files could have "mif1" as the major brand. So we cannot
            // distinguish whether the image is AVIF or HEIC just based on the
            // "mif1" brand. So wait until we see a specific avif brand to
            // determine whether it is AVIF or HEIC.
            isHeif = true;
            if (brand == FOURCC('a', 'v', 'i', 'f')
              || brand == FOURCC('a', 'v', 'i', 's')) {
                if (format != nullptr) {
                    *format = SkEncodedImageFormat::kAVIF;
                }
                return true;
            }
        }
    }
    if (isHeif) {
        if (format != nullptr) {
            *format = SkEncodedImageFormat::kHEIF;
        }
        return true;
    }
    return false;
}

static SkEncodedOrigin get_orientation(const HeifFrameInfo& frameInfo) {
    switch (frameInfo.mRotationAngle) {
        case 0:   return kTopLeft_SkEncodedOrigin;
        case 90:  return kRightTop_SkEncodedOrigin;
        case 180: return kBottomRight_SkEncodedOrigin;
        case 270: return kLeftBottom_SkEncodedOrigin;
    }
    return kDefault_SkEncodedOrigin;
}

struct SkHeifStreamWrapper : public HeifStream {
    SkHeifStreamWrapper(SkStream* stream) : fStream(stream) {}

    ~SkHeifStreamWrapper() override {}

    size_t read(void* buffer, size_t size) override {
        return fStream->read(buffer, size);
    }

    bool rewind() override {
        return fStream->rewind();
    }

    bool seek(size_t position) override {
        return fStream->seek(position);
    }

    bool hasLength() const override {
        return fStream->hasLength();
    }

    size_t getLength() const override {
        return fStream->getLength();
    }

private:
    std::unique_ptr<SkStream> fStream;
};

static void releaseProc(const void* ptr, void* context) {
    delete reinterpret_cast<std::vector<uint8_t>*>(context);
}

std::unique_ptr<SkCodec> SkHeifCodec::MakeFromStream(std::unique_ptr<SkStream> stream,
        SkCodec::SelectionPolicy selectionPolicy, SkEncodedImageFormat format, Result* result) {
    std::unique_ptr<HeifDecoder> heifDecoder(createHeifDecoder());
    if (heifDecoder == nullptr) {
        *result = kInternalError;
        return nullptr;
    }

    HeifFrameInfo heifInfo;
    if (!heifDecoder->init(new SkHeifStreamWrapper(stream.release()), &heifInfo)) {
        *result = kInvalidInput;
        return nullptr;
    }

    size_t frameCount = 1;
    if (selectionPolicy == SkCodec::SelectionPolicy::kPreferAnimation) {
        HeifFrameInfo sequenceInfo;
        if (heifDecoder->getSequenceInfo(&sequenceInfo, &frameCount) &&
                frameCount > 1) {
            heifInfo = std::move(sequenceInfo);
        }
    }

    std::unique_ptr<SkEncodedInfo::ICCProfile> profile = nullptr;
    if (heifInfo.mIccData.size() > 0) {
        auto iccData = new std::vector<uint8_t>(std::move(heifInfo.mIccData));
        auto icc = SkData::MakeWithProc(iccData->data(), iccData->size(), releaseProc, iccData);
        profile = SkEncodedInfo::ICCProfile::Make(std::move(icc));
    }
    if (profile && profile->profile()->data_color_space != skcms_Signature_RGB) {
        // This will result in sRGB.
        profile = nullptr;
    }

    uint8_t colorDepth = heifDecoder->getColorDepth();

    SkEncodedInfo info = SkEncodedInfo::Make(heifInfo.mWidth, heifInfo.mHeight,
            SkEncodedInfo::kYUV_Color, SkEncodedInfo::kOpaque_Alpha,
            /*bitsPerComponent*/ 8, std::move(profile), colorDepth);
    SkEncodedOrigin orientation = get_orientation(heifInfo);

    *result = kSuccess;
    return std::unique_ptr<SkCodec>(new SkHeifCodec(
            std::move(info), heifDecoder.release(), orientation, frameCount > 1, format));
}

SkHeifCodec::SkHeifCodec(
        SkEncodedInfo&& info,
        HeifDecoder* heifDecoder,
        SkEncodedOrigin origin,
        bool useAnimation,
        SkEncodedImageFormat format)
    : INHERITED(std::move(info), skcms_PixelFormat_RGBA_8888, nullptr, origin)
    , fHeifDecoder(heifDecoder)
    , fSwizzleSrcRow(nullptr)
    , fColorXformSrcRow(nullptr)
    , fUseAnimation(useAnimation)
    , fFormat(format)
{}

bool SkHeifCodec::conversionSupported(const SkImageInfo& dstInfo, bool srcIsOpaque,
                                      bool needsColorXform) {
    SkASSERT(srcIsOpaque);

    if (kUnknown_SkAlphaType == dstInfo.alphaType()) {
        return false;
    }

    if (kOpaque_SkAlphaType != dstInfo.alphaType()) {
        SkCodecPrintf("Warning: an opaque image should be decoded as opaque "
                "- it is being decoded as non-opaque, which will draw slower\n");
    }

    uint8_t colorDepth = fHeifDecoder->getColorDepth();
    switch (dstInfo.colorType()) {
        case kRGBA_8888_SkColorType:
            this->setSrcXformFormat(skcms_PixelFormat_RGBA_8888);
            return fHeifDecoder->setOutputColor(kHeifColorFormat_RGBA_8888);

        case kBGRA_8888_SkColorType:
            this->setSrcXformFormat(skcms_PixelFormat_RGBA_8888);
            return fHeifDecoder->setOutputColor(kHeifColorFormat_BGRA_8888);

        case kRGB_565_SkColorType:
            this->setSrcXformFormat(skcms_PixelFormat_RGBA_8888);
            if (needsColorXform) {
                return fHeifDecoder->setOutputColor(kHeifColorFormat_RGBA_8888);
            } else {
                return fHeifDecoder->setOutputColor(kHeifColorFormat_RGB565);
            }

        case kRGBA_1010102_SkColorType:
            this->setSrcXformFormat(skcms_PixelFormat_RGBA_1010102);
            return fHeifDecoder->setOutputColor(kHeifColorFormat_RGBA_1010102);

        case kRGBA_F16_SkColorType:
            SkASSERT(needsColorXform);
            if (srcIsOpaque && colorDepth == 10) {
                this->setSrcXformFormat(skcms_PixelFormat_RGBA_1010102);
                return fHeifDecoder->setOutputColor(kHeifColorFormat_RGBA_1010102);
            } else {
                this->setSrcXformFormat(skcms_PixelFormat_RGBA_8888);
                return fHeifDecoder->setOutputColor(kHeifColorFormat_RGBA_8888);
            }

        default:
            return false;
    }
}

int SkHeifCodec::readRows(const SkImageInfo& dstInfo, void* dst, size_t rowBytes, int count,
                          const Options& opts) {
    // When fSwizzleSrcRow is non-null, it means that we need to swizzle.  In this case,
    // we will always decode into fSwizzlerSrcRow before swizzling into the next buffer.
    // We can never swizzle "in place" because the swizzler may perform sampling and/or
    // subsetting.
    // When fColorXformSrcRow is non-null, it means that we need to color xform and that
    // we cannot color xform "in place" (many times we can, but not when the dst is F16).
    // In this case, we will color xform from fColorXformSrcRow into the dst.
    uint8_t* decodeDst = (uint8_t*) dst;
    uint32_t* swizzleDst = (uint32_t*) dst;
    size_t decodeDstRowBytes = rowBytes;
    size_t swizzleDstRowBytes = rowBytes;
    int dstWidth = opts.fSubset ? opts.fSubset->width() : dstInfo.width();
    if (fSwizzleSrcRow && fColorXformSrcRow) {
        decodeDst = fSwizzleSrcRow;
        swizzleDst = fColorXformSrcRow;
        decodeDstRowBytes = 0;
        swizzleDstRowBytes = 0;
        dstWidth = fSwizzler->swizzleWidth();
    } else if (fColorXformSrcRow) {
        decodeDst = (uint8_t*) fColorXformSrcRow;
        swizzleDst = fColorXformSrcRow;
        decodeDstRowBytes = 0;
        swizzleDstRowBytes = 0;
    } else if (fSwizzleSrcRow) {
        decodeDst = fSwizzleSrcRow;
        decodeDstRowBytes = 0;
        dstWidth = fSwizzler->swizzleWidth();
    }

    for (int y = 0; y < count; y++) {
        if (!fHeifDecoder->getScanline(decodeDst)) {
            return y;
        }

        if (fSwizzler) {
            fSwizzler->swizzle(swizzleDst, decodeDst);
        }

        if (this->colorXform()) {
            this->applyColorXform(dst, swizzleDst, dstWidth);
            dst = SkTAddOffset<void>(dst, rowBytes);
        }

        decodeDst = SkTAddOffset<uint8_t>(decodeDst, decodeDstRowBytes);
        swizzleDst = SkTAddOffset<uint32_t>(swizzleDst, swizzleDstRowBytes);
    }

    return count;
}

int SkHeifCodec::onGetFrameCount() {
    if (!fUseAnimation) {
        return 1;
    }

    if (fFrameHolder.size() == 0) {
        size_t frameCount;
        HeifFrameInfo frameInfo;
        if (!fHeifDecoder->getSequenceInfo(&frameInfo, &frameCount)
                || frameCount <= 1) {
            fUseAnimation = false;
            return 1;
        }
        fFrameHolder.reserve(frameCount);
        for (size_t i = 0; i < frameCount; i++) {
            Frame* frame = fFrameHolder.appendNewFrame();
            frame->setXYWH(0, 0, frameInfo.mWidth, frameInfo.mHeight);
            frame->setDisposalMethod(SkCodecAnimation::DisposalMethod::kKeep);
            // Currently we don't know the duration until the frame is actually
            // decoded (onGetFrameInfo is also called before frame is decoded).
            // For now, fill it base on the value reported for the sequence.
            frame->setDuration(frameInfo.mDurationUs / 1000);
            frame->setRequiredFrame(SkCodec::kNoFrame);
            frame->setHasAlpha(false);
        }
    }

    return fFrameHolder.size();
}

const SkFrame* SkHeifCodec::FrameHolder::onGetFrame(int i) const {
    return static_cast<const SkFrame*>(this->frame(i));
}

SkHeifCodec::Frame* SkHeifCodec::FrameHolder::appendNewFrame() {
    const int i = this->size();
    fFrames.emplace_back(i); // TODO: need to handle frame duration here
    return &fFrames[i];
}

const SkHeifCodec::Frame* SkHeifCodec::FrameHolder::frame(int i) const {
    SkASSERT(i >= 0 && i < this->size());
    return &fFrames[i];
}

SkHeifCodec::Frame* SkHeifCodec::FrameHolder::editFrameAt(int i) {
    SkASSERT(i >= 0 && i < this->size());
    return &fFrames[i];
}

bool SkHeifCodec::onGetFrameInfo(int i, FrameInfo* frameInfo) const {
    if (i >= fFrameHolder.size()) {
        return false;
    }

    const Frame* frame = fFrameHolder.frame(i);
    if (!frame) {
        return false;
    }

    if (frameInfo) {
        frame->fillIn(frameInfo, true);
    }

    return true;
}

int SkHeifCodec::onGetRepetitionCount() {
    return kRepetitionCountInfinite;
}

/*
 * Performs the heif decode
 */
SkCodec::Result SkHeifCodec::onGetPixels(const SkImageInfo& dstInfo,
                                         void* dst, size_t dstRowBytes,
                                         const Options& options,
                                         int* rowsDecoded) {
    if (options.fSubset) {
        // Not supporting subsets on this path for now.
        // TODO: if the heif has tiles, we can support subset here, but
        // need to retrieve tile config from metadata retriever first.
        return kUnimplemented;
    }

    bool success;
    if (fUseAnimation) {
        success = fHeifDecoder->decodeSequence(options.fFrameIndex, &fFrameInfo);
        fFrameHolder.editFrameAt(options.fFrameIndex)->setDuration(
                fFrameInfo.mDurationUs / 1000);
    } else {
        success = fHeifDecoder->decode(&fFrameInfo);
    }

    if (!success) {
        return kInvalidInput;
    }

    fSwizzler.reset(nullptr);
    this->allocateStorage(dstInfo);

    int rows = this->readRows(dstInfo, dst, dstRowBytes, dstInfo.height(), options);
    if (rows < dstInfo.height()) {
        *rowsDecoded = rows;
        return kIncompleteInput;
    }

    return kSuccess;
}

void SkHeifCodec::allocateStorage(const SkImageInfo& dstInfo) {
    int dstWidth = dstInfo.width();

    size_t swizzleBytes = 0;
    if (fSwizzler) {
        swizzleBytes = fFrameInfo.mBytesPerPixel * fFrameInfo.mWidth;
        dstWidth = fSwizzler->swizzleWidth();
        SkASSERT(!this->colorXform() || SkIsAlign4(swizzleBytes));
    }

    size_t xformBytes = 0;
    if (this->colorXform() && (kRGBA_F16_SkColorType == dstInfo.colorType() ||
                               kRGB_565_SkColorType == dstInfo.colorType())) {
        xformBytes = dstWidth * sizeof(uint32_t);
    }

    size_t totalBytes = swizzleBytes + xformBytes;
    fStorage.reset(totalBytes);
    if (totalBytes > 0) {
        fSwizzleSrcRow = (swizzleBytes > 0) ? fStorage.get() : nullptr;
        fColorXformSrcRow = (xformBytes > 0) ?
                SkTAddOffset<uint32_t>(fStorage.get(), swizzleBytes) : nullptr;
    }
}

void SkHeifCodec::initializeSwizzler(
        const SkImageInfo& dstInfo, const Options& options) {
    SkImageInfo swizzlerDstInfo = dstInfo;
    switch (this->getSrcXformFormat()) {
        case skcms_PixelFormat_RGBA_8888:
            swizzlerDstInfo = swizzlerDstInfo.makeColorType(kRGBA_8888_SkColorType);
            break;
        case skcms_PixelFormat_RGBA_1010102:
            swizzlerDstInfo = swizzlerDstInfo.makeColorType(kRGBA_1010102_SkColorType);
            break;
        default:
            SkASSERT(false);
    }

    int srcBPP = 4;
    if (dstInfo.colorType() == kRGB_565_SkColorType && !this->colorXform()) {
        srcBPP = 2;
    }

    fSwizzler = SkSwizzler::MakeSimple(srcBPP, swizzlerDstInfo, options);
    SkASSERT(fSwizzler);
}

SkSampler* SkHeifCodec::getSampler(bool createIfNecessary) {
    if (!createIfNecessary || fSwizzler) {
        SkASSERT(!fSwizzler || (fSwizzleSrcRow && fStorage.get() == fSwizzleSrcRow));
        return fSwizzler.get();
    }

    this->initializeSwizzler(this->dstInfo(), this->options());
    this->allocateStorage(this->dstInfo());
    return fSwizzler.get();
}

bool SkHeifCodec::onRewind() {
    fSwizzler.reset(nullptr);
    fSwizzleSrcRow = nullptr;
    fColorXformSrcRow = nullptr;
    fStorage.reset();

    return true;
}

SkCodec::Result SkHeifCodec::onStartScanlineDecode(
        const SkImageInfo& dstInfo, const Options& options) {
    // TODO: For now, just decode the whole thing even when there is a subset.
    // If the heif image has tiles, we could potentially do this much faster,
    // but the tile configuration needs to be retrieved from the metadata.
    if (!fHeifDecoder->decode(&fFrameInfo)) {
        return kInvalidInput;
    }

    if (options.fSubset) {
        this->initializeSwizzler(dstInfo, options);
    } else {
        fSwizzler.reset(nullptr);
    }

    this->allocateStorage(dstInfo);

    return kSuccess;
}

int SkHeifCodec::onGetScanlines(void* dst, int count, size_t dstRowBytes) {
    return this->readRows(this->dstInfo(), dst, dstRowBytes, count, this->options());
}

bool SkHeifCodec::onSkipScanlines(int count) {
    return count == (int) fHeifDecoder->skipScanlines(count);
}

#endif // SK_HAS_HEIF_LIBRARY

redpajama_set_name: RedPajamaGithub


text:
Want a Wal-Mart job? Join the crowd / 11,000 apply for 400 openings at retailer's new Oakland store
News // Bay Area & State
Pia Sarkar, Chronicle Staff Writer
1of5walmart17_025_el.JPG Henry Jordan, regional vice president leading the cheer during the daily meeting to spur enthusiasm for Walmart employees and pumping them up over daily specials to be sold. Walmart is opening a new 148,000 square-foot store in Oakland at 8400 Edgewater Drive, out by the Coliseum and Oakland Airport. It's a press preview day for the news media. Employees and store managers will be availabe for reporters. There will also by a group cheer by the employees. Don't know yet whether we will staff this with a reporter. The schedule is as follows: 12:30 p.m. for guide store tours; 1 p.m. for associate meeting. Photo ops of associates stocking shelves and putting finishing touches on shelves. Also of people interviewing for jobs. 11,000 have applied for 400 jobs. Event on 8/16/05 in Oakland Eric Luse / The Chronicle MANDATORY CREDIT FOR PHOTOG AND SF CHRONICLE/ -MAGS OUTEric LuseShow MoreShow Less
2of5walmart17_082_el.JPG Melvin Brown, Oakland, just applied for a position at Walmart. Walmart is opening a new 148,000 square-foot store in Oakland at 8400 Edgewater Drive, out by the Coliseum and Oakland Airport. It's a press preview day for the news media. Employees and store managers will be availabe for reporters. There will also by a group cheer by the employees. Don't know yet whether we will staff this with a reporter. The schedule is as follows: 12:30 p.m. for guide store tours; 1 p.m. for associate meeting. Photo ops of associates stocking shelves and putting finishing touches on shelves. Also of people interviewing for jobs. 11,000 have applied for 400 jobs. Event on 8/16/05 in Oakland Eric Luse / The Chronicle MANDATORY CREDIT FOR PHOTOG AND SF CHRONICLE/ -MAGS OUTEric LuseShow MoreShow Less
4of5New Wal-Mart. Chronicle Graphic Show MoreShow Less
For all the criticism that Wal-Mart receives for its low wages and minimal health benefits, the retail giant says more than 11,000 people in the Bay Area are clamoring to get a job at its new Oakland store.
The country's largest employer plans to welcome customers into its 148, 000-square-foot store on Edgewater Drive next Wednesday, and it says it already has filled 350 of its 400 openings.
Wal-Mart has accepted more than 11,000 applications from Bay Area job seekers, marking the largest volume of interest it has received at any of its Northern California stores, said Wal-Mart spokeswoman Cynthia Lin.
"I needed a job ASAP, and they had their doors open," said Virginia Ford, 19, of Oakland, who had applied for 25 jobs in three months before she landed one as a cashier at Wal-Mart in Oakland on Tuesday.
Stephen Levy, an economist for the Center for Continuing Study of the California Economy, said the pent-up demand for work reflects the Bay Area's slow recovery from the dot-com crash.
"There's still a lot of people who were put out of work in the last four years who still don't have a job," Levy said. The unemployment rate in Alameda and Contra Costa counties climbed to 5.1 percent in June, up from 4.6 percent the month before but still below the state's unemployment rate of 5.4 percent, according to the latest statistics from the California Employment Development Department.
But some economists say those numbers do not tell the full story about the job market. To be counted as unemployed, a person must have sought a job within the past four weeks and must be completely out of work. Wanting a job but not looking for one takes a person out of the labor force and out of the unemployment-rate calculation.
The Bay Area also has lost hundreds of jobs to outsourcing and offshoring, compounded by all the jobs that never came back after the local economy collapsed.
"It's not about Wal-Mart -- it's about the rest of the labor market," Levy said. "If the rest of the labor market was strong, you wouldn't have 11, 000 people applying for 400 jobs."
During the dot-com boom, Levy said, businesses like Starbucks bumped up wages to recruit employees in the middle of a hot job market. But now the situation has reversed, and more people are willing to take whatever they can get.
"It's simply a comment on how many people are willing to apply for that kind of job now," Levy said of the surge of applications at Wal-Mart.
For its part, Wal-Mart -- currently embroiled in a fight to break up a class-action discrimination suit by female employees -- has been pleased with the turnout of candidates who are interested in working for the company. Right now, it is still looking to fill positions for evening sales associates, overnight sales associates, cashiers and unloaders at its Oakland store. The company offers an average hourly wage in the Bay Area of $10.82. It says it employs more than 66,000 people at its 150 stores in California.
On Tuesday, Wal-Mart workers gathered together for their daily meeting filled with motivational speeches and a Wal-Mart cheer, which involves a few loud hoots and a wiggle.
Yolanda Williams, 48, of Oakland, started her job at the store five weeks ago, helping to set it up. On Tuesday, she was setting up the lingerie department, which she heads as a manager.
Williams previously worked as a senior computer operator for the city of Oakland and a cook at the city's jail before it closed. She said she is happy to be working for Wal-Mart.
"I felt I was lucky because I've never been a manager in retail," she said.
Lisa Jackson, 34, a Wal-Mart employee for nine years, working as a cashier, truck unloader and overnight stock clerk, is now a manager of the electronics department at the new Oakland store.
"I love my job," Jackson said. "I like the people, and I love what I do."
Labor organizations have long bashed Wal-Mart for offering what they see as meager health benefits and paltry wages that force employees to work multiple jobs or apply for public assistance.
"Wal-Mart is one of the largest employers in the world -- they have to be a model for the society they are promoting," said Wendell Chin, coalition director for the Central Labor Council of Alameda County. "If they don't provide a decent lifestyle, it's scary."
A study by the UC Berkeley Center for Labor Research and Education last August found that Wal-Mart workers received lower wages than any other retail workers and were less likely to have health benefits. In addition, reliance by Wal-Mart employees on public assistance programs cost taxpayers an estimated $86 million annually, including $32 million in health-related expenses and $54 million in other assistance.
Chin said jobs at Wal-Mart are a dead-end cycle that keeps people in poverty. Although he does not blame anyone for applying for work there, he said that Wal-Mart owes it to them to provide them a way to make a decent living.
"It's not just about jobs," Chin said. "It's (having) a good job that you can raise a family on."
For people like Melvin Brown, any job would be a blessing.
"I think this is a good place to work," said Brown, 52, who dropped off his application on Tuesday for an overnight maintenance position. "It seems like everybody gets along well with everybody."
Brown has been looking for a job for six months. He said he could live with the wages that Wal-Mart is offering.
"It's best to accept what you can get," he said. "You start low and aim high. First you gotta get your foot in the door."
Pia Sarkar

redpajama_set_name: RedPajamaCommonCrawl


This page contains tutorials that can be followed using pretty much any 3D modeling software - even if specific software tools are used, the emphasis is mostly on general 3D modeling. To add your own tutorials, click here.
Guerilla CG Subdivision Topology Artifacts - Explanation about how to identify and eliminate artifact after subdivision.
Guerilla CG Smooth Shading - Explanation about how smooth shading work and when to use it.
3d Total - Several tutorials in various applications offered under the free stuff menu.
Basic Tips from Bay Raitt - Simple idea from the modeler of the character gollum from Lord of the Rings.
Inorganic Modeling Fundamentals by Grant Warwick - Tutorial series from the Digital Apprentice Workshop.
3DTutorials.com - Large library of short screen shot tutorials.
Box modeling Female Character from Second Reality - Originally for 3dsMax, but is meant to be general for all software packages.
This page was last modified on 30 September 2009, at 14:04.
This page has been accessed 139,188 times.


The discipline we bring to maintaining and protecting your water is consistent with our stewardship of the District's financial resources. Visit this page to learn more about rate setting and where your money goes.
Find out about the District budget and review the budget document.
Find out about the District's capital planning process and review the Capital Plan.
To deliver water to your home and to take wastewater out, we need wells, pumps, lift stations and miles and miles of pipes. These are our assets. Managing them responsibly to provide water and sewer service that is safe, efficient and reliable is our highest priority. Visit this page to learn more about the District's Asset Management Program.
The District's Financial and Business Metrics Report is a combined financial snapshot with business metrics to provide a business-wide overview of the District.
Rate comparison and benchmarking study for a select group of water and sewer utilities.


From a young age many children are endlessly lectured on the benefits of drinking their milk and getting enough calcium with the goal of growing up "big and strong" to the point where many milk lovers may have their parents' insistence to thank.
As it turns out, dairy products have more tangible benefits than simply keeping your bones strong and your teeth healthy. There's more than one might think to a block of cheese or a container of yogurt and the health benefits are wide and varied.
If you've ever wondered just how truthful the echoing insistence of sitcom mothers could truly be, drink in these five facts about the health benefits you could gain by supplementing your diet with extra milk and cheese.
Depression is an unfortunate mental health risk affecting over one in 20 American adults in a given year. Causes are many and varied, but studies have shown potential links between vitamin D levels and depression across various ages and social groups.
While occasionally known as the sunshine vitamin due to our bodies producing vitamin D through natural sunlight, milk-based products often contain health-boosting levels of the very same vitamin for those who might have a deficiency. Even if milk contains vitamin D, drinking milk alone might not rouse you from the blues, but you'll work towards ruling deficiencies out of the question.
Worried about your waistline? Many are and for good reason given how often studies crop up telling you how different foods have been perceived as good or bad for one's health in recent years, but milk-based products are often strong contenders for healthy choices year-round.
In fact, links between full-fat dairy intake and obesity show that those who consume more milk-based foodstuffs with higher levels of fat often suffer from a lower percentage of obesity, while lower-fat diets show no positive correlations.
Fitting a plethora of necessary vitamins and nutrients into a calorie-restrictive diet can be a real pain. Finding ways to supplement areas one might be deficient in can take a small handful of vitamin supplements alone, let alone trying to squeeze in enough calcium and healthy fat intake to ensure proper health and adequate adult weight.
The body absorbs nutrients from different sources in different ways, but it takes in calcium from milk and milk-based foods more readily than from non-milk sources such as leafy greens and soy products. If you're worried about the level of calcium you're drawing, taking it in from a more natural source might assist your body in properly processing and storing the calcium that your body needs.
A recent study conducted in Spain showed that those who take in low-fat products derived from milk report lower instances of high blood pressure to a significant degree of up to 54 percent, when compared to those who take in very little low-fat milk. The researchers have theorized the proteins in milk act in a way not unlike blood pressure-lowering medications.
If you suffer from high blood pressure it may not replace a proper diet and careful medication schedules, but taking any extra strain off of your heart can only be a good thing in the long term.
Do you find yourself constantly grazing throughout the day? Not in a literal sense, but heading to the pantry every half hour for another handful of chips or a sugar-laden treat can start to show on your body faster than you might realize. Choosing healthy foods that offer increased satiety after consumption can keep your hand out of the cookie jar in a literal sense, as fattier foods often offer increased satisfaction after eating and can keep you feeling fuller, longer.
If that's not enough, milk products that are advertised as being lower in fat occasionally make up for this lack of fat content by boosting sugar levels. This is especially noticeable in yogurt where sugar content can be distressingly high despite low-fat options being advertised as healthy choices.
In the end, how you choose to take in your dairy doesn't matter quite as much as choosing to consume it. Whether it's cheese on a pizza or just a big glass of milk to go with your favorite cookie, the health benefits of your choices can help boost your mood, keep your weight consistent and might even help your heart stay strong for years to come.
Author Bio: Amanda Wilks is a contributing author for The Kitchen Advisor, passionate writer and cooking enthusiast. As an advocate of healthy living, she has a great interest in everything related to healthy foods and cooking techniques and she enjoys writing on these topics with every occasion she finds. Learn more about Amanda on Twitter.


Whether you're preparing an elegant buffet for a wedding or a more casual spread for an outdoor event, we have just the right chafers and soup warmers for all your needs. You'll discover everything from exquisite stainless steel chafing dishes, enhanced with brass-accented handles and legs, to stands for aluminum foil trays and electric water pan warmers. Choose from a wide range of designs featuring everything from rounded and rectangular, to roll top covers–many of which can be opened and stopped at both 90 and 180 degrees. And whether you're serving soup, stew or chili, we have the perfect soup warmers and soup warmer sets. Here you'll find the right design along with a complete collection of accessories.


How was your trip to Sebastian Inlet? Any more info on the propane pressure?
Sebastian Inlet State Park is great; beautiful beach and very interesting treasure musuem. The only negative is the mosquitoes and no see-ums that had a feast on me (even with bug spray).
Propane was fine once it got going.
Everything else was good. Broke a latch in the cabinet above the sink-called Carol at the factory and she is sending out six latches as well as the 30# arm for the back hatch.
We love the coach set-up on the 2551. Can't wait for July 26 when we head out for the 2 month trip to New England and the Canadian Maritimes.


Granada Pioneer . Amache, Colo., December 8. (Amache, CO), Dec. 8 1943. https://0-www.loc.gov.oasys.lib.oxy.edu/item/sn83025522/1943-12-08/ed-1/.
(1943, December 8) Granada Pioneer . Amache, Colo., December 8. Retrieved from the Library of Congress, https://0-www.loc.gov.oasys.lib.oxy.edu/item/sn83025522/1943-12-08/ed-1/.
Granada Pioneer . Amache, Colo., December 8. (Amache, CO) 8 Dec. 1943. Retrieved from the Library of Congress, www.loc.gov/item/sn83025522/1943-12-08/ed-1/.


Mistakes are an inevitable part of learning and provide us with opportunities to grow. An absence of mistakes means we are not trying. However, repeating the same mistake means we are choosing not to improve.
Today we'll look at how to learn from a mistake.
Create accents with the body, the hands, the feet. This gives your dance dynamics and personality.
During last weekend's Flamenco Retreat at the Oregon Coast (which I'm still on a high from by the way and which you can see pictures of below) we all agreed that flamenco teaches us about life and about ourselves.
So, today I share with you fifty life lessons I've gleaned from flamenco.
Listen to your intuition, and trust your instincts.
Stand beautifully in your power.
The answers are in the mirror, so look.
As I've been taking action on my flamenco resolution in this new year, I've noticed something (in addition to my plan) that is really helping me to stick with it and that's an awareness of why I want it. I'll tell you more about my resolution later, but first, let's go deeper into this why stuff.
When setting your resolution, or when reflecting upon it, it's important to consider your why.
Did you know that people are more likely to follow through with a commitment to change set at the onset of the new year than at other times of the year?
In light of that, let's talk flamenco new year's resolutions. Below I'll guide you through a three step process to putting a flamenco new year's resolution into place for 2017.
But first, let's reflect briefly on 2016.
How has your flamenco improved during the last year? Write down or make a mental note of all of the ways you progressed over past year.
Now it's time to look toward the new year and start thinking about flamenco new year's resolutions.
What's on your flamenco holiday wish list? And more importantly, have you shared it with your friends and family because, the truth is, they might not know how to shop for a flamenco lover such as yourself.
Gift certificates for flamenco lessons in Portland are available in any amount, starting at just $5. Contact us to purchase.
For the dancer who's looking for supplemental instruction or who's unable to make it to in-person classes, online flamenco lessons are a great option. Both Flamenco Bites and Rina Orellana Flamenco offer excellent online instruction. You can read my full article about online learning here.
Without a doubt, every flamenco student NEEDS a metronome. And thankfully, they're easy to find. Any local music store will have one.
We studied bamberas with abanico with Mercedes during the Flamenco Tour.
After the letra you'll find a quick fan activity from our class that you can try at home.
Every time I return home from the Flamenco Tour to Jerez I feel stronger. (It's impossible not to after all of that time in class with Mercedes Ruíz.) I've learned how to turn the physical strength gained through dancing flamenco into mental strength to help me face challenges in my life. At the end of this post, I'll lead you through an activity to help you do the same.
The thing I wasn't strong enough to do before I left. I can now do it. The thing I tried so many times to do before but couldn't. The thing I kept trying to do but told myself I wasn't strong enough to do.
There's going to class. And then there's going to class and getting the most out of it. Today I'm going to talk about the latter, about how to get the most out of your flamenco class (or workshop) experience.
Ricardo López is constantly giving us tips when he comes in town for workshops. Perhaps just as helpful are little phrases I hear him say over and over again in class. He doesn't really intend them as tips. They are reactions, spoken in the moment. But, oh, these little comments have a lot to tell us.
For ten days we simulated being in class with Mercedes Ruíz. We touched on breathing, keeping the shoulders down, maintaining plié, using the hands and fingers well, practicing slowly and deliberately, skirt and non-dominant arm awareness, posture and engaging the core, keeping the arms round, dancing (really dancing), and putting forth effort.
The challenge may be officially over, but I encourage you to keep working on these skills. They will serve you for the rest of your flamenco life, and through repetition they will get better and better.
Read on for some thoughts on repetition, reflection, and guidance on how to continue the challenge on your own.
It's the final day of the challenge. Olé, you made it!
How did yesterday's activity go? Did it feel good to just put the music on and dance not worrying about all of the other stuff? For me, letting go and dancing in this way is a great form of therapy.
Let's get on with the final challenge.
Today's exercise is designed to help you keep the challenge going in class or in your home practice.
I remember when I first studied with Mercedes. I felt so overwhelmed with all of the classes I was taking, coming in toward the end of the year, perhaps trying to do too much. So many things felt impossibly hard. 'I can't,' 'No way,' 'Impossible,' Thoughts like this were constantly running through my head. I even declared them out loud. "No puedo," I would tell Mercedes. Or, I would just stop dancing.
We're almost done with the challenge, can you believe it? This series was born out of a longing to be back in class with Mercedes Ruíz. Because I love it there. I love how we learn in her class, the focus on technique, the repetition, watching Mercedes move.
I'm very excited for today's activity not just because of how it will serve you as a flamenco dancer but for how it can benefit your life and health far beyond the studio.
But before we get to that, let's reflect.
I don't know about you, but during the past several days I've had greater awareness of all of the skills we've covered thus far in the Dance Like You're In Class With Mercedes Home Challenge in all of my dancing (both within and outside of the activities). In class I hear Mercedes in my head giving me little reminders . . .
'Brazos redondos,' I heard her saying during my kids' class yesterday. 'Mantener el mismo plié,' she called during Sevillanas class last weekend. In practice it's the same, 'Todos los deditos, Laura,' I heard her saying today.
I can't seem to get away from the challenge, nor do I want to because receiving these little reminders without my trying is one of my desired outcomes of this experience. Woo-hoo!
So, let's get on with today's challenge.
Today I'll guide you through activity for finding roundness in the arms.
we hear Mercedes Ruíz say in class.
Ricardo says it all of the time too, redondo. 'You'll like her, she's muy redondo,' he's said to me so many times referring to various dancers. Round, he means, by the shapes created when someone is dancing. It doesn't matter what shape your body is, you can create roundness.
For today's challenge we'll focus on finding roundness in the arms.
How did the slow practice go for you yesterday?
Mercedes in huge on using your skirt in class. Not twirling the skirt around as you dance or doing a million things with it but holding it, being aware of it.
During our beginning of class exercises the back arm is almost always holding the skirt.
Yes, that back arm that we can tend to forget about.
Holding the skirt inspires us to pay attention to the placement of that arm.
I've been working with the same combination throughout the challenge, and I've found that with each new daily focus I also revisit all of the prior days' areas of focus. In other words, I go through each new activity and (without a conscious plan to do so) layer the skills addressed in the previous challenge activities. It actually seems to have become impossible for me not to be aware of them when in challenge mode, and I'm loving that. How about you?
Now let's move on to today's challenge.
As you know, Mercedes Ruíz is big on doing things slowly.
As are so many other professionals.
So, naturally, we work our arms and hands like crazy in her class.
Mariana wrote about that here, and you may have heard Amy talk about it here.
It's Day 3 of the 10-Day Dance Like You're In Class With Mercedes Ruíz Home Challenge. I hope you enjoyed yesterday's exercise for keeping the shoulders down.
Let's get on with today's focus.
Mercedes says this a lot in class.
Or, as I like to say, don't bounce.
In flamenco dance we must remain grounded. The upper body projects upward while the lower body connects with the floor.
It's Day 2 of the 10-Day Dance Like You're In Class With Mercedes Ruíz Home Challenge! How did the breathing activity go for you yesterday? Angela had an interesting realization about her breath; check out her comment here.
I applied yesterday's challenge activity to a remate and marcaje por bulerías since I've been wanting to improve my bulerías.
I noticed that thinking about the breath before I started set me up to breathe more fluidly while I was dancing. While it was easier to focus on breathing during the marcaje than it was during the remate (probably because of the complicated rhythms, footwork, and body slapping) I could execute the remate with more ease when I was aware of my breathing. What about you? What did you notice?


text:
NEW KAYAK AND CANOE LAUNCH FUNDED BY CANAL CORPORATION OPENS ON CAZENOVIA LAKE
Lake Has Seen Rapid Growth in Visitors
CAZENOVIA—The New York State Canal Corporation and village of Cazenovia today dedicated a new launch for kayaks and canoes and provide a dedicated space for boaters in an increasingly popular park.
The launch in Lakeland Park was funded by a $70,000 grant from the Canal Corporation as part of Governor Andrew M. Cuomo's Regional Economic Development Council program.
The park previously had a single access point for boaters and swimmers. The new launch will be at the park's southern border away from swimmers and a small public beach.
"Beyond the beauty of Cazenovia Lake, this boat launch enables kayaks and canoes to connect to a wonderful section of Chittenango Creek," said Brian U. Stratton, Canal Corporation Director. "This launch will enable more boaters to explore a beautiful and historic stretch of the state Canal System."
Cazenovia Lake is linked by a feeder canal to Chittenango Creek. The creek feeds into the historic Erie Canal and ends at Oneida Lake, which is part of the modern-day Canal System.
The funding also helped pay for the repair of a canal wall at the site of the launch.
The Cazenovia community is grateful for the support of New York State and the Canal Corporation for funding this project," said Cazenovia Mayor Kurt Wheeler. "Increasing access to outdoor recreational opportunities has been identified as a local priority. We have a wealth of natural resources located in and around Cazenovia and have increasingly become a destination to enjoy the outdoors. This project will enhance the ability of residents and visitors to enjoy the beauty of Cazenovia Lake and Chittenango Creek."
The boat launch was funded through the Canalway Grant Program, which includes up to $1 million in competitive grants available to eligible municipalities, and 501(c)(3) non-profit organizations along the New York State Canal System for canal-related capital projects. The minimum grant request amount is $25,000. The maximum grant request is $150,000.
Proposed projects need to demonstrate how they will achieve some or all of the following: expand public access, increase visitation and recreational use, stimulate private investment, improve services and amenities for Canalway land and water trail users, and enhance the connections between the canal and the corresponding region.
Priority this year will be given to projects that encourage canal-related tourism and stimulate private investment in tourism infrastructure. The deadline to apply is July 26. For more information, go to www.canals.ny.gov/community/grant.html.


text:
The Irish Coast Guard
The Coast Guard is responsible for maritime emergencies.
51. The Irish Coast Guard
The Hot Air Balloon
Hot air balloons have a fascinating history and important place in the history of flight.
50. The Hot Air Balloon
Working at Dublin Airport
Dublin Airport is a busy place where lots of people work at different important jobs.
49. Working at Dublin Airport
Catching a Flight at the Airport
The Airport is where people go to catch a flight on an aeroplane.
48. Catching a Flight at the Airport
The Wright Brothers
The Wright Brothers, Orville and Wilber were the first to fly a motor operated plane.
47. The Wright Brothers
Farming: Past and Present
People have been farming for thousands of years, the process has changed a lot over the years
46. Farming: Past and Present
Making Bales
Making bales of hay is an important part of farming and it involves all sorts of interesting processes and machines
45. Making Bales
Farming Potatoes in the Past
Potato farming has been going on in Ireland for many years, in the past it was done by hand and now it is a mechanised process.
44. Farming Potatoes in the Past
All About Bees
Bees are yellow and black insects which have two wings and six legs who fly from flower to flower collecting pollen to make honey
43. All About Bees
Natural Disasters.
Natural disasters happen in countries around the world all the time, global warming is causing these disasters to happen more often
42. Natural Disasters.
Turf Cutting: Past and Present
People have been cutting peat for heating for many years and the process has changes a lot over the years
41. Turf Cutting: Past and Present
Climate Change: Melting Ice and Rising Seas
Climate change is causing the ice at the North and South Poles to melt and sea levels to rise.
40. Climate Change: Melting Ice and Rising Seas
Let's Go Fly a Kite
Making and flying your own kite can be lots of fun on a windy day, remember to ask an adult for help if you need it
39. Let's Go Fly a Kite
Birds, Animals and Materials on Irish Beaches
There are many interesting kinds of birds, animals and materials on the beaches around Ireland
38. Birds, Animals and Materials on Irish Beaches
Weather in Other Countries
The weather in other countries and during other seasons can be very different but people in those places make the most of it.
37. Weather in Other Countries
The Emergency Services
The Emergency services are the Coast Guard, the Fire Brigade, The RNLI Lifeboat Service and The Ambulance Service.
36. The Emergency Services
Biodiversity is name for the variety of life on earth
35. Biodiversity
Bees fly from flower to flower taking and dropping pollen as they go
34. Pollinators
Life in the Past : Baking in an Old Irish Kitchen
In times gone by people used to bake their bread on an open fire
33. Life in the Past : Baking in an Old Irish Kitchen
The History of Writing
Humans have been writing for thousands of years, the shape and method people used has changed many ways over the years
32. The History of Writing
The Dawn Chorus
Birds sing as the day breaks for all sorts of different reasons, their songs together are called The Dawn Chorus
31. The Dawn Chorus
Climate Activists
Climate activists do all sorts of different activities to support the environment
30. Climate Activists
What Is Global Warming?
The temperature on earth is increasing due to human activity.
29. What Is Global Warming?
The Story of Turf Long Ago
People in Ireland have been cutting turf and burning peat for a long time.
28. The Story of Turf Long Ago
All About Electricity
Electricity can be a fantastic help but it can also be very dangerous
27. All About Electricity
Moore Street
Moore Street is a historic and traditional market in Dublin
26. Moore Street
Neil Armstrong was the first man to walk on the moon. He lived an extraordinary life of danger, passion and advances in the field of aeronautics
25. Neil Armstrong
The First Moon Landing
Neil Armstrong and Edwin 'Buzz' Aldrin were the first people to walk on the moon but they didn't get there alone.
24. The First Moon Landing
Planet Life
Planet Earth is home to a huge and diverse range of life
23. Planet Life
Day and Night in Antarctica
Antarctica is a fascinating cold continent inhabited by seals, penguins and other wild life at the South Pole
22. Day and Night in Antarctica
The Human Lifecycle
The human lifecycle is from birth to death and covers everything in-between
21. The Human Lifecycle
Sea Pollution
Plastics, chemicals and other waste is making it's way into our rivers and oceans causing pollution
20. Sea Pollution
The rubbish that we throw away often makes its way into the sea – but by reducing, reusing and recycling our rubbish, we can help to protect all sorts of plant and animal life.
19. Rubbish
Irish Charities
Irish charities do a lot of good work in the community with the homeless, elderly, animals, children and other people in need
18. Irish Charities
Hedgehogs hibernate through the winter and wake again in springtime
17. Hibernation
Wind turbines convert wind into electricity
16. Wind Turbines
The Sun in Space
The Sun is a star made of gas at the centre of our solar system
15. The Sun in Space
Lighting a Paraffin Lamp
Lighting a paraffin lamp is an old fashioned way to bring some light into the darkness
14. Lighting a Paraffin Lamp
The History of Music Players
Recording and playing back music has changed in many interesting ways through the years
13. The History of Music Players
There are many different and amazing types of musical instruments which are suited to different types of music from classical to digital
12. Musical Instruments
Planet earth is where we live, the surface is covered in land and sea.
11. Planet Earth
People Who Travel to Help Others
Many different jobs involve travelling to help others, Healthcare Visitor, Veterinarian and Ambulance driver are some important ones
10. People Who Travel to Help Others
Filtering Water
Drinking clean water is important for health and wellbeing, it's sometimes necessary to use a filtration system to filter dirty water into clean
9. Filtering Water
The Story of Rain
The water cycle is one of the important systems which affects everything on earth
8. The Story of Rain
7. Autumn
Where You Live: Ireland
Irealnd is a beautiful country with many amzing sights, situated on the western most edge of Europe
6. Where You Live: Ireland
The movement of the earth spining around the sun creates day and night where you are
5. Day and Night
4. Our Solar System.
Staying Safe with Electricity
Understanding electricity and staying safe with it is important in the home, at school and in the workplace.
3. Staying Safe with Electricity
Carving a Pumpkin
Carving a pumpkin for Haloween takes, planning, skill and the right tools for the job
2. Carving a Pumpkin
Growing a Seed
Planting seeds and watching them grow is a facinating way to understand the world around us
1. Growing a Seed
Vasco da Gama was born in the 1460s in Sines on the south-west of Portugal. Find out all about his life and achievements.
5. Vasco Da Gama
The Maori
The Māori are the indigenous people of New Zealand.
4. The Maori
Let's take a trip back in time and learn all about the French revolution.
3. French Revolution
Hidden People of Iceland
Learn all about elves, the hidden people of Iceland.
2. Hidden People of Iceland
How did World War 1 begin? Who were the Allies and what countries made up the Central Powers? Let's find out.
1. World War 1
Invasive Species and Unwelcome Guests
Over millions of years, plants and animals have evolved to suit the environment or habitat in which they live.
12. Invasive Species and Unwelcome Guests
Making Land out of Water
How is land formed on water? Let's find out.
11. Making Land out of Water
Travel to Japan and learn all about this incredible country.
10. Japan
Let's learn more about natural disasters and how they occur.
9. Natural Disasters
The United Nations Educational, Scientific and Cultural Organisation (UNESCO) identifies landmarks or areas around the world that have cultural, historical or scientific significance. Here are a just a few.
8. World Heritage Sites
Every day, the surface of the Earth is worn away by natural forces such as the weather and waves.
7. Erosion
Everything you ever wanted to know about ice!
Staple Food & Main Crops
The surface of the Earth is covered with different habitats that have been created by their climates and locations.
5. Staple Food & Main Crops
How was the European Union formed and how does it benefit its members?
4. The European Union
What are plate tectonics and how do they change the surface of the Earth? Let's find out!
3. Plate Tectonics
The Human Landscape
Learn how our natural landscape has been modified by human activities.
2. The Human Landscape
Learn all about Germany's capital, Berlin.
1. Berlin
History of Air Travel
Let's take a flight through aviation history.
6. History of Air Travel
Romulus and Remus
The story of Romulus and Remus is one of the most famous in Roman mythology.
5. Romulus and Remus
Inspirational Women of the 20th Century
Let's meet some of the many women who have left a lasting impression on the past century.
4. Inspirational Women of the 20th Century
Martin Luther King Junior
Let's take a look at Martin Luther King Junior's tireless work in the peaceful fight for justice.
3. Martin Luther King Junior
The American Revolution was a war between American Patriots and their British rulers. Find out how it began and how it resulted in the foundation of the United States of America.
2. The American Revolution
Wired to Wireless – Morse Code
Today, the telephone has become central to our lives. It has changed the way we communicate. But where did it all begin?
1. Wired to Wireless – Morse Code
Take a look at some examples of habitats that can be found around the world.
10. Habitats
It is the third largest continent, after Asia and Africa. But how much do you know about North America?
The World's Seas & Oceans
Let's take a closer look at the world's seas and oceans.
8. The World's Seas & Oceans
Extreme Weather and Climate Change
Is the world slowly getting warmer and warmer? Climates are changing – and extreme weather is more common than you think!
7. Extreme Weather and Climate Change
La Belle France
Take a trip through France and learn all about this beautiful country.
6. La Belle France
Water is essential for life on Earth. Why is it so important and where does it come from? Let's find out.
Our Place in Space
Travel through space and learn more about our solar system.
4. Our Place in Space
Landmarks and Places that Stand Out
Here are a selection of world-famous landmarks, natural and some man made.
3. Landmarks and Places that Stand Out
A Visit to Mexico City
Mexico City is not your typical city. It's time to explain.
2. A Visit to Mexico City
World Climate
Different parts of the world have different climates. Let's look at what causes them.
1. World Climate
Who will be the first to send a human into space? Who will be the first to walk in space? And, most importantly, who will be the first to walk on the moon?
6. Space Race
Changing Clothes
Take a look at fashion throughout the centuries.
5. Changing Clothes
Mapping World History
Maps can be a very interesting way of looking at history and the changes that happened over time. There are many reasons why these changes happen.
4. Mapping World History
The Inca Civilisation
The Inca civilisation was one of largest civilisation in the world! But how much do you know about it?
3. The Inca Civilisation
Take a trip back in time to Ancient Greece and learn about life in Athens and Sparta.
2. Ancient Greece
History Before Humans
History is the story of everything that has happened in the past. Let's journey back in time and take a look at what life was like before humans.
1. History Before Humans
Welcome to Brazil – the fifth biggest country in the world.
Minding Our Planet
If no one bothered to care for our environment, our world would be a very different place. Let's look at some small changes that can make a big difference to our world.
7. Minding Our Planet
Have you ever looked at the sky at night and wondered, 'Is there life on other planets?'
6. Outer Space
Journey with us to Norway, where we learn all about this amazing country.
5. Norway
Unusual Environments
Planet Earth is an amazing place. It's home to lots of unusual environments. Let's take a look!
4. Unusual Environments
Did you know that trees are the oldest living things on planet Earth?
3. Trees and Forests
From Farm to Fork
We enjoy thousands of foods and flavours every day and almost all of them come from a farm. Learn more about the journey from farm to fork.
2. From Farm to Fork
Our ancestors predicted the weather by looking at the sky, and observing how animals behaved. Let's have a look at how things have changed since then, thanks to modern technology.
Track the history of transport and travel from the invention of the wheel through to modern air travel.
6. Travel and Transport
The History of Agriculture
Who was responsible for the three F's of Farming and what impact did this have on agriculture?
5. The History of Agriculture
Life in Ancient Japan
Discover all about the first settlers in Japan and what life was like during this period.
4. Life in Ancient Japan
Feast and Festivals: Halloween
It's the spookiest holiday of the year and celebrated throughout the world, but how did it begin?
3. Feast and Festivals: Halloween
The Bronze Age
What was the Bronze Age and when did it begin? Let's find out.
2. The Bronze Age
Find out what made the Ancient Egyptian civilisation one of the most interesting and vibrant civilisations in human history.
1. Ancient Egypt
Earthquakes or Hurricanes
The Earth has a lot of activity: both under the ground and in its atmosphere. This activity can lead to extreme weather conditions. Let's find out more.
10. Earthquakes or Hurricanes
9. Volcanoes
What are three R's of recycling and why are they so important?
8. Recycling
Our planet is heating up and it is having an impact on climates all around the world. Let's take a look at some of the reasons for this.
Blast off into space and learn more about our solar system.
6. Our Solar System
10 Facts About Italy
Here are 10 amazing facts about Italy that you may not know.
5. 10 Facts About Italy
Types of Rocks
They might all look the same, but rocks are always. These changes happen slowly over millions of years. But why is that? And how are they formed?
4. Types of Rocks
What is Fairtrade?
What is fairtrade? And how does it benefit our society? Let's find out.
3. What is Fairtrade?
Modern transport allows people to travel all over the world. Take a look at some of the different ways in which you can travel.
2. Transport
Have you ever wondered how and where a river begins?
1. Amazon River


French opera singer Marie Delna (1875-1932). Photo from the George Grantham Bain collection. No date recorded. View full size.
Submitted by noelani on Thu, 11/11/2010 - 10:29pm.
I don't know how old this recording is but obviously before they got to the point of no longer distorting the voice. It sounds to me like she was very good, though. She was a contralto, which is the deepest female range.
Submitted by Rollo Jenkins on Wed, 08/01/2007 - 4:39pm.
Dude! She's like...dead 'n stuff. Of COURSE I can outrun her!
Submitted by Anonymous Tipster on Wed, 08/01/2007 - 1:02pm.
I'd like to see you to tell her that to her face!! How fast can you run!!??
Submitted by Rollo Jenkins on Tue, 07/31/2007 - 4:18pm.
So THAT'S the fat lady they're always talking about!!
Submitted by Rob Hutten on Tue, 07/31/2007 - 7:43am.
I would seriously not mess with her.


This thread is to discuss the opinion poll topic 'Which one of the followings is a good source to improve our knowledge on a particular content?'.
Hearing and discussing about the articles is always better than the other choices as it gives you the chance to share your ideas and views and also getting the chance of knowing others views on the topic.
These sources are one depends another, If you want discuss or want know about the content means first step we need to discuss about that if we didn't get satisfy. We need to read about that content in net or books. Video source will give good knowledge about content for some. When we got information from these resources afterwards only we can publish the articles about the content. So articles are the edge of knowledge about the content.
I think talking and discussing a Topic will get more information about that issue. Because discussing with people open up the matter into deep probing and in the process we get more information on the matter.
In this busy world, People may not get enough time to go through the articles or to refer a book. So, when they meet people in group if the discussion starts on any knowledge topic it will help them to enhance their knowledge and helps them to understand easliy rather than going through a book.


text:
Dam Reconstruction Set for Next Year
Freedom—August 29, 2018—The long-delayed plan to upgrade the Ossipee River dam complex is fully funded and on track to begin construction in the spring of 2019. That was the message from the state's chief engineer, Jim Gallagher, at a public forum on August 25 that was hosted by Ossipee Lake Alliance at Freedom Town Hall.
When completed in 2020, the $4.9 million state-funded project will replace aging infrastructure at the site and feature flood gates that can be controlled remotely from Concord, if required. The state believes the new complex will help alleviate the severity of flooding on the lake, although it will not completely eliminate high water threats because of the lake's geography.
Originally announced in 2009, the construction project has been in flux due to state funding constraints. In his introduction to the forum, Gallagher thanked State Representative Mark McConkey, who was at the meeting, for his work to secure the funds.
DES engineering chief Jim Gallagher explains the rebuilding plan for the Ossipee River Dam complex. The $4.9 million project will begin next spring.
There has been a dam on the river since 1790, but the current structures date from 1944 when the complex was controlled by Central Maine Power. The power company transferred ownership to the State of New Hampshire in 1992. The last major upgrade to the site was in 1995.
The current complex consists of two structures that together function as a single hydraulic feature to control the level of more than 4,000 acres of water in the Ossipee Lake System. The Berry Bay Dam, to the north on the Freedom side, functions as a spillway to the Ossipee River, while the Head Works Dam, to the south in Effingham, empties water into a man-made canal that ultimately joins the river.
The new Berry Bay Dam will be located approximately 50 feet downstream. A catwalk will span the dam, and a new control building will be sited on the island between the Ossipee River and the canal. Each of the two automated flood gates will be 40 feet long.
During construction, water discharge into the river will be unchanged, and the level of the lake will continue to be managed at 407.25′ after the winter drawdown. The existing Berry Bay Dam will be used as a coffer dam during construction to help keep lake levels stable. Once the new complex is complete in 2020, the current Berry Bay Dam will be demolished. The Iron Works Dam and the existing control house will remain in place.
A Variety of Questions
While questions from the approximately 60 people at the forum focused mainly on the impact on water levels during construction, the topics varied widely. In regard to the remote operation of the automated gates, Gallagher said the state will continue to rely on on-site management by the Ossipee River Dam Authority, which coordinates with the state on adjustments to the water level based on weather conditions. For safety and other reasons, the remote-control feature will be used only in an emergency.
The state plans to use Parsons Road in Freedom to access the construction site, prompting a question about the potential for heavy traffic and road damage. Gallagher indicated that the required construction equipment will be delivered to the site and remain there for the duration of construction, limiting traffic. He acknowledged, however, that the load level of the road might have to be increased, something he said he would look into.
In response to a question about building a fish ladder at the site, Gallagher said that N.H. Fish & Game officials think ladders are too ineffective to justify the cost. He also said there is no plan to take the level of the lake lower than 404′ during winter, addressing a concern that lower levels could cause wells to run dry.
Several downriver residents asked if the state could address silting in the river and the proliferation of weeds, which they said have reduced the number of game fish and compromised recreation. Gallagher said his group has no authority over such matters, but he offered to convey the concerns to the appropriate authorities at DES.
DES has solicited construction bids for the project, but several things have changed since the state gave the project a green light. One is that the federal government's imposition of steel import tariffs has put the cost of the dam gates in flux relative to the budget. Additionally, the approved funding for the project has a two-year 'use it or lose it' provision, and construction is likely to extend beyond that timeline.
Gallagher said DES is working on these issues, adding he is confident that they will be resolved without affecting the project timeline.
Ossipee Lake Alliance will be tracking and documenting the construction process online starting next spring. Click here to read the DES presentation.


text:
Home » News » Manchester giants seek derby delight as Liverpool threaten to burst beyond reach
Manchester giants seek derby delight as Liverpool threaten to burst beyond reach
Both sides of the Manchester divide will be hoping some derby delight can add impetus to disappointing seasons when City host United on Saturday, while Liverpool travel to Bournemouth aiming to surge further clear at the top of the Premier League.
Manchester United got a badly needed win for manager Ole Gunnar Solskjaer on Wednesday, inflicting a first defeat as Tottenham manager on Jose Mourinho as the Portuguese returned to Old Trafford.
The Red Devils were again reliant on Marcus Rashford goals as the England forward struck twice to take his tally to 12 in 13 games for club and country.
"He was strong, direct, taking people on, inside and outside with no fear," said Solskjaer.
"That's what we want — we want to see boys enjoying themselves."
There has been precious little for United fans to enjoy this season, but just a fifth Premier League victory in 15 games was enough to lift them up to sixth.
That is still 11 points adrift of third-placed City, despite their own struggles at times.
READ ALSO: Brighton and Hove Albion's Balogun calls for collective effort to fight racism
Pep Guardiola's men looked more like their old selves in thrashing Burnley 4-1 on Tuesday with Gabriel Jesus stepping up in the absence of the injured Sergio Aguero to score twice.
City have lost just one of six league meetings with United since Guardiola took charge three years ago and cannot afford to slip up if they are to maintain any aspirations of catching Liverpool in the title race.
The English champions could kick-off at the Etihad 14 points behind the leaders, should Jurgen Klopp's men continue their scintillating form at Bournemouth earlier on Saturday.
"For the distance we are behind Liverpool it would be crazy to think about the title, we have to think about the derby," said Guardiola.
– Strength in depth –
Klopp could even afford the luxury of leaving Roberto Firmino and Mohamed Salah on the bench for a 5-2 thrashing of Everton in the Merseyside derby in midweek.
Both are expected to return for the visit to the south coast, but Klopp may rest some of his stars who did start against Everton ahead of a huge week for the European champions.
Liverpool travel to Salzburg in the Champions League on Tuesday needing to avoid defeat if their defence of the title is not to embarrassingly end in the group stages.
Divock Origi scored twice against Everton and Xherdan Shaqiri struck on his first start of the season to prove Klopp does have the strength in depth to successfully shuffle his pack.
"It's easy for me to tell them often, very often, how good they are but if they then don't play it's not too easy for them to always understand what I say," said Klopp.
"But if they play and deliver like they did, it's a very, very important sign for the whole squad."
– Leicester aiming for cloud nine –
Leicester remain Liverpool's closest challengers, eight points back in second, thanks to a run of eight straight wins in all competitions.
"The team is developing and are proving they have a winning mentality and mindset," said Leicester boss Brendan Rodgers, who has dismissed speculation linking him with the vacant managerial role at Arsenal.
Next up for the in-form Foxes is a trip to Aston Villa on Sunday.
Villa are one of a host of teams hauled back into the battle to avoid relegation by Southampton's resurgence with Dean Smith's men just one point above the drop zone.
Fixtures (all times GMT)
Everton v Chelsea (1230), Bournemouth v Liverpool, Tottenham v Burnley, Watford v Crystal Palace (all 1500), Manchester City v Manchester United (1730)
Newcastle v Southampton, Norwich v Sheffield United, Aston Villa v Leicester (all 1400), Brighton v Wolves (1630)
West Ham v Arsenal (2000)
Buhari's legacy strong, difficult to dismantle ― Presidency January 18, 2022


text:
Q: How to Create a TCP Client connection with a Client Certificate in Powershell With Following code i can establish a SSL Connection:
   $cert = dir cert:\CurrentUser\My | where {$_.Subject -like "*Alice*"}

   $computerName = "google.com"
   $port = "443"

   $socket = New-Object Net.Sockets.TcpClient($computerName, $port)
   $stream = $socket.GetStream()

   $sslStream = New-Object System.Net.Security.SslStream $stream,$false
   $sslStream.AuthenticateAsClient($computerName)

    $sslStream

This Works fine. But now i wan't to add a Client Certificate for Authentication.
Think i just need to substitute
$sslStream.AuthenticateAsClient($computerName)

with
$sslStream.BeginAuthenticateAsClient($computerName,$cert,"SslProtocols",$false,"Foo" ,"Bar")

But i wasn't lucky to get the Arguments right. Can Sombody solve the Assync Calls please ;-)
Maybe i need some C# code for this?!?
Arguments are:
System.IAsyncResult BeginAuthenticateAsClient(

string targetHost,
System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates,
System.Security.Authentication.SslProtocols enabledSslProtocols,
bool checkCertificateRevocation,
System.AsyncCallback asyncCallback,
System.Object asyncState)

What i finally want to achieve is to list and later specify the CipherSuites the client is connected to. (I could use Wireshark i know ;-) )

A: Finally got it working, wasnt argument 4 but the $Cert which was no collection.
   $cert = dir cert:\CurrentUser\My | where {$_.Subject -like "*alice*"}

   $computerName = "google.com"
   $port = "443"

    [System.Security.Authentication.SslProtocols]$protocol = "ssl3"

   $certcol = New-object System.Security.Cryptography.X509Certificates.X509CertificateCollection
   $certcol.Add($cert)

   $socket = New-Object Net.Sockets.TcpClient($computerName, $port)
   $stream = $socket.GetStream()

   $sslStream = New-Object System.Net.Security.SslStream $stream,$false
   #$sslStream.AuthenticateAsClient($computerName)
   $sslStream.AuthenticateAsClient($computerName,$certcol,$protocol,$false)

    $sslStream

A: According to the documentation, the difference between AuthenticateAsClient and BeginAuthenticateAsClient is that the latter is for asynchronous use.
You should try AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean), where the second argument is a collection of client certificates that can be used (preferably X509Certificate2, since you'll need the private key associated with the certificate for it to be usable for authentication).

redpajama_set_name: RedPajamaStackExchange


Viktoh, the Nigerian musician who happens to be a member of Olamide's record label, YBNL has stunned fans with a disturbing suicidal message online.
The singer took to his Snapchat in the early hours of Friday, August 24, 2018, to make the shocking post.
According to him, he wishes something could take away the pains he feels.
"What happens next when the world knocks you down? There is so much pain in this world that I just wanna leave and go somewhere better.
"I want to go to a place where your heart never aches again! I just wish something could take this pain away cause," he wrote.
Fans have expressed fear over the singer's state of mind, urging his colleagues to reach out to him immediately.


* (0:28) Chad vs Pat's phone.
* (5:34) Brodeur hates train games.
* (11:09) Dan's gaming whale gets a certificate of authenticity.
* (15:00) Fortune-telling with gnoll coins.
* (16:34) There's no shame in a job.
* (19:46) Brodeur grows up poor.
* (34:15) Who did and didn't get TPed.
* (0:29) Chris is still doing the giveaways on Twitter and Facebook.
* (0:47) Wayne gets his first exposure to play-by-post games. You can find the Fear the Boot forum section for them here.
* (11:18) Jobbies, Research in Motion, and FIHAGs.
* (12:57) The player that challenges the GM on everything.
* (0:32) Chris is doing the video game giveaways on Twitter.
* (1:42) Welcoming Joe Wetzel and Keith Curtis. Dan gets a contest entry from a spam bot...?
* (7:00) An overview of Inkwell Ideas.
* (11:46) Using outside products to help with game prep and those moments when the GM is caught flatfooted.
* (0:39) Brodeur becomes a host.
* (1:07) Follow Fear the Boot on Twitter for Chris' upcoming giveaway of PC and XBOX 360 games.
* (3:10) Dan gets a bunch of Battletech dice that he'll be giving away soon.
* (4:04) D&D 5th edition and Dan's inability to name an episode right.


Identifying quantitative trait loci (QTL) of sizeable effects that are expressed in diverse genetic backgrounds across contrasting water regimes particularly for secondary traits can significantly complement the conventional drought tolerance breeding efforts. We evaluated three tropical maize biparental populations under water-stressed and well-watered regimes for drought-related morpho-physiological traits, such as anthesis-silking interval (ASI), ears per plant (EPP), stay-green (SG) and plant-to-ear height ratio (PEH). In general, drought stress reduced the genetic variance of grain yield (GY), while that of morpho-physiological traits remained stable or even increased under drought conditions. We detected consistent genomic regions across different genetic backgrounds that could be target regions for marker-assisted introgression for drought tolerance in maize. A total of 203 QTL for ASI, EPP, SG and PEH were identified under both the water regimes. Meta-QTL analysis across the three populations identified six constitutive genomic regions with a minimum of two overlapping traits. Clusters of QTL were observed on chromosomes 1.06, 3.06, 4.09, 5.05, 7.03 and 10.04/06. Interestingly, a ~8-Mb region delimited in 3.06 harboured QTL for most of the morpho-physiological traits considered in the current study. This region contained two important candidate genes viz., zmm16 (MADS-domain transcription factor) and psbs1 (photosystem II unit) that are responsible for reproductive organ development and photosynthate accumulation, respectively. The genomic regions identified in this study partially explained the association of secondary traits with GY. Flanking single nucleotide polymorphism markers reported herein may be useful in marker-assisted introgression of drought tolerance in tropical maize.


text:
Peer group helped me excel, student says
Zelda Ah Ching (Photo: Anetone Sagaga)
A student at the National University of Samoa (N.U.S.) has credited an on-campus peer group for her academic success, claiming there has been a marked improvement in her results since she joined.
N.U.S. Faculty of Arts second-year bachelors degree student, Zelda Ah Ching, told the Samoa Observer that being a member of the Peer to Peer Group is rewarding and pushes her to greater heights.
She said initially she was not a fan of reading but her reading and writing has improved since joining the group and motivated her to improve academically.
As an example, Ms Ah Ching said she was scoring between 60-70 points in her first semester, but her marks have jumped to the 90s since she joined the group.
Consequently, she encouraged colleague students to consider going down the same path if they want to succeed academically.
Over 40 students of the group were awarded with certificates at a ceremony at the N.U.S Aoa Conference Room on Wednesday morning.
Former Peers to Peers Initiative Group President, Reupena Foliga, said that he was proud to lead the group of students for two years.
"Since I became president of the Peer to Peer initiative in 2019, I have seen a huge improvement through the years," he said.
Mr Foliga said members of the peer group have become more creative, especially organising events such as the International Women's Day and the International Youth Day.
"With these activities, the peers in a sense became highly proactive. Not only that, but the peers as well learned so many lessons from each other in times of difficulties," he said.
Mr. Reupena also acknowledged the assistance and support of the N.U.S., the Peers to Peers Initiative Group, the coordinators and their partners Brown Girl Woke, Youth and Students for Peace [Y.S.P.] Samoa, and the Lanulau'ava Student Association.
N.U.S sociology lecturer and Peer to Peer Initiative Coordinator, Rosa Filoi, told the Samoa Observer that the initiative is really what the name says – it's from one peer to another, to keep them going and motivated – because sometimes a three-year degree can see students getting lost along the way and it is really those who are around who can help you get better.
"I can happily say that it is student-led because students are now pushing and planning the activities themselves where the faculties come in is we support and resource to a certain extent what we can as the peers seek their own resources as well. But we are there to support, guide and mentor," she added.
Cabinet orders Associate Ministers to return Govt. property
At the dissolution of Parliament on 19 January, 2021 it also ends the services of the Associate Ministers and they are to turn in government assets allocated to them including government vehicles.
N.Z. trade union slams Govt over vaccines
A trade union in New Zealand has lashed out at their government over reports Samoa will take delivery of its first batch of COVID-19 vaccines next month.
By Hyunsook Siutaia 18/01/2021


text:
Imperial Solar Energy Center West
EIR - Draft EIR
Present Land Use
Agriculture A-2 (General Agriculture), A-2-R (General Agricultural Rural Zone), and A-3 (Heavy Agriculture)
Development of a solar energy center on 1,130 acres of vacant land previously utilized for agricultural purposes. Project would include a facility consisting of a ground mounted photovoltaic solar power generating system, supporting structures, operations and maintenance building, substation, water treatment facility, plant control system, meteorological station, and roads and fencing. The electric generating facility would connect to the Imperial Valley Substation via 230 kV transmission lines. The Imperial Valley Substation is isolated by federal lands manages by the Bureau of Land Management (BLM). The project plans a 120-foot0wide Right-of-Way from the project site, along BLM land to the Imperial Valley Substation.
Patricia Valenzuela
Imperial County Planning and Dvelopment Services Department
Dunaway Rd. and Strobel Rd.
Parcel #
034-360-075 thru 078; 051-010-007
I-8
Westside ES
Westside Main Canal
11,12E
Other Location Info
City/Nearest Community: El Centro
Notice of Completion
State Review Period Start
State Review Period End
State Reviewing Agencies
California Department of Conservation (DOC), California Department of Parks and Recreation, California Energy Commission, California Highway Patrol, California Public Utilities Commission (CPUC), California Regional Water Quality Control Board, Colorado River Basin Region 7 (RWQCB), California State Lands Commission (SLC), Department of Fish and Wildlife, Region 6, Department of Toxic Substances Control, Office of Historic Preservation, Resources Agency, California Native American Heritage Commission (NAHC), Colorado River Board, California Department of Transportation, District 11 (DOT)
State Reviewing Agency Comments
California Native American Heritage Commission (NAHC), Colorado River Board, California Department of Transportation, District 11 (DOT)
Development Types
Other (Transmission Line Corridor), Power:Solar (Megawatts 250)
Project Issues
Aesthetics, Agriculture and Forestry Resources, Air Quality, Biological Resources, Cultural Resources, Cumulative Effects, Drainage/Absorption, Economics/Jobs, Flood Plain/Flooding, Geology/Soils, Growth Inducement, Hazards & Hazardous Materials, Hydrology/Water Quality, Land Use/Planning, Mineral Resources, Noise, Population/Housing, Public Services, Recreation, Solid Waste, Transportation, Vegetation, Wetland/Riparian, Wildfire, Special Designation
Disclaimer: The document was originally posted before CEQAnet had the capability to host attachments for the public. To obtain the original attachments for this document, please contact the lead agency at the contact information listed above. You may also contact the OPR via email at state.clearinghouse@opr.ca.gov or via phone at (916) 445-0613.


text:
Platte County R-3
West Platte
Park Hill South
Park University
Event for Calendar
Youth Sport Photograph
Buy a Copy
Platte City, MO, 64079
The Platte County Citizen
Complete Platte County news and sports coverage.
LOCKED UP WIN: Park Hill stays unbeaten with win vs. LS
October 8, 2014 Bryce Mereness
KANSAS CITY, Mo. — Park Hill linebacker Clayton Cole took advantage of two rare opportunities last Friday, picking off a pair of passes from Lee's Summit quarterback Drew Lock. A senior bound to play next year at the University of Missouri, Lock had only thrown one pick in his first seven games. Cole's two interceptions both came late and helped the Trojans remain unbeaten in a 44-33 win at Park Hill District Stadium.
The first seemingly sealed the minor upset of the Class 6-ranked Tigers and the second left no doubt.
"I stood up and looked at the crowd," Cole said. "Everyone was going crazy. I can't explain the feeling. It's great. This was the toughest challenge we've had all year on defense. It's going to help us in the long run."
Park Hill improved to 7-0 — the team's best start in more than two decades — and the Trojans moved up one spot to No. 6 in the most recent Class 5 media state rankings. They are one of four unbeaten teams left in that classification.
Providing easily the biggest test so far for Park Hill, Lock finished with 334 yards through the air on 30-for-50 passing attempts with three touchdowns but couldn't engineer a last-minute comeback.
"That guy is outstanding," Park Hill coach Josh Hood said. "Drew Lock is an outstanding quarterback. He's as good as we're going to see for a long time. I give credit to our twos and threes. They won this football game for us. They gave our defense a look all week long. We were in the right position nearly every time."
As good as the Tigers were through the air, Park Hill equaled the effort on the ground.
Trojans junior running back Matt Harris pounded out 238 yards on the ground on 35 carries with senior standout Kenyatte Harris, who missed a second straight week with a bone bruise in his leg suffered in a Week 5 win vs. Park Hill South. Park Hill senior quarterback Tyler Holmes added another 123 on eight tries.
Matt Harris now has a pair of 100-yard efforts while filling in.
"One of us has to step up," Matt Harris said. "Every back has to step up. That's how we do it. Every back is just the same as the other ones. This is a big win right here. This was supposed to be a fluke game for us. The Kansas City Star thought we were a fluke, but we came out and performed how we thought we would."
A 72-yard scamper on the game's opening drive from Matt Harris set up Holmes' 4-yard touchdown three plays later — the first of his three scores, which gave Park Hill an early 6-0 lead. Lee's Summit answered on Zach Mitchell's 99-yard kickoff return for a touchdown – one of three scores for the junior wide receiver.
Park Hill went three-and-out on the next drive and punted, but Lock lost a fumble on the Tigers' first offensive play. Trojans sophomore defensive end Chester Graves recovered and returned it to the 22-yard line.
Matt Harris opened his scoring account three plays later on a 1-yard plunge.
Holmes final touchdown — a 35-yard run on a broken play — put the Trojans ahead 44-27 with 6 minutes, 10 seconds left. Park Hill led by as many as 18 points, and Holmes set a season-high in rushing yards. Hood featured him more after the recent return of the Trojans' backup quarterback Jeremiah Benson, who suffered an injury in a Week 2 win against Smithville.
Cole's two interceptions came right after Lee's Summit's final touchdown cut the deficit to 11 points. In between, Holmes threw an ill-advised interception the Tigers returned into the end zone. That play and a subsequent touchdown pass from Lock were both called back on hold before Cole's pick with just more than a minute left ended the tumultuous sequence.
Park Hill travels to play St. Joseph Central with a chance to earn at least a share of the Suburban League Red Division title. The Trojans haven't won a conference title since 2009 when they finished 9-2 with a Class 5 sectional loss to eventual state runner-up Fort Osage.
Liberty 24, Park Hill South 21
An interception for the Blue Jays' David Dilanardo with less than 2 minutes to play ended Park Hill South's potential wild comeback attempt last Friday at William Jewell College in Liberty, Mo.
The senior collected a tipped ball from Panthers senior quarterback Shaefer Schuetz to give the ball back to Liberty, and a first down run from Devon Bryant allowed the Blue Jays to run out the remainder of the clock in their first victory of the season. Park Hill South drops to 2-5 with the loss, after entering with a chance to earn back-to-back wins.
Schuetz finished with 155 yards on 16-of-23 passing attempts. His fourth-quarter 17-yard touchdown pass closed Park Hill South to within 10. Running back Derrick Cook provided a 10-yard touchdown run with 4 minutes to go for the game's final score.
Liberty opened the game scoring the first 24 points. the Panthers answered with 21 unanswered of their own.
Park Hill South safety Jake Saylor started the scoring for the Panthers on an interception return midway through the third quarter — their lone takeaway. Liberty collected four turnovers — two fumbles and two picks — and took full advantage of the miscues.
Park Hill South hosts Ruskin (1-6) looking to get back on the winning track Friday with the start of district play looming. The Panthers currently hold the No. 4 spot in the seven-team Class 5 District 8 standings with Central, Liberty and Oak Park chasing.
In Park Hill South Sports, Park Hill Sports, Sports
← West Platte football ran over, loses shot at KCI titlePlatte County football hopes to recover from Kearney blowout vs. reeling Grandview →
Cody Thorn
RT @aweissenfluh1: Rather than just complaining-if you are interested in putting together an investor group to explore the possibility… https://t.co/e0WA1V36jl
RT @GovParsonMO: For more than 50 years, the Kansas City @Chiefs have played an important role in the city and in our state. Today,… https://t.co/Bk1aRe6rhV
Recent Sport Headlines
Adam Burns
Park notebook: Jamal James named 2019 AMC Athletic Trainer of the Year
Citizen Staff Report
Shamet invited to USA Basketball training camp
My Thoughts, Exactly
Playoff history is on the side of the Patriots
Social media 101 in Dearborn
Platte Rambler
Platte County voters will play role in choosing new KC mayor
A shady place to park during a scorching summer
Sports Photo Gallery
KC Courage vs. St. Louis Fire & Ice, 6-23-19
Class 4 state track and field championship, 5-25-19
Class 5 Sectional 4 track and field meet, 5-18-2019 and 5-20-2019
News Photo Gallery
Parkville 4th of July celebration, 7-4-19
Weston 4th of July celebration, 7-4-19
Camden Point Freedom Festival, 6-29-19
North Platte art projects
Award winning newspaper in Platte County


Because of their constant use, and misuse, popular phrases such as "carbon footprint" lose their original meaning over time. When this happens, the expression can become a vague, catchall term that means whatever the user chooses for it to mean.
Reducing the carbon footprint has become a mantra for environmentalists. However, it is not necessary for one to be an eco-activist to care about this subject. Saving money is another excellent reason for reducing this "footprint," and this factor cuts across all economic and political lines.
Some states are said to be "Red" and others are deemed to be "Blue." However, most residents of Colorado would say their state is "Green." This is due to its pristine, natural beauty, which drew these residents to the area in the first place!
Mike Schroetlin, the CEO of Schroetlin Custom Homes in Denver, builds custom homes for families who can afford to make an investment in a luxury home. They are successful professionals not "eco-warriors," and they care about reducing the carbon footprint.
In building his successful custom home business, Schroetlin has discovered ten ways that homeowners can save the environment, save money and reduce the carbon footprint of their home.
Insulation materials, technology and building code regulations continue to advance and savvy consumers are taking advantage of these trends.
"Most homes are built using 'forced' air heating and cooling systems," Schroetlin notes. "In the case of heating, a forced hot air furnace draws the room air through duct work to a furnace, where the air is filtered and heated. The warmed air is then blown back into the rooms. Highly efficient furnaces and air conditioners are offered in a variety of different efficiency levels. Two stage and variable stage furnaces are very helpful for energy efficient and home comfort.
Are you interested in reducing the carbon footprint of your custom home? Contact Mike Schroetlin at Schroetlin Custom Homes to learn more.
Colorado has more sunny days than many other states, and while this natural light is glorious, the sunshine can wreak havoc on a home's carbon footprint. It doesn't have to be that way.
#4 There's an App for That!
Since all of those gadgets consumers can't seem to live without - smartphones, laptops and dozens of other tech toys - are powered by electricity (which is one of the primary drivers of carbon emissions), it seems only fair that technology should be used to reduce them.
"From an app on your smartphone you can adjust your window coverings to open and close on a schedule," he said. "You can dim your lights or turn them off." You can also adjust your thermostat and turn off your sprinklers if it's about to rain.
Transportation is one of the biggest culprits for increasing carbon emissions. In the home construction industry, there are literally thousands of building materials that must be transported to the building site. If these can be locally-sourced, reduction in the carbon footprint can be realized.
What about other environmental advantages of brick?
If reducing a custom home's carbon footprint is the objective, the appliances and fixtures must also meet strict energy-saving guidelines.
"Almost all major manufacturers of appliances, light fixtures, plumbing fixtures, have great options for ENERGY STAR - rated fixtures," Schroetlin noted.
When used by millions of homeowners, something as trivial as a light bulb can dramatically reduce the carbon footprint.
No one doubts the contribution of technology for helping to reduce the carbon footprint of a custom home. However, something as "low tech" as a light switch is a "tool" that any member of the family can use to reach this energy savings goal.
Coloradans know how critically important water is to the area. It is essential to life and it also can have an impact of the carbon footprint.
"Residential water must be treated," Schroetlin noted. "This requires energy for the treatment plants. Using less water will result in savings for both the water itself and the energy for its treatment, pumping and heating. Water-efficient showerheads, faucets, toilets, dishwashers and washing machines can also contribute to the reduction of water use.
The state of Colorado has plenty of sun and wind and because of this many custom home owners are considering these as possible power sources. According to the Energy Department, "Colorado is a leader in renewable energy, with investments in wind, solar, biomass, geothermal, small hydroelectric, and other renewable energy resources increasing over the last decade.
If you want to invest in a custom home that saves money and energy, contact Mike Schroetlin at Schroetlin Custom Homes or Michael Earley for more information.