text:
using namespace BloombergLP;

// ============================================================================
//                             TEST PLAN
// ----------------------------------------------------------------------------
//                             Overview
//                             --------
// The component under test implements a mechanism that summarize changes in
// certain statistics of the test allocator object supplied at construction.
// The main testing concerns are that the monitor captures the correct data
// when it is constructed and later compares those values to the correct
// current statistics from the test allocator.  There are many places in the
// implementation for mismatches between different statistics.  The overall
// test strategy is to create a test allocator and tracking monitors, then
// drive the allocator through scenarios that put the monitors through all
// possible states, and compared the monitor's actual actual state with its
// expected state.
//
// Global Concerns:
//: o ACCESSOR methods are declared 'const'.
//: o CREATOR pointer parameter is declared 'const'.
//: o No memory is ever allocated by this object.
//: o Precondition violations are detected in appropriate build modes.
//
// Global Assumptions:
//: o Any explicit memory allocations would use the global or default
//:   allocator.
//: o ACCESSOR methods are 'const' thread-safe.
// ----------------------------------------------------------------------------
// CREATORS
// [ 2] bslma::TestAllocatorMonitor(const bslma::TestAllocator *tA);
// [ 2] ~bslma::TestAllocatorMonitor();
//
// MANIPULATORS
// [ 4] void reset(const bslma::TestAllocator *);
//
// ACCESSORS
// [ 3] bool isInUseDown() const;
// [ 3] bool isInUseSame() const;
// [ 3] bool isInUseUp() const;
// [ 3] bool isMaxSame() const;
// [ 3] bool isMaxUp() const;
// [ 3] bool isTotalSame() const;
// [ 3] bool isTotalUp() const;
// ----------------------------------------------------------------------------
// [ 1] BREATHING TEST
// [ 5] USAGE EXAMPLE
// [ 3] CONCERN: All accessor methods are declared 'const'.
// [ *] CONCERN: There is no memory allocation from any allocator.

// ============================================================================
//                     STANDARD BSL ASSERT TEST FUNCTION
// ----------------------------------------------------------------------------

namespace {

int testStatus = 0;

void aSsErT(bool condition, const char *message, int line)
{
    if (condition) {
        printf("Error " __FILE__ "(%d): %s    (failed)\n", line, message);

        if (0 <= testStatus && testStatus <= 100) {
            ++testStatus;
        }
    }
}

}  // close unnamed namespace

// ============================================================================
//               STANDARD BSL TEST DRIVER MACRO ABBREVIATIONS
// ----------------------------------------------------------------------------

#define ASSERT       BSLS_BSLTESTUTIL_ASSERT
#define ASSERTV      BSLS_BSLTESTUTIL_ASSERTV

#define LOOP_ASSERT  BSLS_BSLTESTUTIL_LOOP_ASSERT
#define LOOP0_ASSERT BSLS_BSLTESTUTIL_LOOP0_ASSERT
#define LOOP1_ASSERT BSLS_BSLTESTUTIL_LOOP1_ASSERT
#define LOOP2_ASSERT BSLS_BSLTESTUTIL_LOOP2_ASSERT
#define LOOP3_ASSERT BSLS_BSLTESTUTIL_LOOP3_ASSERT
#define LOOP4_ASSERT BSLS_BSLTESTUTIL_LOOP4_ASSERT
#define LOOP5_ASSERT BSLS_BSLTESTUTIL_LOOP5_ASSERT
#define LOOP6_ASSERT BSLS_BSLTESTUTIL_LOOP6_ASSERT

#define Q            BSLS_BSLTESTUTIL_Q   // Quote identifier literally.
#define P            BSLS_BSLTESTUTIL_P   // Print identifier and value.
#define P_           BSLS_BSLTESTUTIL_P_  // P(X) without '\n'.
#define T_           BSLS_BSLTESTUTIL_T_  // Print a tab (w/o newline).
#define L_           BSLS_BSLTESTUTIL_L_  // current Line number

// ============================================================================
//                  NEGATIVE-TEST MACRO ABBREVIATIONS
// ----------------------------------------------------------------------------

#define ASSERT_SAFE_FAIL(expr) BSLS_ASSERTTEST_ASSERT_SAFE_FAIL(expr)
#define ASSERT_SAFE_PASS(expr) BSLS_ASSERTTEST_ASSERT_SAFE_PASS(expr)

// ============================================================================
//                     GLOBAL TYPEDEFS FOR TESTING
// ----------------------------------------------------------------------------

typedef bslma::TestAllocator        Ta;
typedef bslma::TestAllocatorMonitor Tam;

// ============================================================================
//                  NON-STANDARD TEST MACROS
// ----------------------------------------------------------------------------

#define A(X) ASSERT(X)

// ============================================================================
//                                USAGE EXAMPLE
// ----------------------------------------------------------------------------
///Usage
///-----
// This section illustrates intended usage of this component.
//
///Example 1: Standard Usage
///- - - - - - - - - - - - -
// Classes taking 'bslma_allocator' objects have many requirements (and thus,
// many testing concerns) that other classes do not.  Here we illustrate how
// 'bslma::TestAllocatorMonitor' objects (in conjunction with
// 'bslma::TestAllocator' objects) can be used in a test driver to succinctly
// address many concerns of an object's use of allocators.
//
// First, for a test subject, we introduce 'MyClass', an unconstrained
// attribute class having a single, null-terminated ascii string attribute,
// 'description'.  For the sake of brevity, 'MyClass' defines only a default
// constructor, a primary manipulator (the 'setDescription' method), and a
// basic accessor (the 'description' method).  These suffice for the purposes
// of these example.  Note that a proper attribute class would also implement
// value and copy constructors, 'operator==', an accessor for the allocator,
// and other methods.
//..
    class MyClass {
        // This unconstrained (value-semantic) attribute class has a single,
        // null-terminated ascii string attribute, 'description'.

        // DATA
        size_t            d_capacity;      // available memory
        char             *d_description_p; // string data
        bslma::Allocator *d_allocator_p;   // held, not owned

      public:
        // CREATORS
        explicit MyClass(bslma::Allocator *basicAllocator = 0);
            // Create a 'MyClass' object having the (default) attribute values:
            //..
            //  description() == ""
            //..
            // Optionally specify a 'basicAllocator' used to supply memory.  If
            // 'basicAllocator' is 0, the currently installed default allocator
            // is used.

        ~MyClass();
            // Destroy this object.

        // MANIPULATORS
        void setDescription(const char *value);
            // Set the null-terminated ascii string 'description' attribute of
            // this object to the specified 'value'.  On completion, the
            // 'description' method returns the address of a copy of the ascii
            // string at 'value'.

        // ACCESSORS
        const char *description() const;
            // Return the value of the null-terminated ascii string
            // 'description' attribute of this object.
    };

    // ========================================================================
    //                      INLINE FUNCTION DEFINITIONS
    // ========================================================================

                            // -------------
                            // class MyClass
                            // -------------

    // CREATORS
    inline
    MyClass::MyClass(bslma::Allocator *basicAllocator)
    : d_capacity(0)
    , d_description_p(0)
    , d_allocator_p(bslma::Default::allocator(basicAllocator))
    {
    }

    inline
    MyClass::~MyClass()
    {
        BSLS_ASSERT_SAFE(0 <= d_capacity);

        d_allocator_p->deallocate(d_description_p);
    }

    // MANIPULATORS
    inline
    void MyClass::setDescription(const char *value)
    {
        BSLS_ASSERT_SAFE(value);

        size_t size = strlen(value) + 1;
        if (size > d_capacity) {
            char *newMemory = (char *) d_allocator_p->allocate(size);
            d_allocator_p->deallocate(d_description_p);
            d_description_p = newMemory;
            d_capacity      = size;

        }
        memcpy(d_description_p, value, size);
    }
//..
// Notice that the implementation of the manipulator allocates/deallocates
// memory *before* updating the object.  This ordering leaves the object
// unchanged in case the allocator throws an exception (part of the strong
// exception guarantee).  This is an implementation detail, not a part
// of the contract (in this example).
//..

    // ACCESSORS
    inline
    const char *MyClass::description() const
    {
        return d_description_p ? d_description_p : "";
    }
//..

//=============================================================================
//                                MAIN PROGRAM
//-----------------------------------------------------------------------------

int main(int argc, char *argv[])
{
    int                 test = argc > 1 ? atoi(argv[1]) : 0;
    bool             verbose = argc > 2;
    bool         veryVerbose = argc > 3;
    bool     veryVeryVerbose = argc > 4;
    bool veryVeryVeryVerbose = argc > 5;

    printf("TEST " __FILE__ " CASE %d\n", test);

    // CONCERN: In no case does memory come from the global allocator.

    bslma::TestAllocator globalAllocator("global", veryVeryVeryVerbose);
    bslma::Default::setGlobalAllocator(&globalAllocator);

    // CONCERN: In no case does memory come from the default allocator.
    bslma::TestAllocator defaultAllocator("default", veryVeryVeryVerbose);
    bslma::Default::setDefaultAllocator(&defaultAllocator);

    switch (test) { case 0:
      case 5: {
        // --------------------------------------------------------------------
        // USAGE EXAMPLE
        //
        // Concerns:
        //: 1 The usage example provided in the component header file compiles,
        //:   links, and runs as shown.
        //
        // Plan:
        //: 1 Incorporate usage example from header into test driver, remove
        //:   leading comment characters, and replace 'assert' with 'ASSERT'.
        //
        // Testing:
        //   USAGE EXAMPLE
        // --------------------------------------------------------------------

        if (verbose) printf("\nUSAGE EXAMPLE"
                            "\n=============\n");

// Then, we design a test-driver for 'MyClass'.  Our allocator-related concerns
// for 'MyClass' include:
//..
// Concerns:
//: 1 Any memory allocation is from the object allocator.
//:
//: 2 Every object releases any allocated memory at destruction.
//:
//: 3 No accessor allocates any memory.
//:
//: 4 All memory allocation is exception neutral.
//:
//: 5 QoI: The default constructor allocates no memory.
//:
//: 6 QoI: When possible, memory is cached for reuse.
//..
// Notice that some of these concerns (e.g., C-5..6) are not part of the
// class's documented, contractual behavior.  These are classified as Quality
// of Implementation (QoI) concerns.
//
// Next, we define a test plan.  For example, a plan to test these concerns is:
//..
// Plan:
//: 1 Setup global and default allocators:
//:
//:   1 Create two 'bslma::TestAllocator' objects and, for each of these,
//:     create an associated 'bslma::TestAllocatorMonitor' object.
//:
//:   2 Install the two allocators as the global and default allocators.
//:
//: 2 Confirm that default construction allocates no memory: (C-5)
//:
//:   1 Construct a 'bslma::TestAllocatorMonitor' object to be used passed to
//:     test objects on their construction, and an associated
//:
//:   2 In an inner block, default construct an object of 'MyClass' using the
//:     designated "object" test allocator.
//:
//:   3 Allow the object to go out of scope (destroyed).  Confirm that no
//:     memory has been allocated from any of the allocators.
//:
//: 3 Exercise an object of 'MyClass' such that memory should be allocated, and
//:   then confirm that the object allocator (only) is used: (C-2..4,6)
//:
//:   1 In another inner block, default construct a new test object using the
//:     (as yet unused) object allocator.
//:
//:   2 Force the test object to allocate memory by setting its 'descriptor'
//:     attribute to a value whose size exceeds the size of the object itself.
//:     Confirm that the attribute was set and that memory was allocated.
//:
//:   3 Confirm the the primary manipulator (the 'setDescription' method) is
//:     exception neutral (i.e., exceptions from the allocator are propagated
//:     and no memory is leaked).  Use the
//:     'BSLMA_TESTALLOCATOR_EXCEPTION_TEST_*' macros to manage the test,
//:     and use the test allocator monitor to confirm that memory is allocated
//:     on the no-exception code path.  (C-4)
//:
//:   4 When the object is holding memory, create an additional test allocator
//:     monitor allocator for the object allocator.  Use the basic accessor
//:     (i.e., the 'description' method) to confirm that the object has the
//:     expected value.  Check this test allocator monitor to confirm that
//:     accessor allocated no memory.  (C-3)
//:
//:   5 Change the attribute to a smaller value and confirm that the current
//:     memory was reused (i.e., no memory is allocated). (C-6)
//:
//:   6 Destroy the test object by allowing it to go out of scope, and confirm
//:     that all allocations are returned.  (C-2)
//:
//: 4 Confirm that at no time were the global allocator or the default
//:   allocator were used.  (C-1)
//..
// The implementation of the plan is shown below:
//
// Then, we implement the first portion of the plan.  We create the trio of
// test allocators, their respective test allocator monitors, and install two
// of the allocators as the global and default allocators:
//..
    {
        if (verbose) printf("Setup global and default allocators\n");

        bslma::TestAllocator        ga("global",  veryVeryVeryVerbose);
        bslma::TestAllocator        da("default", veryVeryVeryVerbose);
        bslma::TestAllocatorMonitor gam(&ga);
        bslma::TestAllocatorMonitor dam(&da);

        bslma::Default::setGlobalAllocator(&ga);
        bslma::Default::setDefaultAllocatorRaw(&da);
//..
// Then, we default construct a test object using the object allocator, and
// then, immediately destroy it.  The object allocator monitor, 'oam', shows
// that the allocator was not used.
//..
        if (verbose) printf("No allocation by Default Constructor \n");

        bslma::TestAllocator        oa("object", veryVeryVeryVerbose);
        bslma::TestAllocatorMonitor oam(&oa);

        {
            MyClass obj(&oa);
            ASSERT(oam.isTotalSame()); // object allocator unused
        }
//..
// Next, we pass the (still unused) object allocator to another test object.
// This time, we coerce the object into allocating memory by setting an
// attribute.  (Setting an attribute larger than the receiving object
// means that the object cannot store the data within its own footprint and
// must allocate memory.)
//..
        if (verbose) printf("Exercise object\n");

        {
            MyClass obj(&oa);

            const char DESCRIPTION1[]="abcdefghijklmnopqrstuvwyz"
                                      "abcdefghijklmnopqrstuvwyz";
            ASSERT(sizeof(obj) < sizeof(DESCRIPTION1));

            if (veryVerbose) printf("\tPrimary Manipulator Allocates\n");

            BSLMA_TESTALLOCATOR_EXCEPTION_TEST_BEGIN(oa) {
                if (veryVeryVerbose) { T_ T_ Q(ExceptionTestBody) }

                obj.setDescription(DESCRIPTION1);
                ASSERT(oam.isTotalUp());  // object allocator was used
                ASSERT(oam.isInUseUp());  // some outstanding allocation(s)
                ASSERT(oam.isMaxUp());    // a maximum was set
            } BSLMA_TESTALLOCATOR_EXCEPTION_TEST_END
//..
// Notice, as expected, memory was allocated from object allocator.
//
// Now that the allocator has been used, we create a second monitor to capture
// the that state.  Confirm that the basic accessor (the 'description' method)
// does not use the allocator.
//..
            if (veryVerbose) printf("\tBasic Accessor does not allocate\n");

            bslma::TestAllocatorMonitor oam2(&oa); // Captures state of 'oa'
                                                   // with outstanding
                                                   // allocations.

            ASSERT(0 == strcmp(DESCRIPTION1, obj.description()));
            ASSERT(oam2.isTotalSame());  // object allocator was not used
//..
// Next, confirm that when a shorter value is assigned, the existing memory
// is reused.
//..

            obj.setDescription("a");
            ASSERT(0 == strcmp("a", obj.description()));

            ASSERT(oam2.isTotalSame());  // no allocations
//..
// Notice that there are no allocations because the object had sufficient
// capacity in previously allocated memory to store the short string.
//
// Next, as an additional test, we make the object allocate additional memory
// by setting a longer attribute: one that exceeds the capacity allocated for
// 'DESCRIPTION1'.  Use the second monitor to confirm that an allocation was
// performed.
//
// There are tests where using a test allocator monitor does not suffice.
// Our test object is currently holding memory, if we assign a value that
// exceeds its current capacity there will be two operations on the object
// allocator: the allocation of larger memory, and the deallocation of its
// current memory: in that order, as part of the strong exception guarantee.
// Thus, the maximum number of allocations should go up by one, and no more.
//
// Note that absence of memory leaks due to exceptions (the other part of the
// strong exception guarantee is confirmed during the destruction of the object
// test allocator at the end of this test, which featured exceptions.
//..
            bsls::Types::Int64 maxBeforeSet   = oa.numBlocksMax();
            const char         DESCRIPTION2[] = "abcdefghijklmnopqrstuvwyz"
                                                "abcdefghijklmnopqrstuvwyz"
                                                "abcdefghijklmnopqrstuvwyz"
                                                "abcdefghijklmnopqrstuvwyz"
                                                "abcdefghijklmnopqrstuvwyz";
            ASSERT(sizeof(DESCRIPTION1) < sizeof(DESCRIPTION2));

            obj.setDescription(DESCRIPTION2);
            ASSERT(0 == strcmp(DESCRIPTION2, obj.description()));

            ASSERT(oam2.isTotalUp());    // The object allocator used.

            ASSERT(oam2.isInUseSame());  // The outstanding block (allocation)
                                         // count unchanged (even though byte
                                         // outstanding byte count increased).

            ASSERT(oam2.isMaxUp());      // Max increased as expected, but was
                                         // did it change only by one?  The
                                         // monitor cannot answer that
                                         // question.

            bsls::Types::Int64 maxAfterSet = oa.numBlocksMax();

            ASSERT(1 == maxAfterSet - maxBeforeSet);
//..
// Notice that our test allocator monitor cannot confirm that the allocator's
// maximum increased by exactly one.  In this case, we must extract our
// statistics directly from the test allocator.
//
// Note that increment in "max" occurs only the first time through the the
// allocate/deallocate scenario in 'setDescription'.
//..
            bslma::TestAllocatorMonitor oam3(&oa);

            const char DESCRIPTION3[] = "abcdefghijklmnopqrstuvwyz"
                                        "abcdefghijklmnopqrstuvwyz"
                                        "abcdefghijklmnopqrstuvwyz"
                                        "abcdefghijklmnopqrstuvwyz"
                                        "abcdefghijklmnopqrstuvwyz"
                                        "abcdefghijklmnopqrstuvwyz"
                                        "abcdefghijklmnopqrstuvwyz"
                                        "abcdefghijklmnopqrstuvwyz"
                                        "abcdefghijklmnopqrstuvwyz";
            ASSERT(sizeof(DESCRIPTION2) < sizeof(DESCRIPTION3));

            obj.setDescription(DESCRIPTION3);
            ASSERT(0 == strcmp(DESCRIPTION3, obj.description()));

            ASSERT(oam3.isTotalUp());    // The object allocator used.

            ASSERT(oam3.isInUseSame());  // The outstanding block (allocation)
                                         // count unchanged (even though byte
                                         // outstanding byte count increased).

            ASSERT(oam3.isMaxSame());    // A repeat of the scenario for
                                         // 'DESCRIPTION2', so no change in the
                                         // allocator's maximum.
//..
// Now, we close scope and check that all object memory was deallocated
//..
        }

        if (veryVerbose) printf("\tAll memory returned object allocator\n");

        ASSERT(oam.isInUseSame());
//..
// Finally, we check that none of these operations used the default or global
// allocators.
//..
        if (verbose) printf("Global and Default allocators never used\n");

        ASSERT(gam.isTotalSame());
        ASSERT(dam.isTotalSame());
    }
//..

      } break;
      case 4: {
        // --------------------------------------------------------------------
        // TESTING: reset
        //   This case tests that the state of the monitor can be correctly
        //   updated with the 'reset' function.
        //
        // Concerns:
        //: 1 When using a single allocator, verify that 'reset' will update
        //:   the monitor's state to a state that has changed since the monitor
        //:   was created.
        //: 2 Confirm that, when an allocator other than the allocator supplied
        //:   at construction is passed to 'reset', that the state of the
        //:   monitor correctly reflects the state of the new allocator when
        //:   'reset' is called.
        //
        // Testing:
        //   void reset();
        // --------------------------------------------------------------------

        if (verbose) printf("\nTESTING: reset"
                            "\n==============\n");

        Ta oa;
        void *ptrs[10];

        Tam tam(&oa);

        ptrs[0] = oa.allocate(10);

        ASSERT(tam.isInUseUp());
        ASSERT(tam.isMaxUp());
        ASSERT(tam.isTotalUp());

        // After reset, state of 'tam' sees no allocation.

        tam.reset();

        ASSERT(tam.isInUseSame());
        ASSERT(tam.isMaxSame());
        ASSERT(tam.isTotalSame());

        // 'tam' follows new allocations by same allocator.

        ptrs[1] = oa.allocate(100);

        ASSERT(!tam.isInUseSame());
        ASSERT(!tam.isMaxSame());
        ASSERT(!tam.isTotalSame());

        // Change 'tam' to track a new allocator.

        Ta ob;

        ptrs[2] = ob.allocate(50);

        tam.reset(&ob);

        ASSERT(tam.isInUseSame());
        ASSERT(tam.isMaxSame());
        ASSERT(tam.isTotalSame());

        // 'tam' sees allocation by new allocator.

        ptrs[3] = ob.allocate(100);

        ASSERT(tam.isInUseUp());
        ASSERT(tam.isMaxUp());
        ASSERT(tam.isTotalUp());

        // 'reset' with no args updates state.

        tam.reset();

        ASSERT(tam.isInUseSame());
        ASSERT(tam.isMaxSame());
        ASSERT(tam.isTotalSame());

        // 'tam' still track 'ob'.

        ptrs[4] = ob.allocate(100);

        ASSERT(tam.isInUseUp());
        ASSERT(tam.isMaxUp());
        ASSERT(tam.isTotalUp());

        // 'tam' is ignoring 'oa'.

        tam.reset();

        ptrs[5] = oa.allocate(25);

        ASSERT(tam.isInUseSame());
        ASSERT(tam.isMaxSame());
        ASSERT(tam.isTotalSame());

        // 'tam' still tracks 'ob'.

        ptrs[6] = ob.allocate(60);

        ASSERT(tam.isInUseUp());
        ASSERT(tam.isMaxUp());
        ASSERT(tam.isTotalUp());

        // Clean up.

        oa.deallocate(ptrs[0]);
        oa.deallocate(ptrs[1]);
        ob.deallocate(ptrs[2]);
        ob.deallocate(ptrs[3]);
        ob.deallocate(ptrs[4]);
        oa.deallocate(ptrs[5]);
        ob.deallocate(ptrs[6]);
      } break;
      case 3: {
        // --------------------------------------------------------------------
        // ACCESSORS
        //   This case tests that the monitor captures the correct allocator
        //   statistics on construction and compares those to the correct
        //   allocator statistics over its lifetime.
        //
        // Concerns:
        //: 1 For any statistic tracked by the monitor (e.g., "InUse") only one
        //:   of the related methods returns 'true'.  Thus, if the 'inUseSame'
        //:   method returns 'true', then the 'inUseUp' and 'inUseDown' methods
        //:   return 'false'.
        //:
        //: 2 Any allocation(s) from the tracked allocator idempotently flip
        //:   the monitor's 'isMaxUp' and 'isTotalUp' methods return values to
        //:   'true'.
        //:
        //: 3 The "inUse" statistic tracks changes both above and below the
        //:   number of allocations recorded when the monitor was created.
        //:
        //: 4 The return values depend for each statistic depend on the number
        //:   of allocations and deallocations, never on the size (in bytes) of
        //:   the allocations.
        //:
        // Plan:
        //: 1 Always test related test values in concert.
        //:   1 For the "Max" and "Total" statistics, check both "Same" and
        //:     "Up" accessors.  Only one should be 'true'.  To express this
        //:     concisely, the standard 'ASSERT' test macro is used via the
        //:     'A', macro.
        //:   2 For the "InUse" statistics, check "Same", "Up" and "Down". one
        //:     should be 'true'.  (C-1)
        //:
        //: 2 Create a test allocator, perform several allocations (retaining
        //:   the returned memory addresses), and then create a test allocator
        //:   monitor.  Exercise the test allocator and check the return values
        //:   from the accessors.  The scenarios should include:
        //:   1 Multiple allocations and deallocations, to confirm that once
        //:     "isMaxUp' and 'isTotal' up return 'true', they remain 'true'.
        //:     (C-2)
        //:   2 Multiple of deallocations and reallocations so that the "InUse"
        //:     statistic can be observed to go from "Same" to "Down" and back.
        //:     (C-3)
        //:   3 The return of an allocation followed by another allocation of
        //:     greater size.  (C-4)
        //
        // Testing:
        //   bool isInUseDown() const;
        //   bool isInUseSame() const;
        //   bool isInUseUp() const;
        //   bool isMaxSame() const;
        //   bool isMaxUp() const;
        //   bool isTotalSame() const;
        //   bool isTotalUp() const;
        // --------------------------------------------------------------------

        if (verbose) printf("\nACCESSORS"
                            "\n=========\n");

        if (veryVerbose) printf("\tSetup Test Allocator and Monitor.\n");

        Ta ta("testAllocator", veryVeryVeryVerbose);

        bsls::Types::size_type sizeSmall  =    1;
        bsls::Types::size_type sizeMedium =   10;
        bsls::Types::size_type sizeLarge  =  100;
        bsls::Types::size_type sizeLarger = 1000;

        ASSERT(sizeSmall  < sizeMedium);
        ASSERT(sizeMedium < sizeLarge);
        ASSERT(sizeLarge  < sizeLarger);

        void *prior1 = ta.allocate(sizeSmall);
        void *prior2 = ta.allocate(sizeMedium);
        void *prior3 = ta.allocate(sizeLarge);

        Tam tam(&ta);

        if (veryVerbose) printf("\tCheck Initial State.\n");

        ASSERT( tam.isTotalSame());  // Same Total
        ASSERT(!tam.isTotalUp());

        ASSERT( tam.isInUseSame());  // Same InUse
        ASSERT(!tam.isInUseUp());
        ASSERT(!tam.isInUseDown());

        ASSERT( tam.isMaxSame());    // Same Max
        ASSERT(!tam.isMaxUp());

        if (veryVerbose) printf("\tStatics track blocks not bytes.\n");

        ta.deallocate(prior3); prior3 = 0;

        ASSERT( tam.isTotalSame());  // Same Total
        ASSERT(!tam.isTotalUp());    // deallocs not counted

        ASSERT(!tam.isInUseSame());
        ASSERT(!tam.isInUseUp());
        ASSERT( tam.isInUseDown());  // Down InUse (changed)

        ASSERT( tam.isMaxSame());    // Same Max
        ASSERT(!tam.isMaxUp());

        void *post1 = ta.allocate(sizeLarger);  // "Balances" 'prior3'.
                                                // First alloc w.r.t. monitor.

        ASSERT(!tam.isTotalSame());
        ASSERT( tam.isTotalUp());    // Up Total (changed)

        ASSERT( tam.isInUseSame());  // Same InUse (changed)
        ASSERT(!tam.isInUseUp());
        ASSERT(!tam.isInUseDown());

        ASSERT( tam.isMaxSame());    // Same Max
        ASSERT(!tam.isMaxUp());

        if (veryVerbose) printf(
                               "\t\"TotalUp\" and \"MaxUp\" remain 'true'.\n");

        void *post2 = ta.allocate(sizeMedium);

        ASSERT(!tam.isTotalSame());
        ASSERT( tam.isTotalUp());    // Up Total (changed)

        ASSERT(!tam.isInUseSame());
        ASSERT( tam.isInUseUp());    // Up InUse (changed)
        ASSERT(!tam.isInUseDown());

        ASSERT(!tam.isMaxSame());
        ASSERT( tam.isMaxUp());      // Up Max (changed)

        void *post3 = ta.allocate(sizeSmall);

        ASSERT(!tam.isTotalSame());
        ASSERT( tam.isTotalUp());    // Up Total

        ASSERT(!tam.isInUseSame());
        ASSERT( tam.isInUseUp());    // Up InUse
        ASSERT(!tam.isInUseDown());

        ASSERT(!tam.isMaxSame());
        ASSERT( tam.isMaxUp());      // Up Max

        if (veryVerbose) printf(
                          "\t\"inUse\" reported w.r.t. initial block count\n");

        ta.deallocate(post2); post2 = 0;
        ta.deallocate(post3); post3 = 0;

        ASSERT(!tam.isTotalSame());
        ASSERT( tam.isTotalUp());    // Up Total

        ASSERT( tam.isInUseSame());  // Same InUse (changed)
        ASSERT(!tam.isInUseUp());
        ASSERT(!tam.isInUseDown());

        ASSERT(!tam.isMaxSame());
        ASSERT( tam.isMaxUp());      // Up Max

        // Now deallocate 'post1', which had balanced the deallocated 'prior3'.
        ta.deallocate(post1); post1 = 0;

        ASSERT(!tam.isTotalSame());
        ASSERT( tam.isTotalUp());    // Up Total

        ASSERT(!tam.isInUseSame());
        ASSERT(!tam.isInUseUp());
        ASSERT( tam.isInUseDown());  // Down InUse

        ASSERT(!tam.isMaxSame());
        ASSERT( tam.isMaxUp());      // Up Max

        // Drive "inUse" count further below initial value.
        ta.deallocate(prior1); prior1 = 0;

        ASSERT(!tam.isTotalSame());
        ASSERT( tam.isTotalUp());    // Up Total

        ASSERT(!tam.isInUseSame());
        ASSERT(!tam.isInUseUp());
        ASSERT( tam.isInUseDown());  // Down InUse

        ASSERT(!tam.isMaxSame());
        ASSERT( tam.isMaxUp());      // Up Max

        // Drive "inUse" count even further below initial value.
        ta.deallocate(prior2); prior2 = 0;

        ASSERT(!tam.isTotalSame());
        ASSERT( tam.isTotalUp());    // Up Total

        ASSERT(!tam.isInUseSame());
        ASSERT(!tam.isInUseUp());
        ASSERT( tam.isInUseDown());  // Down InUse

        ASSERT(!tam.isMaxSame());
        ASSERT( tam.isMaxUp());      // Up Max

        // Three allocations drive the "InUse" count to initial value;
        void *final1 = ta.allocate(sizeSmall);
        void *final2 = ta.allocate(sizeSmall);
        void *final3 = ta.allocate(sizeSmall);

        ASSERT(!tam.isTotalSame());
        ASSERT( tam.isTotalUp());    // Up Total

        ASSERT( tam.isInUseSame());  // Same InUse (changed)
        ASSERT(!tam.isInUseUp());
        ASSERT(!tam.isInUseDown());

        ASSERT(!tam.isMaxSame());
        ASSERT( tam.isMaxUp());      // Up Max

        // As a final test, one more allocation drives it "Up" yet again.
        void *final4 = ta.allocate(sizeSmall);

        ASSERT(!tam.isTotalSame());
        ASSERT( tam.isTotalUp());    // Up Total

        ASSERT(!tam.isInUseSame());
        ASSERT( tam.isInUseUp());    // Up InUse (changed)
        ASSERT(!tam.isInUseDown());

        ASSERT(!tam.isMaxSame());
        ASSERT( tam.isMaxUp());      // Up Max

        if (veryVerbose) printf("Clean up.\n");

        ta.deallocate(final1); final1 = 0;
        ta.deallocate(final2); final2 = 0;
        ta.deallocate(final3); final3 = 0;
        ta.deallocate(final4); final4 = 0;

      } break;
      case 2: {
        // --------------------------------------------------------------------
        // CTOR and DTOR
        //   Ensure that we can use the constructor to create a object that
        //   monitors the intended test allocator, and use the destructor to
        //   destroy it safely.
        //
        // Concerns:
        //: 1 A monitor object is associated with the specified test allocator.
        //:
        //: 2 Object can be safely destroyed.
        //:
        //: 3 The constructor accurately captures the current state of the
        //:   tracked allocator, be it a newly created allocator or one that
        //:   has experienced arbitrary use.
        //:
        //: 4 QoI: Asserted precondition violations are detected when enabled.
        //
        // Plan:
        //: 1 Create a test allocator object and, before it handles any
        //:   allocation request, create an associated test allocator monitor
        //:   object.  Use the (as yet unproven) "same" accessors to confirm
        //:   that the monitor is the expected initial state.  Exercise the
        //:   allocator and check for the expected change of state in the the
        //:   associated monitor.  (C-1) Finally, destroy the monitor by
        //:   allowing it to go out of scope.  (C-2)
        //:
        //: 2 For each in a set of two test allocators, one newly created and
        //:   the other having experienced arbitrary use, create a tracking
        //:   test allocator monitor, exercise the test allocator and check for
        //:   the expected change in return value from the (as yet unproved)
        //:   accessors.  Note that the pointer returned in prior use, if any,
        //:   must be retained for later deallocation.
        //:    1 Confirm that the newly created monitor's "Same" allocators
        //:      all return 'true'.
        //:    2 Confirm that after an arbitrary allocation
        //:      the all the "Up" accessors return 'true'.
        //:    3 Confirm that after this recent allocation is deallocated,
        //:      the "InUseSame" accessor returns 'true' and the "Up"
        //:      accessors for "Max" and "Total" return 'true'.
        //:    4 Confirm that after deallocation of the memory allocated before
        //:      creation of the monitor, the "InUseDown" accessor returns
        //:     'true'  and the "Up" accessors for "Max" and "Total" return
        //:     'true'.
        //:
        //: 3 Verify that, in appropriate build modes, defensive checks are
        //:   triggered for invalid attribute values, but not triggered for
        //:   adjacent valid ones (using the 'BSLS_ASSERTTEST_*' macros).
        //:   (C-4)
        //
        // Testing:
        //   bslma::TestAllocatorMonitor(const bslma::TestAllocator *tA);
        //   ~bslma::TestAllocatorMonitor();
        // --------------------------------------------------------------------

        if (verbose) printf("\nCTOR & DTOR"
                            "\n===========\n");

        if (verbose) printf("\nCtor, Associated Ta, & Dtor.\n");
        {
            Ta  ta("testAllocator", veryVeryVeryVerbose);
            Tam tam(&ta);

            ASSERT(tam.isTotalSame());
            ASSERT(tam.isInUseSame());
            ASSERT(tam.isMaxSame());

            void *allocation1 = ta.allocate(1);

            ASSERT(tam.isTotalUp());
            ASSERT(tam.isInUseUp());
            ASSERT(tam.isMaxUp());

            ta.deallocate(allocation1);

            ASSERT(tam.isTotalUp());
            ASSERT(tam.isInUseSame());
            ASSERT(tam.isMaxUp());
        }

        if (verbose) printf("\nProper State Saved on Construction.\n");
        {
            Ta    ta1("ta1", veryVeryVeryVerbose);  // Do not use yet.
            Ta    ta2("ta2", veryVeryVeryVerbose);
            void *p2  = ta2.allocate((bsls::Types::size_type) &ta2 & 0xFFFF);

            const struct {
                int   d_line;
                Ta*   d_ta_p;
                void* d_mem_p;
            } DATA[] = {

              //LINE  ALLOCP  PRIOR
              //----  ------  -----
              { L_,   &ta1,   0    },
              { L_,   &ta2,   p2   }

            };
            const int NUM_DATA = sizeof DATA / sizeof *DATA;

            for (int ti = 0; ti < NUM_DATA; ++ti) {
//              const int LINE  =  DATA[ti].d_line;
                Ta&       TA    = *DATA[ti].d_ta_p;
                void     *PRIOR =  DATA[ti].d_mem_p;

                Tam tam(&TA);

                ASSERT(tam.isTotalSame());
                ASSERT(tam.isInUseSame());
                ASSERT(tam.isMaxSame());

                void *p = TA.allocate((bsls::Types::size_type) &TA & 0xFFFF);

                ASSERT(tam.isTotalUp());
                ASSERT(tam.isInUseUp());
                ASSERT(tam.isMaxUp());

                TA.deallocate(p);

                ASSERT(tam.isTotalUp());
                ASSERT(tam.isInUseSame());
                ASSERT(tam.isMaxUp());

                if (PRIOR) {
                    TA.deallocate(PRIOR);

                    ASSERT(tam.isTotalUp());
                    ASSERT(tam.isInUseDown());
                    ASSERT(tam.isMaxUp());
                }
            }
        }

        if (verbose) printf("\nNegative Testing.\n");
        {
            bsls::AssertFailureHandlerGuard hG(
                    bsls::AssertTest::failTestDriver);

            if (veryVerbose) printf("\t'constructor'\n");
            {
                Ta ta("testAllocator", veryVeryVeryVerbose);
                ASSERT_SAFE_PASS((Tam)(&ta));
                ASSERT_SAFE_FAIL(Tam((const bslma::TestAllocator *)0));
            }
        }
      } break;
      case 1: {
        // --------------------------------------------------------------------
        // BREATHING TEST
        //   This case exercises (but does not fully test) basic functionality.
        //
        // Concerns:
        //: 1 The class is sufficiently functional to enable comprehensive
        //:   testing in subsequent test cases.
        //
        // Plan:
        //: 1 Create a 'bslma::TestAllocator' object and a
        //:   'bslma::TestAllocatorMonitor' object to track the
        //:   'bslma::TestAllocator' object and a
        //: 2 Perform several allocations from and deallocations to the the
        //:   test allocator created in P-1.  Once the test allocator has been
        //:   used, create a second test allocator monitor to trace changes
        //:   from that non-initial state.  At each point, confirm that the
        //:   test allocator monitor object created in P-2 returns 'true' from
        //:   the appropriate methods.
        //: 3 Destroy the test allocator monitors.
        //
        // Testing:
        //   BREATHING TEST
        // --------------------------------------------------------------------

        if (verbose) printf("\nBREATHING TEST"
                            "\n==============\n");

        bslma::TestAllocator        ta("test allocator", veryVeryVeryVerbose);
        bslma::TestAllocatorMonitor tamA(&ta);

        ASSERT(tamA.isTotalSame());
        ASSERT(tamA.isInUseSame());
        ASSERT(tamA.isMaxSame());

        void *allocation1 = ta.allocate(1);

        bslma::TestAllocatorMonitor tamB(&ta);

        ASSERT(tamA.isTotalUp());   ASSERT(tamB.isTotalSame());
        ASSERT(tamA.isInUseUp());   ASSERT(tamB.isInUseSame());
        ASSERT(tamA.isMaxUp());     ASSERT(tamB.isMaxSame());

        void *allocation2 = ta.allocate(2);

        ASSERT(tamA.isTotalUp());   ASSERT(tamB.isTotalUp());
        ASSERT(tamA.isInUseUp());   ASSERT(tamB.isInUseUp());
        ASSERT(tamA.isMaxUp());     ASSERT(tamB.isMaxUp());

        ta.deallocate(allocation2);

        ASSERT(tamA.isTotalUp());   ASSERT(tamB.isTotalUp());
        ASSERT(tamA.isInUseUp());   ASSERT(tamB.isInUseSame());
        ASSERT(tamA.isMaxUp());     ASSERT(tamB.isMaxUp());

        ta.deallocate(allocation1);

        ASSERT(tamA.isTotalUp());   ASSERT(tamB.isTotalUp());
        ASSERT(tamA.isInUseSame()); ASSERT(tamB.isInUseDown());
        ASSERT(tamA.isMaxUp());     ASSERT(tamB.isMaxUp());

      } break;
      default: {
        fprintf(stderr, "WARNING: CASE `%d' NOT FOUND.\n", test);
        testStatus = -1;
      }
    }

    // CONCERN: In no case does memory come from the global allocator.

    LOOP_ASSERT(globalAllocator.numBlocksTotal(),
                0 == globalAllocator.numBlocksTotal());

    // CONCERN: In no case does memory come from the default allocator.

    LOOP_ASSERT(defaultAllocator.numBlocksTotal(),
                0 == defaultAllocator.numBlocksTotal());

    if (testStatus > 0) {
        fprintf(stderr, "Error, non-zero test status = %d.\n", testStatus);
    }

    return testStatus;
}

// ----------------------------------------------------------------------------
// Copyright 2013 Bloomberg Finance L.P.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------- END-OF-FILE ----------------------------------

redpajama_set_name: RedPajamaGithub


This recipe can be used to stuff your turkey, to fill sausage rolls, or simply pressed into burger shapes and pan fried.
Place all the ingredients in a food processor and process briefly. The sausagemeat is then ready for use in your recipe.
Alternatively, grate the bread, finely chop the onion and sage, and roughly chop the apricots. Grate the chocolate finely. Place all the ingredients in a bowl and mix well.
You may wish to add a little black pepper to the mixture; it is not usually necessary to add salt as there is usually plenty in the sausagemeat. If you want to shape the sausagemeat, a little flour on the worksurface and your hands will stop it sticking.
Follow the recipe above, but instead of sausagemeat, substitute 250g of a mixture of cooked kidney beans or cooked chick peas, chopped mushrooms and chopped nuts, season to taste and then add enough of an egg to hold the stuffing together. You could also add a few cranberries or prunes as well. The exact mixture does not matter greatly so have fun experimenting!


text:
Marching Band Observation
71 Words1 Page
I would participate in the university's marching band. I have found a positive environment and happiness in marching band, and I could never see myself quitting. I find that whenever I'm having a bad day, marching band rehearsal always puts a smile on my face. During a football game, or a simple 3 hour practice, I can forget about my outside problems and focus on what I love to do: band.
Marching Band Analysis
Snapping reeds and clamming notes, Stealing all the trumpet quotes. Where's the tuba? Here they wait Our saxophones are two hours late.
Essay On Color Guard
Color Guards' Amazing History! People know that during half time at football games two bands play and in the band there are the color guard. No one ever stops to think about them and how they came to be. The fans just know that they are there most likely to just entertain them. They never stop to think twice as to how color guard was made and the big meaning behind it all.
Pros Of Marching Band
A year ago, I signed a contract with Hillsborough marching band but I never knew what I was signing up for. The place I feel at ease is marching band practice. This is because the people there are nice. I even won an award for being the most improved rookie. Although it is tiresome I have to constantly spend around 3 hours practicing marching and playing my music every Mondays and Tuesday during summer and fall, the adrenaline rush made me more focused and on task.
The Influence Of Football In My Life
My artifact that reminds me most of home is the sport of football. It was something that brought my family together and played a very large part in my life because of how long I played it. It allowed me to grow closer to my older brother as well as my father. From playing football in the front yard with each other to watching it together every weekend. These experiences shaped me into the person I am today.
Personal Narrative: Marching Band In High School
If I could continue anything i did in high school I would join the michigan marching band. Marching band in high school has been a way for me to meet new people. One of my favorite marching bands for me too watch has always been the Michigan band I would love too take part in it. One of my requirements for school has been a marching band or a pep band and a large marching band like Michigan's would be very preferable. Overall if i could continue anything it would marching band because it is a passion of
Louis Armstrong Narrative
The band was invited to participate in Southern University's homecoming parade and attend their homecoming game. Cameron and I are both in the band; he is trumpet player and I was a color guard member. I was extremely excited to go. This was going to be my trip of firsts.
Remember The Titans Analysis
While the TItans were in their locker room before their game, they would warm up by singing and getting focused. After they would do this, they would play very well on the field and seem very focused on winning. During the State Championship Game, while Bertier was in the hospital paralyzed, the Titans sang to distract themselves from their captain not being able to play, and just get focused on doing good for themselves. This helped them focus better, and overall be good team players. All in all, music was an inspirational force for the team, because it got them focused, and encouraged to play better on the
Personal Narrative Essay: My Favorite Place In The World
Still admiring the constellation, I took a deep breath of cool mountain air and started walking. Under the dim light, I could see the faint features of my cabin mates and my counselors. Even though it was only 3am, I wasn't tired at all. I was ready to make the two and a half mile walk to my favorite place in the whole world. As we entered the forest, the ground turned from grass to gravel, and the moonlight barely leaked through the dense trees.
Personal Narrative: My Life As A Band
Band has been my happy place and has always been there for me when I had my ups and downs. I can always count on band and the people in band. There have been times in my life where things were falling apart and band was always there to keep me together. I started playing the clarinet in sixth grade. I had tried different sports; I didn't feel connected to the team, but when I started doing band I felt how every person matters and how they play affects the whole group and you don't want to let people down.
Personal Narrative: Defining Moments In BMT
However, with my platoon mates pushing on one another, I was also motivated to strive harder and push on to complete the Route March. When I stepped into the parade square after the last 3km, I felt very contented. I hope that the 24km Route March on 10/11/2015 would go very smoothly like the 16km Route March with nobody falling out. And I hope that everyone would be at the floating platform for our POP! Never did I actually think that the 17 weeks would pass by in a blink of an eye and I would say that I actually enjoyed the whole of BMT and the PTP, together with my buddies, section mates, platoon mates, company mates and last but not least, Leopard Company Commanders.
Marching Band Concert Review
Overall, one of my favorite aspects of the marching bands was the crazy dynamics in a show. A really good show will move you and make you feel like you are going through the motions of the song while a worse show will just be a song that the band is playing. I never thought about how influential the dynamics of a song could be. The movement of the dynamics mixed with the movements of the band really got me into the bands more than I think I ever have before. I couldn't believe that some of these bands were only high school students.
Mighty Trojan Marching Band Research Paper
Rebekah Woods, a third year front ensemble member and eleventh grader quoted the movie Drumline, saying, "One band, One sound." Band members have similar mannerisms, such as walking in time when not in band and making simple songs or beats outside of practice. Around each other, band members lose most inhibitions they have at school and enjoy the presence of other band members before practice. The 2015 Mighty Trojan Marching Band
Henley High Band Research Paper
It all started at McKinley High School. Kendall Aaron, Carlton Phillips, and Corey Thomas they all was in the band for all 4 years. They enjoyed band and it was their main focus after their grades. McKinley High band was so important to them, they took it serious as it was reflecting their grades. They were so excellent in the band that they were offered 3 scholarships from 3 different schools.
Wissahickon Marching Unit Reflection
Unanticipated and lasting character changes resulted from my performing with the Wissahickon Marching Unit. Humility and coping with failure were commonplace lessons in my first year, as I joined amidst a "rebuilding" season with rookies comprising more than two-thirds of the band. Though frustrating considering the quantity of time I had committed with little external validation, the end result was resilience, an unwavering dedication, and greater patience.
Is Marching Band A Sport
Marching Band as a Sport When the average person thinks of sports they think of football, soccer, baseball, hockey, or basketball. Yes those are all great sports, but what about all the others that aren 't considered sports, like marching band? Marching band should be considered a sport for many reasons. Marching band fits all the definitions for a sport (and it follows them to perfection). There are many statistics to reveal marching band is a sport and how hard the members work.
More about Marching Band Observation

redpajama_set_name: RedPajamaCommonCrawl


- Civil society: de- and re-politiciization of social movements and the impact of international aid.
Some published material dealing with a sociological analysis of the Palestinian ruling elites since the Oslo agreements can be found in LIMES (2007, in Italian), and in a 2008 article of A Contrario ( in French).
He recently published an Op-Ed on the stand off between Fatah and Hamas, published in the Fall issue of The International Spectator (2009). He argues that even if Israeli Operation Cast Lead seemed at first to have driven a decisive wedge in the prospect of resumed unity between Fatah and Hamas because of President Abbas' mild condemnation of the Israeli operation in December 2008, both main Palestinian political factions decided to launch a process of reconciliation under the aegis of the Egyptian government. The two main stumbling blocks on the road of unity remain, he argues, a formal agreement in terms of institutional power sharing and the question of resources linked to security management in the Territories.
Within the framework of the Joint European-Palestinian Research Centre (PAHITH - a think tank and research centre created by young scholars of Palestine and Europe) in 2006), Benoit Challand and his colleagues are writting short political reports on the most pressing issues that Palestinians are facing during the current Intifada.


text:
December 8, 2018 by Graeme MacKay
Editorial Cartoon by Graeme MacKay, The Hamilton Spectator – Saturday December 1, 2018
Doug Ford's environmental plan falls woefully short
Some people argue quibbling over semantics — the meaning of a word, phrase, sentence, or text — is trivial. Not always.
Consider the Ontario government's just-announced plan to fight climate change. Environment Minister Rod Phillips says the plan doesn't include a carbon tax.
Ontario's environment watchdog — a position the government has announced is being cut — says the province's plan will impose a carbon tax on industry despite government assurances it would not do so. She argues, credibly, that introducing mandatory standards on Ontario's largest polluters does, in fact, put a price on carbon. Just not for everyone.
Environmental Commissioner Dianne Saxe is right, but don't expect the government to admit that. Doug Ford will never admit to putting a price on carbon for industrial polluters, any more than he will admit his plan falls short of what is really needed. But both things are true.
No one is going to argue against tougher regulations for big polluters. But it's worth remembering that all of the province's worst polluters don't produce as many harmful emissions as comes from buildings and transportation. And those sectors are not even noted in the plan.
Another key feature of the Ford plan offers incentives to the private sector to help Ontario meet its goals. How will those incentives be funded? By the public treasury, of course. So no matter how you slice it, taxpayers are funding industry that wants to become more energy efficient. Perhaps there's nothing wrong with that. But even the most staunch conservative cannot deny that this amounts to taxpayers investing in greenhouse gas reduction. As they would, say, with a carbon tax.
The Ford government says this plan means the province will meet GHG reduction targets agreed upon by world leaders in the Paris Accord. Under that international agreement, Canada has committed to reducing emissions by 30 per cent of 2005 levels by 2030. Thanks to the efforts of the previous government in eliminating coal-fired generation, Ontario has already reduced emissions by 22 per cent. So if this plan could achieve an additional eight per cent reduction, Ford and friends could fairly claim Ontario has done its part, although in large part due to the previous Liberal government.
Here's the rub for Ontario taxpayers. Federal Environment Minister Catherine McKenna is not impressed. She called the Ford plan "backwards" and suggested Ottawa will push ahead with plans to enforce a carbon tax.
Ford still insists he and other conservative premiers will fight the federal tax, even though constitutional legal experts say there is no chance they can win in court. Meanwhile, Ottawa has plans to send rebates to individual Ontario taxpayers drawn from carbon tax revenue, a move polling suggests will lesson or even defeat public resistance to the new tax.
So Ford spends $300 million on a no-win court battle. Ontarians get a carbon tax in addition to industry incentives, which taxpayers are also paying for. And don't forget that Ford's killing of the cap-and-trade program has cost, so far, $3.5 billion in public investment for infrastructure like schools.
Ford says he will ensure Trudeau is defeated in the next election. But the leader doing the most damage to the province and its taxpayers right now isn't Trudeau. It's Ford himself. (Source: Hamilton Spectator Editorial)
Posted in: Canada, Ontario	Tagged: carbon, climate change, dinosaur, Doug Ford, environment, Ontario, Price on Carbon, progress
September 14, 2016 by Graeme MacKay
Editorial Cartoon by Graeme MacKay, The Hamilton Spectator – Thursday September 15, 2016
Canada Post needs 'transformational changes' to be viable, task force finds
A task force studying the national mail carrier says Canada Post isn't financially self-sustainable under its current structure.
And it says transformational changes are needed to prevent taxpayers from having to prop it up.
The four-member panel issued a discussion paper Monday that suggests a number of ways the letter carrier can turn its business model around, including distributing legalized marijuana and cutting back on door-to-door delivery in favour of community mailboxes — an initiative launched by the Conservative government in 2013 but scrapped by the current Liberal government.
The report also suggested charging fees to those who opt to have mail delivered directly to their door.
A House of Commons committee has scheduled cross-country hearings this month to hear Canadians' views of what they want from the postal service. The ideas contained in the discussion paper are meant as a launching pad for those public consultations.
The task force says a significant decline in letter mail deliveries is sapping revenues at Canada Post, a loss that has yet to be made up from its growing parcel and ad mail businesses.
Canada Post applauded the task force findings, saying it reaffirms the challenges faced by the Crown corporation. (Source: CBC News)
Posted in: Canada	Tagged: Canada, Canada Post, debt, dinosaur, Parliament, propped up, relic, subsidy
By Graeme MacKay, Editorial Cartoonist, The Hamilton Spectator – Thursday December 3, 2015
Rona Ambrose reaches out to former Tory prime ministers for advice on leadership race
Interim Conservative leader Rona Ambrose has been seeking advice from former Tory prime ministers, who told her the party should be making sure Progressive Conservatives feel welcome.
In the past few weeks, Ambrose has spoken to Brian Mulroney, Joe Clark and Kim Campbell, and to former Reform Party leader Preston Manning. All agreed that the party shouldn't rush a leadership race, she said in an interview.
The party's governing body is on the verge of forming a leadership committee, and making initial decisions about the time frame for the race. An internal consensus has emerged that the vote not happen for some time – 18 months from now or longer, Ambrose said.
"It's been a decade of the Conservative Party of Canada but we have a long legacy of conservatism in our conservative movement, and we're moving forward for the first time in a decade into a leadership race," she said.
"We want to get it right, and I've sought their advice on how to make sure we do that. The consensus was very clear, that we should take our time…"
She said Mulroney and Clark in particular emphasized that the party should signal that it is open to all types of conservatives – a direct reference to Progressive Conservatives who might have felt alienated in recent years.
Former leader Stephen Harper had a mercurial relationship with Mulroney, and little contact with Clark, who had opposed the merger of the Canadian Alliance and Progressive Conservative parties.
" 1/8 The advice 3/8 was, 'Make sure that you open up the welcome, or open up your arms to those who may have felt that they weren't part of the party in the past, or felt they were on the sidelines, but feel that they're conservative and want to be a part of the party and want to be back in the middle of things,"' said Ambrose.
Ambrose added that she and Campbell spoke at length about the experience of being a woman at the helm of the party. She chatted with Mulroney about relations with caucus members. Mulroney was well known for remembering and marking important moments in the lives of his MPs and friends. (CTV News)
Posted in: Canada	Tagged: Brian Mulroney, Canada, Conservative, dinosaur, Joe Clark, Kim Campbell, party, Progressive, renewal, Rona Ambrse, social
February 4, 2015 by Graeme MacKay
Editorial Cartoon by Graeme MacKay, The Hamilton Spectator – Thursday, February 5, 2015
City struggling to keep the streets clear of snow
Hamilton is pleading with storm-swamped homeowners to stop illegally shovelling snow back onto cleared streets and sidewalks — but some residents say city plows are to blame.
Iraq: January 4, 2003
The city fielded 70 snow-clearing complaints and counting in the 24 hours after Monday's storm that left residents up to their knees. Many stemmed from snow pushed back onto previously cleared streets, either by commercial contractors or frustrated homeowners.
"It's a big problem for us, especially where driveways are being cleared onto the roadway," said winter control manager Bob Paul. He said local street clearing — and in some cases, re-clearing — will continue through Wednesday.
City bylaw officers are cracking down on snow dumping "problem areas" like the North End and west lower city, said enforcement manager Kim Coombs, noting residents risk a $105 fine for dumping snow back in the street.
But outraged residents on the east Mountain say the city's own plows are to blame.
Sarah Nunes was part of a neighbourhood effort to quickly clear all sidewalks along East 35th Street after Monday's storm. But later that night, snow banks on the street were shoved onto those painstakingly cleared walkways.
"We're talking piles three times higher than our snowblowers and hard as a rock," she said. "What are we supposed to do about that?"
Ward Councillor Tom Jackson said he visited several streets in his ward that suffered similar treatment, including East 31st, Virginia Court and Seventh Avenue.
"Some operator showed a reckless disregard," said Jackson, who asked public works to investigate and send city equipment to clean up the mess. "It's totally unfair, totally an insult to ask residents to deal with that."
Paul said the city had complaints about a particular operator but added the plowing problem was "corrected" and represented the exception, rather than the rule. (Source: Hamilton Spectator)
Posted in: Canada, Hamilton, Lifestyle, Ontario	Tagged: Climate, dinosaur, first world, Hamilton, plow, plows, shovelling, snow, weather, Winter
Editorial Cartoon by Graeme MacKay, The Hamilton Spectator – Friday December 8, 2006
PM: Same-sex issue closed
The last major threat to same-sex marriage rights in Canada was soundly defeated in the House of Commons today, with MPs sending the message that they don't want to revisit the emotional, divisive debate.
Prime Minister Stephen Harper said he heard the message and will respect it.
"We made a promise to have a free vote on this issue, we kept that promise, and obviously the vote was decisive and obviously we'll accept the democratic result of the people's representatives," Harper said.
The question put to MPs was whether they wanted to see legislation drafted to reinstate the traditional definition of marriage, while respecting the existing marriages of gays and lesbians.
That Conservative motion failed 175-123.
In the tense Commons, MPs watched each other carefully to see how the other would vote. Some Liberals cheered as prominent Tories voted to let sleeping dogs lie. Some Conservatives applauded Liberals who did the opposite. (Source: Hamilton Spectator)
Posted in: Canada	Tagged: Canada, civil union, dinosaur, gay marriage, marriage, same-sex marriage


text:
Nesivos Shalom
The Burning Bush: Defining the Jewish Core
By Rabbi Yitzchok Adlerstein | Series: Nesivos Shalom | Level: Advanced
The Burning Bush: Defining the Jewish Core1
The image of the burning bush vividly imprints itself upon us as a symbol of Moshe's mission. Encountering it launches his career. Clearly, its symbolism expresses something powerful about the job and Moshe's relationship to it.
On one level, we understand that the simplicity and inelegance of a wild bush in the wilderness speaks of a Jewish people without merit and without accomplishment. It warns Moshe of the urgency of responding to the brilliant fire of Hashem's presence, still very much attached to the bush, but on the cusp of slipping away, if His people move from the 49th to the dreaded 50th level of degradation.
This approach, however, begs the question. Why did G-d wait for the last moment, only then to move speedily? The hurriedness of the redemption is a repeated theme of the Exodus. The abysmal level to which the Jews had sunk necessitated the hurriedness. But HKBH could have moved to redeem them somewhat earlier, and the pace of redemption could have slowed! Why did He wait?
Possibly, Hashem wished to allude to the familiar analogy of the "kernel of vitality." A seed sprouts only when most of its case has decayed and decomposed, leaving behind the bare germ from which new life continues. Precisely when that germ is situated between the poles of death and new life, precisely then the new cycle begins. The burning bush symbolizes a Jewish people stripped of everything, retaining only some invisible permanent essence. Moshe sees the bush, and reacts in amazement. Can the Jewish people endure the lowest levels, and still survive? Hashem shows him the paradox of Jewish survival – that we begin anew after severe spiritual setbacks. Moreover, the process of rebirth not only can take place after reaching some nadir, it is exactly from that point that new growth is expected. The Exodus had to be hurried because we could not survive long on the 49th level; it could not have occurred any earlier, however, because the optimum time for renewal comes when only the bare essence is left, and all else has fallen away.
It is not difficult to elaborate upon this kernel of vitality, to establish its identity. Chazal tell us that we were redeemed from Egypt in the merit of emunah. Belief in Hakadosh Baruch Hu remains in place when we would have expected it to wither and die. It can remain in force despite being surrounded by the worst tumah. Moshe asked, "What if they do not believe me?" He contemplated their state, and could not understand how a vital kernel of belief remained in such inhospitable conditions. He could not detect a core belief strong enough to spawn a spiritual rebirth. At the burning bush, however, Hashem thundered instructions to him, "Remove your shoes from your feet! The place you stand upon is holy!" The holiness He called to Moshe's attention was that of the Jewish people. It was alive and well, despite their spiritual downturn. (As R. Noach of Lechovitch taught, a Jew who begins to question his emunah should have faith that he has faith! When he fails to feel the strength of that faith within, he should assure himself that the faith is there, but remains hidden and obscured. The faith is planted firmly in his soul by virtue of his relationship with the avos who vouchsafed it to him.)
We can suggest another form of the vital kernel – a Jew's refusal to accept his spiritual condition. Growth comes when the soul screams out against its circumstances, unwilling to accept a life that is not a life, determined not to give in to its apparent reality but to struggle to fight it off. Think of people gathered around a well into which someone fell. So long as they hear plaintive cries from the bottom, they know that the unfortunate victim is still alive and wishes to emerge. Should they hear nothing, they fear that the impact caused the victim to lose consciousness – or worse. A soul that still recognizes the Divine is pained by what it longs for, and demands to be raised up. This obstinacy is itself a form of the vital kernel, and the source of much growth.
Hashem tells Moshe, "Re'oh ra-isi, I have surely seen the affliction of my people."2 A medrash3 picks up on the doubling of the verb, re'oh ra-isi. "You, Moshe, see only one seeing; I, however, see two seeings." Man can only observe the external; G-d sees the external but sees the innermost recesses as well. Despite their sinking to the 49th level of depravity, Hashem can still detect their hearts crying out against that very position. This is one way of looking at Hashem's command to Moshe to remove his shoes in deference to the sanctity of the place. Moshe is told to remove the externalities that mask the qualities of the inner person; when he does, he will discover that the innermost part of the Jewish soul remains terra sancta, holy turf.
The seforim ha-kedoshim emphasize that not only were the Jews enslaved and imprisoned in Egypt, but their very speech was held captive as well. They did not have words with which to address Hashem. They could muster nothing more than anguished groans, which he recognized to come from the spiritual pain of refusing to accept their debased state. This was the beginning of their rebirth.
The burning bush might be approached from a very different direction, yielding different lessons important to Moshe at his initiation as a leader. The fire may symbolize the tumah of Egypt – a tumah which is itself symbolic of the worst spiritual degradation known at the time. One would expect the bush to be no match for the consumptive powers of the raging flame, but the bush stubbornly holds out. Where one would predict that any Jewish holiness would have been lost to the Egyptian tumah that Bnei Yisrael took part in, their kedushah did not vanish. Moshe is amazed by the incongruity. Hashem instructs him to take off his shoes in deference to a kedushah that he, Moshe, was unaware of. The ground beneath him was holy, representing the inherent kedushah of Jewishness, misunderstood and underappreciated.
Many have said that it is impossible to convey to a non-Jew what it means to be Jewish. Rav Baruch of Mezhbozh corrected this. It is impossible, he warned, to convey even to a Jew what it means to be Jewish! Were a Jew to understand the power of that kedushah, it would be impossible for him ever to sin. When he does sin, he remains, despite his shortcoming, strongly attached to the G-d Who loves him.
Chazal tell us that at no time did the world demonstrate its purpose and worth more than the day Shir HaShirim was given. To be sure, there were more momentous moments in human history, accompanied by great miracles and wonders: the Exodus, the splitting of the Sea, the giving of the Torah at Sinai. Shir HaShirim, however, articulates a message that is not explicit in the other events: the great love Hashem has for His people, and the love they have for Him.
The Baal Shem Tov's contribution was meant to hasten the coming of Mashiach, and to bring the world to a state of tikun. In such a state, the reciprocal love between Hashem and Israel is brought to full flower. The way to that great day is also through love, which hastens the redemption and contributes to the final tikun.
1 Based on Nesivos Shalom, pgs.31-35
2 Shemos 3:7
3 Shemos Rabbah 3:2
Text Copyright © 2007 by Rabbi Yitzchok Adlerstein and Torah.org
Remembering the Exodus—Hard to Swallow!
Design and Implementation
What's in it for Him?
Exodus from Stuck-ness
Moshe Rabeinu Learns Levi's Lesson
International Debt
From Universal to Particular
To Fix Our Attention
The Right Side of the Line
Gedalia Litke (5766)
You Want to Lead?
Bring it on! Starring Pharaoh & Bruce Almighty
Jon Erlbaum (5779)
A Real Human Being
Strangers in our Midst?
Rabbi Osher Chaim Levene (5768)
Patient and Personal


Created as a custom design, this beautiful bracelet is one of my personal favourites.
Yes, you can choose to have a sterling silver engraved heart instead of the name in alphabet beads. This is perfect for those babies with longer names.


Interesting timing. I just found a early 90s bottle of Chanel No 5 EdP at the local flea market, also reworked by Jacques Polge a number of years before he got his hands on Cristalle. Compared to Chanel No 5 EdT, it has the same ripened, fattened-up quality you describe in the Cristalle EdP. I actually prefer the EdT versions of both, although I can see how his tweaking was stylistically timely. There is something a little "yellow" and oily, I find, in the EdPs which takes away from their original elegance and cerebral quality. Kind of like the difference between a lean, complex, mineral-y Chablis and a buttery New World, American-oak-aged Chardonnay.
So nice to be able to join you once again in this beautiful world of scent, N. You enhance the whole experience, you really do.
So does this. I know EXACTLY what you mean about the oily, buttery quality!
I miss Cristalle. I need it. It's exactly what I need now, cool, crisp, refined.
Yes, I have seen some vintage bottles in recycle shops recently and wondered if I needed it or not. I adore it, but more on my female friends, somehow.
Love Cristalle, the edt much more than the edp though. Wish I had one of those vintage bottles of it right about now.
So sorry about the horrible turn of events in GB, how utterly disheartening and depressing.
Please read the comment of an Europenne malcontente! In the other bigger version of Cristalle. I don't want to sound like Jesaja preaching doom, but Euroeanism is stifling our everyday life and economics. And Brexit makes the EU rethink their strategism and values. In itself a good thing. Since the Euro life has been more than halved down here. . The schisma between very rich and poor has been widening. Europe kills the everyday life of the little people and the big internationals come marching in .. And not like saints! A meagre Anglodownsized diet is not the same as English or American culture. Universal sausage is not the same as an english breakfast or a real hamburger! There is a difference between feeling like an European, fine by me, and being lived by it, body and soul, not to say devoured … In a very tyrannical and capitalist way!!! The ideal is a long long long way removed from brutal reality. And I don't see improvement, rather narrowing down paths and feeding the extrmists politics.


 Allows address spaces to be shared by several processes.
 Allows for more efficient process creation.
 Bring a page into memory only when it is needed.
 Initially valid–invalid but is set to 0 on all entries.
 Example of a page table snapshot.
table entry is 0  page fault.
 Invalid reference  abort.
 Just not in memory.
 Swap page into frame.
 Reset tables, validation bit = 1.
What happens if there is no free frame?
really in use, swap it out.
minimum number of page faults.
 Same page may be brought into memory several times.
fault service routine to include page replacement.
transfers – only modified pages are written to disk.
be provided on a smaller physical memory.
1. Find the location of the desired page on disk.
- If there is a free frame, use it.
algorithm to select a victim frame.
3. Read the desired page into the (newly) free frame.
Update the page and frame tables.
 Want lowest page-fault rate.
number of page faults on that string.
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.
 How do you know this?
 Used for measuring how well your algorithm performs.
determine which are to change.
 When page is referenced bit set to 1.
 If page to be replaced (in clock order) has reference bit = 1.
 set reference bit 0.
 leave page in memory.
been made to each page.
 LFU Algorithm: replaces page with smallest count.
has yet to be used.
 Each process needs minimum number of pages.
 instruction is 6 bytes, might span 2 pages.
 2 pages to handle from.
 2 pages to handle to.
 Two major allocation schemes.
 select for replacement one of its frames.
own set of allocated frames.
 another process added to the system.
 if  too small will not encompass entire locality.
 if  too large will encompass several localities.
 if  =   will encompass entire program.
 Policy if D > m, then suspend one of the processes.
 Timer interrupts after every 5000 time units.
 Keep in memory 2 bits for each page.
 If one of the bits in memory = 1  page in working set.
 Why is this not completely accurate?
 Establish "acceptable" page-fault rate.
 If actual rate too low, process loses frame.
 If actual rate too high, process gains frame.


text:
Advance Online /
Moored observations of turbulent mixing events in deep Lake Garda, Italy
Mixing events in deep Lake Garda
Hans van Haren | hans.van.haren@nioz.nl	Royal Netherlands Institute for Sea Research (NIOZ), Den Burg, Netherlands. https://orcid.org/0000-0001-8041-8121
Sebastiano Piccolroaz Institute for Marine and Atmospheric Research Utrecht (IMAU), Utrecht University, Utrecht, Netherlands. https://orcid.org/0000-0003-1796-7624
Marina Amadori Department of Civil, Environmental, and Mechanical Engineering, University of Trento, Italy. https://orcid.org/0000-0001-8810-8478
Marco Toffolon Department of Civil, Environmental, and Mechanical Engineering, University of Trento, Italy. https://orcid.org/0000-0001-6825-7070
Henk A. Dijkstra Institute for Marine and Atmospheric Research Utrecht (IMAU), Utrecht University, Utrecht, Netherlands. https://orcid.org/0000-0001-5817-7675
Deep water circulation and mixing processes are responsible for the transport of matter, nutrients and pollutants in deep lakes. Nevertheless, detailed continuous observations are rarely available. To overcome some of these deficiencies and with the aim of improving our understanding of deep mixing processes, a dedicated yearlong mooring comprising 100 high-resolution temperature sensors and a single current meter were located in the deeper half of the 344 m deepest point of the subalpine Lake Garda, Italy. The observations show peaks and calms of turbulent exchange, besides ubiquitous internal wave activity. In late winter, northerly winds activate episodic deep convective overturning, the dense water being subsequently advected along the lake-floor. Besides deep convection, such winds also set-up seiches and inertial waves that are associated with about 100 times larger turbulence dissipation rates than that by semidiurnal internal wave breaking observed in summer. In the lower 60 m above the lake-floor, however, the average turbulence dissipation rate is approximately constant in value year-around, being about 10 times larger than open-ocean values, except during deep convection episodes.
Sebastiano Piccolroaz, Institute for Marine and Atmospheric Research Utrecht (IMAU), Utrecht University, Utrecht
Present address: École Polytechnique Fédérale de Lausanne, Physics of Aquatic Systems Laboratory, Margaretha Kamprad Chair, APHYS GR A2 412, 1015 Lausanne, Switzerland
Marina Amadori, Department of Civil, Environmental, and Mechanical Engineering, University of Trento
Present address: Institute for electromagnetic sensing of the environment (IREA), National Research Council, Milan, Italy
Aldo Marchetto, CNR-IRSA Verbania, Italy
Yearlong high-resolution moored temperature observations, deep Lake Garda, internal waves, turbulent overturning, convective cooling
van Haren H, Piccolroaz S, Amadori M, Toffolon M, Dijkstra HA. Moored observations of turbulent mixing events in deep Lake Garda, Italy: Mixing events in deep Lake Garda. J Limnol [Internet]. 2020Nov.3 [cited 2021Jan.20];(AOP). Available from: https://jlimnol.it/index.php/jlimnol/article/view/jlimnol.2020.1983


If you have not read the previous articles of this series you may want to do so by visiting the first part, "J. Gresham Machen, France 1918," and then continuing through the succeeding parts using the links at their ends.
After serving two-hundred-forty-nine cups of hot chocolate on Easter Sunday, the area around Machen's hut was shelled resulting in his locating refuge in a shelter in a church basement. The days rolled one into another while he continued his hut duties which involved primarily mixing increasing amounts of hot chocolate. The coming of spring brought the color and newness of violets and other flora to the grayness and devastation defining the war zone. Not only were there wild flowers, but Machen obtained some seeds and planted a small flower garden around a patch of grass by the hut. He found that his brief encounters with troops while they bought items in the hut were not conducive to serious conversation. However, Machen was able to speak about the gospel with one French soldier conversing with him to improve his facility with English.
Helping in the hut was a Frenchman named Montí who Machen described as hardworking, congenial, and a good player of the French version of checkers. He also helped Machen with his French by patiently listening to him and correcting pronunciation as well as editing his reports to the YMCA administration. Montí took on more and more responsibility for hot chocolate production and other hut duties, which allowed Machen to mingle with the soldiers.
One of the services provided by a hut director was overseeing a library of books which included only titles that had been approved by the YMCA. Soldiers would sometimes ask Machen questions about the content of selections available which resulted in an occasional conversation of substance. On one occasion a French translation of some of Edgar A. Poe's works was discussed. One aspect of the library that frustrated Machen was that books supporting Christianity were excluded from the acceptable selections, but on the other hand, books clearly against the Gospel were deemed suitable by the YMCA administration. Note here that the letter "C" in YMCA begins the word "Christian." The YMCA was established to provide young men transplanted from rural homes to industrialized cities with access to Bible studies and wholesome influences in the midst of many temptations. Machen did not mention it in his correspondence, but a handbook for YMCA speakers noted that no speech should "ask any of you men to change your faith. The YMCA seeks only to help you to live up to your own faith." Interdenominational organizations inevitably discover that increased inclusiveness is achieved only through decreased doctrinal distinctions.
By the last week of May, the business of the hut had dwindled to nearly nothing. Because of the warmer weather, hot cocoa became ambient chocolate in an attempt to alleviate some of the above-normal temperatures experienced in France at the time. Rats had been a continuing problem for Machen. Given the chocolate, sugar, and other ingredients for the drinks, rodents inevitably found their way into the store of goodies to enjoy a feast. Machen declared war on the intrusive critters and managed to catch seven during the first three nights he used traps. But soon the trouble with the rats would be exchanged for a considerably more serious problem with the Germans.
When Machen had left Paris to begin his work with the soldiers at the front, he commented that residents of the great city were living their lives as if there was no war. Upon his return to the city, much seemed the same.
The town is being bombarded again, but everything goes on just as unconcernedly as before. The city presents the same busy, bright, normal appearance as at the time of my last visit.
Even though Paris was threatened by the German "grosse Bertha," an artillery weapon that fired a large shell from a great distance, Parisians continued to try and live as though the Germans were not rattling the gates. However, Machen observed that despite the appearance of normalcy, food restrictions were "much more severe"—including on many days no sugar, no butter (particularly difficult for French cuisine), and no meat.
Machen's letter of May 30, 1918 draws to its end with some poignant observations.
The scenes that I have stressed can never be forgotten, but it is not so easy to make any one else realize what they were like. The refugees, I think, constituted the saddest part of all. The roads for miles and miles were crowded with the wagons containing household effects placed on them in direst confusion. On the train by which I arrived at Paris there was a middle-aged woman with an aged man—utterly infirm—who she told me was her grandfather! I helped with the bundles and got an employee of the station to look out for the party. On arrival, it must be said, the government authorities are doing everything in the world for the unfortunate people. But it is terribly sad.
Tragically, war would not be war without sadness, however memories of its unremitting sorrow encourage—as it would with Machen—resorting to its horrors only after diplomacy and other peaceful means have failed to bring resolution.
To continue on to part 4, click HERE.
The quotations, except for the YMCA publication mentioned, are from Letters from the Front: J. Gresham Machen's Correspondence from World War I, 2012.


Pet owners everywhere rejoiced late last year when it was revealed that a blanket ban on pets in apartments, units and townhouses. Typically these properties were at the mercy of the body corporate regarding pet bans. Even if the landlord agreed a pet was fine, they could be overruled by the common land rules and a blanket ban by the owners' corporation.
Recent changes to how property that was part of an owner's corporation is legally viewed opened a pathway for pet owners everywhere. Following the same laws that enable a property to be leased on Airbnb, pet owners no longer need to be concerned about the impact of common laws in their private homes.
In the matter before the courts last year, the owners' corporation had made several rules prohibiting any tenants or other property owners from keeping pets in the private property as well as the common areas. The woman who was taken to the Victorian Civil and Administration Tribunal, had inherited a dog from her parents, which the owners' corporation viewed as a breach of their rules.
However, while it was clear that the rules said she was not to keep an animal on her property, the tenant had her landlord's permission and they both agreed the dog was not a nuisance. Unfortunately, this was not enough for the owners' corporation who asked for the animal to be removed.
Finally fronting the courts, the tenant stated that she felt the dog was not a nuisance and in fact well behaved and small enough for the building. This was backed up by the judge who cited the ruling in favour of owners being able to rent their property through Airbnb. The judge ruled that the owners' corporation ban was illegal and in fact unfairly discriminated pet owners.
This primarily comes down to the nature of both owners' corporations and the dog in question. While owners' corporations can make rules about common areas, they cannot prevent a dog being led across on a leash or prevent pet ownership in general.
Ultimately it also depended on the nature of the dog. In this case, Hamish was a 4-year-old Cavoodle who did not excessively bark, chew or act aggressively with anyone. With that in mind pet owners now have a serious case on their side if they decide to try overthrowing a blanket pet ban. Some key points to keep in mind, what that the woman had her landlord on her side. Landlords are still legally allowed to prohibit pets in their building, as they are the owners of the private property.
Another key area is the animal in question, its temperament, species and even breed. A Labrador may not have as much problem with an owner's corporation, as a Staffy. If your dog is also prone to aggressive or nuisance behaviour, like barking or lunging at people, it is probably not suited to a shared living environment.
So while pet owners do have more rights, they should still consider every aspect before attempting to purchase a new animal. When moving with a dog or cat, it is also recommended to seek advice from a property lawyer before signing anything who can help you determine any restrictions on pets at your new property.


This outdoor fireplace is the perfect companion for your patio when there's a chill in the air. It's made of sheet metal and pop rivets, giving it a sleek aesthetic, light weight, and portability. The shape of the chimney also keeps the smoke out of your face!
At Pier 9, we've got all the awesome tools. I made this project using our CNC water jet and our industrial sheet metal break. But don't worry, you don't need those fancy tools to make this project.
I used 16 gauge stainless steel for the enclosure, and 8 gauge stainless steel for the platform and feet. Stainless steel is really hard to brake, so I added perforations to make it easier.
I would recommend using light gauge mild steel (16 gauge or less) for the whole project if you don't have access to a manufactured sheet metal brake.
The video above details the process of designing the fireplace in Fusion 360. The sheet metal tools are really easy to use, and the automatic unfolding feature made it super easy to make my part layouts.
The .f3d file is the fusion 360 archive- you can upload it to one of your Fusion 360 projects and play around with it as you like. You know what might be cool? Adding some cutout patterns or hole patterns to see the fire through.
The .dxf files are the individual layout parts that you can use if you have some kind of CNC to to the work for you.
The .pdf file is a 48" X 48" sized layout with all the parts on it to scale. To print this out and use it as a template, bring it to a print shop that does large format printing and tell them to print it at full scale / 100% / original size / no scaling on a 48" wide (or larger) roll.
With the parts water jet and de-burred, I moved on to the sheet metal brake. The folds all have specific angles they need to be, but since our brake doesn't have an angle gauge, I just eyeballed it. I figured that since the sides were going to be riveted together, I could just use vice grips to take the stress off the rivets and bend them into place by hand.
To do the riveting, I used vice grips to line up the connected parts. I've never made anything with sheet metal before or used a rivet gun, but I was surprised at how easy it is. You basically just put the rivet in the gun, stick the end of it into the holes to be joined, then squeeze the handles until you hear a pop.
I lined up the holes using 1/8" bolts, then clamped the pieces together with vice grips.
I left one side of the enclosure open, then riveted the platform to the two sides before attaching the front panel. It took a little bending by hand with vice grips holding the parts together. The last thing I added were the feet using the same method with vice grips.
In less than an hour the whole thing was done.
This project went really well, all things considered. The holes lined up perfectly, the perforations worked great for making the bending easier, and the metal didn't warp at all when I got the fire going. Since it's stainless steel it'll oxidize a little on the surface (especially the hot spots), but I bet it'll last long enough to be worth the effort.
Comments are welcome, and let me know if you need any advice on the Sheet Metal Workspace in Fusion 360.
That's a good idea, I wish I'd thought of it sooner. You could cut U-shapes and bend them out to get the same effect.
For those of us who only have a drill, small angle grinder and pop riveter, I think the answer is to join the individual plates with 25 X 25 X 3mm angle iron. Instead of using pop rivets, I would use some self tapping screws at about 50 mm centres.
I see where you'd going with this. I think you'd still need some kind of a break though, unless you with with only right-angles.
beautiful design, any idea of the stability in the wind? I would like to see it scaled up, maybe 8' tall, 24" wide firebox.
My guess is that you'd have to have a very high wind load to knock it over. If you keep the proportions the same, I'd imagine the weight of it would keep it steady. Closed polygons like this are incredibly stable as long as they're bottom-heavy. If you were worried about it, you could always pour some concrete ballast into the legs.
Maybe you should add a pipe on top of it to act as a chimney, and a flame and sparks protection cap (grid) on top of this chimney.
Being at it, maybe add a flame and sparks protection griid over the front aperture.
Definitely. I've cut down all my firewood so it's too small to tumble out, but that's extra work that could be avoided with a screen.
Those are both really good ideas. I's also like to make a set of tools (shovel, poker, broom) that hang off the side or off of a stand.
That's definitely a smart idea. If we were in an area that was prone to fires, I would most certainly make a chimney with a screen to catch embers.
This is pretty cool. In the 1970's, my father designed and built a fireplace from sheet metal that was really efficient and awesome! We lived in NM and that fireplace was our only source of heat. He even had a pipe that went through the garage wall to the clothes dryer. I'm gonna have to see if he would be willing to make another one for this website. It really was something!
Post some drawings / pictures! That sounds like an awesome project.
Washing machine drums make great fire pits- the holes make for a really cool pixilated effect, and they last a long time outdoors.
I remember the 'good ol days' of the Instructables when you didn't need a water jet, sheet metal break or special software to do a project. Sigh.
There's no shortage of Instructables projects you can do with $20 and some cheap tools. I've made lots of projects that fit that description. I've also made a comprehensive guide to making complex projects like this with some cheap hand tools and a large format print from Kinko's, which I've linked to in this instructable. Don't think i'm unaware of how incredibly fortunate I am to have access to a shop like this. At the same time, don't think I never had to struggle and bang out ramshackle projects with no money and no shop at my disposal.
How did you get around the toxic noxious zinc fumes that stainless gives off when heated like in a fireplace?
why would fumes be a problem? if you inhale chimney smoke, you have bigger problems. just pick up your chair and move away from it.


text:
Krtovce és un poble i municipi d'Eslovàquia que es troba a la regió de Nitra, al sud-oest del país. L'any 2011 tenia 303 habitants.

La primera menció escrita de la vila es remunta al 1237.

Referències

Viles del districte de Topoľčany

redpajama_set_name: RedPajamaWikipedia


text:
Articles| December 2015
Nominations Sought for 2016 ASA Award for Excellence in Research
James C. Eisenach, M.D.
Committee on Excellence in Research
ASA Monitor December 2015, Vol. 79, 33.
James C. Eisenach; Nominations Sought for 2016 ASA Award for Excellence in Research. ASA Monitor 2015; 79:33
The annual ASA Award for Excellence in Research recognizes an individual for outstanding achievement in research that has or is likely to have an important impact on the practice of anesthesiology.
The individual's work must represent a body of original, mature and sustained contribution to the advancement of the science of anesthesiology. The nominee need not be a physician, an anesthesiologist or a member of ASA, but must be presently engaged in research related to anesthesiology, academically accomplished with peer-reviewed publications and funded research, and nominated in response to a call for nominations. The completed application must include the nominee's current curriculum vitae, a letter of nomination and a seconding letter from two individuals with an understanding of the research contributions of the individual.
The 2015 Award for Excellence in Research was presented to Emery N. Brown, M.D., Ph.D.,...
Musings from an Unlikely Clinician–Scientist: 2018 American Society of Anesthesiologists Excellence in Research Award
Anesthesiology (October 2019)
Adding Examples to the ASA-Physical Status Classification Improves Correct Assignment to Patients
No Silver Medal for Nobel Prize Contenders: Why Anesthesia Pioneers Were Nominated for but Denied the Award
A Comparison of the Intubation Conditions between Mivacurium and Rocuronium during Balanced Anesthesia
Behavioral Interactions in the Perioperative Environment: A New Conceptual Framework and the Development of the Perioperative Child–Adult Medical Procedure Interaction Scale


text:
Q: How do I solve this trig derivative in respect to $x$? Okay so I have $$f(x)=8\tan^{-1}\left(\frac{y}{x}\right)-\ln \left(\sqrt{x^2+y^2}\right)$$ since $$\frac{\mathrm{d}}{\mathrm{d}x}\tan^{-1}(x)=\frac{1}{1+x^2}$$would $$\frac{\mathrm{d}}{\mathrm{d}x}8\tan^{-1}\left(\frac{y}{x}\right)=8\left(\frac{1}{1+\left(\frac{y}{x}\right)^2}\right)$$ ?? If not, how do I go about finding the derivative? Thanks in advance!!
EDIT: CHANGED NOTATION

A: Using Chain Rule, $$\frac{d(\tan^{-1}\frac yx)}{dx}=\frac{d(\tan^{-1}\frac yx)}{d\frac yx}\cdot\frac{d\frac yx}{dx}$$
As you have found,
$$\frac{d(\tan^{-1}\frac yx)}{d\frac yx}=\frac1{1+\left(\frac yx\right)^2}$$
Using Product Rule,
$$\frac{d\frac yx}{dx}=y\frac{d\frac1x}{dx}+\frac1x\frac{dy}{dx}=-\frac y{x^2}+\frac1x\frac{dy}{dx}$$

Again, $$\ln\sqrt{x^2+y^2}=\ln(x^2+y^2)^{\frac12}=\frac12\ln(x^2+y^2)$$
Again apply Chain Rule

redpajama_set_name: RedPajamaStackExchange