text:
using namespace extensions;
namespace quick_unlock_private = extensions::api::quick_unlock_private;
using CredentialCheck = quick_unlock_private::CredentialCheck;
using CredentialProblem = quick_unlock_private::CredentialProblem;
using CredentialRequirements = quick_unlock_private::CredentialRequirements;
using QuickUnlockMode = quick_unlock_private::QuickUnlockMode;
using QuickUnlockModeList = std::vector<QuickUnlockMode>;
using CredentialList = std::vector<std::string>;

namespace chromeos {
namespace {

const char* kTestUserEmail = "testuser@gmail.com";
const char* kTestUserEmailHash = "testuser@gmail.com-hash";
const char* kValidPassword = "valid";
const char* kInvalidPassword = "invalid";

chromeos::ExtendedAuthenticator* CreateFakeAuthenticator(
    chromeos::AuthStatusConsumer* auth_status_consumer) {
  AccountId account_id = AccountId::FromUserEmail(kTestUserEmail);
  chromeos::UserContext expected_context(account_id);
  expected_context.SetKey(Key(kValidPassword));

  chromeos::ExtendedAuthenticator* authenticator =
      new chromeos::FakeExtendedAuthenticator(auth_status_consumer,
                                              expected_context);
  return authenticator;
}

void DoNothing(const QuickUnlockModeList& modes) {}

void FailIfCalled(const QuickUnlockModeList& modes) {
  FAIL();
}

enum ExpectedPinState {
  PIN_GOOD = 1 << 0,
  PIN_TOO_SHORT = 1 << 1,
  PIN_TOO_LONG = 1 << 2,
  PIN_WEAK_ERROR = 1 << 3,
  PIN_WEAK_WARNING = 1 << 4,
  PIN_CONTAINS_NONDIGIT = 1 << 5
};

}  // namespace

class QuickUnlockPrivateUnitTest : public ExtensionApiUnittest {
 public:
  QuickUnlockPrivateUnitTest()
      : fake_user_manager_(new FakeChromeUserManager()),
        scoped_user_manager_(fake_user_manager_) {}

 protected:
  void SetUp() override {
    ExtensionApiUnittest::SetUp();

    EnableQuickUnlockForTesting();

    // Setup a primary user.
    auto test_account = AccountId::FromUserEmail(kTestUserEmail);
    fake_user_manager_->AddUser(test_account);
    fake_user_manager_->UserLoggedIn(test_account, kTestUserEmailHash, false);

    // Ensure that quick unlock is turned off.
    SetModes(QuickUnlockModeList{}, CredentialList{});

    modes_changed_handler_ = base::Bind(&DoNothing);
  }

  // If a mode change event is raised, fail the test.
  void FailIfModesChanged() {
    modes_changed_handler_ = base::Bind(&FailIfCalled);
  }

  // If a mode change event is raised, expect the given |modes|.
  void ExpectModesChanged(const QuickUnlockModeList& modes) {
    modes_changed_handler_ =
        base::Bind(&QuickUnlockPrivateUnitTest::ExpectModeList,
                   base::Unretained(this), modes);
    expect_modes_changed_ = true;
  }

  // Wrapper for chrome.quickUnlockPrivate.getAvailableModes.
  QuickUnlockModeList GetAvailableModes() {
    // Run the function.
    std::unique_ptr<base::Value> result =
        RunFunction(new QuickUnlockPrivateGetAvailableModesFunction(),
                    base::MakeUnique<base::ListValue>());

    // Extract the results.
    QuickUnlockModeList modes;

    base::ListValue* list = nullptr;
    EXPECT_TRUE(result->GetAsList(&list));
    // Consume the unique_ptr by reference so we don't take ownership.
    for (const std::unique_ptr<base::Value>& value : (*list)) {
      std::string mode;
      EXPECT_TRUE(value->GetAsString(&mode));
      modes.push_back(quick_unlock_private::ParseQuickUnlockMode(mode));
    }

    return modes;
  }

  // Wrapper for chrome.quickUnlockPrivate.getActiveModes.
  QuickUnlockModeList GetActiveModes() {
    std::unique_ptr<base::Value> result =
        RunFunction(new QuickUnlockPrivateGetActiveModesFunction(),
                    base::MakeUnique<base::ListValue>());

    QuickUnlockModeList modes;

    base::ListValue* list = nullptr;
    EXPECT_TRUE(result->GetAsList(&list));
    for (const std::unique_ptr<base::Value>& value : *list) {
      std::string mode;
      EXPECT_TRUE(value->GetAsString(&mode));
      modes.push_back(quick_unlock_private::ParseQuickUnlockMode(mode));
    }

    return modes;
  }

  // Returns true if |problem| is contained in |problems|.
  bool HasProblem(CredentialProblem problem,
                  const std::vector<CredentialProblem> problems) {
    return std::find(problems.begin(), problems.end(), problem) !=
           problems.end();
  }

  bool HasFlag(int outcome, int flag) { return (outcome & flag) != 0; }

  // Helper function for checking whether |IsCredentialUsableUsingPin| will
  // return the right message given a pin.
  void CheckPin(int expected_outcome, const std::string& pin) {
    CredentialCheck result = CheckCredentialUsingPin(pin);
    const std::vector<CredentialProblem> errors(result.errors);
    const std::vector<CredentialProblem> warnings(result.warnings);

    // A pin is considered good if it emits no errors or warnings.
    EXPECT_EQ(HasFlag(expected_outcome, PIN_GOOD),
              errors.empty() && warnings.empty());
    EXPECT_EQ(
        HasFlag(expected_outcome, PIN_TOO_SHORT),
        HasProblem(CredentialProblem::CREDENTIAL_PROBLEM_TOO_SHORT, errors));
    EXPECT_EQ(
        HasFlag(expected_outcome, PIN_TOO_LONG),
        HasProblem(CredentialProblem::CREDENTIAL_PROBLEM_TOO_LONG, errors));
    EXPECT_EQ(
        HasFlag(expected_outcome, PIN_WEAK_WARNING),
        HasProblem(CredentialProblem::CREDENTIAL_PROBLEM_TOO_WEAK, warnings));
    EXPECT_EQ(
        HasFlag(expected_outcome, PIN_WEAK_ERROR),
        HasProblem(CredentialProblem::CREDENTIAL_PROBLEM_TOO_WEAK, errors));
    EXPECT_EQ(
        HasFlag(expected_outcome, PIN_CONTAINS_NONDIGIT),
        HasProblem(CredentialProblem::CREDENTIAL_PROBLEM_CONTAINS_NONDIGIT,
                   errors));
  }

  CredentialCheck CheckCredentialUsingPin(const std::string& pin) {
    auto params = base::MakeUnique<base::ListValue>();
    params->AppendString(ToString(QuickUnlockMode::QUICK_UNLOCK_MODE_PIN));
    params->AppendString(pin);

    std::unique_ptr<base::Value> result = RunFunction(
        new QuickUnlockPrivateCheckCredentialFunction(), std::move(params));

    CredentialCheck function_result;
    EXPECT_TRUE(CredentialCheck::Populate(*result, &function_result));
    return function_result;
  }

  void CheckGetCredentialRequirements(int expected_pin_min_length,
                                      int expected_pin_max_length) {
    auto params = base::MakeUnique<base::ListValue>();
    params->AppendString(ToString(QuickUnlockMode::QUICK_UNLOCK_MODE_PIN));

    std::unique_ptr<base::Value> result =
        RunFunction(new QuickUnlockPrivateGetCredentialRequirementsFunction(),
                    std::move(params));

    CredentialRequirements function_result;
    EXPECT_TRUE(CredentialRequirements::Populate(*result, &function_result));

    EXPECT_EQ(function_result.min_length, expected_pin_min_length);
    EXPECT_EQ(function_result.max_length, expected_pin_max_length);
  }

  // Wrapper for chrome.quickUnlockPrivate.setModes that automatically uses a
  // valid password.
  bool SetModes(const QuickUnlockModeList& modes,
                const CredentialList& passwords) {
    return SetModesUsingPassword(kValidPassword, modes, passwords);
  }

  // Wrapper for chrome.quickUnlockPrivate.setModes.
  bool SetModesUsingPassword(const std::string& password,
                             const QuickUnlockModeList& modes,
                             const CredentialList& passwords) {
    // Serialize parameters.
    auto params = base::MakeUnique<base::ListValue>();
    params->AppendString(password);

    auto serialized_modes = base::MakeUnique<base::ListValue>();
    for (QuickUnlockMode mode : modes)
      serialized_modes->AppendString(quick_unlock_private::ToString(mode));
    params->Append(std::move(serialized_modes));

    auto serialized_passwords = base::MakeUnique<base::ListValue>();
    for (const std::string& password : passwords)
      serialized_passwords->AppendString(password);
    params->Append(std::move(serialized_passwords));

    // Setup a fake authenticator so quickUnlockPrivate.checkPassword doesn't
    // call cryptohome methods.
    auto* func = new QuickUnlockPrivateSetModesFunction();
    func->SetAuthenticatorAllocatorForTesting(
        base::Bind(&CreateFakeAuthenticator));

    // Stub out event handling since we are not setting up an event router.
    func->SetModesChangedEventHandlerForTesting(modes_changed_handler_);

    // Run function and extract the result.
    std::unique_ptr<base::Value> func_result =
        RunFunction(func, std::move(params));
    bool result;
    EXPECT_TRUE(func_result->GetAsBoolean(&result));

    // Verify that the mode change event handler was run if it was registered.
    // ExpectModesChanged will set expect_modes_changed_ to true and the event
    // handler will set it to false; so if the handler never runs,
    // expect_modes_changed_ will still be true.
    EXPECT_FALSE(expect_modes_changed_) << "Mode change event was not raised";

    return result;
  }

  std::string SetModesWithError(const std::string& args) {
    auto* func = new QuickUnlockPrivateSetModesFunction();
    func->SetAuthenticatorAllocatorForTesting(
        base::Bind(&CreateFakeAuthenticator));
    func->SetModesChangedEventHandlerForTesting(base::Bind(&DoNothing));

    return api_test_utils::RunFunctionAndReturnError(func, args, profile());
  }

  // Returns true if |password| is correct. This calls into SetModes to do so.
  // This will turn off any active quick unlock modes.
  bool CheckPassword(const std::string& password) {
    return SetModesUsingPassword(password, QuickUnlockModeList{},
                                 CredentialList{});
  }

 private:
  // Runs the given |func| with the given |params|.
  std::unique_ptr<base::Value> RunFunction(
      scoped_refptr<UIThreadExtensionFunction> func,
      std::unique_ptr<base::ListValue> params) {
    return std::unique_ptr<base::Value>(
        api_test_utils::RunFunctionWithDelegateAndReturnSingleResult(
            func, std::move(params), profile(),
            base::MakeUnique<ExtensionFunctionDispatcher>(profile()),
            api_test_utils::NONE));
  }

  // Verifies a mode change event is raised and that |expected| is now the
  // active set of quick unlock modes.
  void ExpectModeList(const QuickUnlockModeList& expected,
                      const QuickUnlockModeList& actual) {
    EXPECT_EQ(expected, actual);
    expect_modes_changed_ = false;
  }

  FakeChromeUserManager* fake_user_manager_;
  ScopedUserManagerEnabler scoped_user_manager_;
  QuickUnlockPrivateSetModesFunction::ModesChangedEventHandler
      modes_changed_handler_;
  bool expect_modes_changed_ = false;

  DISALLOW_COPY_AND_ASSIGN(QuickUnlockPrivateUnitTest);
};

// Verify that password checking works.
TEST_F(QuickUnlockPrivateUnitTest, CheckPassword) {
  EXPECT_TRUE(CheckPassword(kValidPassword));
  EXPECT_FALSE(CheckPassword(kInvalidPassword));
}

// Verifies that this returns PIN for GetAvailableModes.
TEST_F(QuickUnlockPrivateUnitTest, GetAvailableModes) {
  EXPECT_EQ(GetAvailableModes(),
            QuickUnlockModeList{QuickUnlockMode::QUICK_UNLOCK_MODE_PIN});
}

// Verifies that an invalid password cannot be used to update the mode list.
TEST_F(QuickUnlockPrivateUnitTest, SetModesFailsWithInvalidPassword) {
  // Verify there is no active mode.
  EXPECT_EQ(GetActiveModes(), QuickUnlockModeList{});

  // Try to enable PIN, but use an invalid password. Verify that no event is
  // raised and GetActiveModes still returns an empty set.
  FailIfModesChanged();
  EXPECT_FALSE(SetModesUsingPassword(
      kInvalidPassword,
      QuickUnlockModeList{QuickUnlockMode::QUICK_UNLOCK_MODE_PIN}, {"1111"}));
  EXPECT_EQ(GetActiveModes(), QuickUnlockModeList{});
}

// Verifies that the quickUnlockPrivate.onActiveModesChanged is only raised when
// the active set of modes changes.
TEST_F(QuickUnlockPrivateUnitTest, ModeChangeEventOnlyRaisedWhenModesChange) {
  // Make sure quick unlock is turned off, and then verify that turning it off
  // again does not trigger an event.
  EXPECT_TRUE(SetModes(QuickUnlockModeList{}, CredentialList{}));
  FailIfModesChanged();
  EXPECT_TRUE(SetModes(QuickUnlockModeList{}, CredentialList{}));

  // Turn on PIN unlock, and then verify turning it on again and also changing
  // the password does not trigger an event.
  ExpectModesChanged(
      QuickUnlockModeList{QuickUnlockMode::QUICK_UNLOCK_MODE_PIN});
  EXPECT_TRUE(SetModes(
      QuickUnlockModeList{QuickUnlockMode::QUICK_UNLOCK_MODE_PIN}, {"1111"}));
  FailIfModesChanged();
  EXPECT_TRUE(SetModes(
      QuickUnlockModeList{QuickUnlockMode::QUICK_UNLOCK_MODE_PIN}, {"2222"}));
  EXPECT_TRUE(SetModes(
      QuickUnlockModeList{QuickUnlockMode::QUICK_UNLOCK_MODE_PIN}, {""}));
}

// Ensures that quick unlock can be enabled and disabled by checking the result
// of quickUnlockPrivate.GetActiveModes and PinStorage::IsPinSet.
TEST_F(QuickUnlockPrivateUnitTest, SetModesAndGetActiveModes) {
  PinStorage* pin_storage = PinStorageFactory::GetForProfile(profile());

  // Update mode to PIN raises an event and updates GetActiveModes.
  ExpectModesChanged(
      QuickUnlockModeList{QuickUnlockMode::QUICK_UNLOCK_MODE_PIN});
  EXPECT_TRUE(SetModes(
      QuickUnlockModeList{QuickUnlockMode::QUICK_UNLOCK_MODE_PIN}, {"1111"}));
  EXPECT_EQ(GetActiveModes(),
            QuickUnlockModeList{QuickUnlockMode::QUICK_UNLOCK_MODE_PIN});
  EXPECT_TRUE(pin_storage->IsPinSet());

  // SetModes can be used to turn off a quick unlock mode.
  ExpectModesChanged(QuickUnlockModeList{});
  EXPECT_TRUE(SetModes(QuickUnlockModeList{}, CredentialList{}));
  EXPECT_EQ(GetActiveModes(), QuickUnlockModeList{});
  EXPECT_FALSE(pin_storage->IsPinSet());
}

// Verifies that enabling PIN quick unlock actually talks to the PIN subsystem.
TEST_F(QuickUnlockPrivateUnitTest, VerifyAuthenticationAgainstPIN) {
  PinStorage* pin_storage = PinStorageFactory::GetForProfile(profile());

  EXPECT_TRUE(SetModes(QuickUnlockModeList{}, CredentialList{}));
  EXPECT_FALSE(pin_storage->IsPinSet());

  EXPECT_TRUE(SetModes(
      QuickUnlockModeList{QuickUnlockMode::QUICK_UNLOCK_MODE_PIN}, {"1111"}));
  EXPECT_TRUE(pin_storage->IsPinSet());

  pin_storage->MarkStrongAuth();
  pin_storage->ResetUnlockAttemptCount();
  EXPECT_TRUE(pin_storage->TryAuthenticatePin("1111"));
  EXPECT_FALSE(pin_storage->TryAuthenticatePin("0000"));
}

// Verifies that the number of modes and the number of passwords given must be
// the same.
TEST_F(QuickUnlockPrivateUnitTest, ThrowErrorOnMismatchedParameterCount) {
  EXPECT_FALSE(SetModesWithError("[\"valid\", [\"PIN\"], []]").empty());
  EXPECT_FALSE(SetModesWithError("[\"valid\", [], [\"11\"]]").empty());
}

// Validates PIN error checking in conjuction with policy-related prefs.
TEST_F(QuickUnlockPrivateUnitTest, CheckCredentialProblemReporting) {
  PrefService* pref_service = profile()->GetPrefs();

  // Verify the pin checks work with the default preferences which are minimum
  // length of 4, maximum length of 0 (no maximum) and no easy to guess check.
  CheckPin(PIN_GOOD, "1112");
  CheckPin(PIN_GOOD, "11112");
  CheckPin(PIN_GOOD, "1111111111111112");
  CheckPin(PIN_WEAK_WARNING, "1111");
  CheckPin(PIN_TOO_SHORT, "1");
  CheckPin(PIN_TOO_SHORT, "11");
  CheckPin(PIN_TOO_SHORT | PIN_WEAK_WARNING, "111");
  CheckPin(PIN_TOO_SHORT | PIN_CONTAINS_NONDIGIT, "a");
  CheckPin(PIN_CONTAINS_NONDIGIT, "aaab");
  CheckPin(PIN_CONTAINS_NONDIGIT | PIN_WEAK_WARNING, "aaaa");
  CheckPin(PIN_CONTAINS_NONDIGIT | PIN_WEAK_WARNING, "abcd");

  // Verify that now if the minimum length is set to 3, PINs of length 3 are
  // accepted.
  pref_service->SetInteger(prefs::kPinUnlockMinimumLength, 3);
  CheckPin(PIN_WEAK_WARNING, "111");

  // Verify setting a nonzero maximum length that is less than the minimum
  // length results in the pin only accepting PINs of length minimum length.
  pref_service->SetInteger(prefs::kPinUnlockMaximumLength, 2);
  pref_service->SetInteger(prefs::kPinUnlockMinimumLength, 4);
  CheckPin(PIN_GOOD, "1112");
  CheckPin(PIN_TOO_SHORT, "112");
  CheckPin(PIN_TOO_LONG, "11112");

  // Verify that now if the maximum length is set to 5, PINs longer than 5 are
  // considered too long and cannot be used.
  pref_service->SetInteger(prefs::kPinUnlockMaximumLength, 5);
  CheckPin(PIN_TOO_LONG | PIN_WEAK_WARNING, "111111");
  CheckPin(PIN_TOO_LONG | PIN_WEAK_WARNING, "1111111");

  // Verify that if both the minimum length and maximum length is set to 4, only
  // 4 digit PINs can be used.
  pref_service->SetInteger(prefs::kPinUnlockMinimumLength, 4);
  pref_service->SetInteger(prefs::kPinUnlockMaximumLength, 4);
  CheckPin(PIN_TOO_SHORT, "122");
  CheckPin(PIN_TOO_LONG, "12222");
  CheckPin(PIN_GOOD, "1222");

  // Set the PINs minimum/maximum lengths back to their defaults.
  pref_service->SetInteger(prefs::kPinUnlockMinimumLength, 4);
  pref_service->SetInteger(prefs::kPinUnlockMaximumLength, 0);

  // Verify that PINs that are weak are flagged as such. See
  // IsPinDifficultEnough in quick_unlock_private_api.cc for the description of
  // a weak pin.
  pref_service->SetBoolean(prefs::kPinUnlockWeakPinsAllowed, false);
  // Good.
  CheckPin(PIN_GOOD, "1112");
  CheckPin(PIN_GOOD, "7890");
  CheckPin(PIN_GOOD, "0987");
  // Same digits.
  CheckPin(PIN_WEAK_ERROR, "1111");
  // Increasing.
  CheckPin(PIN_WEAK_ERROR, "0123");
  CheckPin(PIN_WEAK_ERROR, "3456789");
  // Decreasing.
  CheckPin(PIN_WEAK_ERROR, "3210");
  CheckPin(PIN_WEAK_ERROR, "987654");
  // Too common.
  CheckPin(PIN_WEAK_ERROR, "1212");

  // Verify that if a PIN has more than one error, both are returned.
  CheckPin(PIN_TOO_SHORT | PIN_WEAK_ERROR, "111");
  CheckPin(PIN_TOO_SHORT | PIN_WEAK_ERROR, "234");
}

TEST_F(QuickUnlockPrivateUnitTest, GetCredentialRequirements) {
  PrefService* pref_service = profile()->GetPrefs();

  // Verify that trying out PINs under the minimum/maximum lengths will send the
  // minimum/maximum lengths as additional information for display purposes.
  pref_service->SetInteger(prefs::kPinUnlockMinimumLength, 6);
  pref_service->SetInteger(prefs::kPinUnlockMaximumLength, 8);
  CheckGetCredentialRequirements(6, 8);

  // Verify that by setting a maximum length to be nonzero and smaller than the
  // minimum length, the resulting maxium length will be equal to the minimum
  // length pref.
  pref_service->SetInteger(prefs::kPinUnlockMaximumLength, 4);
  CheckGetCredentialRequirements(6, 6);

  // Verify that the values received from policy are sanitized.
  pref_service->SetInteger(prefs::kPinUnlockMinimumLength, -3);
  pref_service->SetInteger(prefs::kPinUnlockMaximumLength, -3);
  CheckGetCredentialRequirements(1, 0);
}
}  // namespace chromeos


text:
What is MND ?
What is MND?
MND and Coronavirus
Your Team of Professionals
MND Clinical Specialists
Carers Hub
Support during Coronavirus
Accessible Holiday Facilities
Communications Aids
Making a will and more
Video Support Group
Other Ways to Fundraise
The Difference Your Support Makes
Inform our Work
World-Wide Research
Youth Philanthropy Initiative
Son takes on Ironman challenge for father living with MND
Son training hard in preparation for 140.6-mile challenge.
Posted : 14/10/2021
On October 23rd, Jack Murphy (20) is set to compete in the IRONMAN Portugal – Cascais in order to raise money for MND Scotland.
Consisting of a 2.4-mile swim, 112-mile bike and 26.2-mile run, Jack is taking on the 140.6-mile (226.3 kilometres) challenge for those in Scotland living with motor neurone disease (MND) such as his father, Brian Murphy, who was diagnosed with the terminal illness in February 2019.
Prior to training for the event, Jack admits having never swum or cycled for any significant distance or running further than 10k, but as can be seen by the regular updates on his Just Giving page, Jack has been training hard to ensure the event is a complete success.
So far Jack has raised a total of almost six thousand pounds and has already surpassed his initial five-thousand-pound goal.
Speaking on his father's experience, Jack said: "I have witnessed first-hand how this horrific disease has gradually debilitated him.
"At first, he was walking with a limp, which progressed on to having to use a walker and then a wheelchair. Now he is unable to dress himself, get out of bed without help, get anything to eat or go to the toilet on his own. This is something that no one should have to go through."
The money that Jack has raised will help to fund vital services that people diagnosed with MND in Scotland rely on.
Jack added: "Their services are vital to improving the quality of life of people affected by MND and include one-to-one counselling which helps people affected by MND cope with the emotional impact of MND; support groups throughout Scotland to bring together people who have been affected by MND to chat and share advice; and financial support grants to pay for essential equipment to help someone live as full a life as possible or enable a family to have a last holiday together."
Iain McWhirter, Head of Fundraising at MND Scotland, said: "It's fantastic to see Jack taking on this incredible challenge to help raise money that will help to change lives and power research. Without people like Jack, our work would be impossible. Thank you, Jack."
You can donate to Jack's fundraiser and see the fantastic effort already put into his training by visiting his Just Giving page. To find other ways that you can help us fight against MND, please click here.
"It's fantastic to see Jack taking on this incredible challenge to help raise money that will help to change lives and power research. Without people like Jack, our work would be impossible. Thank you, Jack."
Iain McWhirter
Youth footy team's charity spirit in memory of Carol
One thousand miles for Cath
Stewart's 'Trade Up' challenge for MND
Hearts reveal new kit with MND Scotland logo
ScotRail's tribute to MND campaigner Gordon Aikman
Chivas Brothers shifts into gear with 200-mile cycle for MND
January 2022 (1)December 2021 (4)November 2021 (2)October 2021 (7)September 2021 (3)August 2021 (1)July 2021 (2)June 2021 (11)May 2021 (2)April 2021 (2)March 2021 (2)February 2021 (3)January 2021 (4)December 2020 (3)November 2020 (4)October 2020 (2)September 2020 (3)August 2020 (7)July 2020 (2)June 2020 (8)May 2020 (3)April 2020 (3)March 2020 (5)February 2020 (2)January 2020 (3)December 2019 (3)November 2019 (3)October 2019 (3)September 2019 (4)August 2019 (2)July 2019 (4)June 2019 (14)May 2019 (1)April 2019 (7)March 2019 (2)February 2019 (2)January 2019 (4)December 2018 (2)November 2018 (3)October 2018 (6)September 2018 (2)August 2018 (5)July 2018 (4)June 2018 (22)May 2018 (8)April 2018 (7)March 2018 (8)February 2018 (3)January 2018 (4)December 2017 (2)November 2017 (4)October 2017 (7)September 2017 (1)August 2017 (11)July 2017 (6)June 2017 (20)May 2017 (10)April 2017 (4)March 2017 (7)February 2017 (12)January 2017 (2)December 2016 (5)November 2016 (1)October 2016 (3)September 2016 (3)August 2016 (3)July 2016 (1)June 2016 (1)May 2016 (2)April 2016 (2)February 2016 (1)January 2016 (1)June 2015 (1)January 2015 (1)September 2014 (1)
Donate to MND Scotland
Support people affected by MND in Scotland, and fund vital research to help take us a step closer to finding a cure.
You can make a one-off or regular donation
-- Please select donation type -- A Regular Donation A One Off Donation
£5 £10 £25 £50 £100 Other Amount
About MND Scotland
MND Scotland is the leading charity in Scotland providing care and support to people affected by Motor Neurone Disease (MND), as well as funding vital research into finding a cure.
The charity is a member of the International Alliance of ALS/MND Associations.
Charity Number SC002662. Company limited by guarantee, registered in Scotland number SC217735.
VAT Registration Number 195 0616 96.
Around MND Scotland
Email: info@mndscotland.org.uk
MND Scotland
76 Firhill Road
G20 7BA
Information for media here.
© Copyright MND Scotland Accessibility - Site map - Terms and Conditions - Privacy Policy

redpajama_set_name: RedPajamaCommonCrawl


Synonymous with spring is the dawn of backyard botanical wonderlands—and perhaps a garden party or two to appropriately ring in the season! What to wear to such a floral-filled occasion? We suggest some corresponding blossoming baubles by way of Prada's Crystal Necklace!
Dripping in aqua-hued gems, this oversized statement piece was a runway favorite fit for real way wear. Adorned with patent pink roses, fret not if you don't consider yourself a gardener extraordinaire—these are the only flowers you'll need this spring! Layer this Prada necklace over a crop top, leather pencil skirt and transparent sandals and we suspect you'll be feeling nothing short of rosy!
Availability: Prada Crystal and Resin Necklace ($1950, available at select Prada boutiques). For additional information, visit Prada.com.
P.S. It's time to bring on spring! Run don't walk to shop our 20 Season Standouts.


text:
Why a new flag?
Proofs for a new flag
No Committees or Commissions
Design Catalogue
Promotional Brochure
A NEW FLAG FOR UTAH
The Organization for a New Utah Flag's purpose is to design and implement a beautiful and bold new flag worthy of the State of Utah. Feel free to email us if you have any inquiries as you explore the site.
CHAIR: Richard T. Martin +801.319.0933
THE ORGANIZATION FOR A NEW UTAH FLAG
Copyright © 2020 Organization for a New Utah Flag
When one visits such states as Texas, they are familiar with seeing the instantly recognizable flag of the "Lone Star State." Famous the world over, the flag is flown proudly by its citizens and businesses alike, even outside its borders. The same can be said for the flags of New Mexico, Arizona, Maryland, California, South Carolina and a few others of note.
Then there's Utah's flag. When was the last time you saw the flag being flown by a private business or citizen? Surveys have shown that most students and adults cannot name most the elements on the flag. Are Utahn's proud of their flag?
Unfortunately, Utah's flag is not a symbol of state pride, unity, or identity, but rather just another one of the many unremarkable state flags in the Union.
But we can change that. Today.


The still is the first look from Quentin Tarantino's even-more-anticipated-than-usual 9th film, Once Upon a Time in Hollywood. Here's what we know about it so far: it stars DiCaprio as Rick Dalton, a washed up former star of a Western TV series, and Brad Pitt as Cliff Booth, Dalton's longtime stunt double, both of whom are attempting to make their way in a Hollywood they don't recognize anymore (go figure). The story is set in 1969 (hence the outfits), against the backdrop of the murder of Sharon Tate, the real-life American actress who was gruesomely killed, along with her friends, by members of Charles Manson's cult. Other stars attached include Margot Robbie, Kurt Russell, Burt Reynolds, Damien Lewis, Emile Hirsch and Timothy Olyphant. Apparently, Tarantino had been working on the script for over five years; it's slated to hit theaters August 9th, 2019.
But perhaps greater than the excitement for the movie in general is the promise of seeing (a noticeably slimmed-down) DiCaprio and Pitt, the two biggest movie stars of their respective generations—DiCaprio is 43; Pitt is 54; both defy the slow march of time to make them less handsome—starring alongside each other in a movie. Because though both had worked with Tarantino before—Pitt, in True Romance and Inglorious Basterds, DiCaprio in Django Unchained—they'd never worked with each other. Or had they?
It turns out a quick google search reveals that the two had indeed worked together before, on a hardly-seen 2015 short directed by none other than Martin Scorsese. Called The Audition, it stars DiCaprio and other frequent Scorsese collaborator, Robert DeNiro, as tongue-in-cheek versions of themselves, who arrive at a fancy hotel in Manila to meet Marty, only to realize they're going up against each other for the same role in his next movie, as a suave, international casino owner (naturally). The 15-minute short, written by the Oscar-nominated screenwriter of Scorsese's The Departed, Terrence Winter, reportedly came with a price tag of $70 million; it was financed by Melco Crown Entertainment Ltd. to celebrate the opening of its Hollywood-themed Studio City Macau Resort and Casino. DeNiro and DiCaprio allegedly received $13 million each to participate, and Brett Ratner, the now-disgraced director, had expressed interest in directing a feature-length version. You can watch The Audition on YouTube, albeit in poor quality.
Oh yeah. And Brad Pitt. He appears in the final act of the movie, when Marty, DeNiro and DiCaprio are strolling through Japan. Marty sends them home, informing them of an epiphany he had, that the movie does not actually need the character he'd wanted one of them to play. But as DeNiro and DiCaprio head to the spa, bickering about the meaning of the word "wrapped," we see Scorsese sitting down with Brad Pitt, who is, as he's wont to be, mid-meal. By the end, it appears that Pitt is probably getting the part.
In a way, the film feels like an oddly fitting meta prologue for Once Upon a Time in America. Both Pitt and DiCaprio have served as Tarantino muses, like DiCaprio and DeNiro have, on far more numerous occasions, for Scorsese. And there is an inherent competitiveness, even if it's projected, between two icons of a similar age, talent and celebrity (although, it should be said that DiCaprio and Pitt are more dissimilar actors than DiCaprio and DeNiro). Fortunately, DiCaprio and Pitt weren't forced to vie for a single role in Once Upon a Time in Hollywood, like, perhaps, their characters might be in Once Upon in Hollywood. In the happiest of endings, we get both.


text:
Home Opinion Featured Articles President Jonathan the Lap Dog of Corruption- In the Era of Boko...
President Jonathan the Lap Dog of Corruption- In the Era of Boko Haram
Frank Akwada
In the 1980's Port-Harcourt (The Garden City) was a dynamic place with a characteristic tranquil and restive edge. I remember going to the Saint Mary's Catholic Church with my siblings by a taxi on those weekends when my parents would drive to the Imo State country side en-route to my father's village. After church we would cross Aggrey road near the Lagos bus stop, Town area and visit with our older cousins Amoni, Bright, and Ibinabo. My cousins, Amoni and Bright were gainfully employed secondary school graduates at the Nigerian National Petroleum Corporation NNPC. On most occasions when we trooped in to request for snacks and ice cream, one of my cousins whom we called uncle due to the age difference, would be on the oil rigs preoccupied in an honest day's work. While my cousin Ibinabo was at the Rivers State University of Science and Technology, his brothers were working at the Eleme refinery and the oil rigs with their high school certificates. These days, university graduates are unemployed and constitute an ever increasing proportion of the underemployed in our so-called giant of Africa.
Interestingly, those days when my younger ones and I took the cab (a drop) once or twice a month to the Catholic Church soon came to an end, after I discovered the corruption and hypocrisy within organized religion. Thankfully, I did not have to wait for contemporary times to discern the multilayered ongoing worldwide scandals in the church. As a teenager, I opted for the Pentecostal and evangelical churches that unbeknownst to me came out of the so-called Bible belt in the United States otherwise known as the Deep South. Most present day Nigerians and Africans are still ignorant of the fact that some of the same folks from the West that want them to be born-again have placed policies and structures to impede African American development through mass incarceration, structural inequality, and disenfranchisement in the United States. Indeed the hypocrisy in the church is not unlike what we experience in other religions and politics. Nigerian superstar Majek Fashek informed us back in the day that Religion is Politics.
Subsequently we have an emission of religion, ethnic intolerance, nepotism, and corruption in today's' political dispensation that threatens to untangle the United Nations of Nigeria. On the right corner we have President Goodluck Jonathan and his corrupt lieutenants who sold Nigerians the mannequin bill of transformation. The President and the likes of Okonjo-Iweala, Sanusi, Madueke, Aganga, and Onwuliri do not remember or just do not care that close to 1000 fellow Nigerians gave their lives for the introduction and realization of a new political democratic era. In Jonathan, we thought we saw an individual from the academy that could rise above the dictates of the Northern Military Industrial Complex NMIC. We were under the impression that he could resist the trappings of authoritarianism and corruption of former government officials. But our aspirations (luck) is been tarnished as this administration goes about desecrating the memories and labours of our contemporary heroes of democracy. The young men and women of the National Youth Service Corp NYSC who were murdered during and after the elections are treated as though they died in vain.
Meanwhile President Jonathan has becomes a lap dog of corruption for international and national syndicates. President Christine Largade of the International Monetary Fund IMF, who wants to use discredited neo-liberalism economic theories to increase the number of poor individuals on the African continent, is an example of such corrupt international principles. She visited Nigeria to reinforce the inside lobbying efforts of Dr. Ngozi Okonjo-Iweala the Nigerian Finance minister and former vice president of the World Bank. After meeting Ms. Largade on December 19th, 2011 and notwithstanding the horrendous Christmas day church bombing that killed nearly 50 people; the call for religious and ethnic repatriations; the call to arms by the various tribes; massive displacement and hysteria, we received the New Year's gift from President Jonathan that increased petroleum prices by more than 100%. These were the rude awakening that became a catalyst for the Occupy Nigeria Movement in our country and in the Diaspora.
Rather than focusing on the cabal of Nigerian petroleum importers and bunkery organizers the government decided to punish the same regular and poor people who elected them. Under the guise of deregulation and privatization the previous military and civilian administrations had conveniently lined up their cronies as venture capitalist in the petroleum sectors to the disadvantage of the less privileged people. In a classical example of double speak these fat cats increase the cost of petroleum production in the nation through various direct federal government sanctioned subsidies/fleecing of the treasury.
Instead of competition, efficiency, and price decrease we became saddled with monopolies and wastes in the highest levels. As a result there emerged millionaires and billionaires who could careless about the wellbeing of other Nigerians. According to Dictator Babangida some of those folks took record time to criminally amass the wealth that he painstakingly took 8years to steal. They became more interested in maintaining the status quo and placed some of their ill gotten loots as hedges towards the realization of the peoples backed Jonathan's presidency. The names of these culprits were miraculously released by representatives of our National Assembly of disrepute and pimps. Our so-called representatives wanted to shift the criticism from the public on account of the earth shaking salaries, allowances, bonuses they steal for doing next to nothing.
Additionally, these developments have not slowly down our race to the bottom and the corruption in Abuja. Nigerians have become tennis balls in the hands of the 1% uber rich on the left corner, who insist on draining us until the last blood and/or oil. At the national level corruption is manifested in the economic and security purviews, while President Jonathan continues in the lap dog status. Boko Haram suspects are disappearing from law enforcement custody as fast as dollars and naira are milked from our coffers. In the likes of Inspector General of Police Hafiz Ringim we see a level of malfeasances and coalition with the elements that are killing innocent law enforcement officers, Christians, and Muslims, whereas the Northern elites who promised us these mayhem are protected in their posh mansions with a combination of their private security details and the national security apparatus.
Coincidentally Mrs. Diezani Allison-Madueke wants Nigerians that cannot afford three balanced meals, lack stable electricity, and basic healthcare to sacrifice for the nation when her children are frolicking worldwide. She appeared in front of the Nigerian National Assembly and did not know how much oil is produced and/or consumed in the country. The Minister of Petroleum Mrs. Madueke does not know the whereabouts of nearly $2billion petroleum funds. In the National Assembly hearing Mrs. Madueke pointed the finger at the Minister of Finance Mrs. Ngozi Okonjo-Iweala who reciprocated the gesture. Despite these systematic fraudulent anomalies, both ministers are not in danger of loosing their jobs. We have the emergence of a Southern Delta Industrial Complex SDIC, with all the surviving ex-governors of Rivers State and Bayelsa State residing in Abuja.
Despondently, the similarities between the SDIC and the NMIC Northern Military have not gone unnoticed by the masses. The SDIC political authority and economic realignment is devoid of pursuing policies for the betterment of the Nigerian people. This is reflected in the combined difficulties of increasing fuel prices on people and the ineptitude in combating the constant Boko Haram massacres. Our so-called officials in positions of trust do not exude confidence in the general public. This was exemplified by the reports of Ms. Vera Ezimora about the outing of the Minister of Foreign Affairs, Professor Viola Onwuliri in the Washington DC and Maryland area. Her callous remarks were "We have one hundred and sixty million people. If 2million are on the streets, then that means one hundred and fifty-eight million are in their homes." Professor Onwuliri could not reckon the significance of 2million people on the streets of Nigeria who were demanding for a new discourse and the rescinding of the fuel taxation on the poor. These were the same people that President Goodluck Jonathan shamefully intimidated with the deployment of the Nigerian Army, ironically when northern Nigeria is awash with Boko Haram operatives.
Consequently, this incompetence has quickening an unexpected awakening in the Nigerian people who have yearned for a transparent and just government since the evolution of the fourth democratic republic. Nigerians are now asking about the much acclaimed transformational governance which is nowhere in site. Some of us in the Diaspora have made a resolution to standup from the sidelines, and others have recommitted their energies to the actualization of peoples' influenced changes in Nigeria. We plan to convene a civil society; social and economic justice led Sovereign National Conference in the United States. We are eventually going to bring this conference back to the African shores for forward consultations to seek a way forward, that is absent of tribalism, religious intolerance, injustice, and corruption. Our objectives include the implementation of paradigms to ensure accountability and job creation. The goals will also involve the use of national resources to provide livable employment and healthcare opportunities for Nigerians. We are going to strive for a society where 99% of the population can survive with an honest wage.
Nnamdi Frank Akwada MSW, BA is a Social Justice Activist
Executive Director African Diaspora Institute and US African Cultural Festival
http://www.usafricanculturalfestival.com/
Member- Occupy Nigeria Movement Washington DC
http://nnamdiakwada.blogspot.com/
Washington DC Coordinator: Let There Be Light In Nigeria- Nigeria Million March
www.nigerianmillionmarch.com
http://saharareporters.com/article/my-meeting-professor-viola-onwuliri-minister-foreign-affairs
Previous articleWorld Bank announces new Country Director for Ghana, Liberia and Sierra Leone
Next articleGhana to consolidate economic gains with US$100 million budget support from World Bank
The Delusions of Charles Onunaiju About The PTF
Cameroonians upbeat about exciting CHAN amid COVID-19
Hate Does Not Win In This Politics
I Revere Opambour for his Accuracy
Americans struggle to maintain middle class lifestyle
WeChat catapult Namibian youth into business
Zambian government urged to do more on health ministry scandal
Ghana's National Security System, Allegiance, and the Dual Citizens' Full Participation in The Political Space: If It Doesn't Fit, You Must Repeal!
What Does the African Trade Agreement (AfCFTA) mean for South Africa?


Watkins Glen, New York is known for it's waterfalls. This waterfall out of many others was my favorite. I'm not a huge fan of the real touristy spots when there are gates and signs and concrete barriers stopping you from going any further, though I do usually visit them. For most popular scenic destinations, that is the case! But my favorite are the hidden gems you can walk right up to and experience hands on! Wall, warning and gate free! This waterfall was just that. There is a main road that passes right over it and many people stop and see it on the side of the busy road. My family and I decided to see if we could make it to the bottom and explore. We did have to ask a few of the friendly locals if we could pass through what seemed to be their drive way. They were more than happy to point us toward the base of the waterfall. One guy actually said, "Oh yeah, jump in the river and climb the falls! You can walk right up it like stairs! I almost gasped as he said this. I'm so used to being told what I cannot do and where I cannot go by threatening "Warning" and "Keep Out" signs. They're all over! Who wants to get sued? We were pumped! We drove down to the falls feeling so good, like we were VIP. We get there. Not a single person! It was EPIC! You had to be there. We took the mans advice. We jumped in and started climbing! A truly incredible experience I will never forget.


When it was clear I would return to Vienna for a long weekend (after nearly twenty years since my last visit), I was drawn between going back to the city's dining icon Steirer Eck which remains one of Vienna's most lauded restaurants, or to seek out one of the excellent new places that have sprung up in this breathtaking city.
As the headline undoubtedly gives away, my choice fell on one of the new kids on the block so to say, although Konstantin Filippou opened his restaurant already back in 2013.
Upon entering the small restaurant, what becomes immediately obvious is how the place reflects the chef's preferred colour scheme. It is dominated by black with just a few hues of white, brown and gold. Staff too – both in the kitchen and service – are wearing all black.
Filippou's cooking style too is in total sync with the minimalist yet elegant design of the place – down to the main ingredients and without any stylistic twists or overdone arrangements on the plate which I often find distracting from the main intention, which is to enjoy excellent food.
From the dining room, you can observe the kitchen through a window front and some of the courses will be finalized at the counter at the end of the dining area, where also the chefs table is located.
One thing that truly impressed me was how calm and seamless the kitchen staff was moving around while preparing the food. There was absolutely no hustle and bustle. Instead, it all seemed like a perfectly studied choreography.
I also loved the way the food was presented at the table with every single member in service expertly presenting and explaining each course.
For dinner, Konstantin Filippou offers a six course set menu which if you like can be extended to a ten course menu by adding four surprise courses. Knowing we would struggle to finish ten courses, we choose to stick with the main menu.
Always the one choosing the dark bread when offered, I was really pleased to see a dark sourdough bread arriving at the table. The accompanying onion butter was a perfect match.
The menu then kicked off with a very delicate amuse bouch of tuna tartar with barley risotto and roasted potatoes.
The second amuse bouch – a roasted onion cream – was served in a little tart. Though we were advised to eat it whole as otherwise the liquid filling would spill out, I found it impossible to put the whole thing into my mouth! However, a good way around that was drinking the cream out of the tart first and then finishing with the tart.
The third amuse bouch was a brandade of black cod and Grüll-caviar. Though it does not look very spectacular served in a rather unassuming bowl, with it very elegant fishy flavours, it was clearly a dish that set a high bar for the rest of the menu to come. I am usually not a huge fan of caviar, I really liked the one from Walter Grüll, who is the only producer of caviar in Austria.
Next came the first course of the menu, a delicate salmon trout with a perfect firm texture, served in an aromatic cream with mustard pickle and dill.
A real highlight was the utterly delicious Croatian langostino. It was loaded with flavour and worked very well with an aromatic cream of veal tongue and seaweed.
The next course once again looked a bit unassuming when it arrived. However, the unagi dish which is inspired by the traditional Japanese eel dish was another real pleasure to taste. It was accompanied by a smoky Spanish Ibérico, mustard and fennel cream which added a nice zing.
The last of the main courses was a Lake Neusiedl pike perch, perfectly prepared and served with a topping of hazelnut, mushrooms, truffle and marrow.
The menu finished with three dessert courses. First, a wild rice topped with black current and salted almond. A great flavour combination that was very well balanced between the slightly sweet flavour of the rice nicely rounded by the strong flavour of the black currant.
The second dessert when it arrived at first looked a bit heavy on the chocolate side but turned out to be a pleasant, very soft elder mousse rounded with flavours of horseradish and apple.
The final dessert was a yogurt sorbet served with little cubes of apricot and a crunchy crumble with nuts.
Complementing the menu was a selection of sweet, tart and fruity petit fours.
It was a really enjoyable dinner and the various awards the chef and his team won in recent years are in my view totally owned. Although the restaurant was fully booked on a Friday evening, service was very efficient and at no time rushed with staff taking the time to expertly explain the different courses. I also like the smaller size of the dishes which were large enough to feel totally satiated but without feeling overly full.


text:
Not-for-Profit Blog
NY Attorney General Suspends Schedule B Collection in Response to U.S. Supreme Court Decision
By Ravika Shankar
As of July 30, 2021, the New York Attorney General's Charities Bureau has suspended its collection of IRS Form 990 Schedule B for charities registered in New York. Charities are no longer required to disclose donor information with their annual filings. This is in response to the U.S. Supreme Court's decision held in Americans for Prosperity Foundation v. Bonta that a California law requiring charities to submit an unredacted copy of Schedule B of IRS Form 990 was unconstitutional. The Court found that the regulations were not narrowly tailored to any substantial governmental interest and that they placed an undue burden on donors. Any notices that charities received from the Charities Bureau regarding any deficiency due to missing or incomplete Schedule Bs are no longer effective. The Charities Bureau is reviewing the appropriate amendments to their policies, procedures, and forms to comply with the U.S. Supreme Court's decision.
As discussed in our July 12, 2021 blog, 501(c)(3) organizations must generally provide information on donors who contribute $5,000 or more on Schedule B of their annual filing of Form 990, including Form 990-EZ and Form 990-PF (whichever form is applicable). Several states, including New York, had required organizations registered in their jurisdictions to submit a copy of their Form 990, including a complete and unredacted Schedule B, to their state attorney general. In 2018, the IRS withdrew some donor information requirements, announcing in Revenue Procedure 2018-38 that tax-exempt organizations other than IRC Sec. 501(c)(3) organizations would no longer need to report the names and addresses of donors. This led to numerous organizations challenging this requirement in the courts on First Amendment grounds, and the question reached the Supreme Court in Bonta.
Other states have also responded to the Supreme Court decision. California has announced that they will no longer require the filing of Schedule B as part of the registration and annual reporting requirements. New Jersey has taken a similar route as New York, where the Division of Consumer Affairs will no longer enforce their Schedule B requirements.
If you have any questions, we'd like to hear from you.
Contact EisnerAmper
Articles Technology & Life Sciences C Corporations: How Do I Compute the Delaware Franchise Tax?
Articles Business Owners Guide - Video Series
Blogs Financial Services Year-End Tax Planning Webcast Series: Parts I, II & III
January 25, 2022 Webinar: Federal Tax Update for Individuals & Businesses
Keating Consulting Group Joins EisnerAmper
EisnerAmper Listed by Forbes as One of "America's Best Tax and Accounting Firms" for 2022


Barcelona-based 21Buttons, a fashion-centred social shopping app, has raised $17 million in a Series B funding round led by Idinvest Partners. The company's existing investors, including Kibo Ventures, Breega, Samaipata, JME VC, 360 Capital Partners, and Sabadell VC, also participated in the round.
21Buttons app looks similar to picture-focused platforms like Instagram or Pinterest, except the clothes depicted in users' photos can be purchased right away. The "Buttoners" post pictures of their outfits and tag their clothes, which are then linked to the respective brands' websites. 21Buttons generates revenue from affiliate programs and shares it with the users who delivered the leads.


text:
package core.shape_interface.editor.geom;

import core.Model;
import core.geom.Shapes;
import core.shape_interface.editor.Control;
import core.shape_interface.editor.ShapeEditor;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;

/**
 *
 * @author Mithusayel Murmu
 */
public class BoxShapeEditor extends ShapeEditor {
    protected Shapes boundShape;

    private Color rotLineColor;

    /*
     * we strore the center location of the
     * shape during rotation of the shape to keep it steady
     * in its place. These values are initialized on every mouse press.
     */
    protected int rot_cx;
    protected int rot_cy;
    protected Point anchor;
    protected Rectangle prevState;

    public BoxShapeEditor(Shapes shape) {
        super();

        boundShape = shape;
        rotLineColor = new Color(~Model.getPadColor().getRGB());
        createControlPoints();
    }

    @Override
    public void pressControl(Point p) {
        idx = determineSelectedControl(p);

        lastPoint = p;
        curPoint = p;

        prevState = boundShape.getBounds();
        rot_cx = (int)prevState.getCenterX();
        rot_cy = (int)prevState.getCenterY();

        boundShape.resetInverse();

        switch(ctrl[idx].type) {
            case NE:
                anchor = ctrl[5].getLoc();
                break;
            case SE:
                anchor = ctrl[0].getLoc();
                break;
            case NW:
                anchor = ctrl[7].getLoc();
                break;
            case SW:
                anchor = ctrl[2].getLoc();
                break;
            case NO:
                anchor = ctrl[6].getLoc();
                break;
            case SO:
                anchor = ctrl[1].getLoc();
                break;
            case EA:
                anchor = ctrl[3].getLoc();
                break;
            case WE:
                anchor = ctrl[4].getLoc();
        }
    }

    @Override
    public void dragControl(MouseEvent e) {
        curPoint = e.getPoint();
        drag_x = curPoint.x;
        drag_y = curPoint.y;

        int ddx = curPoint.x - lastPoint.x;
        int ddy = curPoint.y - lastPoint.y;

        int rx = 0;
        int ry = 0;
        if (anchor != null) {
            rx = curPoint.x - anchor.x;
            ry = curPoint.y - anchor.y;
        }

        Rectangle r = boundShape.getBounds();

        switch(ctrl[idx].type) {
            case NO:
                boundShape.resize(r.width, -ry, anchor.x, anchor.y, prevState);
                break;
            case SO:
                boundShape.resize(r.width, ry, anchor.x, anchor.y, prevState);
                break;
            case WE:
                boundShape.resize(-rx, r.height, anchor.x, anchor.y, prevState);
                break;
            case EA:
                boundShape.resize(rx, r.height, anchor.x, anchor.y, prevState);
                break;
            case NE:
                boundShape.resize(rx, -ry, anchor.x, anchor.y, prevState);
                break;
            case NW:
                boundShape.resize(-rx, -ry, anchor.x, anchor.y, prevState);
                break;
            case SE:
                boundShape.resize(rx, ry, anchor.x, anchor.y, prevState);
                break;
            case SW:
                boundShape.resize(-rx, ry, anchor.x, anchor.y, prevState);
                break;
            case CEN:
                boundShape.translate(ddx, ddy);
                break;
            case ROT:
                boundShape.rotate(drag_x, drag_y, rot_cx, rot_cy);
        }

        updateControlPositions();

        lastPoint = curPoint;
    }

    @Override
    public final void createControlPoints() {
        if (boundShape == null) {
            throw new IllegalStateException("Unable to create control points for null shape!");
        }

        Rectangle rect = boundShape.getBounds();
        int minx = rect.x;
        int miny = rect.y;
        int maxx = (int) rect.getMaxX();
        int maxy = (int) rect.getMaxY();
        int cx = (int) rect.getCenterX();
        int cy = (int) rect.getCenterY();

        ctrl = new Control[10];

        ctrl[0] = new Control(minx, miny, Control.CONTROL_LOCS.NW);
        ctrl[1] = new Control(cx, miny, Control.CONTROL_LOCS.NO);
        ctrl[2] = new Control(maxx, miny, Control.CONTROL_LOCS.NE);
        ctrl[3] = new Control(minx, cy, Control.CONTROL_LOCS.WE);
        ctrl[4] = new Control(maxx, cy, Control.CONTROL_LOCS.EA);
        ctrl[5] = new Control(minx, maxy, Control.CONTROL_LOCS.SW);
        ctrl[6] = new Control(cx, maxy, Control.CONTROL_LOCS.SO);
        ctrl[7] = new Control(maxx, maxy, Control.CONTROL_LOCS.SE);
        ctrl[8] = new Control(cx, cy, Control.CONTROL_LOCS.CEN);
        ctrl[9] = new Control(cx, miny - 20, Control.CONTROL_LOCS.ROT);
    }

    @Override
    public void paintEditLines(Graphics2D g2) {
        Rectangle rect = boundShape.getBounds();

        // If Rot control is being dragged
        if(dragMode && idx == 9)
            paintExtras(g2);
        else
            paintNormal(rect, g2);
    }

    /**
     * Paint the editor as it would appear normally
     * @param g2
     */
    private void paintNormal(Rectangle rect, Graphics2D g2) {
        g2.setColor(COLOR);
        g2.setStroke(stroke);

        g2.drawRect(rect.x, rect.y, rect.width, rect.height);
        g2.setColor(rotLineColor);
        g2.drawLine((int)rect.getCenterX(), (int)rect.getMinY(), ctrl[9].cx, ctrl[9].cy);

        for (int i = ctrl.length - 1; i >= 0; i--) {
            ctrl[i].paint(g2);
        }
    }

    /**
     * Paint the editor when the Rot control is being dragged
     * @param rect
     * @param g2
     */
    private void paintExtras(Graphics2D g2) {
        g2.setStroke(stroke);
        g2.setColor(rotLineColor);
        g2.drawLine(rot_cx, rot_cy, drag_x, drag_y);

        ctrl[8].updateBounds(rot_cx, rot_cy);
        ctrl[8].paint(g2);
        ctrl[9].updateBounds(drag_x, drag_y);
        ctrl[9].paint(g2);
    }

    @Override
    protected int determineSelectedControl(Point p) {
        int ind = -1;

        boolean found = false;
        for (int i = 0; i < ctrl.length; i++) {
            if (ctrl[i].contains(p)) {
                ind = i;
                found = true;
                break;
            }
        }

        if (!found && boundShape.getBounds().contains(p)) {
            ind = 8; // The index for center control
        }

        return ind;
    }

    @Override
    public void updateControlPositions() {
        Rectangle rect = boundShape.getBounds();
        int minx = rect.x;
        int miny = rect.y;
        int maxx = (int) rect.getMaxX();
        int maxy = (int) rect.getMaxY();
        int cx = (int) rect.getCenterX();
        int cy = (int) rect.getCenterY();

        ctrl[0].updateBounds(minx, miny);
        ctrl[1].updateBounds(cx, miny);
        ctrl[2].updateBounds(maxx, miny);
        ctrl[3].updateBounds(minx, cy);
        ctrl[4].updateBounds(maxx, cy);
        ctrl[5].updateBounds(minx, maxy);
        ctrl[6].updateBounds(cx, maxy);
        ctrl[7].updateBounds(maxx, maxy);
        ctrl[8].updateBounds(cx, cy);
        ctrl[9].updateBounds(cx, miny - 20);
    }

    @Override
    public Cursor getCursor(Point p) {
        for (int i = 0; i < ctrl.length; i++) {
            if (ctrl[i].contains(p)) {
                return ctrl[i].getControlCursor();
            }
        }

        /* If the above loop had found something
         * we wouldn't have been here. But since the loop
         * terminated without returning, it mustn't have found
         * anything. So, we set the center cursor to be returned instead.
         */

        if (boundShape.getBounds().contains(p)) {
            return ctrl[8].getControlCursor();
        }

        return Cursor.getDefaultCursor();
    }
}

redpajama_set_name: RedPajamaGithub


ooh i'm excited for The Death Cure movie (yayyy!) & The Keeper sounds really cool. I got an e-ARC of Zenith a few weeks ago and had no idea about who the authors were etc. etc. except that I liked the summary. It ended up being really disappointing for me just because the summary talked about things that weren't really true and was a tad misleading, as well as the novel being a little sloppy POV wise. But I hope you do enjoy it! I checked out her booktube & Sasha seems really cool!


text:
"On behalf of the family I would like to say a heartfelt "Thank you" to you and the other members of staff involved in the arrangements for our mother's funeral. We felt you organised everything beforehand - and conducted us through the day - with great sensitivity and empathy. We all said afterwards that we could not have hoped for a better farewell to our mother. The work you and your colleagues put into the arrangements are largely responsible for the very positive memories of the day that we will draw on in the future."
The Nicholls Family, Yelverton
"Dad's experience of playing for many, many funerals, led him to be adamant that you were the only funeral directors he felt worthy to deal with his last rites and I can only say that I wholeheartedly concur with his opinion. As a family, we cannot express deeply and clearly how much we appreciate the way we and Dad were treated."
The Palmer Family, Tavistock
"Simon, during one of our chats in the 'margins' I mentioned that this occasion would be the third time I'd personally used Morris Bros. From my initial contact with Chris on the phone to shaking your hand yesterday at Glynn Valley the service and professionalism has been exemplary. It is heartening to see that the very high standards continue and are maintained. To you, Lucie, Chris, and Kate a massive thank you!"
The Sherrell Family, Tavistock
"I am writing to thank you, Lucie and everyone at Morris Bros for the beautiful way in which you helped me through the loss of my dear Husband, Ron and arranged his funeral. From the arrival of your two gentlemen immediately after his death, through the funeral arrangements, to the funeral itself, everything was done quietly, efficiently, actually perfectly. I do not believe any other company could have done this better. As a family we all felt that you did everything to ensure that Ron had the funeral he would have wanted and it was certainly everything we wanted. You and all your staff are such kind, caring people and the service you gave was exceptional. I cannot thank you enough"
The Stead Family, Mary Tavy.
"During a terrible time when I lost my husband suddenly and unexpectedly, my family and I were very fortunate to have the services of Morris Brothers. With special thanks to Simon who dealt with everything from beginning to end with great care, sensitivity and professionalism. There was support and guidance every step of the way through the funeral process and nothing was too much trouble. I would highly recommend Morris Brothers to anyone."
The Morriss Family, Plymstock
"We would like to thank you so much for your amazing help and support. I know it was a rather unusual sort of event and we were so glad you didn't bat an eyelid and you were open to facilitate and help us in every way. Morris Bros is a fine business and I would recommend it to anyone".
The Hooten Family, Weir Quay.
"Thank you all so much for your kindness and compassion at my Mum's funeral".
The Nowell Family, Tavistock.
"I believe some people are put on earth to do special jobs and I believe you were chosen for yours".
The Palmer Family, Princetown.
"Your support and efficiency were greatly appreciated and we don't feel that things could have gone any smoother. We would like to particularly thank Chris for his professionalism, calmness and kindness in helping us with the bearer duties. We were apprehensive in advance but honoured to perform them and Chris's support helped immensely".
The Smith Family, Buckinghamshire.
"I know it is your job but during a horrible time you make everything so easy and stress free, nothing is too much trouble".
The Penwill Family, Mary Tavy.
"We were overwhelmed with how much you helped us through difficult times".
The Jackman Family, Tavistock.
"From the start, your kindness, promptness, tact and availability gave us great confidence that all would go well and to plan and so it did".
The Townsend Family, Chillaton.
"Conducted all arrangements with exceptional sympathy and sensitivity. Your helpful guidance throughout was greatly appreciated. We can recommend your services to anyone".
The Hale Family, Tavistock.
"We were so very grateful for the thoughtful, professional and efficient way in which you handled Keith's passing. From the day he died to the actual funeral, you couldn't have been more helpful and reassuring".
The Dunstan Family, Tavistock.
"We would like to thank you all for making a very difficult time bearable".
The Ashe Family, Tavistock.
"Thank you for all the help you gave us during our Dad's passing. We would not have been able to do it without you".
The Knight Family, Princetown.
"My family has recently used the services of Morris Bros Tavistock as we have just had the funeral service for our elderly mother. We had our own special requirements and this lovely family business could not have been more accommodating. In particular along with my three brothers and two of our sons we wished to carry our mother from the church possibly a risky strategy but under the careful and professional tutorage of Simon Luke, our 'coffin drills went without a hitch'. He enabled us to have a rehearsal and guided us through the whole process with great skill; throughout he was a supportive and delightfully calming influence. Every point of detail throughout the preparation process leading up to the funeral was handled with sympathy, compassion and precise attention to detail. Our big family could not have been more delighted with the way our special if sad day was handled. We recommend Morris Bros without reservation as a thoroughly professional and well organised Undertaker who looked after our every need. We are so grateful".
Mr Rory Steevenson, Tavistock.


The latest Christian music news, features, interviews, videos, songs, plus free online radio and audio tracks of your favorite songs. Contemporary christian music, christian videos online, and more. Praise and Worship.


text:
German Jewish council urges end of Iran-Germany trade
In a statement to 'The Jerusalem Post', Dr. Josef Schuster, the head of the Central Council, did not mince words: "I endorse an immediate stop of any economic relation with Iran."
By BENJAMIN WEINTHAL
President of the Central Council of Jews in Germany, Josef Schuster, speaks during a demonstration in front of a synagogue
(photo credit: REUTERS/FABRIZIO BENSCH)
The president of Germany's roughly 100,000-member Central Council of Jews has called for an immediate end of Iranian-German business relations because the trade benefits the Islamic Republic's terrorism and contradicts Berlin's pledge that Israel's security is non-negotiable.
In a statement to The Jerusalem Post on Thursday, Dr. Josef Schuster, the head of the Central Council, did not mince words: "I endorse an immediate stop of any economic relation with Iran. Any trade with Iran means a benefit for radical and terrorist forces, and a hazard and destabilization for the region."
He added "The Central Council of Jews in Germany has been criticizing the German-Iranian trade relations for a long time. It seems paradoxical that Germany – as a country that is said to have learned from its horrendous past and which has a strong commitment to fight antisemitism – is one of the strongest economic partners of a regime that is blatantly denying the Holocaust and abusing human rights on a daily basis. Besides, Germany has included Israel's security as a part of its raison d'etre. As a matter of course this should exclude doing business with a fanatic dictatorship that is calling for Israel's destruction, pursuing nuclear weapons and financing terror organizations around the world.
"It is high time to ask oneself where the money that Iran is earning by this trade is going. Furthermore, we witness demonstrations in Iran of people that are yearning for freedom and equality. We should stand up for these people who are risking their lives because they are asking for rights that we here can fortunately take for granted."
The Central Council serves as an umbrella organization for roughly 80 Jewish communities in Germany.
Germany remains the Islamic Republic of Iran's most important trade partner. Roughly 120 German companies are active in Iran, with employees based in the Islamic Republic, and 10,000 German businesses conduct business with Iran. Germany exported $3.42 billion in goods to Iran in 2017.
The Post sent detailed press queries to German Chancellor Angela Merkel, Foreign Minister Heiko Maas and Economy Minister Peter Altmaier in connection with Schuster's criticism of Iranian-German trade relations. The Post asked: Should Germany end trade with Iran? Will the German government stop providing Euler Hermes credit insurance that protects German companies active in Iran? Is Iran's regime antisemitic? What is the view of Schuster's statement? Are the chancellor and the specific ministers questioned in agreement with Schuster that Iran's regime denies the Holocaust and is Iranian regime antisemitic?
The Post also asked the German government and its ministers about a Tuesday Focus magazine online article by US Ambassador to Germany Richard Grenell, who praised Germany companies that walked away from Iran business.
The German government has gone to great lengths to promote the Iran nuclear deal, formally known as the Joint Comprehensive Plan of Action, and business with Iran's clerical regime. Israel views the current JCPOA as an existential threat to its security. The Post asked in its queries if the German government's language about Israel's security being a part of Germany's raison d'être is empty rhetoric.
A spokesperson for Merkel referred the Post to a June 4 press conference with Prime Minister Benjamin Netanyahu and Merkel in Berlin. Merkel said at the time: "We agree that the question of Iran's regional influence is worrying, especially for Israel's security." She said the German government will use diplomacy with Iran's regime.
"Germany did not cancel this (JCPOA) agreement, and together with other European partners, we stand by it," said Merkel at the June 4 meeting. The US withdraw from the Iran deal in May because it said the agreement did not stop prevent Iran from obtaining a nuclear weapons device and end its state-sponsored terrorism. When pressed by the Post in a second email for responses, the chancellor's spokesperson declined to comment.
Grenell, wrote the Post on Friday: "The Iranian regime is the world's #1 State sponsor of terrorism. The new US sanctions are designed to bring this regime back to the table and put an end to their malign activities."
Germany's Foreign Ministry, mirroring the Chancellery, largely dodged the Post questions in its response. A ministry spokesperson said "Foreign minister [Heiko] Maas attributes high meaning to the fight against antisemitism and the honest and the unsparing working through of German history."
The spokesperson said on Monday the foreign minister will travel to Auschwitz. The Post asked Maas, who said he went into politics because of the notorious German concentration camp in Poland, if he learned the wrong lessons from the Shoah due to his support for German-Iranian trade and the atomic deal with the mullah regime. The foreign ministry sent statements from Maas condemning Holocaust denial. None of the statements referenced the Islamic Republic of Iran's repeated denial of the Holocaust.
The Foreign Ministry spokesperson also sent a Maas statement from an August interview with the Rhein Neckar Zeitung: "We haven't forgotten Iran's problematic role in the region, for instance in Syria, or the ballistic missile program. We also openly address human rights issues. But anyone hoping for a regime change shouldn't forget that whatever follows may present us with much bigger problems. Iran's isolation could boost radical and fundamentalist forces. Chaos in Iran – such as we've experienced in Iraq or Libya – would further destabilize a region which is already unsettled. No responsible politician can seriously want to see that."
Altmaier did not respond to the Post media query.
On Thursday, the German companies Deutsche Telekom, the telecommunications giant, and the state-owned railway company, Deutsche Bahn, announced they pulled the plug on their business in Iran due to US sanctions. The US embassy in Berlin tweeted: "Making the right choice for their business – Deutsche Bahn and Telekom withdraw from Iran."
The mass circulation German tabloid Bild reported in August that the Industry and Chamber of Commerce in Bonn/Rhein-Sieg in the state of North Rhine-Westphalia is slated to hold a pro-Iran business conference on September 5.
Tags jews in germany


text:
Review: Rusty Nailed by Alice Clayton
Title: Rusty Nailed
Series: Cocktail, #2
Author: Alice Clayton
Genre: New Adult, Contemporary Romance, Humor
Goodreads Synopsis:
In this sequel to Wallbanger, the second book in the Cocktail series, fan favorites Caroline and Simon negotiate the rollercoaster of their new relationship while house-sitting in San Francisco.
Playing house was never so much fun—or so confusing. With her boss on her honeymoon, Caroline's working crazy long hours to keep the interior design company running—especially since she's also the lead designer for the renovation of a gorgeous old hotel on Sausalito. So with her hotshot photographer boyfriend gallivanting all over the world for his job, she and Simon are heavy-duty into "absence makes the heart grow fonder" mode. Neither has any complaints about the great reunion sex, though! Then Simon decides he's tired of so much travelling, and he's suddenly home more. A lot more. And wanting Caroline home more, too. Though their friends' romantic lives provide plenty of welcome distraction, eventually Caroline and Simon have to sort their relationship out. Neither wants "out of sight, out of mind," but can they create their own happy mid-ground cliché?
As it states in the synopsis, Rusty Nailed is the sequel to Wallbanger. (You can find my review for Wallbanger here.) It continues from where Wallbanger left off and has the same hilarious characters.
In Rusty Nailed, Caroline and Simon are navigating their relationship. They've been together for a while now and things are going smoothly. Caroline is stepping up to take on more responsibilities at work from a honeymooning Jillian. Simon is off on his normal photography adventures. They're house-sitting for Jillian and enjoying their sexy time together.
Then, after one weekend at Simon's high school reunion, everything begins to change. Simon cuts back on traveling and convinces her to buy a house together. Caroline's working like crazy. Everything is completely overwhelming her. Tension is starting to build up and she starts to take it out on the ones she loves the most. Simon and Caroline have to work through their problems the way all couples do.
I hate to say it, but this is probably one of those sequels I could have done without. I love Caroline, Simon and all of their friends. I just didn't feel like this story did them justice. There were still a lot of funny and sexy moments, but they were overshadowed by Caroline's stress.
Caroline's stress with her job, Simon and her friends took center stage in Rusty Nailed. She was always on the edge, so close to blowing up. It kind of stressed me out reading it! I mean, she has so many amazing things in her life and all she wanted to do was complain. I wanted to go back to the fun of Wallbanger. Things did look up at the end, but I wish the entire book would have been a little less stressful.
Would I suggest reading Rusty Nailed? If you loved Wallbanger, it's worth giving a shot. It was fun seeing what was going on with everyone. And it did introduce me to a new character, Viv, who will be the main character in the next book in the series. I'm really looking forward to reading her story. She seems like a lot of fun.
Author anovelglimpsePosted on February 29, 2016 Categories Chick Lit, Contemporary Romance, Fiction, New Adult, RomanceTags Contemporary, Fiction, New Adult, Romances5 Comments on Review: Rusty Nailed by Alice Clayton
Review: Wallbanger by Alice Clayton
Title: Wallbanger
Publication Date: November 27, 2012
Publisher: Omnific Publishing
The first night after Caroline moves into her fantastic new San Francisco apartment, she realizes she's gaining an intimate knowledge of her new neighbor's nocturnal adventures. Thanks to paper-thin walls and the guy's athletic prowess, she can hear not just his bed banging against the wall but the ecstatic response of what seems (as loud night after loud night goes by) like an endless parade of women. And since Caroline is currently on a self-imposed dating hiatus, and her neighbor is clearly lethally attractive to women, she finds her fantasies keep her awake even longer than the noise. So when the wallbanging threatens to literally bounce her out of bed, Caroline, clad in sexual frustration and a pink baby-doll nightie, confronts Simon Parker, her heard-but-never-seen neighbor. The tension between them is as thick as the walls are thin, and the results just as mixed. Suddenly, Caroline is finding she may have discovered a whole new definition of neighborly…
In a delicious mix of silly and steamy, Alice Clayton dishes out a hot and hilarious tale of exasperation at first sight…
Oh my goodness. How to describe this delightful book? Hilarious is the first word that comes to mind. Sexy is the second. Add in a little bit of sweet and that basically sums up the entire book. It was perfect.
When independent Caroline moved into her new apartment, she never imagined she was going to be awoken in the middle of every night. Her new neighbor, Simon, has all sorts of extracurricular activities going on in the wee hours. Unluckily for Caroline, the walls are paper-thin. She's stuck not only listening to Simon's sexual escapades with different women, but feeling them when his bed slams against her wall. It's driving her crazy! She just wants to sleep and ignore the fact that it's been forever since she had a big "O" of her own.
When Caroline can't stand it anymore, she confronts Simon. What starts out as a hatred between the two quickly turns into a friendship–a friendship with a ton of sexual sparks. As hard as they try to keep their relationship in the friend zone, they can't deny their attraction to each other.
Wallbanger was filled with hilarious sexual innuendos, just as funny situations and cool characters. It made me laugh so many times. I would highly suggest it if you're looking for a contemporary New Adult novel to make you laugh.
Author anovelglimpsePosted on February 27, 2016 Categories Chick Lit, Contemporary Romance, Fiction, New Adult, RomanceTags Bad Boys, Best Friends, Chick Lit, Contemporary, Fiction, New Adult, Romances, Series, Travel19 Comments on Review: Wallbanger by Alice Clayton
Release Day Blast & Review: His to Guard by Elizabeth Reyes
We're so excited to be celebrating the release of Elizabeth Reyes' HIS TO GUARD – Isaiah's story is finally here! Fall in love with the forbidden in HIS TO GUARD, available now!
About HIS TO GUARD
Even if you've given up, it doesn't mean your heart ever does.
With her life in danger, Raquel Santana had just begun to blend into the sleepy little town she'd escaped to, to start over. Now her father's non-negotiable plan to protect her could ruin everything. After adamantly refusing to have someone watch over her, she finally relents.
Only nothing can prepare her for who arrives at her doorstep.
Finding out the beautiful woman Isaiah Romero is assigned to guard is someone he has a sizzling past with—someone he's never been able to forget—should've been a good thing. But when that woman is someone who a)he'd never trust with his heart again and b)completely off limits to him forever now, his loyalties are tested.
When the forbidden becomes His to Guard . . .restraint becomes a torment.
Despite the attraction he's surprised he still feels for her and the inevitable sexual tension he knows he'll have to endure, Isaiah is adamant about one thing: even unwritten rules should never be broken—until they are.
Author's note: Welcome to the Fate series! Each book in the bestselling series is a stand-alone love story following a new couple. There is no need to read the others to keep up with any of the stories. But you'll enjoy reading each title and seeing familiar faces make appearances.
Add it to your Goodreads list here!
HIS TO GUARD is available today:
Amazon US | Amazon UK | iBooks | Nook (coming soon) | Kobo | Smashwords
Get a Peek at HIS TO GUARD
Isaiah wasn't even all the way down the back door steps when he nearly gave himself whiplash doing a double take. For a moment, he had the insane idea that maybe he'd done so much thinking of Kelli in the last month he was beginning to see her face where it wasn't. It couldn't be her. Why would she be here? He peered at her, still not a hundred percent sure it was her. Then she smiled as she said something to his sister Emi, who she was sitting next to. It was definitely her and his heartbeat sped up. He'd never forget that smile. It almost made him smile as well, but he still felt too stunned.
Was it possible she was a friend of Emi's? Or was Kelli here for him? Other possibilities raced through his mind as he took a couple more steps down the porch into his uncle's backyard, where family and friends were gathered. She sat there continuing her chat with his sister. Just like everyone else in attendance, she appeared as laid back without a care in the world. Then their eyes met and locked, and her sitting up straight with a jolt said it all. She hadn't come here for him. Kelli was as stunned to see him here as he was to see her.
"Sai," Nathan said breaking Isaiah from his thoughts. "I was beginning to wonder where you were."
Isaiah glanced at him, taking the beer Nathan handed him. Before he could ask about Kelli, his brother smiled big, turning in her direction. "Check this out." He started in Kelli's direction. "There's someone here I want you to meet."
Isaiah followed him as the wheels in his head spun wildly. The tiniest of hopes that maybe she was there for him were squashed the moment their eyes had met. Kelli still hadn't taken her eyes off him and Isaiah could feel in his gut this wasn't going to be a happy reunion. He turned to his brother, who was smiling a bit too big, even as he brought his beer bottle to his lips. That's when he noticed it. The twinkle in his brother's eyes and how overdressed he was for Manny's backyard shindig. It felt almost as if things slowed and they were walking in slow motion as he turned to back to Kelli. She, too, was a bit overdressed for a backyard gathering. Were they on a date?
Overwhelmed with panic, Isaiah gulped. He felt too dazed to come up with even a single excuse why he might need to make a mad dash back into his uncles' house and back out the front door so he could get the hell out of there. More than anything the pain was back and it was even more brutal now.
Emi, who still sat with Kelli, leaned in and said something, motioning in Isaiah and Nathan's direction. Kelli's eyes widened in what appeared to be the same horror Isaiah was feeling. Emi very likely had just let Kelli in on who he was—Nathan's brother. Obviously, she hadn't had a clue whose brother she was now dating. Was it possible she might've been seeing Nathan before the weekend she spent with Isaiah just last month? Was that why, even after the unexpected amazing connection Isaiah thought they'd had, she'd blown him off like she had?
Nathan rarely brought girls to meet the family, let alone small intimate gatherings like this one where even more extended family would be . . . unless he was finally serious about one. Fuck.
What felt like the longest walk of his life finally came to an end when they reached her. Like a deer caught in headlights, Kelli continued to stare at him, appearing completely stunned.
"Sai," Nathan said with that same twinkle in his eye. "This is my girl, Kelli Santana."
About Elizabeth Reyes
Award winning, USA Today Bestselling Author, Elizabeth Reyes continues to answer her calling on a daily basis. Since releasing her debut novel FOREVER MINE (MORENO BROTHERS #1) in 2010 she has since published seven more in that series, FOREVER YOURS, SWEET SOFIE, WHEN YOU WERE MINE, ALWAYS BEEN MINE, ROMERO, MAKING YOU MINE, and TANGLED with more stories about the Moreno family and their friends to come. She's also published a second series, 5th Street which includes, NOAH, GIO, HECTOR, ABEL. FELIX. Her Moreno Brother's spinoff series FATE includes FATE, BREAKING BRANDON, SUSPICIOUS MINDS and AGAIN (Sydney's story). Her debut traditionally published title is DESERT HEAT and her latest release is her first ever three part romance serial DEFINING LOVE.
When she's not writing (which is rare) she spends as much time as she can with her husband of almost twenty-one years, two young adult children, her Great Dane, Dexter and big fat lazy cat named Tyson.
Website | Twitter | Instagram | Facebook | Pinterest | Goodreads | Newsletter
For those of you who aren't familiar with Elizabeth Reyes' novels, she is the author of several great romance series. His to Guard is the sixth book in the Fate series. The Fate series is a spin-off of The Moreno Brothers series. You don't have to read the rest of these series prior to reading His to Guard, but there are some characters and situations from the previous books.
In His to Guard, Isaiah Romero meets Kelli in a bar. After an amazing weekend together, they go their separate ways. All Isaiah has of Kelli from that weekend are steamy memories and her phone number. Too bad she won't answer his texts.
Then, out of nowhere, Isaiah runs into Kelli…at his family function…as his brother Nathan's date. (This isn't really spoiler-ish. It's mentioned in book 5, Rage.) Isaiah is devastated. He thought they shared a connection, but he won't have anything to do with his brother's woman. Luckily, Kelli soon moves and Isaiah never has to see her again.
Until he shows up for his new private security job protecting "Raquel". As hard as he tries, Isaiah can't avoid his feelings for Kelli.
I hate saying this because I love Elizabeth Reyes' writing, but His to Guard started out a little rocky for me. It just didn't flow well in the first chapter. I even went back and reread it after finishing the book to see if it was just me. It wasn't. Luckily, it was just the first chapter that felt that way. The rest of the story flowed smoothly.
Once I got past the first chapter, I really enjoyed His to Guard. Isaiah was one of Reyes' typical macho, jealous, overly protective heroes. He definitely made me swoon. Kelli was harder to read. She was a strong, intelligent woman, but I was almost as confused as Isaiah was over whether she was a liar or not. It was fun to be a little suspicious of her.
My favorite thing about His to Guard was getting to go back to scenes in Rage that were from A.J.'s view point Nathan, Kelli and Isaiah and find out what really happened. It added so much more to the story and it set up what was to come perfectly!
I don't want to give too much away, but the only part of the story I didn't care for was what happened to Isaiah toward the end of the story. It surprised me after what went on earlier in the book with his firefighter job. It just seemed like a lot to happen to one person in a book. I liked how it set up the ending (Which was PERFECT, by the way!), though.
Overall, I truly enjoyed being back in the Romero family's world. His to Guard was a solid addition to the family. I would highly recommend any of The Moreno Brothers or the Fate series book to New Adult contemporary romance readers. I can't wait to find out what is in store next for Isaiah's brother, Nathan, in Uninvited!
**I received an electronic ARC of His to Guard from the author in exchange for an honest review.
Want to win a signed copy of HIS TO GUARD? Enter via the Rafflecopter below!
Author anovelglimpsePosted on February 26, 2016 Categories Chick Lit, Contemporary Romance, Fiction, New Adult, Romance, Romantic SuspenceTags Contemporary, Crime, Family, Fiction, New Adult, Romances, Series, Suspense4 Comments on Release Day Blast & Review: His to Guard by Elizabeth Reyes
Review: The Start of Me and You by Emery Lord
Title: The Start of Me and You
Author: Emery Lord
Publisher: Bloomsbury
Genre: Young Adult, Contemporary Romance
Brimming with heartfelt relationships and authentic high-school dynamics The Start of Me and You proves that it's never too late for second chances.
It's been a year since it happened—when Paige Hancock's first boyfriend died in an accident. After shutting out the world for two years, Paige is finally ready for a second chance at high school . . . and she has a plan. First: Get her old crush, Ryan Chase, to date her—the perfect way to convince everyone she's back to normal. Next: Join a club—simple, it's high school after all. But when Ryan's sweet, nerdy cousin, Max, moves to town and recruits Paige for the Quiz Bowl team (of all things!) her perfect plan is thrown for a serious loop. Will Paige be able to face her fears and finally open herself up to the life she was meant to live?
I'm sure I'm not the first person to say this, but The Start of Me and You is the start of me and my love for Emery Lord's books. Wow. Her writing is beautiful.
The title The Start of Me and You would lead one to believe this book is a romance. It is so much more than just a romance. It is a story of friendship and helping each other through the tough times in life. The romance most definitely played second string to the friendships in this book. Those tight friendships made the romance even sweeter.
I'm honestly kind of at a loss for words with this book. I feel like I can't do it justice with this review. If you're a YA contemporary romance lover, you should definitely read this book. It's now one of my favorites. I can't wait to read more of Emery Lord's books.
Author anovelglimpsePosted on February 25, 2016 Categories Contemporary Romance, Fiction, Romance, Young AdultTags Best Friends, Coming of Age, Contemporary, Depression, Family, Fiction, High School, Popularity, Romances, YA16 Comments on Review: The Start of Me and You by Emery Lord


High Tea is a big deal in Singapore. When I first heard about it I didn't quite know what it was. I just knew that if tea was involved, I wanted in, especially after the incredible experience we had at the tea appreciation workshop in Chinatown. After my extensive research of places that offer high tea, we booked it at the W hotel in Sentosa, at their Woobar.


text:
lizwhelan —
lizwhelan
YA writer and military analyst (yep, like tanks and stuff)
Downton Abbey, Rick Santorum and women's rights
Last night my husband and I were watching Downton Abbey, season 2, episode 4.* A non-spoiler-y version of what happened: two of the male characters are on the front lines of WWI and they're about to attack enemy lines. They charge out of the trench while bullets zinged and bombs rain down. And as I watched bodies being thrown left and right, I thought: "If Rick Santorum has his way, women will never be on that front line." And that makes me so incredibly angry.
For anyone not following this particular piece of news, a couple of weeks ago Republican Presidential Candidate Rick Santorum said women shouldn't serve in combat roles. His words: "I do have concerns about women in frontline combat. I think that could be a very compromising situation where people naturally, you know, may do things that may not be in the interests of the mission because of other types of emotions that are involved…. I think that's probably not in the best interests of men, women, or the mission." (Go here to listen.) Seriously, Mr. Santorum? SERIOUSLY? Later he backtracked and said he meant men's emotions, or essentially that when the bullets start flying male soldiers are going to be so worried about female soldiers on the battle field, they will just try to save the women rather than focus on winning the battle. I don't have any way of knowing if this is true, but I have faith that the men who serve our military will do their job. And if that job involves engaging an enemy in fire, our soldiers will do it no matter the sex of the person standing beside them.
It's interesting to watch Downton Abbey and see how women are treated, to consider that a woman's right to vote was an issue at one point. I cannot imagine living in a world where I couldn't vote, where my husband and I weren't on equal footing. Thankfully, I don't have to imagine it. I can watch Downton Abbey and fall in love with the characters but know the world they live in has passed, and women have a much stronger place in society now.
But people such as Rick Santorum threaten some of our rights. I'm not saying he doesn't have a right to his own opinion on birth control and abortion and women in the military – but I don't want him to inflict his opinions on me. Rick Santorum's beliefs will set women's rights back decades. I tend to vote Republican more than Democrat, but I will wear an Obama sandwich-board if Santorum is the Republican candidate for President.
*Yes we're behind
Current Mood: infuriated
Mar. 1st, 2012 09:37 pm (UTC)
Suze W
I totally agree. America is a country based on freedom. I respect Santorum's right to believe anything he wants to. But when he tries to legislate based on his own, personal, religious beliefs, how is America different from, say, Iran?
If you don't believe in abortion, then please don't have one. If you don't believe in contraception, then please don't take any. If you don't think women shouldn't serve their county on an equal footing, then don't serve. But please don't tell me I can't do those things.
It scares me that the candidates are using their faith to try get a competitive advantage on the other. It's sickening to see faith used in such a calculating way. Chilling, even.
Desires of the Dead by Kimberly Derting
(Anonymous) : Suze W [+0]
fan girl
first drafts
lots o' links
nanorevmo
not dead
pointless posts
precipitating events
public shame
public shaming