text:
<?php

namespace yiiunit\framework\i18n;

use NumberFormatter;
use yii\i18n\Formatter;
use Yii;
use yiiunit\TestCase;

/**
 * @group i18n
 */
class FormatterNumberTest extends TestCase
{
    /**
     * @var Formatter
     */
    protected $formatter;

    protected function setUp()
    {
        parent::setUp();

        IntlTestHelper::setIntlStatus($this);

        $this->mockApplication([
            'timeZone' => 'UTC',
            'language' => 'ru-RU',
        ]);
        $this->formatter = new Formatter(['locale' => 'en-US']);
    }

    protected function tearDown()
    {
        parent::tearDown();
        IntlTestHelper::resetIntlStatus();
        $this->formatter = null;
    }

    /**
     * Provides some configuration that should not affect Integer formatter
     */
    public function differentConfigProvider()
    {
        // make this test not break when intl is not installed
        if (!extension_loaded('intl')) {
            return [];
        }

        return [
            [[
                'numberFormatterOptions' => [
                    NumberFormatter::MIN_FRACTION_DIGITS => 2,
                ],
            ]],
            [[
                'numberFormatterOptions' => [
                    NumberFormatter::MAX_FRACTION_DIGITS => 2,
                ],
            ]],
            [[
                'numberFormatterOptions' => [
                    NumberFormatter::FRACTION_DIGITS => 2,
                ],
            ]],
            [[
                'numberFormatterOptions' => [
                    NumberFormatter::MIN_FRACTION_DIGITS => 2,
                    NumberFormatter::MAX_FRACTION_DIGITS => 4,
                ],
            ]],
        ];
    }

    /**
     * @dataProvider differentConfigProvider
     */
    public function testIntlAsInteger($config)
    {
        // configure formatter with different configs that should not affect integer format
        Yii::configure($this->formatter, $config);
        $this->testAsInteger();
    }

    public function testAsInteger()
    {
        $this->assertSame("123", $this->formatter->asInteger(123));
        $this->assertSame("123", $this->formatter->asInteger(123.23));
        $this->assertSame("123", $this->formatter->asInteger(123.53));
        $this->assertSame("0", $this->formatter->asInteger(0));
        $this->assertSame("-123", $this->formatter->asInteger(-123.23));
        $this->assertSame("-123", $this->formatter->asInteger(-123.53));

        $this->assertSame("123,456", $this->formatter->asInteger(123456));
        $this->assertSame("123,456", $this->formatter->asInteger(123456.789));

        // empty input
        $this->assertSame("0", $this->formatter->asInteger(false));
        $this->assertSame("0", $this->formatter->asInteger(""));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asInteger(null));
    }

    /**
     * @expectedException \yii\base\InvalidParamException
     */
    public function testAsIntegerException()
    {
        $this->formatter->asInteger('a');
    }

    /**
     * @expectedException \yii\base\InvalidParamException
     */
    public function testAsIntegerException2()
    {
        $this->formatter->asInteger('-123abc');
    }

    public function testIntlAsDecimal()
    {
        $value = 123.12;
        $this->assertSame("123.12", $this->formatter->asDecimal($value, 2));
        $this->assertSame("123.1", $this->formatter->asDecimal($value, 1));
        $this->assertSame("123", $this->formatter->asDecimal($value, 0));

        $value = 123;
        $this->assertSame("123", $this->formatter->asDecimal($value));
        $this->assertSame("123.00", $this->formatter->asDecimal($value, 2));
        $this->formatter->decimalSeparator = ',';
        $this->formatter->thousandSeparator = '.';
        $value = 123.12;
        $this->assertSame("123,12", $this->formatter->asDecimal($value));
        $this->assertSame("123,1", $this->formatter->asDecimal($value, 1));
        $this->assertSame("123", $this->formatter->asDecimal($value, 0));
        $value = 123123.123;
        $this->assertSame("123.123", $this->formatter->asDecimal($value, 0));
        $this->assertSame("123.123,12", $this->formatter->asDecimal($value, 2));
        $this->formatter->thousandSeparator = '';
        $this->assertSame("123123,1", $this->formatter->asDecimal($value, 1));
        $this->formatter->thousandSeparator = ' ';
        $this->assertSame("12 31 23,1", $this->formatter->asDecimal($value, 1, [\NumberFormatter::GROUPING_SIZE => 2]));

        $value = 123123.123;
        $this->formatter->decimalSeparator = ',';
        $this->formatter->thousandSeparator = ' ';
        $this->assertSame("123 123", $this->formatter->asDecimal($value, 0));
        $this->assertSame("123 123,12", $this->formatter->asDecimal($value, 2));

        $this->formatter->decimalSeparator = null;
        $this->formatter->thousandSeparator = null;
        $value = '-123456.123';
        $this->assertSame("-123,456.123", $this->formatter->asDecimal($value));

        // empty input
        $this->assertSame("0", $this->formatter->asDecimal(false));
        $this->assertSame("0", $this->formatter->asDecimal(""));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asDecimal(null));
    }

    public function testAsDecimal()
    {
        $value = 123.12;
        $this->assertSame("123.12", $this->formatter->asDecimal($value));
        $this->assertSame("123.1", $this->formatter->asDecimal($value, 1));
        $this->assertSame("123", $this->formatter->asDecimal($value, 0));
        $value = 123;
        $this->assertSame("123.00", $this->formatter->asDecimal($value));
        $this->formatter->decimalSeparator = ',';
        $this->formatter->thousandSeparator = '.';
        $value = 123.12;
        $this->assertSame("123,12", $this->formatter->asDecimal($value));
        $this->assertSame("123,1", $this->formatter->asDecimal($value, 1));
        $this->assertSame("123", $this->formatter->asDecimal($value, 0));
        $value = 123123.123;
        $this->assertSame("123.123,12", $this->formatter->asDecimal($value));

        $value = 123123.123;
        $this->assertSame("123.123,12", $this->formatter->asDecimal($value));
        $this->assertSame("123.123,12", $this->formatter->asDecimal($value, 2));
        $this->formatter->decimalSeparator = ',';
        $this->formatter->thousandSeparator = ' ';
        $this->assertSame("123 123,12", $this->formatter->asDecimal($value));
        $this->assertSame("123 123,12", $this->formatter->asDecimal($value, 2));
        $this->formatter->thousandSeparator = '';
        $this->assertSame("123123,12", $this->formatter->asDecimal($value));
        $this->assertSame("123123,12", $this->formatter->asDecimal($value, 2));

        $this->formatter->decimalSeparator = null;
        $this->formatter->thousandSeparator = null;
        $value = '-123456.123';
        $this->assertSame("-123,456.123", $this->formatter->asDecimal($value, 3));

        // empty input
        $this->assertSame("0.00", $this->formatter->asDecimal(false));
        $this->assertSame("0.00", $this->formatter->asDecimal(""));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asDecimal(null));
    }

    public function testIntlAsPercent()
    {
        $this->testAsPercent();
    }

    public function testAsPercent()
    {
        $this->assertSame('12,300%', $this->formatter->asPercent(123));
        $this->assertSame('12,300%', $this->formatter->asPercent('123'));
        $this->assertSame("12%", $this->formatter->asPercent(0.1234));
        $this->assertSame("12%", $this->formatter->asPercent('0.1234'));
        $this->assertSame("-1%", $this->formatter->asPercent(-0.009343));
        $this->assertSame("-1%", $this->formatter->asPercent('-0.009343'));

        // empty input
        $this->assertSame("0%", $this->formatter->asPercent(false));
        $this->assertSame("0%", $this->formatter->asPercent(""));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asPercent(null));
    }

    public function testIntlAsCurrency()
    {
        $this->formatter->locale = 'en-US';
        $this->assertSame('$123.00', $this->formatter->asCurrency('123'));
        $this->assertSame('$123,456.00', $this->formatter->asCurrency('123456'));
        $this->assertSame('$0.00', $this->formatter->asCurrency('0'));

        $this->formatter->locale = 'en-US';
        $this->formatter->currencyCode = 'USD';
        $this->assertSame('$123.00', $this->formatter->asCurrency('123'));
        $this->assertSame('$123,456.00', $this->formatter->asCurrency('123456'));
        $this->assertSame('$0.00', $this->formatter->asCurrency('0'));
        // Starting from ICU 52.1, negative currency value will be formatted as -$123,456.12
        // see: http://source.icu-project.org/repos/icu/icu/tags/release-52-1/source/data/locales/en.txt
//		$value = '-123456.123';
//		$this->assertSame("($123,456.12)", $this->formatter->asCurrency($value));

        $this->formatter->locale = 'de-DE';
        $this->formatter->currencyCode = null;
        $this->assertSame('123,00 €', $this->formatter->asCurrency('123'));
        $this->formatter->currencyCode = 'USD';
        $this->assertSame('123,00 $', $this->formatter->asCurrency('123'));
        $this->formatter->currencyCode = 'EUR';
        $this->assertSame('123,00 €', $this->formatter->asCurrency('123'));

        $this->formatter->locale = 'de-DE';
        $this->formatter->currencyCode = null;
        $this->assertSame('123,00 €', $this->formatter->asCurrency('123', 'EUR'));
        $this->assertSame('123,00 $', $this->formatter->asCurrency('123', 'USD'));
        $this->formatter->currencyCode = 'USD';
        $this->assertSame('123,00 €', $this->formatter->asCurrency('123', 'EUR'));
        $this->assertSame('123,00 $', $this->formatter->asCurrency('123', 'USD'));
        $this->formatter->currencyCode = 'EUR';
        $this->assertSame('123,00 €', $this->formatter->asCurrency('123', 'EUR'));
        $this->assertSame('123,00 $', $this->formatter->asCurrency('123', 'USD'));

        // default russian currency symbol
        $this->formatter->locale = 'ru-RU';
        $this->formatter->currencyCode = null;
        $this->assertSame('123,00 руб.', $this->formatter->asCurrency('123'));
        $this->formatter->currencyCode = 'RUB';
        $this->assertSame('123,00 руб.', $this->formatter->asCurrency('123'));

        // custom currency symbol
        $this->formatter->currencyCode = null;
        $this->formatter->numberFormatterSymbols = [
            NumberFormatter::CURRENCY_SYMBOL => '₽',
        ];
        $this->assertSame('123,00 ₽', $this->formatter->asCurrency('123'));
        $this->formatter->numberFormatterSymbols = [
            NumberFormatter::CURRENCY_SYMBOL => '₽',
        ];
        $this->assertSame('123,00 ₽', $this->formatter->asCurrency('123'));
        // setting the currency code overrides the symbol
        $this->formatter->currencyCode = 'RUB';
        $this->assertSame('123,00 руб.', $this->formatter->asCurrency('123'));
        $this->formatter->numberFormatterSymbols = [NumberFormatter::CURRENCY_SYMBOL => '₽'];
        $this->assertSame('123,00 $', $this->formatter->asCurrency('123', 'USD'));
        $this->formatter->numberFormatterSymbols = [NumberFormatter::CURRENCY_SYMBOL => '₽'];
        $this->assertSame('123,00 €', $this->formatter->asCurrency('123', 'EUR'));

        // empty input
        $this->formatter->locale = 'de-DE';
        $this->formatter->currencyCode = null;
        $this->formatter->numberFormatterSymbols = [];
        $this->assertSame("0,00 €", $this->formatter->asCurrency(false));
        $this->assertSame("0,00 €", $this->formatter->asCurrency(""));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asCurrency(null));
    }

    /**
     * https://github.com/yiisoft/yii2/pull/5261
     */
    public function testIntlIssue5261()
    {
        $this->formatter->locale = 'en-US';
        $this->formatter->numberFormatterOptions = [
            \NumberFormatter::FRACTION_DIGITS => 0
        ];
        $this->formatter->numberFormatterTextOptions = [
            \NumberFormatter::CURRENCY_CODE => 'EUR'
        ];
        $this->assertSame('€100', $this->formatter->asCurrency(100, 'EUR'));
    }

    public function testAsCurrency()
    {
        $this->formatter->currencyCode = 'USD';
        $this->assertSame('USD 123.00', $this->formatter->asCurrency('123'));
        $this->assertSame('USD 0.00', $this->formatter->asCurrency('0'));
        $this->assertSame('USD -123.45', $this->formatter->asCurrency('-123.45'));
        $this->assertSame('USD -123.45', $this->formatter->asCurrency(-123.45));

        $this->formatter->currencyCode = 'EUR';
        $this->assertSame('EUR 123.00', $this->formatter->asCurrency('123'));
        $this->assertSame('EUR 0.00', $this->formatter->asCurrency('0'));
        $this->assertSame('EUR -123.45', $this->formatter->asCurrency('-123.45'));
        $this->assertSame('EUR -123.45', $this->formatter->asCurrency(-123.45));

        // empty input
        $this->formatter->currencyCode = 'USD';
        $this->formatter->numberFormatterSymbols = [];
        $this->assertSame("USD 0.00", $this->formatter->asCurrency(false));
        $this->assertSame("USD 0.00", $this->formatter->asCurrency(""));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asCurrency(null));
    }

    public function testIntlAsScientific()
    {
        $value = '123';
        $this->assertSame('1.23E2', $this->formatter->asScientific($value));
        $value = '123456';
        $this->assertSame("1.23456E5", $this->formatter->asScientific($value));
        $value = '-123456.123';
        $this->assertSame("-1.23456123E5", $this->formatter->asScientific($value));

        // empty input
        $this->assertSame("0E0", $this->formatter->asScientific(false));
        $this->assertSame("0E0", $this->formatter->asScientific(""));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asScientific(null));
    }

    public function testAsScientific()
    {
        $value = '123';
        $this->assertSame('1.23E+2', $this->formatter->asScientific($value, 2));
        $value = '123456';
        $this->assertSame("1.234560E+5", $this->formatter->asScientific($value));
        $value = '-123456.123';
        $this->assertSame("-1.234561E+5", $this->formatter->asScientific($value));

        // empty input
        $this->assertSame("0.000000E+0", $this->formatter->asScientific(false));
        $this->assertSame("0.000000E+0", $this->formatter->asScientific(""));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asScientific(null));
    }

    public function testIntlAsSpellout()
    {
        $this->assertSame('one hundred twenty-three', $this->formatter->asSpellout(123));

        $this->formatter->locale = 'de_DE';
        $this->assertSame('einhundertdreiundzwanzig', $this->formatter->asSpellout(123));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asSpellout(null));
    }

    public function testIntlAsOrdinal()
    {
        $this->assertSame('0th', $this->formatter->asOrdinal(0));
        $this->assertSame('1st', $this->formatter->asOrdinal(1));
        $this->assertSame('2nd', $this->formatter->asOrdinal(2));
        $this->assertSame('3rd', $this->formatter->asOrdinal(3));
        $this->assertSame('5th', $this->formatter->asOrdinal(5));

        $this->formatter->locale = 'de_DE';
        $this->assertSame('0.', $this->formatter->asOrdinal(0));
        $this->assertSame('1.', $this->formatter->asOrdinal(1));
        $this->assertSame('2.', $this->formatter->asOrdinal(2));
        $this->assertSame('3.', $this->formatter->asOrdinal(3));
        $this->assertSame('5.', $this->formatter->asOrdinal(5));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asOrdinal(null));
    }

    public function testIntlAsShortSize()
    {
        $this->formatter->numberFormatterOptions = [
            \NumberFormatter::MIN_FRACTION_DIGITS => 0,
            \NumberFormatter::MAX_FRACTION_DIGITS => 2,
        ];

        // tests for base 1000
        $this->formatter->sizeFormatBase = 1000;
        $this->assertSame("999 B", $this->formatter->asShortSize(999));
        $this->assertSame("999 B", $this->formatter->asShortSize('999'));
        $this->assertSame("1.05 MB", $this->formatter->asShortSize(1024 * 1024));
        $this->assertSame("1 KB", $this->formatter->asShortSize(1000));
        $this->assertSame("1.02 KB", $this->formatter->asShortSize(1023));
        $this->assertNotEquals("3 PB", $this->formatter->asShortSize(3 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000)); // this is 3 EB not 3 PB
        // string values
        $this->assertSame("28.41 GB", $this->formatter->asShortSize(28406984038));
        $this->assertSame("28.41 GB", $this->formatter->asShortSize((string)28406984038));
        $this->assertSame("56.81 GB", $this->formatter->asShortSize(28406984038 + 28406984038));
        $this->assertSame("56.81 GB", $this->formatter->asShortSize((string)(28406984038 + 28406984038)));

        // tests for base 1024
        $this->formatter->sizeFormatBase = 1024;
        $this->assertSame("1 KiB", $this->formatter->asShortSize(1024));
        $this->assertSame("1 MiB", $this->formatter->asShortSize(1024 * 1024));
        // https://github.com/yiisoft/yii2/issues/4960
        $this->assertSame("1023 B", $this->formatter->asShortSize(1023));
        $this->assertSame("5 GiB", $this->formatter->asShortSize(5 * 1024 * 1024 * 1024));
        $this->assertNotEquals("5 PiB", $this->formatter->asShortSize(5 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024)); // this is 5 EiB not 5 PiB
        //$this->assertSame("1 YiB", $this->formatter->asShortSize(pow(2, 80)));
        $this->assertSame("2 GiB", $this->formatter->asShortSize(2147483647)); // round 1.999 up to 2
        $this->formatter->decimalSeparator = ',';
        $this->formatter->numberFormatterOptions = [];
        $this->assertSame("1,001 KiB", $this->formatter->asShortSize(1025, 3));

        // empty values
        $this->assertSame('0 B', $this->formatter->asShortSize(0));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asShortSize(null));
    }

    public function testAsShortSize()
    {
        // tests for base 1000
        $this->formatter->sizeFormatBase = 1000;
        $this->assertSame("999 B", $this->formatter->asShortSize(999));
        $this->assertSame("999 B", $this->formatter->asShortSize('999'));
        $this->assertSame("1.05 MB", $this->formatter->asShortSize(1024 * 1024));
        $this->assertSame("1.0486 MB", $this->formatter->asShortSize(1024 * 1024, 4));
        $this->assertSame("1.00 KB", $this->formatter->asShortSize(1000));
        $this->assertSame("1.02 KB", $this->formatter->asShortSize(1023));
        $this->assertNotEquals("3 PB", $this->formatter->asShortSize(3 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000)); // this is 3 EB not 3 PB
        // string values
        $this->assertSame("28.41 GB", $this->formatter->asShortSize(28406984038));
        $this->assertSame("28.41 GB", $this->formatter->asShortSize((string)28406984038));
        $this->assertSame("56.81 GB", $this->formatter->asShortSize(28406984038 + 28406984038));
        $this->assertSame("56.81 GB", $this->formatter->asShortSize((string)(28406984038 + 28406984038)));

        // tests for base 1024
        $this->formatter->sizeFormatBase = 1024;
        $this->assertSame("1.00 KiB", $this->formatter->asShortSize(1024));
        $this->assertSame("1.00 MiB", $this->formatter->asShortSize(1024 * 1024));
        // https://github.com/yiisoft/yii2/issues/4960
        $this->assertSame("1023 B", $this->formatter->asShortSize(1023));
        $this->assertSame("5.00 GiB", $this->formatter->asShortSize(5 * 1024 * 1024 * 1024));
        $this->assertNotEquals("5.00 PiB", $this->formatter->asShortSize(5 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024)); // this is 5 EiB not 5 PiB
        //$this->assertSame("1 YiB", $this->formatter->asShortSize(pow(2, 80)));
        $this->assertSame("2.00 GiB", $this->formatter->asShortSize(2147483647)); // round 1.999 up to 2
        $this->formatter->decimalSeparator = ',';
        $this->assertSame("1,001 KiB", $this->formatter->asShortSize(1025, 3));

        // empty values
        $this->assertSame('0 B', $this->formatter->asShortSize(0));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asShortSize(null));
    }

    public function testIntlAsSize()
    {
        $this->formatter->numberFormatterOptions = [
            \NumberFormatter::MIN_FRACTION_DIGITS => 0,
            \NumberFormatter::MAX_FRACTION_DIGITS => 2,
        ];

        // tests for base 1000
        $this->formatter->sizeFormatBase = 1000;
        $this->assertSame("999 bytes", $this->formatter->asSize(999));
        $this->assertSame("999 bytes", $this->formatter->asSize('999'));
        $this->assertSame("1.05 megabytes", $this->formatter->asSize(1024 * 1024));
        $this->assertSame("1 kilobyte", $this->formatter->asSize(1000));
        $this->assertSame("1.02 kilobytes", $this->formatter->asSize(1023));
        $this->assertSame("3 gigabytes", $this->formatter->asSize(3 * 1000 * 1000 * 1000));
        $this->assertNotEquals("3 PB", $this->formatter->asSize(3 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000)); // this is 3 EB not 3 PB
        // tests for base 1024
        $this->formatter->sizeFormatBase = 1024;
        $this->assertSame("1 kibibyte", $this->formatter->asSize(1024));
        $this->assertSame("1 mebibyte", $this->formatter->asSize(1024 * 1024));
        $this->assertSame("1023 bytes", $this->formatter->asSize(1023));
        $this->assertSame("5 gibibytes", $this->formatter->asSize(5 * 1024 * 1024 * 1024));
        $this->assertNotEquals("5 pibibytes", $this->formatter->asSize(5 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024)); // this is 5 EiB not 5 PiB
        $this->assertSame("2 gibibytes", $this->formatter->asSize(2147483647)); // round 1.999 up to 2
        $this->formatter->decimalSeparator = ',';
        $this->formatter->numberFormatterOptions = [];
        $this->assertSame("1,001 kibibytes", $this->formatter->asSize(1025, 3));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asSize(null));
    }

    public function testIntlAsSizeNegative()
    {
        $this->formatter->numberFormatterOptions = [
            \NumberFormatter::MIN_FRACTION_DIGITS => 0,
            \NumberFormatter::MAX_FRACTION_DIGITS => 2,
        ];

        // tests for base 1000
        $this->formatter->sizeFormatBase = 1000;
        $this->assertSame("-999 bytes", $this->formatter->asSize(-999));
        $this->assertSame("-999 bytes", $this->formatter->asSize('-999'));
        $this->assertSame("-1.05 megabytes", $this->formatter->asSize(-1024 * 1024));
        $this->assertSame("-1 kilobyte", $this->formatter->asSize(-1000));
        $this->assertSame("-1.02 kilobytes", $this->formatter->asSize(-1023));
        $this->assertSame("-3 gigabytes", $this->formatter->asSize(-3 * 1000 * 1000 * 1000));
        $this->assertNotEquals("3 PB", $this->formatter->asSize(-3 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000)); // this is 3 EB not 3 PB
        // tests for base 1024
        $this->formatter->sizeFormatBase = 1024;
        $this->assertSame("-1 kibibyte", $this->formatter->asSize(-1024));
        $this->assertSame("-1 mebibyte", $this->formatter->asSize(-1024 * 1024));
        $this->assertSame("-1023 bytes", $this->formatter->asSize(-1023));
        $this->assertSame("-5 gibibytes", $this->formatter->asSize(-5 * 1024 * 1024 * 1024));
        $this->assertNotEquals("-5 pibibytes", $this->formatter->asSize(-5 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024)); // this is 5 EiB not 5 PiB
        $this->assertSame("-2 gibibytes", $this->formatter->asSize(-2147483647)); // round 1.999 up to 2
        $this->formatter->decimalSeparator = ',';
        $this->formatter->numberFormatterOptions = [];
        $this->assertSame("-1,001 kibibytes", $this->formatter->asSize(-1025, 3));
    }

    public function testAsSize()
    {
        // tests for base 1000
        $this->formatter->sizeFormatBase = 1000;
        $this->assertSame("999 bytes", $this->formatter->asSize(999));
        $this->assertSame("999 bytes", $this->formatter->asSize('999'));
        $this->assertSame("1.05 megabytes", $this->formatter->asSize(1024 * 1024));
        $this->assertSame("1.0486 megabytes", $this->formatter->asSize(1024 * 1024, 4));
        $this->assertSame("1.00 kilobyte", $this->formatter->asSize(1000));
        $this->assertSame("1.02 kilobytes", $this->formatter->asSize(1023));
        $this->assertSame("3.00 gigabytes", $this->formatter->asSize(3 * 1000 * 1000 * 1000));
        $this->assertNotEquals("3 PB", $this->formatter->asSize(3 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000)); // this is 3 EB not 3 PB
        // tests for base 1024
        $this->formatter->sizeFormatBase = 1024;
        $this->assertSame("1.00 kibibyte", $this->formatter->asSize(1024));
        $this->assertSame("1.00 mebibyte", $this->formatter->asSize(1024 * 1024));
        $this->assertSame("1023 bytes", $this->formatter->asSize(1023));
        $this->assertSame("5.00 gibibytes", $this->formatter->asSize(5 * 1024 * 1024 * 1024));
        $this->assertNotEquals("5.00 pibibytes", $this->formatter->asSize(5 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024)); // this is 5 EiB not 5 PiB
        $this->assertSame("2.00 gibibytes", $this->formatter->asSize(2147483647)); // round 1.999 up to 2
        $this->formatter->decimalSeparator = ',';
        $this->formatter->numberFormatterOptions = [];
        $this->assertSame("1,001 kibibytes", $this->formatter->asSize(1025, 3));

        // null display
        $this->assertSame($this->formatter->nullDisplay, $this->formatter->asSize(null));
    }

    public function testAsSizeNegative()
    {
        // tests for base 1000
        $this->formatter->sizeFormatBase = 1000;
        $this->assertSame("-999 bytes", $this->formatter->asSize(-999));
        $this->assertSame("-999 bytes", $this->formatter->asSize('-999'));
        $this->assertSame("-1.05 megabytes", $this->formatter->asSize(-1024 * 1024));
        $this->assertSame("-1.0486 megabytes", $this->formatter->asSize(-1024 * 1024, 4));
        $this->assertSame("-1.00 kilobyte", $this->formatter->asSize(-1000));
        $this->assertSame("-1.02 kilobytes", $this->formatter->asSize(-1023));
        $this->assertSame("-3.00 gigabytes", $this->formatter->asSize(-3 * 1000 * 1000 * 1000));
        $this->assertNotEquals("3 PB", $this->formatter->asSize(-3 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000)); // this is 3 EB not 3 PB
        // tests for base 1024
        $this->formatter->sizeFormatBase = 1024;
        $this->assertSame("-1.00 kibibyte", $this->formatter->asSize(-1024));
        $this->assertSame("-1.00 mebibyte", $this->formatter->asSize(-1024 * 1024));
        $this->assertSame("-1023 bytes", $this->formatter->asSize(-1023));
        $this->assertSame("-5.00 gibibytes", $this->formatter->asSize(-5 * 1024 * 1024 * 1024));
        $this->assertNotEquals("-5.00 pibibytes", $this->formatter->asSize(-5 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024)); // this is 5 EiB not 5 PiB
        $this->assertSame("-2.00 gibibytes", $this->formatter->asSize(-2147483647)); // round 1.999 up to 2
        $this->formatter->decimalSeparator = ',';
        $this->formatter->numberFormatterOptions = [];
        $this->assertSame("-1,001 kibibytes", $this->formatter->asSize(-1025, 3));
    }

    public function testIntlAsSizeConfiguration()
    {
        $this->assertSame("1023 bytes", $this->formatter->asSize(1023));
        $this->assertSame("1023 B", $this->formatter->asShortSize(1023));
        $this->formatter->thousandSeparator = '.';
        $this->assertSame("1023 bytes", $this->formatter->asSize(1023));
        $this->assertSame("1023 B", $this->formatter->asShortSize(1023));
    }

    /**
     * https://github.com/yiisoft/yii2/issues/4960
     */
    public function testAsSizeConfiguration()
    {
        $this->assertSame("1023 bytes", $this->formatter->asSize(1023));
        $this->assertSame("1023 B", $this->formatter->asShortSize(1023));
        $this->formatter->thousandSeparator = '.';
        $this->assertSame("1023 bytes", $this->formatter->asSize(1023));
        $this->assertSame("1023 B", $this->formatter->asShortSize(1023));
    }
}


text:
France and Tanzania for a leap forward in economic, trade and bilateral relations
By Jeff L. Hearn on July 14, 2021 Economic trade
On the occasion of the commemoration of the French National Day, the French Ambassador to Tanzania, HE Frédéric CLAVIER, gave an exclusive interview to The Citizen and reaffirmed France's desire to boost bilateral economic relations.
Question: Excellency, what does July 14 represent for the French and the world?
CF: "Historically speaking, July 14 celebrates the victory of the people against injustice and an oppressive political system leading to the sovereignty of the whole nation. Since then, July 14 has become the occasion to recall the fundamental values and the motto of the French nation: Liberty, Equality and Fraternity. In this sense, France and Tanzania share many values, thus allowing mutual understanding and a relationship of trust since the independence of Tanganyika in December 1961.
This trust that we have built over the years allows us to benefit from strong cooperation on various and important subjects, economic, political, cultural and societal. The most recent example is our joint work for the success of the Generation Equality Forum, which was held in Paris from June 30 to July 2, with the exceptional visit of the Vice-President, HE Dr. Philip Mpango, embodying the commitments of Tanzania for gender equality. "
Q: Your Excellency, can you tell us where France-Tanzania economic and trade relations stand?
CF: "Bilateral exchanges between France and Tanzania are increasing but are not, in my opinion, representative of the quality of our bilateral relations, even if we have witnessed constant growth in recent years.
In 2020, the total amount of trade between France and Tanzania represented $ 150 million. More than 90% of French exports are based on 4 major sectors: mechanical equipment, electrical, electronic and computer equipment; while Tanzania's imports come mainly from the agro-food sector, forestry and fishing industry.
In order to pave the way for deeper and stronger bilateral economic relations, the Franco-Tanzanian Chamber of Commerce (FTCC) was launched in January 2020 with the objective of promoting partnerships between French and Tanzanian companies.
I am convinced that our bilateral exchanges will continue to increase in the years to come because we attest to the efforts of President Hassan to put the economy at the center of Tanzania's foreign policy, his desire to improve the business climate in the country. countries and promote the economic integration of East Africa. "
The Ambassador of France in Tanzania, Frédéric CLAVIER accompanied by the President of the Franco-Tanzanian Chamber of Commerce (FTCC), Mr. Christophe Darmois (left) and the French team on the steps of the Embassy. PHOTO | LOVE BERNARD
Q: What are the main sectors in which French companies have invested heavily recently in Tanzania?
CF: "Today, more than 40 French companies are established in Tanzania, including 13 multinationals. In recent years, French companies have mainly invested in the energy, transport and new technologies sectors.
I cannot name all the companies but, for example, everyone has heard of the East African Crude Oil Pipeline (EACOP), with the participation of TotalEnergies. This pipeline that will transport Ugandan oil to Tanga for export to world markets is one of the most ambitious projects underway in East Africa. It will cross 8 regions of Tanzania and create around 10,000 jobs for Tanzanians.
Let me also enlighten you Maurel & Bal, which has been operating one of the 3 gas fields in operation in Tanzania since 2006, or Engie Energy Access, created in 2020 to bring together its off-grid electrification activities under a single entity: construction of mini-grids and distribution of solar home kits .
In the transport sector, CMA CGM manages 12% of transport services in Tanzania, in the ports of Dar es Salaam, Tanga, Mtwara and Zanzibar. Bolloré Transport & Logistics has structured its activities around the dry port of Dar es Salaam and freight transit by road to landlocked countries in the west. Last but not least, Airbus delivered 2 A220-300s to Air Tanzania in 2018 and 2019 and plans to deliver 2 additional aircraft during the year.
Finally, let me mention the company Carwatt which transforms thermal cars into electric vehicles. Established in Tanzania via E. motion Africa, created in 2019, it aims to electrify the Dar es Salaam bus network and all safari vehicles circulating in National Parks.
Q: Besides economic support, what are the main development projects that France has implemented?
CF: "The French Development Agency (AFD) has been working with Tanzania for 25 years, focusing mainly on financing infrastructure in the energy, water and transport sectors. Financial commitments have more than doubled in 3 years, reaching $ 180 million each year. This shows France's confidence in Tanzania's development capacity.
For the coming years, the strategy is to remain focused on these 3 sectors but also to diversify its funding towards the conservation of biodiversity and climate resilient and sustainable agriculture.
Q: France has been very active in supporting developing countries, especially in Africa, to deal with the impact of COVID-19. How did France support Tanzania?
CF: "French President Emmanuel Macron hosted a summit in Paris last May on the financing of African economies. It was the 1st International Summit attended by President Samia Suluhu Hassan (virtually). The objective was to decide on ways to help cope with the health and economic crisis of the pandemic in Africa. President Macron called for an "African New Deal," proposing that rich countries reallocate some of their IMF Special Drawing Rights (SDRs) to African economies in order to raise at least $ 100 billion for Africa.
A few days later, on behalf of the French government and in the presence of the PS of the Ministry of Finance and Planning Mr. Emmanuel Tutuba, I signed a Debt Service Suspension Initiative (DSSI). The initiative, launched by President Macron, aims to delay debt repayment, freeing up cash that governments can use to mitigate the economic impact of COVID-19.
Finally, the theme of the 28th Africa-France Summit, which will take place in France in early October, will focus on "Better cities for a better life". It will aim to develop new political collaborations and economic partnerships to share knowledge on sustainable cities and territories, but also in other fields, such as health, education, urban planning and culture.
Egypt and Russia discuss bilateral economic and trade cooperation at SPIEF
Representatives of the Japan Economic Trade Organization visit Bryan / College Station – WTAW
China, Bangladesh discuss economic and trade relations in post-Covid era –
Expo 2020 Dubai recognized the opportunity to develop economic and trade relations between the United Arab Emirates and Kazakhstan: Ambassador

redpajama_set_name: RedPajamaCommonCrawl


text:
<?php

namespace PHPExiftool\Driver\Tag\Microsoft;

use JMS\Serializer\Annotation\ExclusionPolicy;
use PHPExiftool\Driver\AbstractTag;

/**
 * @ExclusionPolicy("all")
 */
class SpaceFree extends AbstractTag
{

    protected $Id = '{9B174B35-40FF-11D2-A27E-00C04FC30871} 2';

    protected $Name = 'SpaceFree';

    protected $FullName = 'Microsoft::Xtra';

    protected $GroupName = 'Microsoft';

    protected $g0 = 'QuickTime';

    protected $g1 = 'Microsoft';

    protected $g2 = 'Video';

    protected $Type = '?';

    protected $Writable = false;

    protected $Description = 'Space Free';
}

redpajama_set_name: RedPajamaGithub


We have added 32 new images to the Brady Stewart Collection Archive web site and added a new Gallery – New Images added in May 2011. Moving forward, I will create a new image Gallery for each month. This should make it easier to view the new imaged added each month. At the same time, I will move a copy of the new image into its related Gallery.
New Images were added to the http://bradystewartphoto.photoshelter.com/gallery-list on May 19th, 2011.


text:
package main

import (
	"context"
	"flag"
	"fmt"
	"log"
	"math/rand"
	"net/http"
	_ "net/http/pprof"
	"os"
	"os/signal"
	"strings"
	"time"

	"go.mongodb.org/mongo-driver/mongo/readpref"
	"go.mongodb.org/mongo-driver/x/bsonx/bsoncore"
	"go.mongodb.org/mongo-driver/x/mongo/driver"
	"go.mongodb.org/mongo-driver/x/mongo/driver/connstring"
	"go.mongodb.org/mongo-driver/x/mongo/driver/description"
	"go.mongodb.org/mongo-driver/x/mongo/driver/operation"
	"go.mongodb.org/mongo-driver/x/mongo/driver/topology"
)

var concurrency = flag.Int("concurrency", 24, "how much concurrency should be used")
var ns = flag.String("namespace", "test.foo", "the namespace to use for test data")

func main() {

	go func() {
		log.Println(http.ListenAndServe("localhost:6060", nil))
	}()

	sig := make(chan os.Signal, 1)
	signal.Notify(sig, os.Interrupt)

	cs, err := connstring.Parse("mongodb://localhost:27017/")
	if err != nil {
		log.Fatalf("unable to parse connection string: %v", err)
	}
	c, err := topology.New(topology.WithConnString(func(connstring.ConnString) connstring.ConnString {
		return cs
	}))
	if err != nil {
		log.Fatalf("unable to create topology: %s", err)
	}

	err = c.Connect()
	if err != nil {
		log.Fatalf("unable to connect topology: %s", err)
	}

	done := make(chan struct{})
	ctx, cancel := context.WithCancel(context.Background())
	go func() {
		<-sig
		cancel()
		close(done)
	}()

	log.Println("prepping")
	err = prep(ctx, c)
	if err != nil {
		log.Fatalf("unable to prep: %s", err)
	}
	log.Println("done prepping")

	log.Println("working")
	for i := 0; i < *concurrency; i++ {
		go work(ctx, i, c)
	}

	<-done
	log.Println("interrupt received: shutting down")
	_ = c.Disconnect(ctx)
	log.Println("finished")
}

func prep(ctx context.Context, c *topology.Topology) error {

	var docs = make([]bsoncore.Document, 0, 1000)
	for i := 0; i < 1000; i++ {
		docs = append(docs, bsoncore.BuildDocument(nil, bsoncore.AppendInt32Element(nil, "_id", int32(i))))
	}

	collection, database, err := parseNamespace(*ns)
	if err != nil {
		return err
	}

	deletes := bsoncore.BuildDocument(nil,
		bsoncore.BuildDocumentElement(nil, "q"),
		bsoncore.AppendInt32Element(nil, "limit", 0),
	)
	err = operation.NewDelete(deletes).Collection(collection).Database(database).
		Deployment(c).ServerSelector(description.WriteSelector()).Execute(ctx)
	if err != nil {
		return err
	}

	err = operation.NewInsert(docs...).Collection(collection).Database(database).Deployment(c).
		ServerSelector(description.WriteSelector()).Execute(ctx)
	return err
}

func work(ctx context.Context, idx int, c *topology.Topology) {
	r := rand.New(rand.NewSource(time.Now().Unix()))
	collection, database, err := parseNamespace(*ns)
	if err != nil {
		panic(fmt.Errorf("failed to parse namespace: %v", err))
	}
	rp := readpref.Nearest()
	for {
		select {
		case <-ctx.Done():
		default:

			limit := r.Intn(999) + 1

			pipeline := bsoncore.BuildArray(nil, bsoncore.BuildDocumentValue(bsoncore.AppendInt32Element(nil, "$limit", int32(limit))))

			op := operation.NewAggregate(pipeline).Collection(collection).Database(database).Deployment(c).BatchSize(200).
				ServerSelector(description.ReadPrefSelector(rp))
			err := op.Execute(ctx)
			if err != nil {
				log.Printf("%d-failed executing aggregate: %s", idx, err)
				continue
			}

			cursor, err := op.Result(driver.CursorOptions{BatchSize: 200})
			if err != nil {
				log.Printf("%d-failed to create cursor: %v", idx, err)
				continue
			}
			count := 0
			for cursor.Next(ctx) {
				count += cursor.Batch().DocumentCount()
			}
			if cursor.Err() != nil {
				_ = cursor.Close(ctx)
				log.Printf("%d-failed iterating aggregate results: %s", idx, cursor.Err())
				return
			}
			_ = cursor.Close(ctx)

			log.Printf("%d-iterated %d docs", idx, count)
		}
	}
}

func parseNamespace(ns string) (collection, database string, err error) {
	idx := strings.Index(ns, ".")
	if idx == -1 {
		return "", "", fmt.Errorf("invalid namespace: %s", ns)
	}
	return ns[idx+1:], ns[:idx], nil
}


text:
Q: Persistent SWT shell window positions I have code similar to what the example below does that allows me to have a shell open in a different location. What I need to do is track the window position if it's moved and save those positions for the next time that window is opened. Any suggestions?
 public StartupSplashShell(Display display)
 {
     shell = new Shell(display, SWT.NO_TRIM);
     setupShell();  // place components in the main avoCADo shell
     shell.setText("avoCADo");
     shell.setBackgroundImage(ImageUtils.getIcon("./avoCADo-Splash.jpg",
     360, 298));
     shell.setSize(360, 298);   //TODO: set intial size to last known size
     Rectangle b = display.getBounds();
     int xPos = Math.max(0, (b.width-360)/2);
     int yPos = Math.max(0, (b.height-298)/2);
     shell.setLocation(xPos, yPos);
     shell.setImage(ImageUtils.getIcon("./avoCADo.png", 32, 32));
     shell.open();
}

A: Inject IEclipsePreferences in your exit application handler and save the bounds in eclipse preferences, if you are working on Eclipse Plugin.
@Inject
@Preference
private IEclipsePreferences preferences;

If your application is standalone SWT application then you can use file (properies for example) or database to persist the bounds of the shell
mainShell.getBounds() // serialize it in String
preferences.put("SHELL_BOUNDS", boundStr);

Again inject preferences when your application starts and retrieve the bounds from preferences
bounds = preferences.get("SHELL_BOUNDS", "");

Then you can set location and size of shell
mainShell.setLocation(xAxis, yAxis);
mainShell.setSize(width, height);

A: Assuming this is a plain SWT application you can use the SWT.Move listener to be told each time the shell moves:
shell.addListener(SWT.Move, event ->
  {
    Point location = shell.getLocation();
    ....
  });

Or you can use a SWT.Close listener to just listen for the shell closing:
shell.addListener(SWT.Close, event ->
  {
    Point location = shell.getLocation();
    ....
  });

If you want to save the location between runs of the application you would have to save the location in something like a Properties file.

redpajama_set_name: RedPajamaStackExchange


Every tree is a sort of recording device of its life and its surroundings. When cut down, its growth rings resemble a broken vinyl record, one which won't grow any longer. And yet it records the nuances of its continual demise as well as the imprints of human intervention. This series shows these records at different stages after some forestry activities during late Spring and early Summer 2018 in a Finnish forest. Pictures were taken in July 2018.


text:
Home | About Us | Research | Teaching | Fellowship | What Is Available | Articles | This Is What God Says | Multimedia | Contact Us
Other Research Works
New Bible Dictionary
This is a reference work dealing with the people and places of the Bible as well as major doctrinal concepts of Christianity. It provides important background information in the fields of history, geography, archaeology, and the customs of Bible times. Its use will enrich the Biblical student's understanding of many people and places referred to in the Scriptures.
Oxford Bible Atlas
This resource contains maps that show cities, trade routes, and the political boundaries of different regions referred to in the Bible at important points in the history of the Biblical narrative. There is accompanying text that provides useful insights into the culture, contemporary historical events, and archaeological finds.
Manners and Customs of the Bible
Here is an extensive compilation of information by J. M. Freeman on Eastern manners and customs of the Bible from a wide variety of sources. There are also engravings that illustrate many of the topics discussed. The book includes a topical index as well as a scripture index.
Figures of Speech Used in the Bible
This interesting work by E. W. Bullinger has over 200 distinct figures of speech cataloged and organized into different divisions. Each figure of speech is then defined, explained, and illustrated with examples from God's Word.
Bookstore Items:
Concordances and Lexicons
The Way International™
The Way Magazine™
© 2020 by The Way International™. All rights reserved. | Terms, Conditions, and Privacy | Mobile Version
The Way International, The Way, La Voie, El Camino, The Way of Abundance and Power, The Way Magazine,
Disciples of the Way Outreach Program, Way Disciples, The Way Corps, and Camp Gunnison—The Way Household Ranch
are registered service marks or trademarks of The Way International in the United States and other countries.
For more information, visit www.theway.org
© 2020 by The Way International™. All rights reserved.


text:
Mayor: Anchorage needs a sales tax to pay for Seward Highway patrols and lower property taxes
By Devin Kelly
Updated: December 2, 2017 Published: January 6, 2017
Anchorage Mayor Ethan Berkowitz says the city should hold a special election for a new sales tax to reduce property taxes and pay for policing on the Seward Highway, where state troopers have sharply curbed police protection.
A draft version of Berkowitz's proposal, presented to a work session of the Anchorage Assembly on Thursday, would create a 2 percent sales tax.
Officials say such a tax could generate roughly $100 million a year, with about one-fifth of the revenue coming from tourists and non-Anchorage residents. The tax would be collected throughout the entire municipality, from Portage to Eklutna.
Berkowitz told Assembly members his proposal was a far cry from a finished plan and advised them to not focus on details yet.
The draft calls for 15 percent of sales tax revenue to go to "areawide public health and safety," which could include patrols of the Seward Highway along Turnagain Arm, though not in Girdwood, which has a three-year contract with Whittier police.
Alaska State Troopers, which historically patrolled the highway, have largely withdrawn amid deep budget cuts, and said it's up to the city to police the highway south of McHugh Creek. The area, while not an Anchorage Police Department service region, is within the municipality's larger boundaries.
The remaining 85 percent of the sales tax revenue would be dedicated to property tax relief, according to the proposal.
[Read a copy of the proposed sales-tax measure.]
Berkowitz and City Attorney Bill Falsey said the proposal is mainly for discussion: "Don't take anything to the bank just yet," Falsey said. "It's designed to move the conversation forward."
But Berkowitz said the city needs to start looking at ways to buffer itself against the state's economic crisis.
"In these changing times with the state's economy where it is, the budget doing what it's doing, we need to be vigilant in Anchorage to make sure we're able to provide the services we can at the level of quality we're supposed to," Berkowitz told the Assembly.
He said the city should find additional ways to become less reliant on property taxes.
No date has been proposed for a special election, and there were mixed reactions from Assembly members at the work session. During Thursday's meeting, Assembly members started to talk about changes to the sales tax proposal.
The draft of Berkowitz's proposal would require approval of a simple majority vote of Anchorage residents, rather than the 60 percent supermajority required in city charter. Falsey said officials had determined a 60 percent vote would be "insurmountable" when it comes to a sales tax, and the proposal contains a charter amendment to allow a simple majority to approve it.
Assemblyman Bill Evans had introduced a sales tax proposal that would entirely dedicate revenues to reducing property taxes. The Assembly was due to hold a hearing on Evans' measure at its meeting next week.
But Evans said Thursday, while he preferred some parts of his original proposal, he was comfortable substituting Berkowitz's version for his own.
Assembly Chair Elvi Gray-Jackson said she would open the public hearing on Evans' measure next week, then delay it until the Berkowitz administration's proposal was ready to be formally introduced, though it wasn't known Thursday when that would be.


Life is good classic Crusher v-neck t-shirt is garment washed for everyday softness, with a slight waist shape, narrower cuff and hem, ribbing at the neck and self-fabric taping from shoulder to shoulder. Designed with a printed graphic and ''Do what you love. Love what you do.'' locker patch. Material: Cotton.


Our program emphasizes mastery of general philological skills in Greek and Latin, in preparation for further training at the doctoral level, teaching in public and private highschools, and a variety of other interesting paths. Current faculty research interests include Mycenaean and Homeric Greece; Greek and Latin lyric poetry; Greek drama; Attic orators; ancient literary criticism; Greek and Roman philosophy and intellectual history; Greek and Roman historiography; Latin epic and satire; Greek and Roman technical authors; Roman imperial families; mythology; the Ancient Near East and Egypt; ancient music and performance.
GKLT 300. Proseminar. 3 Credits.
Introduction to philology. Students will normally take this their first semester.
GKLT 381. Seminar. 0 or 3 Credits.
Intensive study at the graduate level of Greek and Latin authors not read in the candidate's undergraduate program.
GKLT 391. Master's Thesis Research. 1-6 Credits.
GKLT 392. Independent Study. 1-18 Credits.
GKLT 396. Advanced Special Topics. 1-18 Credits.
GRK 201. Greek Orators. 3 Credits.
Selected speeches of Lysias and Demosthenes. B. Saylor Rodgers. Alternate years, as needed.
GRK 202. Greek Comedy. 3 Credits.
Two plays of Aristophanes. Alternate years, as needed.
GRK 203. Greek Historians. 3 Credits.
Thucydides, Books I and II; selections from Herodotus and Xenophon's Hellenica. Alternate years, as needed.
GRK 204. Greek Tragedy. 3 Credits.
Sophocles' Antigone, and Euripides' Medea, or two equivalent plays. Alternate years, as needed.
GRK 205. Greek Philosophers. 3 Credits.
Dialogues of Plato with attention to language and dialectical method; Aristotle, Xenophon or Presocratic philosophers may be read. Alternate years, as needed.
GRK 206. Greek Epic. 3 Credits.
Reading in the Iliad and Odyssey. Problems of epic composition and language together with mythological and historical background. Alternate years, as needed.
GRK 211. Greek Prose Style. 3 Credits.
Readings in literary prose analyzed stylistically and imitated in composition. Required of Greek majors.
GRK 212. Greek Prose Style. 3 Credits.
GRK 227. Greek Lyric Poetry. 3 Credits.
A study of early Greek personal, elegiac, and choral poetry from Archilochus to Pindar, including Sappho and Alcaeus, Simonides and Bacchylides. Prerequisites: Two years of college Greek or equivalent. Alternate years, as needed.
GRK 295. Advanced Special Topics. 1-18 Credits.
GRK 296. Advanced Special Topics. 1-18 Credits.


text:
Posted by Mitnick Security on Jan 22, 2017 4:00:00 PM
A once-a-year, classroom-based approach may be traditional, with security updates and warnings posted on walls and the Intranet, but it is also a sign of a tick-box, compliance-driven approach to security. It is often done to appease industry regulators, PCI and data protection authorities, and the training can offer relatively basic – arguably condescending- advice.
But times are changing. The threat landscape is growing with the arrival of millions of mobiles and wearables, each with their own IP address, while organized crime and nation-state APT groups are looking at new ways of compromising victims. From exploit kits and Trojans to ransomware, phishing and social engineering scams – the criminal game has moved on.
The information security industry has recognized this, calling for an end to prevention-focused defenses, and more focus on response. But surely that means that security training must change in turn?
Still a low priority
There's a debate to be had on how seriously Chief Information Security Officers (CISO) or Chief Security Officers (CSO) are taking security training – and how well they're doing it.
One study, commissioned by ClubCISO last year, found that 21 percent of CISOs had 'never' given security training, with a further 21 percent indicating that they only did so when new staff joined the company. Thirty-seven percent said they carried out training on an annual basis and another 21 percent agreed that this was carried out "frequently".
More than half (52 percent) of the surveyed CISOs admitted that their security awareness training programs had 'no measure of effectiveness', while 24 percent said that they relied on online testing. A further 14 percent said they had an after-training test, with a well-prepared 10 percent measuring incident and support call volumes before and after training.
Pete Wood, CEO of infosec consultancy First Base Technologies, says training programs have to change, top-down.
"Business are finally understanding they need to make staff part of the defensive posture, rather than just throwing money at product. Historically, it's been something that staff members have to attend, that they hate doing, and almost do with the same mind-set as health and safety training. This is not really a 21st century solution."
Stu Sjouwerman, CEO of security awareness training provider KnowBe4 – Kevin Mitnick's company, agrees that this "old-school, compliance check-box" training, usually done over PowerPoint, is fading out.
"That's not hacking it anymore, because two days later everyone has forgotten everything."
Board buy-in is a must
It is clear that establishing a positive training program must start with board backing.
Wood says that it is pivotal to establishing a security culture to get training right, while independent pen tester and social engineering expert Richard De Vere calls for a more direct approach. "Get the board involved and shout until you are blue in the face because it's what they are paying you for."
Sjouwerman agrees: "This need to be driven by the CEO and COO down."
Some take bolder steps; one company sent simulated email attacks to board members before presenting to them on the same topic. Several of the board clicked on the links, and the bold CISO got his approval to send these links to end users - and provide follow-up training as required.
Others, however, are not so forthcoming, and it goes back to the importance of CEO-CISO communication.
Red-teaming, gamification and more
Getting board support is crucial for funding, resources and the right culture. But how should training take form? Should it be online, in-person, and how do you shape this program in the first place?
Wood says proactive companies should first do red teaming exercises to work out their potential areas of compromise, so they can shape the program and address the specific risks to the business.
He tells CSO Online the story of one UK-based life sciences company, whose head of information sector hired First Base to build a 'storyboard' of an attack. Wood's pen testers researched the company, found out that one threat actor would be organized crime, and discovered how these hackers would try and get information. From phishing emails and malware to on-site attacks via USB dongles, Wood says there were numerous weak points in the organization.
"What came out at the end wasn't just a set of recommendations of how to fix this, but we also made sure to film it so they had visual evidence of us wandering around where we shouldn't have been. They took this and made a training awareness program out of it, and they delivered it to the staff across the world as a story."
That sort of imaginative approach to the problem is what's needed, rather than taking a classroom-based approach.
De Vere urges: "Training shouldn't be patchy. Pick a good platform and provider and stick to it. Staff have a hard enough task as it is learning all the ways in which they pose a risk to security without misinformation or gaping holes in knowledge. If you don't have a social engineering training platform yet, get one.
"Staff should be considered 'responsible' for a breach in security but in return you have to bend over backwards to provide everything they need for support. If they fail, pat them on the back and sign them up for more training."
Sjouwerman says its three-step process from establishing a baseline test, finding the results and training "everyone from the mailroom to the boardroom." Tests, he says, must be done on a regular basis to keep employees interested and learning.
The experts are mixed on the new trend for 'gamifying' training, though. Sjouwerman says that phishing games between departments can drive lower click rates, but Wood stresses that it must not be a gimmick, and must be joined up with an existing program.
Next year his firm is working with a UK charity to build red teaming exercises into their annual conferences. "People do enjoy it," he says.
Incentive the users
Wood admits that the biggest challenge is continuing the program, making it year round, something he says requires time and money. In the ideal world, he says each business should have security evangelists keeping up with the threats, and thinking creatively how training should take place.
Media reports can be used to keep a buzz around security, especially if breaches are local or industry-relevant.
The experts argue too that you can incentive employees on training. Some say if you use a phishing reporting tool, or have some other way of measuring end-user security awareness; you could award top employees with a gift at a company gathering. It's a positive way of recognizing excellence and reinforcing behavior.
Sjouwerman sees advantages to both the 'carrot' and 'the stick approach', but advises CISOs to enlighten employees on how this knowledge can be used at home for their own personal security.
Richard Starnes, CISO at the Kentucky Health Cooperative, agrees and tells CSO: "In my company's awareness program, we break down the skills and relate them to things you would do to protect yourself at home.
"Show someone how to keep their children safe online at home and those skills easily translate to make your company safer at work."
Starnes, who urges CISOs to establish KPIs to establish training effectiveness, adds: "There cannot be a culture of blame. I would rather have someone recognize they have made a mistake and notify security. If they do not notify security because they are concerned they may be punished, your awareness program has failed at the worst possible time."
Source: CSO Online
Topics: Social Engineering, Speaking Engagements, threat, Forensics, Global Ghost Team, Hacked, Incident Response, penetration testing, World's Most Famous Hacker, Computer, Exchange, Exploits, cybersecurity, Hacker, hacking, Invisibility Powers, red-teaming, security, Security Assessment, Security Awareness, Mitnick Security, Training, Vulnerability Assessments, white hat, Absolute Zero-day, Art of Invisibility, Cyber, Cyberthreat, Art of Deception, Art of Intrusion, Ghost in the Wires, Information, Kevin Mitnick, Keynote Speech


President Barack Obama and Turkey's controversial Islamist prime minister Recep Tayyip Erdogan have become such bosom buddies that Erdogan is giving Obama advice on raising his American daughters.
Obama, who met with Erdogan March 25 at the nuclear summit in South Korea, has already met with Erdogan numerous times. He touted their relationship as a "friendship" in a January interview that was hyped by Erdogan's press allies.
The two met in South Korea on Sunday, Eastern Time, to discuss Syria's civil war and Iran's nuclear weapons program, but they also talked about the president's two daughters, Malia and Sasha, Obama said during a press conference, according to a White House statement.
"The bottom line is that we find ourselves in frequent agreement upon a wide range of issues… [and] because he has two daughters that are a little older than mine — they've turned out very well, so I'm always interested in his perspective on raising girls," Obama said.
One of Erdogan's two daughters, Sumeyye, is entering Turkish politics via her father's Islamist party, according to the Turkish press.
She wears Islamist-style clothes that obscure her hair and shape.
In Sept. 2010, the then-29 year old met with her father and U2 singer Bono while wearing a scarf that covered her hair and throat, long-sleeves that covered her forearms and a baggy overcoat that hid her figure.
In Feb. 2011, Sumeyye attended a meeting at the United Nations headquarters in New York while wearing a tight head-scarf that hid her hair and throat. She was accompanied by Erdogan's wife, Ermine, who wore a head-to-toe black cloak.
Obama's daughters, 13 year-old Malia and 10 year-old Sasha, dress far more liberally in typical American fashion.
The first lady, Michelle Obama, is a feminist and does not wear head scarves or throat scarves and often leaves her arms bare.
By openly acknowledging Erdogan's advice on child-rearing, Obama "didn't realize what he's saying," said Barry Rubin, an expert on Turkish politics.
Still, "it is shocking that [Obama suggests] he takes child-raising advice from a radical Islamist," whose wife dresses in black cloaks or tight headscarves when traveling in the West, said Rubin.
Overall, the White House statement about the meeting "goes beyond polite praise and good manners and practically slobbers over a repressive, pro-Iran leader whose hatred for Israel is literally hysterical," said Rubin.
The White House statement included statements by both Obama and Erdogan, but no press questions.
"I just want to say how much I appreciate the opportunity to once again meet with my friend and colleague, Prime Minister Erdogan … I find Prime Minister Erdogan to be an outstanding partner and an outstanding friend on a wide range of issues," Obama began.
Over the last decade, Erdogan has pushed Turkey in an Islamist direction, rolling back the country's secular laws — including laws that curb the wearing of Islamist headscarves — jailing many journalists, cooperating with Iran's theocracy, spurring hostility towards Israel and demanding Israel apologize for forcibly stopping a May 2010 Islamist flotilla that was launched from Turkey.
In January 2009, he angrily walked out of a public event with Israeli foreign minister Shimon Peres after accusing Israel of attacking Arabs and killing Arab children.
"I think that if you ask them, [Germany's] Angela Merkel or [Indian] Prime Minister Singh or [Korea's] President Lee or [Turkey's] Prime Minister Erdogan or [U.K.] David Cameron would say 'We have a lot of trust and confidence in the President … We think he's paying attention to our concerns and our interests,'" he told Newsweek interviewer Fareed Zakaria.
Unlike George W. Bush, Obama frequently mentions his daughters at political events.
During the South Korea trip, for example, he twice cited his daughters during a speech about nuclear weapons policy that took place Monday morning Korean time, or Sunday evening ET.
He also used his two daughters to buttress his campaign-trail criticism of Rush Limbaugh after the radio personality had ridiculed an activist law student for demanding that a Catholic university pay for her birth-control services. "I thought about Malia and Sasha … I want them to be able to speak their mind in a civil and thoughtful way… I don't want them attacked or called horrible names because they're being good citizens," Obama said at White House March 6.


text:
U.S. Foreign Policy Program
A rapidly changing world poses both challenges and opportunities to the United States. The U.S. Foreign Policy program seeks to understand those challenges and opportunities, and assess the forces and dynamics shaping U.S. foreign policy decision-making, and offer specific recommendations for action.
70 percent of Americans think the United States should play an "active part" in world affairs
Program Experts
John B. Bellinger III
Adjunct Senior Fellow for International and National Security Law
Robert D. Blackwill
Henry A. Kissinger Senior Fellow for U.S. Foreign Policy
Gordon M. Goldstein
Adjunct Senior Fellow
Distinguished Fellow
Martin S. Indyk
Charles A. Kupchan
James M. Lindsay
Senior Vice President, Director of Studies, and Maurice R. Greenberg Chair
Gideon Rose
Mary and David Boies Distinguished Fellow in U.S. Foreign Policy
Stephen Sestanovich
George F. Kennan Senior Fellow for Russian and Eurasian Studies
Christopher M. Tuttle
Senior Fellow and Director of the Renewing America Initiative
Matthew C. Waxman
Adjunct Senior Fellow for Law and Foreign Policy
Type - Any -ArticleBookConference CallOffsitePodcast EpisodeReport
Sort by Sort date
Order NewestOldest
Can U.S.-Russia Diplomacy Ease Ukraine Tensions?
Russia has demanded security guarantees that U.S. and NATO officials cannot accept, but there could still be room for building a sustainable dialogue on European security.
In Brief by Thomas Graham January 11, 2022 U.S. Foreign Policy Program
A Diplomatic Way Out in Ukraine Link
with Charles A. Kupchan via Project Syndicate December 24, 2021
The Russia-Ukraine Crisis: A Scorecard on Biden's Response
U.S. officials have preserved NATO unity in the face of Russian military threats, but they have not yet defined a clear negotiating agenda—or put Moscow on the rhetorical defensive.
In Brief by Stephen Sestanovich December 23, 2021 U.S. Foreign Policy Program
Martin Indyk Discusses His Book, Master of the Game, And Reflects on Kissinger's Diplomatic Legacy in the Middle East Link
with Martin S. Indyk via Regarding the Middle East with Gilles Kepel November 12, 2021
Biden's Democracy Summit Needs to Produce More Than a Bland Statement Link
with Jared Cohen and Richard Fontaine via Foreign Policy November 12, 2021
Thirty Years after the Fall of the Soviet Union Link
with Thomas Graham via Rossiya v globalnoy politike November 8, 2021
Martin Indyk on his New Book: Master of the Game: Henry Kissinger and the Art of Middle East Diplomacy Link
with Martin S. Indyk via People of the Pod November 4, 2021
Henry Kissinger Wasn't Bad For Israel—He Helped Save It Link
with Martin S. Indyk via Forward November 2, 2021
What Joe Biden Could Learn From Henry Kissinger Link
with Martin S. Indyk via The Atlantic October 22, 2021
The Water's Edge
James M. Lindsay analyzes the politics shaping U.S. foreign policy and the sustainability of American power. 2-4 times weekly.
View all newsletters >
By entering your email and clicking subscribe, you're agreeing to receive announcements from CFR about our products and services, as well as invitations to CFR events. You are also agreeing to our Privacy Policy and Terms of Use.
Middle East Program
Diplomacy and International Institutions


text:
North of the Tyne UKIP are privileged to have Hugh Jackson as Mayoral Candidate who has a bold vision for the future of his area and has stated:
"I want to make this area the epicentre of engineering and manufacturing excellence for the 21st Century, underpinned by a transport system to match".
UKIP have a strong team and growing following in the North East of England and unlike the other major parties have not betrayed the trust of the electorate.
The Lib Dems destroyed trust when Nick Clegg broke his promise of free tuition to students when he discarded the policy as the price of power sharing with the Tories. This was compounded by him proclaiming on national TV that the EU had no plans for an EU army which time has shown to be an outright lie losing all trust.
Both Labour and Conservative were trusted to follow their 2017 manifesto promise of delivering Brexit and have spent the last two years doing their best to keep us in the EU. Electors deserted UKIP by their droves in 2017 thinking there was no longer a need to utilise UKIP to achieve their dream of a free UK outside of the EU but the major parties have abused this trust.
Several excellent candidates were whittled down to select Hugh Jackson as the UKIP candidate for north of Tyne Mayor and within hours of the announcement our left wing local press were burrowing through the archives to find some means of weakening the massive threat to their cabal. UKIP have grown to be the party of the people taking the role once occupied by the Labour party who have now abandoned the working man in favour of people they invited into the UK to boost their votes and who are now concentrated in our densely populated major cities.


Unlike pictorialists, who often used painterly techniques to flatter their subjects, Abbott preferred to present her sitters as they actually appeared. For Abbott, the creative aspect of portrait photography was the pursuit of her subject's "character," often through props, unusual poses, and dramatic lighting.
Abbott's portrait of American actress and director Eva Le Gallienne communicates the intensity of Le Gallienne's personality through her radically asymmetrical pose and disheveled hair. The contrast between the dark tones dominating the photograph and Le Gallienne's illuminated face and hands enhance the drama. Le Gallienne also looks away from the camera, displaying her lack of interest in posing prettily—one of Abbott's favorite compositional devices. This image was made soon after London-born Le Gallienne founded the Civic Repertory Theatre, which produced classic foreign plays for American audiences in New York.


For the last month, I've been running at, over, or near capacity. I hate this state of being, and am glad it is over for a while (I think!). I try hard to avoid it, though it is not always avoidable in the short-term without consequences.
I hate it because I feel it gets you farther away from serendipity, which is at least for me the most surefire input to innovation. Without the extra capacity to grab startup micro-opportunities and generally mess around, I feel I'm missing out.
The problem is, especially in startup land but also beyond, it is just so easy to fill up to capacity and beyond. All you have to do is open up your to-do list, or even inbox. There are infinite things you could do as a startup founder, and tackling something on that list seems more productive than messing around.
How do you avoid it? I've talked a lot about productivity hacks, but that doesn't really cut it. That just allows you do to more stuff at capacity. Same with the maker's schedule. I think you have to consciously not work on things, which is always hard to do.
Part of it for me is synthesizing feedback to figure out what to work on next and then focusing on critical path. This allows me to just put stuff off until more data is in or something seems really compelling.
Part of it is working at a pace I can sustain for the long-term. I've been at DuckDuckGo now for five years, and it feels in a lot of ways we're just getting started.
Part of it is delegating, which has been a new thing for me as I've changed from being a single founder to part of a team.
And a large part of it I'm still trying to figure out. I'm pretty bad at putting down my phone, for example, even though I've turned off all notifications.
Update: also check out Daniel Tenner's response post.


Though Easter will be celebrated in the US and across the world on April 21 but the Easter Egg Roll event will take place on Monday..
Sri Lankan serial blasts on..
Churches, hotels hit by blasts..
White House Easter Egg Roll to..
Here's why I think PM Narendra Modi is not anti-Muslim!
Cold wave intensified in North India on Sunday claiming six more lives, all in Uttar Pradesh, as thick fog disrupted road and rail traffic at several places. Six more people succumbed to the piercing cold in Uttar Pradesh since last..
Today is Akshaya Tritiya, the most..
Seven heroes who gave up their lives..
Some mouth-watering snacks from the..
Six reasons why you should say no to..


On apprend l'art de faire la queue comme les anglais.
Attributed to "Jean-Marc, Paris". There was also a translation, something like "We are learning the art of queueing up like the English". Is this intended to shame the French passengers into behaving well in the queue? To flatter the English? To mock them?
Of course, while the English are very proud of their queueing habits, there are greater superlatives imaginable. Historical context is crucial, though. If the French develop their skills further (and if the Germans make more progress in dismantling the European economy), perhaps one day they will be able to say they have learned "the art of queueing up like the Poles (Communist era)". Or even the Russians. If they get really advanced, they might learn the art of queueing up like Depression-era Americans.


A thigh lift is done to remove excess skin and fat from the thighs. Many individuals choose to undergo this procedure after drastic weight loss or if they cannot reduce excess tissue on their upper thighs with exercise and diet alone.
Individuals who are living with loose skin on their thighs due to massive weight loss can often benefit from this procedure. Many candidates wish to achieve a more proportionate thigh contour and wish to fit more comfortably into clothing. Patients should be at a stable weight and be a non-smoker to be considered for this procedure. A consultation with Dr. Howland can help to determine if you are a good candidate for a thigh lift.
A thigh lift can be done to target excess skin from the outer and inner thighs. Where your excess fat lies will determine which thigh lift technique will be used.
This thigh lift focuses on the inner thigh, and entails an incision be created in the groin area with extra skin and fat being excised along the inner thigh. Liposuction may be used to further contour the area.
This thigh lift focuses on the outer thigh, and is a more complex procedure than a medial thigh lift. During this procedure, the outer thighs and buttocks are often recontoured, with excess skin being excised. Scarring is often more extensive, but Dr. Howland will attempt to place the incisions where scarring can be hidden with clothing.
Following a thigh lift, patients can expect to experience swelling, bruising and soreness. Pain medication can help with any discomfort. Compression garments will need to be worn to ensure optimal results. Swelling should subside within five weeks. Patients should avoid strenuous exercise for 6-8 weeks. It is important to follow Dr. Howland's specific post-op instructions to ensure a safe and quick recovery.
Boost your self-confidence and quality of life with a thigh lift! Patients in the Salt Lake City and Draper, UT areas can contact our office today to schedule a consultation with Dr. Howland.


text:
Home AUT News Professor gets horror studies editorship
Professor gets horror studies editorship
Professor Lorna Piatti-Farnell.
The new Principal Editor of Lexington Books Horror Studies plans to expand the reach of horror into the broader landscape of popular culture.
AUT Professor of Popular Culture Lorna Piatti-Farnell says she is honoured to have been appointed to the position.
"Being part of the portfolio of such a high-profile publisher, the horror series holds high importance as one of the official channels for the dissemination of scholarly work on horror," she says.
"I am keen to expand the portfolio of horror into different fields of enquiry. Traditionally, horror has found its most prolific arena in studies connected to fiction and film. However, horror has now grown to be an important and noticeable part of other areas such as television, digital media, games, comics, graphic novels, and even the tourism industry.
"As editor of the series, I am committed to expanding the reach of horror into the broader landscape of popular culture, recognising the genre as an unmissable part of our 21st century cultural landscape."
Lexington Books is the research branch of Rowman & Littlefield, a top-tier academic publisher with a global profile.
It holds a wide-ranging portfolio in media studies, film studies, cultural history, and popular culture.
The horror series is newly established and recognises the importance of horror not only in media and popular culture, but also in academia, as part of the publisher's international scholarly scope.
Professor Piatti-Farnell is Director of the Popular Culture Research Centre, based at AUT.
Lexington Books Horror Series
Popular Culture Research Centre
Study Popular Culture at AUT


Water Leaks, Drips + Detection | Greenville SC | Staten Plumbing Provides 24/7 Priority Plumbing Service for Water Leaks, Drips and Leak Detection in Greenville and Upstate, SC.
Staten Plumbing Can Fix Your Water Leak or Drip with Our Professional Plumbing & Leak Detection Services.
Greenville and Upstate SC customers have relied on Staten Plumbing to fix their emergency water leaks, drips and plumbing emergencies for more than 50 years. Our professional water leak detection service provides Greenville and Upstate homeowners with priority solutions that can find most any water leak quickly and give you peace of mind that the probem is solved for good. Got a pool of water or just a damp spot on the wall? If water is seeping or leaking from a broken pipe or corroded fitting, it may not be easy to determine exactly where that leak is coming from. You really don't want to start tearing out walls unless you have a good idea of where to start. Our expert plumbers have special equipment and loads of experience to help you keep the mess — and expense down to a minimum.
If you notice a leak, don't delay. Even small leaks could cause severe and expensive damage. Our plumbers at Staten are available 24 hours a day, 7 days a week to come out and hunt down that leak.


text:
Scientology library: "Bob McKee"
albertan (canada) • anti-psychiatry • apollo (formerly, "royal scot man"; often misspelled "royal scotman", "royal scotsman") • bob mckee • canada • commissions • cost • dead agenting (black pr, smear campaign) • fair game • field staff member (fsm) • founding church of scientology, washington d.c. • gene allard • income • kenneth gerbino • l. ron hubbard's credentials • lawsuit • letter campaign • operating thetan (ot) • operation paste up • pamela kemp • raymond kemp • sea organization (sea org, so) • silencing criticism, censorship • suppressive person (sp) • threat
4 matching items found between Jan 1977 and Jun 1977. Furthermore, there is 1 matching item for all time not shown.
Scientology: Target world government // Hubbard: "We'll make a new society so skip approval for a lot of wogs" — Albertan (Canada)
Author(s): Bob McKee
Source: Albertan (Canada)
In the last of a series on the Church of Scientology Bob McKee examines the aims and future [?] of the Church. "Gungho groups are the first Scientology attempts to build a world government. They are a foothold in the community by which to get eventually to govern. What is done in the Gungho Group is going to influence what the community thinks about Scientology." These were the opening remarks made by a former Scientologist called Ron McCann in a talk ...
Tag(s): Albertan (Canada) • Anti-psychiatry • Bob McKee • Citizens Commission on Human Rights (CCHR) • Fads And Fallacies in the Name of Science (book) • Fair game • Gung-Ho Group • Martin Gardner • Potential Trouble Source (PTS) • Refunds • Ron McCann • Suppressive person (SP) • Wog
Scientology founder heavenly visits — Albertan (Canada)
Tag(s): Albertan (Canada) • Alexis Valorie Hubbard • Apollo (formerly, "Royal Scot Man"; often misspelled "Royal Scotman", "Royal Scotsman") • Arthur Hubbard • Bob McKee • Catherine May Hubbard • Death • Diana Hubbard Horwich • Excalibur (book) • Founding Church of Scientology, Washington D.C. • Hubbard Association of Scientologists International (HASI) • L. Ron Hubbard's credentials • Mary Sue (Whipp) Hubbard • Office of Special Affairs (OSA) (formerly, Guardian's Office) • Quentin Geoffrey MaCauley Hubbard • Ronald "Nibs" Edward DeWolf (L. Ron Hubbard, Jr.) • Royalties, license, trademark, management fees • Sara Northrup • Suzette Hubbard
Scientology: Money keeps rolling in — Albertan (Canada)
Tag(s): Albertan (Canada) • Bob McKee • Canada • Commissions • Cost • Field Staff Member (FSM) • Founding Church of Scientology, Washington D.C. • Income • Kenneth Gerbino • Lawsuit • Operating Thetan (OT) • Pamela Kemp • Raymond Kemp • Sea Organization (Sea Org, SO) • Suppressive person (SP)
Scientology's tactics for dissenters / Hubbard: "Law can be used to harass. If possible of course, to utterly ruin" — Albertan (Canada)
The Church of Scientology has an effective way of dealing with those who "seek to destroy" it. In this, the third of a series Bob McKee examines some of its methods. There have been dissensions in every church that ever existed but few, if any, have resorted to as drastic a method in dealing with its heretics, as has the Church of Scientology. Not since the Inquisition has a church pursued so severe and uncompromising a stand in rooting out all ...
Tag(s): Albertan (Canada) • Anti-psychiatry • Bob McKee • Canada • Dead agenting (Black PR, smear campaign) • Fair game • Gene Allard • Lawsuit • Letter campaign • Operation Paste Up • Silencing criticism, censorship • Suppressive person (SP) • Threat


text:
HOWE FIRST XV
PLAY IN NATIONAL DIVISION 3
Fife's #1 Rugby Club.
FIRST XV PAGE
OUR VENUE
CONFERENCES, PARTIES, MEETINGS, EVENTS, ETC
VIEW THE VENUE
PLAY IN TENNENT'S WOMEN'S NATIONAL LEAGUE 1
Skilled Social Rugby. Less Committment but no less committed!
Newsflash - Get Latest Important News
Next Fixtures - Senior
First XV - Saturday Nov 23rd - Hillhead Jordanhill RFC - Home
Howe Harlequins - Sunday Nov 24th - Garioch RFC - Away
Howe Knights - TBC
Howe Crusaders - Saturday Nov 23rd - Bo'ness RFC - Away
Next Fixtures - Youth
Howe Teams
Howe Harlequins U18
Mens Senior Teams
Second XV
Howe of Fife Rugby
Howe of Fife RFC (Howe Rugby) is a rugby union club based in Cupar, Fife, Scotland and is part of the Scottish Rugby Union. It was founded in 1921, and they play in blue and white hoops. The mens 1st XV currently play in national league division two. Our women's team, the Howe Harlequins, play in national league division one having been successfully promoted at the end of the 2016/17 season
The Mens 1st XV are currently coached by Gavin Emerson and captained by James Lawrie. The Howe Harlequins is coached by Craig Manson & Ian Cole and captained by Emma Wood.
The Howe run teams from Primary 1 level up to under-18 colts level and a Ladies (Howe Harlequins) and a girls section which includes U12, U15 and U18. Many players have gone on to represent Fife, Caledonia and Scotland at age grade level. With a handful going on to represent professional clubs. This can be down to the experience and skills gained at the Duffus Park. In 2007, current first XV Captain Chris Mason led the under-18 Howe of Fife squad to a unique treble winning both the school (as Bell Baxter High School) and the Club Scottish cups as well as the Scottish schools sevens cup. A number of the players involved in that team, now play for the senior side.
Main Sponsor 2019/2020
We are a membeship based club and it is important that we receive all payments in a timely manner. For the players it means the clubs insurance is paid, buses and transport organised, etc. For non-playing members it provides access to all the facilities and....
The Community Cafe is open Monday to Saturday 10:00am till 3:00pm and closed Sunday.
Out with these times the Cafe is available for public bookings. All other areas can be booked on the website subject to availability.
BOOK THE VENUE
The Club President for Season 2019 - 2020 is Chris Reekie, Senior Mens Captain is James Lawrie and Harlequins Captain is Emma Wood.
If you have a specific request then please click on the link below and you will be able to find the correct person to contact.


Garden trellis is ideal for all climbing plants, flowers and vegetables.
These wooden garden trellises have durable stained timber with rust proof aluminium rivets for long life.
This rose trellis is easy to use and erect as wall trellis. Made from sturdy 8mm thick sections with a mesh size of 5.5 inches.
Available in tan and green.
Look at other garden trellis in our range, wooden trellis, metal trellis and willow trellis panels.
Heavy duty trellis fencing is ideal for all climbing plants, flowers and privacy trellis.
Wooden garden flower trellis has durable stained timber with rust proof aluminium rivets for long life.
Easy to use and erect as wall trellis.
Made from sturdy 18mm x 8mm thick sections with a mesh size of 5.5 inches.
These trellis fencing are available in tan and green.
Look at other garden trellis in our range, wooden trellis, metal trellis, climbing trellis and willow trellis panels.
Heavy Duty Expandable Riveted Trellis Fence.
These natural bamboo gardening trellis are ideal for all climbing plants.
Suits all gardens, ideal for wall trellis and privacy trellis.
Excellent quality bamboo cane trellis.
Please look at other trellis in our range, willow trellis, trellis panels, wooden trellis and metal trellis.
Expandable willow trellis ideal for all climbing plants.
Use as wall trellis in all gardens and as privacy trellis.
Easy to use gardening trellis made from natural willow.
These trellis fences are Ideal for long stemmed plants and climbing plants.
Can be used as a planter trellis.
These natural Willow garden trellis available in four sizes.
Framed Willow Trellis Panel - 1.2m.
Trellis panels measures: 1.2m (4ft) x 0.45m (1' 6").
Made from natural willow this trellis fencing is easy to use and is of sturdy construction.
This garden trellis is ideal for use with garden flower planters.
Create an instant feature with this decorative trellis.
Look at other garden trellis that is available, wooden trellis, trellis fencing and metal trellis.
Framed Willow Trellis Panel - 1.8m.
Trellis panels measures: 1.8m (6ft) x 0.6m (2ft).
Look at other garden trellis that is available, wooden trellis, trellis fencing and metal trellis.en trellis, trellis fencing and metal trellis.
This fixed trellis panel is made from 30mm x 15mm section.
Flower trellis has square mesh and strong wood sections.
Ideally to be used as wooden wall trellis.
Suitable for many varieties of climbing plants.
Other varieties of trellis available in our range includes metal trellis, wooden trellis and riveted trellis.
Wall trellis made from 30mm x 15mm section.
Wooden trellis ideal for many climbing plants.
Look at other trellis is our range, metal trellis, riveted trellis, wooden trellis and willow trellis.


text:
Breaking: Assault: Conor McGregor In Handcuffs Leaving Police Station After Arrest
UFC star, Conor McGregor has been pictured for the first time since he gave himself up to New York City Police after his violent backstage altercation at a UFC 223 press event on Thursday night.
The Irishman boxer was seen leaving the 78th precinct NYPD police station in Brooklyn in handcuffs. He surrendered himself to the police late yesterday evening.
McGregor is facing criminal charges in the wake of a violent and bloody altercation he allegedly instigated. The altercation injured two fighters and scuppered three fights ahead of UFC 223, the promotion's biggest event of the year.
Video footage appears to show McGregor throwing a hand truck at a bus full of fighters after a Thursday news conference at Brooklyn's Barclays Center.
The New York Police Department later confirmed that McGregor was charged after handing himself in. He now faces three counts of assault and one count of criminal mischief and will appear at Brooklyn Criminal Court later this afternoon.
UFC President Dana White said Friday he spoke to McGregor via text and the brawler said the confrontation was something that "had to be done."
"It was probably the worst conversation we ever had," White told FS1's "First Things First" on Friday morning. "We talked yesterday before he turned himself in.
"It's not that I don't think he understood what happened. He justified it. It was justified to him."
Trump's Hair Goes Wild In Wind As He Boards Air Force One (Photos)
Nigerian Lady Says Lost Her Job After She Refused To Sleep With Her Indian Boss


NEW BEDFORD — Authorities are investigating an apparent shooting in New Bedford's North End this morning.
New Bedford Police were called to Bentley Street, one street north of Coggeshall Street, at about 1:30 a.m. on Friday for a report of shots fired.
There's no official word of any possible victims.
New Bedford Police and Massachusetts State Police assigned to the Bristol County District Attorney's Office are investigating.


susyta2917 AnnaLucya jasmin. JuicyNatasha. SASHAGREYxxx. LinJuang.
AllureNikkifamousFIERCEcockAlexLinoAlexiahotxx .AlexLinoHotGuyJuicySamuelRap1TheSmiths1 .jailnsexyDiamondDolXRhonWannaPlayHotMissAlice .JENNAveryHOTcrystalsweetvxJustinSwiftDavidandCelestee .BrentAgassiMarielleRileyAnuskaSkycrystalsweetvx .MerryAliceJessicaBustyxRealDirtyGirlHotGuyJuicy .TwisterOfNorthJessicaBustyLaure94JuicyNatasha .sexymiraclesUrBeautyAngelSoulLoversShyGirlMiky .HotLoveBbyJaysBoysMerryAliceExxxlee .HotMissAliceKarinnaMaiaxUNCOVERTRANSxNastyFantacyBoy .HosjnadiamiamANGELO8INCHS21TheSmiths1 .
RijianastacialoveExxxleeExxxlee .RhonWannaPlayfamousFIERCEcockxUNCOVERTRANSxAnuskaSky .AmandaSaintxRealDirtyGirlLukeRexNastyFantacyBoy .AlexLinoUrBeautyAngelHarleyMansonAttiudeCOCK .BartBassBDSMJENNAveryHOTAdeleBeautieAdeleBeautie .LukeRexHotY0UNGtwinksHosjSufletelulTau .WhatAboutLoveAnuskaSkyLinJuangSexyGreenEyesXXX .NaomiBrightHotGuyJuicyMeganRoxxHotMissAlice .famousFIERCEcockJaysBoysADAMandZACKNaomiBright .BasilRiyhadDiamondDolXBlondyXSugarNaomiBright .hotfinalfantasySexyGreenEyesXXXHotLoveBby2WILDsexMISTRESS .


text:
// ----------------------------------------------------------
// 系统名称:EasySoft PssS
// 项目名称:领域服务类库
// 创 建 人:刘年超
// 创建时间:2017-05-13
// ----------------------------------------------------------
// 修改记录:
//
//
// ----------------------------------------------------------
// 版权所有:易则科技工作室
// ----------------------------------------------------------
namespace EasySoft.PssS.Domain.Service
{
    using EasySoft.Core.Persistence.RepositoryImplement;
    using EasySoft.Core.Util;
    using EasySoft.PssS.DbRepository;
    using EasySoft.PssS.Domain.Entity;
    using EasySoft.PssS.Repository;
    using System;
    using System.Collections.Generic;
    using System.Data.Common;

    /// <summary>
    /// 客户分组领域服务类
    /// </summary>
    public class CustomerGroupService
    {
        #region 变量

        private ICustomerGroupRepository customerGroupRepository = null;
        private ICustomerRepository customerRepository = null;

        #endregion

        #region 构造函数

        /// <summary>
        /// 构造函数
        /// </summary>
        public CustomerGroupService()
        {
            this.customerGroupRepository = new CustomerGroupRepository();
            this.customerRepository = new CustomerRepository();
        }

        #endregion

        #region 方法

        /// <summary>
        /// 新增客户分组
        /// </summary>
        /// <param name="name">分组名称</param>
        /// <param name="remark">备注</param>
        /// <param name="creator">创建人</param>
        public void Add(string name, string remark, string creator)
        {
            using (DbConnection conn = DbHelper.CreateConnection())
            {
                DbTransaction trans = null;
                try
                {
                    conn.Open();
                    trans = conn.BeginTransaction();
                    if (trans == null)
                    {
                        throw new ArgumentNullException("DbTransaction");
                    }
                    if (this.customerGroupRepository.HasSameName(trans, string.Empty, name))
                    {
                        throw new EasySoftException(BusinessResource.Customer_ExistsSameGroupName);
                    }
                    CustomerGroup entity = new CustomerGroup();
                    entity.Create(name, remark, creator);
                    this.customerGroupRepository.Insert(trans, entity);

                    trans.Commit();
                }
                catch
                {
                    if (trans != null)
                    {
                        trans.Rollback();
                    }
                    throw;
                }
            }
        }

        /// <summary>
        /// 修改客户分组
        /// </summary>
        /// <param name="id">Id</param>
        /// <param name="name">分组名称</param>
        /// <param name="remark">备注</param>
        /// <param name="mender">修改人</param>
        public void Update(string id, string name, string remark, string mender)
        {
            using (DbConnection conn = DbHelper.CreateConnection())
            {
                DbTransaction trans = null;
                try
                {
                    conn.Open();
                    trans = conn.BeginTransaction();
                    if (trans == null)
                    {
                        throw new ArgumentNullException("DbTransaction");
                    }
                    if (this.customerGroupRepository.HasSameName(trans, id, name))
                    {
                        throw new EasySoftException(BusinessResource.Customer_ExistsSameGroupName);
                    }

                    CustomerGroup entity = this.Select(trans, id);
                    entity.Update(name, remark, mender);
                    this.customerGroupRepository.Update(trans, entity);

                    trans.Commit();
                }
                catch
                {
                    if (trans != null)
                    {
                        trans.Rollback();
                    }
                    throw;
                }
            }
        }

        /// <summary>
        /// 删除客户分组
        /// </summary>
        /// <param name="id">Id</param>
        public void Delete(string id)
        {
            using (DbConnection conn = DbHelper.CreateConnection())
            {
                DbTransaction trans = null;
                try
                {
                    conn.Open();
                    trans = conn.BeginTransaction();
                    if (trans == null)
                    {
                        throw new ArgumentNullException("DbTransaction");
                    }

                    CustomerGroup entity = this.Select(trans, id);
                    if (!entity.CanDelete())
                    {
                        throw new EasySoftException(BusinessResource.Customer_NotAllowDeleteCustomerGroup);
                    }
                    // 要将删除的客户分组中的客户移到默认分组中
                    string defaultGroupId = this.customerGroupRepository.GetDefaultGroupId(trans);
                    if (string.IsNullOrWhiteSpace(defaultGroupId))
                    {
                        throw new EasySoftException(BusinessResource.Customer_NoFoundDefaultGroupId);
                    }
                    this.customerRepository.BatUpdateGroupId(trans, id, defaultGroupId);
                    this.customerGroupRepository.Delete(trans, id);
                    trans.Commit();
                }
                catch
                {
                    if (trans != null)
                    {
                        trans.Rollback();
                    }
                    throw;
                }
            }
        }

        /// <summary>
        /// 查询客户分组表信息,用于列表分页显示
        /// </summary>
        /// <param name="pageIndex">当前页码</param>
        /// <param name="pageSize">数据源中每页要显示的行的数目</param>
        /// <param name="totalCount">数据源总记录数</param>
        /// <returns>返回客户分组数据</returns>
        public List<CustomerGroup> Search(int pageIndex, int pageSize, ref int totalCount)
        {
            return this.customerGroupRepository.Search(pageIndex, pageSize, ref totalCount);
        }

        /// <summary>
        /// 根据Id查找一条客户分组数据
        /// </summary>
        /// <param name="id">Id</param>
        /// <returns>返回客户分组对象</returns>
        public CustomerGroup Select(string id)
        {
            return this.Select(null, id);
        }

        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <param name="trans">数据库事务</param>
        /// <returns>返回实体对象</returns>
        public List<CustomerGroup> All()
        {
            return this.customerGroupRepository.All(null);
        }

        #endregion

        #region 受保护的方法

        /// <summary>
        /// 根据Id查找一条数据
        /// </summary>
        /// <param name="trans">数据库事务</param>
        /// <param name="id">Id</param>
        /// <returns>返回客户分组对象</returns>
        internal CustomerGroup Select(DbTransaction trans, string id)
        {
            CustomerGroup entity = this.customerGroupRepository.Select(trans, id);
            if (entity == null)
            {
                throw new EasySoftException(BusinessResource.Customer_NoFoundGroup);
            }
            return entity;
        }

        /// <summary>
        /// 判断指定的分组是否存在
        /// </summary>
        /// <param name="trans">数据库事务</param>
        /// <param name="id">Id</param>
        /// <returns>返回布尔值</returns>
        internal bool Exists(DbTransaction trans, string id)
        {
            return this.customerGroupRepository.Exists(trans, id);
        }

        /// <summary>
        /// 获取默认分组Id
        /// </summary>
        /// <param name="trans">数据库事务</param>
        /// <returns>返回默认分组Id</returns>
        internal string GetDefaultGroupId(DbTransaction trans)
        {
            string defaultGroupId = this.customerGroupRepository.GetDefaultGroupId(trans);
            if (string.IsNullOrWhiteSpace(defaultGroupId))
            {
                throw new EasySoftException(BusinessResource.Customer_NoFoundDefaultGroupId);
            }
            return defaultGroupId;
        }

        #endregion
    }
}