text:
"""
Tests classes derived from `export.exporter.Exporter`.
"""

import pytest

# FIXTURES AND TEST DATA
# Fixtures used in the below tests can be found in
# django/sierra/base/tests/conftest.py:
#    sierra_records_by_recnum_range, sierra_full_object_set,
#    record_sets, new_exporter, redis_obj, basic_solr_assembler,
#    setattr_model_instance, derive_exporter_class,
#    assert_all_exported_records_are_indexed,
#    assert_deleted_records_are_not_indexed,
#    assert_records_are_indexed, assert_records_are_not_indexed

pytestmark = pytest.mark.django_db

@pytest.fixture
def basic_exporter_class(derive_exporter_class):
    def _basic_exporter_class(name):
        return derive_exporter_class(name, 'export.basic_exporters')
    return _basic_exporter_class

@pytest.fixture
def batch_exporter_class(derive_exporter_class):
    def _batch_exporter_class(name):
        return derive_exporter_class(name, 'export.batch_exporters')
    return _batch_exporter_class

# TESTS

@pytest.mark.parametrize('et_code, category', [
    ('BibsToSolr', 'basic'),
    ('EResourcesToSolr', 'basic'),
    ('ItemsToSolr', 'basic'),
    ('ItemStatusesToSolr', 'basic'),
    ('ItypesToSolr', 'basic'),
    ('LocationsToSolr', 'basic'),
    ('ItemsBibsToSolr', 'basic'),
    ('BibsAndAttachedToSolr', 'basic'),
    ('AllMetadataToSolr', 'batch'),
])
def test_exporter_class_versions(et_code, category, new_exporter,
                                 basic_exporter_class, batch_exporter_class):
    """
    For all exporter types / classes that are under test in this test
    module, what we get from the `basic_exporter_class` and
    `batch_exporter_class` fixtures should be derived from the `export`
    app.
    """
    if category == 'basic':
        expclass = basic_exporter_class(et_code)
    else:
        expclass = batch_exporter_class(et_code)
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    assert exporter.app_name == 'export'
    for child_etcode, child in getattr(exporter, 'children', {}).items():
        assert child.app_name == 'export'

@pytest.mark.exports
@pytest.mark.get_records
@pytest.mark.basic
@pytest.mark.parametrize('et_code, rset_code, filter_code', [
    ('BibsToSolr', 'bib_set', 'record_range'),
    ('EResourcesToSolr', 'eres_set', 'record_range'),
    ('ItemsToSolr', 'item_set', 'record_range'),
    ('ItemStatusesToSolr', 'istatus_set', 'full_export'),
    ('ItypesToSolr', 'itype_set', 'full_export'),
    ('LocationsToSolr', 'location_set', 'full_export'),
    ('ItemsBibsToSolr', 'item_set', 'record_range'),
    ('BibsAndAttachedToSolr', 'bib_set', 'record_range'),
    ('BibsAndAttachedToSolr', 'er_bib_set', 'record_range')
])
def test_basic_export_get_records(et_code, rset_code, filter_code,
                                  basic_exporter_class,
                                  record_sets, new_exporter):
    """
    For Basic Exporter classes that get data from Sierra, the
    `get_records` method should return the expected recordset.
    """
    qset = record_sets[rset_code].order_by('pk')
    expected_recs = [r for r in qset]

    opts = {}
    if filter_code == 'record_range':
        start_rnum = expected_recs[0].record_metadata.get_iii_recnum(False)
        end_rnum = expected_recs[-1].record_metadata.get_iii_recnum(False)
        opts = {'record_range_from': start_rnum, 'record_range_to': end_rnum}

    expclass = basic_exporter_class(et_code)
    exporter = new_exporter(expclass, filter_code, 'waiting', options=opts)
    records = exporter.get_records()

    assert set(records) == set(expected_recs)

@pytest.mark.exports
@pytest.mark.get_records
@pytest.mark.batch
def test_allmdtosolr_export_get_records(batch_exporter_class, record_sets,
                                        new_exporter):
    """
    The `AllMetadataToSolr` `get_records` method should return a dict
    of all applicable record sets.
    """
    expected_rsets = {
        'LocationsToSolr': record_sets['location_set'],
        'ItypesToSolr': record_sets['itype_set'],
        'ItemStatusesToSolr': record_sets['istatus_set'],
    }
    expclass = batch_exporter_class('AllMetadataToSolr')
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    rsets = exporter.get_records()

    assert len(expected_rsets.keys()) == len(rsets.keys())
    for name, records in rsets.items():
        assert set(records) == set(expected_rsets[name])

@pytest.mark.deletions
@pytest.mark.get_records
@pytest.mark.basic
@pytest.mark.parametrize('et_code, rset_code', [
    ('BibsToSolr', 'bib_del_set'),
    ('EResourcesToSolr', 'eres_del_set'),
    ('ItemsToSolr', 'item_del_set'),
    ('ItemStatusesToSolr', None),
    ('ItypesToSolr', None),
    ('LocationsToSolr', None),
    ('ItemsBibsToSolr', 'item_del_set'),
    ('BibsAndAttachedToSolr', 'bib_del_set'),
])
def test_basic_export_get_deletions(et_code, rset_code, basic_exporter_class,
                                    record_sets, new_exporter):
    """
    For basic Exporter classes that get data from Sierra, the
    `get_deletions` method should return a record set containing the
    expected records.
    """
    expclass = basic_exporter_class(et_code)
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    records = exporter.get_deletions()
    if rset_code is None:
        assert records is None
    else:
        assert set(records) == set(record_sets[rset_code])

@pytest.mark.deletions
@pytest.mark.get_records
@pytest.mark.batch
def test_allmdtosolr_export_get_deletions(batch_exporter_class, record_sets,
                                          new_exporter):
    """
    The `AllMetadataToSolr` `get_deletions` method should return None.
    """
    expclass = batch_exporter_class('AllMetadataToSolr')
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    rsets = exporter.get_deletions()
    assert rsets is None

@pytest.mark.exports
@pytest.mark.do_export
@pytest.mark.basic
@pytest.mark.parametrize('et_code, rset_code, rectypes, do_reindex', [
    ('BibsToSolr', 'bib_set', ('bib', 'marc'), False),
    ('EResourcesToSolr', 'eres_set', ('eresource',), False),
    ('ItemsToSolr', 'item_set', ('item',), False),
    ('ItemStatusesToSolr', 'istatus_set', ('itemstatus',), True),
    ('ItypesToSolr', 'itype_set', ('itype',), True),
    ('LocationsToSolr', 'location_set', ('location',), True),
])
def test_basic_tosolr_export_records(et_code, rset_code, rectypes, do_reindex,
                                     basic_exporter_class, record_sets,
                                     new_exporter, solr_conns, solr_search,
                                     basic_solr_assembler,
                                     assert_records_are_indexed,
                                     assert_records_are_not_indexed):
    """
    For basic ToSolrExporter classes, the `export_records` method
    should load the expected records into the expected Solr index. This
    uses the `solr_assemble_specific_record_data` fixture to help
    preload some data into Solr. We want to make sure that exporters
    where indexes are supposed to be fully refreshed with each run
    delete the old data and only load the data in the recordset, while
    other exporters add records to the existing recordset.
    """
    expclass = basic_exporter_class(et_code)
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    records = record_sets[rset_code]

    # Do some setup to put some meaningful data into the index first.
    # We want some records that overlap with the incoming record set
    # and some that don't.
    num_existing = records.count() / 2
    overlap_recs = records[0:num_existing]
    only_new_recs = records[num_existing:]
    old_rec_pks = [unicode(pk) for pk in range(99991,99995)]
    only_old_rec_data = [(pk, {}) for pk in old_rec_pks]
    data = only_old_rec_data + [(r.pk, {}) for r in overlap_recs]
    for rtype in rectypes:
        basic_solr_assembler.load_static_test_data(rtype, data,
                                                   id_field='django_id')

    # Check the setup to make sure existing records are indexed and new
    # records are not.
    for index in exporter.indexes.values():
        conn = solr_conns[getattr(index, 'using', 'default')]
        results = solr_search(conn, '*')
        only_old_recs = [r for r in results if r['django_id'] in old_rec_pks]
        assert len(only_old_recs) == len(old_rec_pks)
        assert_records_are_indexed(index, overlap_recs, results=results)
        assert_records_are_not_indexed(index, only_new_recs, results=results)

    exporter.export_records(records)
    exporter.commit_indexes()

    for i, index in enumerate(exporter.indexes.values()):
        conn = solr_conns[getattr(index, 'using', 'default')]
        results = solr_search(conn, '*')
        only_old_recs = [r for r in results if r['django_id'] in old_rec_pks]
        assert len(only_old_recs) == 0 if do_reindex else len(old_rec_pks)
        assert_records_are_indexed(index, overlap_recs, results=results)
        assert_records_are_indexed(index, only_new_recs, results=results)

@pytest.mark.exports
@pytest.mark.do_export
@pytest.mark.batch
def test_allmdtosolr_export_records(batch_exporter_class, record_sets,
                                    new_exporter,
                                    assert_all_exported_records_are_indexed):
    """
    The `AllMetadataToSolr` `export_records` method should load the
    expected records into the expected Solr index. This is just a
    simple check to make sure all child exporters processed the
    appropriate recordset; the children are tested more extensively
    elsewhere.
    """
    records = {
        'LocationsToSolr': record_sets['location_set'],
        'ItypesToSolr': record_sets['itype_set'],
        'ItemStatusesToSolr': record_sets['istatus_set'],
    }
    expclass = batch_exporter_class('AllMetadataToSolr')
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    exporter.export_records(records)
    for key, child in exporter.children.items():
        child.commit_indexes()
        assert_all_exported_records_are_indexed(child, records[key])

@pytest.mark.deletions
@pytest.mark.do_export
@pytest.mark.basic
@pytest.mark.parametrize('et_code, rset_code, rectypes', [
    ('BibsToSolr', 'bib_del_set', ('bib', 'marc')),
    ('EResourcesToSolr', 'eres_del_set', ('eresource',)),
    ('ItemsToSolr', 'item_del_set', ('item',)),
])
def test_basic_tosolr_delete_records(et_code, rset_code, rectypes,
                                     basic_exporter_class, record_sets,
                                     new_exporter, basic_solr_assembler,
                                     assert_records_are_indexed,
                                     assert_deleted_records_are_not_indexed):
    """
    For basic ToSolrExporter classes that have loaded data into Solr,
    the `delete_records` method should delete records from the
    appropriate index or indexes.
    """
    records = record_sets[rset_code]
    data = [(r.id, {'record_number': r.get_iii_recnum()}) for r in records]
    for rtype in rectypes:
        basic_solr_assembler.load_static_test_data(rtype, data)

    expclass = basic_exporter_class(et_code)
    exporter = new_exporter(expclass, 'full_export', 'waiting')

    for index in exporter.indexes.values():
        assert_records_are_indexed(index, records)

    exporter.delete_records(records)
    exporter.commit_indexes()
    assert_deleted_records_are_not_indexed(exporter, records)

@pytest.mark.exceptions
def test_tosolr_index_update_errors(basic_exporter_class, record_sets,
                                    new_exporter, setattr_model_instance,
                                    assert_records_are_indexed,
                                    assert_records_are_not_indexed):
    """
    When updating indexes via a ToSolrExporter, if one record causes an
    error during preparation (e.g. via the haystack SearchIndex obj),
    the export process should: 1) skip that record, and 2) log the
    error as a warning on the exporter. Other records in the same batch
    should still be indexed.
    """
    records = record_sets['item_set']
    expclass = basic_exporter_class('ItemsToSolr')
    invalid_loc_code = '_____'
    exporter = new_exporter(expclass, 'full_export', 'waiting')

    def prepare_location_code(obj):
        code = obj.location_id
        if code == invalid_loc_code:
            raise Exception('Code not valid')
        return code

    exporter.indexes['Items'].prepare_location_code = prepare_location_code
    setattr_model_instance(records[0], 'location_id', invalid_loc_code)
    exporter.export_records(records)
    exporter.commit_indexes()

    assert_records_are_not_indexed(exporter.indexes['Items'], [records[0]])
    assert_records_are_indexed(exporter.indexes['Items'], records[1:])
    assert len(exporter.indexes['Items'].last_batch_errors) == 1

@pytest.mark.exports
@pytest.mark.do_export
@pytest.mark.parametrize('et_code, rset_code', [
    ('ItemsBibsToSolr', 'item_set'),
    ('BibsAndAttachedToSolr', 'bib_set'),
    ('BibsAndAttachedToSolr', 'er_bib_set')
])
def test_attached_solr_export_records(et_code, rset_code, basic_exporter_class,
                                      record_sets, new_exporter,
                                      assert_all_exported_records_are_indexed):
    """
    For AttachedRecordExporter classes that load data into Solr, the
    `export_records` method should load the expected records into the
    expected Solr indexes. This is just a simple check to make sure all
    child exporters processed the appropriate recordsets; the children
    are tested more extensively elsewhere.
    """
    records = record_sets[rset_code]
    expclass = basic_exporter_class(et_code)
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    exporter.export_records(records)
    for child in exporter.children.values():
        child.commit_indexes()
    assert_all_exported_records_are_indexed(exporter, records)

@pytest.mark.deletions
@pytest.mark.do_export
@pytest.mark.parametrize('et_code, rset_code, rectypes', [
    ('ItemsBibsToSolr', 'item_del_set', ('item',)),
    ('BibsAndAttachedToSolr', 'bib_del_set', ('bib', 'marc')),
])
def test_attached_solr_delete_records(et_code, rset_code, rectypes,
                                      basic_exporter_class, record_sets,
                                      new_exporter, basic_solr_assembler,
                                      assert_records_are_indexed,
                                      assert_deleted_records_are_not_indexed):
    """
    For Exporter classes that have loaded data into Solr, the
    `delete_records` method should delete records from the appropriate
    index or indexes.
    """
    records = record_sets[rset_code]
    data = [(r.id, {'record_number': r.get_iii_recnum()}) for r in records]
    for rtype in rectypes:
        basic_solr_assembler.load_static_test_data(rtype, data)

    expclass = basic_exporter_class(et_code)
    exporter = new_exporter(expclass, 'full_export', 'waiting')

    for index in exporter.main_child.indexes.values():
        assert_records_are_indexed(index, records)

    exporter.delete_records(records)
    for child in exporter.children.values():
        child.commit_indexes()
    assert_deleted_records_are_not_indexed(exporter, records)

@pytest.mark.parametrize('et_code', [
    'BibsToSolr',
    'EResourcesToSolr',
    'ItemsToSolr',
    'ItemStatusesToSolr',
    'ItypesToSolr',
    'LocationsToSolr'])
def test_max_chunk_settings_overrides(et_code, settings, basic_exporter_class,
                                      new_exporter):
    """
    Using EXPORTER_MAX_RC_CONFIG and EXPORTER_MAX_DC_CONFIG settings
    should override values set on the class when an exporter is
    instantiated.
    """
    expclass = basic_exporter_class(et_code)
    test_et_code = expclass.__name__
    new_rc_val, new_dc_val = 77777, 88888
    settings.EXPORTER_MAX_RC_CONFIG[test_et_code] = new_rc_val
    settings.EXPORTER_MAX_DC_CONFIG[test_et_code] = new_dc_val

    exporter = new_exporter(expclass, 'full_export', 'waiting')
    assert exporter.max_rec_chunk == new_rc_val
    assert exporter.max_del_chunk == new_dc_val
    assert new_rc_val != expclass.max_rec_chunk
    assert new_dc_val != expclass.max_del_chunk

@pytest.mark.parametrize('et_code', [
    'BibsToSolr',
    'EResourcesToSolr',
    'ItemsToSolr',
    'ItemStatusesToSolr',
    'ItypesToSolr',
    'LocationsToSolr'])
def test_max_chunk_settings_defaults(et_code, settings, basic_exporter_class,
                                     new_exporter):
    """
    If NOT using EXPORTER_MAX_RC_CONFIG and EXPORTER_MAX_DC_CONFIG
    settings, the `max_rec_chunk` and `max_del_chunk` values for a
    given job should come from the exporter class.
    """
    settings.EXPORTER_MAX_RC_CONFIG = {}
    settings.EXPORTER_MAX_DC_CONFIG = {}
    expclass = basic_exporter_class(et_code)
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    assert exporter.max_rec_chunk == expclass.max_rec_chunk
    assert exporter.max_del_chunk == expclass.max_del_chunk

@pytest.mark.return_vals
@pytest.mark.parametrize('vals_list, expected', [
    ([ { 'ids': ['b1', 'b2'] },
       { 'ids': ['b4', 'b5'] },
       { 'ids': ['b3'] }
    ], { 'ids': ['b1', 'b2', 'b4', 'b5', 'b3'] }),

    ([ { 'names': [{'first': 'Bob', 'last': 'Jones'}] },
       { 'names': [{'first': 'Sarah', 'last': 'Kim'}] },
       { 'names': [{'first': 'Sally', 'last': 'Smith'}] }
    ], { 'names': [{'first': 'Bob', 'last': 'Jones'},
                   {'first': 'Sarah', 'last': 'Kim'},
                   {'first': 'Sally', 'last': 'Smith'}] }),

    ([ { 'grades': {'Bob Jones': ['A', 'B'],
                    'Sarah Kim': ['B', 'A', 'C']} },
       { 'grades': {'Bob Jones': ['A']} },
       { 'grades': {'Sally Smith': ['A', 'A', 'B']} }
    ], { 'grades': {'Bob Jones': ['A', 'B', 'A'],
                    'Sarah Kim': ['B', 'A', 'C'],
                    'Sally Smith': ['A', 'A', 'B']} }),

    ([ { 'list1': ['a', 'b'], 'list2': [1, 2] },
       { 'list1': ['c', 'd'], 'list2': [3, 4] },
       { 'list1': ['e', 'f'], 'list2': [5, 6] },
    ], { 'list1': ['a', 'b', 'c', 'd', 'e', 'f'],
         'list2': [1, 2, 3, 4, 5, 6] }),

    ([ { 'list1': ['a', 'b'], 'list2': [1, 2] },
       { 'list1': ['c', 'd']},
       { 'list1': ['e', 'f'], 'list2': [5, 6] },
    ], { 'list1': ['a', 'b', 'c', 'd', 'e', 'f'],
         'list2': [1, 2, 5, 6] }),

    ([ { 'list1': [], 'list2': [1, 2] },
       { 'list1': ['c', 'd'], 'list2': [3, 4] },
       { 'list1': ['e', 'f'], 'list2': [5, 6] },
    ], { 'list1': ['c', 'd', 'e', 'f'],
         'list2': [1, 2, 3, 4, 5, 6] }),

    ([ { 'list1': ['a', 'b'] },
       { 'list2': [1, 2] },
    ], { 'list1': ['a', 'b'],
         'list2': [1, 2] }),

    ([ { 'list1': [1, 2, 3] },
       None,
       { 'list1': [4, 5, 6] }
    ], { 'list1': [1, 2, 3, 4, 5, 6] }),

    ([ None, None, None ], None),
], ids=[
    'one key, arrays of values',
    'one key, arrays of dicts',
    'one key, nested dicts',
    'two keys, normal',
    'two keys, one is absent',
    'two keys, one is a blank value',
    'two keys, mutually exclusive',
    'one vals_list is None',
    'all vals_lists are None',
])
def test_exporter_default_compile_vals(vals_list, expected, new_exporter,
                                       derive_exporter_class):
    """
    The default `Exporter.compile_vals` method should take a list of
    dicts and return a single dict that represents a merger of all
    dicts in the list.
    """
    expclass = derive_exporter_class('Exporter', 'export.exporter')
    exp = new_exporter(expclass, 'full_export', 'waiting')
    assert exp.compile_vals(vals_list) == expected

@pytest.mark.compound
@pytest.mark.return_vals
@pytest.mark.do_export
@pytest.mark.parametrize('classname, method, children_and_retvals, expected', [
    ('AttachedRecordExporter', 'export_records',
        [ ('C1', {'colors': ['red', 'green']}), ('C2', {'sounds': ['woosh']}),
          ('C3', None) ],
        { 'C1': {'colors': ['red', 'green']},
          'C2': {'sounds': ['woosh']},
          'C3': None }
    ),
    ('AttachedRecordExporter', 'delete_records',
        [ ('C1', {'colors': ['red', 'green']}), ('C2', {'sounds': ['woosh']}),
          ('C3', None) ],
        { 'C1': {'colors': ['red', 'green']} }
    ),
    ('BatchExporter', 'export_records',
        [ ('C1', {'colors': ['red', 'green']}), ('C2', {'sounds': ['woosh']}),
          ('C3', None) ],
        { 'C1': {'colors': ['red', 'green']},
          'C2': {'sounds': ['woosh']},
          'C3': None }
    ),
    ('BatchExporter', 'delete_records',
        [ ('C1', {'colors': ['red', 'green']}), ('C2', {'sounds': ['woosh']}),
          ('C3', None) ],
        { 'C1': {'colors': ['red', 'green']},
          'C2': {'sounds': ['woosh']},
          'C3': None }
    ),
], ids=[
    'AttachedRE export_records: all children run and return their vals',
    'AttachedRE delete_records: only main child runs and returns vals',
    'BatchE export_records: all children run and return their vals',
    'BatchE delete_records: all children run and return their vals',
])
def test_compound_ops_and_return_vals(classname, method, children_and_retvals,
                                      expected, derive_compound_exporter_class,
                                      derive_child_exporter_class, new_exporter,
                                      mocker):
    """
    The `export_records` and `delete_records` methods for
    AttachedRecordExporter and BatchExporter should return a dict where
    each key contains the return vals for each child that ran.
    """
    child_classes = []
    for name, retvals in children_and_retvals:
        child = derive_child_exporter_class(newname=name)
        mocker.patch.object(child, method)
        getattr(child, method).return_value = retvals
        child_classes.append(child)

    expclass = derive_compound_exporter_class(classname, 'export.exporter',
                                              children=child_classes)
    exp = new_exporter(expclass, 'full_export', 'waiting')
    return_vals = getattr(exp, method)([])
    assert return_vals == expected
    for name, child in exp.children.items():
        if name in expected.keys():
            getattr(child, method).assert_called_with([])
        else:
            getattr(child, method).assert_not_called()

@pytest.mark.compound
@pytest.mark.return_vals
@pytest.mark.parametrize('classname, children, vals_list, expected', [
    ('AttachedRecordExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red', 'blue']}, 'C2': {'sounds': ['pop']}},
          {'C1': {'colors': ['tan']}, 'C2': {'sounds': ['squee', 'pop']}} ],
        { 'C1': {'colors': ['red', 'blue', 'tan']},
          'C2': {'sounds': ['pop', 'squee', 'pop']} }),

    ('AttachedRecordExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red', 'blue']}, 'C2': {'colors': ['yellow']}},
          {'C1': {'colors': ['tan']}, 'C2': {'colors': ['pink', 'brown']}} ],
        { 'C1': {'colors': ['red', 'blue', 'tan']},
          'C2': {'colors': ['yellow', 'pink', 'brown']} }),

    ('AttachedRecordExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red', 'blue']}, 'C2': {'colors': ['yellow']}},
          {'C1': {'sounds': ['pop', 'bang']}, 'C2': {'colors': ['red']}} ],
        { 'C1': {'colors': ['red', 'blue'], 'sounds': ['pop', 'bang']},
          'C2': {'colors': ['yellow', 'red']} }),

    ('AttachedRecordExporter', ('C1', 'C2'),
        [ {'C1': None, 'C2': {'colors': ['yellow']}},
          {'C1': None, 'C2': {'colors': ['pink', 'brown']}} ],
        { 'C1': None, 'C2': {'colors': ['yellow', 'pink', 'brown']} }),

    ('AttachedRecordExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red']}, 'C2': {'colors': ['yellow']}},
          {'C1': None, 'C2': {'colors': ['pink', 'brown']}} ],
        { 'C1': {'colors': ['red']},
          'C2': {'colors': ['yellow', 'pink', 'brown']} }),

    ('AttachedRecordExporter', ('C1', 'C2'),
        [ {'C1': None, 'C2': None}, {'C1': None, 'C2': None} ],
        { 'C1': None, 'C2': None }),

    ('AttachedRecordExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red']}},
          {'C1': {'colors': ['tan']}, 'C2': {'colors': ['pink', 'brown']}} ],
        { 'C1': {'colors': ['red', 'tan']},
          'C2': {'colors': ['pink', 'brown']} }),

    ('AttachedRecordExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red']}}, {'C1': {'colors': ['tan']}} ],
        { 'C1': {'colors': ['red', 'tan']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red', 'blue']}},
          {'C1': {'colors': ['tan', 'red']}} ],
        { 'C1': {'colors': ['red', 'blue', 'tan', 'red']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red', 'blue']}},
          {'C1': {'sounds': ['pop']}} ],
        { 'C1': {'colors': ['red', 'blue'], 'sounds': ['pop']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': None}, {'C1': {'colors': ['red']}} ],
        { 'C1': {'colors': ['red']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': None}, {'C1': None} ],
        { 'C1': None }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red', 'blue']}}, {'C2': {'sounds': ['pop']}} ],
        { 'C1': {'colors': ['red', 'blue']}, 'C2': {'sounds': ['pop']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': None}, {'C2': {'sounds': ['pop']}} ],
        { 'C1': None, 'C2': {'sounds': ['pop']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': None}, {'C2': None} ],
        { 'C1': None, 'C2': None }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red', 'blue']}, 'C2': {'sounds': ['pop']}},
          {'C1': {'colors': ['tan']}, 'C2': {'sounds': ['squee', 'pop']}} ],
        { 'C1': {'colors': ['red', 'blue', 'tan']},
          'C2': {'sounds': ['pop', 'squee', 'pop']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red', 'blue']}, 'C2': {'colors': ['yellow']}},
          {'C1': {'colors': ['tan']}, 'C2': {'colors': ['pink', 'brown']}} ],
        { 'C1': {'colors': ['red', 'blue', 'tan']},
          'C2': {'colors': ['yellow', 'pink', 'brown']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red', 'blue']}, 'C2': {'colors': ['yellow']}},
          {'C1': {'sounds': ['pop', 'bang']}, 'C2': {'colors': ['red']}} ],
        { 'C1': {'colors': ['red', 'blue'], 'sounds': ['pop', 'bang']},
          'C2': {'colors': ['yellow', 'red']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': None, 'C2': {'colors': ['yellow']}},
          {'C1': None, 'C2': {'colors': ['pink', 'brown']}} ],
        { 'C1': None, 'C2': {'colors': ['yellow', 'pink', 'brown']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': {'colors': ['red']}, 'C2': {'colors': ['yellow']}},
          {'C1': None, 'C2': {'colors': ['pink', 'brown']}} ],
        { 'C1': {'colors': ['red']},
          'C2': {'colors': ['yellow', 'pink', 'brown']} }),

    ('BatchExporter', ('C1', 'C2'),
        [ {'C1': None, 'C2': None}, {'C1': None, 'C2': None} ],
        { 'C1': None, 'C2': None }),

], ids=[
    'AttachedRE: children have different keys',
    'AttachedRE: children have the same keys',
    'AttachedRE: same child has different keys',
    'AttachedRE: one child has return value None',
    'AttachedRE: one child returns None once',
    'AttachedRE: both children return None',
    'AttachedRE: one child missing an entry (did not run, once)',
    'AttachedRE: one child has no entries (did not run, at all)',
    'BatchE: only one child ran; same keys',
    'BatchE: only one child ran; different keys',
    'BatchE: only one child ran; one chunk has no ret vals',
    'BatchE: only one child ran; no ret vals',
    'BatchE: different children ran',
    'BatchE: different children ran, one has no ret vals',
    'BatchE: different children ran, neither has ret vals',
    'BatchE: both children ran; children have different keys',
    'BatchE: both children ran; children have the same keys',
    'BatchE: both children ran; same child has different keys',
    'BatchE: both children ran; one child has return value None',
    'BatchE: both children ran; one child returns None once',
    'BatchE: both children ran; both children return None',
])
def test_compound_compile_vals(classname, children, vals_list, expected,
                               derive_compound_exporter_class,
                               derive_child_exporter_class, new_exporter):
    """
    The `compile_vals` method for AttachedRecordExporter and
    BatchExporter should take a list of vals dicts and return a merged
    vals dict, assuming that each key/value pair represents the return
    values for each child exporter that ran during an export or delete
    operation. Keys are the names of each child.
    """
    child_classes = [derive_child_exporter_class(newname=n) for n in children]
    expclass = derive_compound_exporter_class(classname, 'export.exporter',
                                              children=child_classes)
    exp = new_exporter(expclass, 'full_export', 'waiting')
    assert exp.compile_vals(vals_list) == expected

@pytest.mark.compound
@pytest.mark.callback
@pytest.mark.parametrize('classname, children, vals', [
    ('AttachedRecordExporter', ('C1', 'C2'),
        { 'C1': {'colors': ['red']}, 'C2': {'sounds': 'pop'} }),
    ('AttachedRecordExporter', ('C1', 'C2'),
        { 'C1': {'colors': ['red']}, 'C2': None }),
    ('AttachedRecordExporter', ('C1', 'C2'),
        { 'C1': {'colors': ['red']} }),
    ('AttachedRecordExporter', ('C1', 'C2'), None),
    ('BatchExporter', ('C1', 'C2'),
        { 'C1': {'colors': ['red']}, 'C2': {'sounds': 'pop'} }),
    ('BatchExporter', ('C1', 'C2'),
        { 'C1': {'colors': ['red']}, 'C2': None }),
    ('BatchExporter', ('C1', 'C2'),
        { 'C1': {'colors': ['red']} }),
    ('BatchExporter', ('C1', 'C2'), None),
], ids=[
    'AttachedRE: both children have vals',
    'AttachedRE: one child has vals, the other has None',
    'AttachedRE: one child has vals, the other is missing',
    'AttachedRE: vals is None',
    'BatchE: both children have vals',
    'BatchE: one child has vals, the other has None',
    'BatchE: one child has vals, the other is missing',
    'BatchE: vals is None',
])
def test_compound_final_callback(classname, children, vals,
                                 derive_compound_exporter_class,
                                 derive_child_exporter_class, new_exporter,
                                 mocker):
    """
    The `final_callback` method for the given Compound exporter type
    (AttachedRecordExporter or BatchExporter) should run the
    `final_callback` method on each child, passing the appropriate
    portion of `vals` to each.
    """
    child_classes = []
    for name in children:
        child = derive_child_exporter_class(newname=name)
        mocker.patch.object(child, 'final_callback')
        child_classes.append(child)
    expclass = derive_compound_exporter_class(classname, 'export.exporter',
                                              children=child_classes)
    exp = new_exporter(expclass, 'full_export', 'waiting')
    exp.final_callback(vals=vals)
    for name, child in exp.children.items():
        expected_vals = None if vals is None else vals.get(name, None)
        child.final_callback.assert_called_with(vals=expected_vals,
                                                status='success')

@pytest.mark.return_vals
def test_ertosolr_export_returns_h_lists(basic_exporter_class, record_sets,
                                         new_exporter):
    """
    The EResourcesToSolr exporter `export_records` method should return
    a dict with an `h_lists` key, which has a dict mapping eresources
    (record nums) to holdings/checkins (record nums).
    """
    records = record_sets['eres_set']
    expclass = basic_exporter_class('EResourcesToSolr')
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    vals = exporter.export_records(records)
    assert 'h_lists' in vals
    for rec in records:
        er_recnum = rec.record_metadata.get_iii_recnum(True)
        assert er_recnum in vals['h_lists']
        exp_holdings = [h.record_metadata.get_iii_recnum(True)
                        for h in rec.holding_records.all()]
        assert vals['h_lists'][er_recnum] == exp_holdings

@pytest.mark.return_vals
def test_ertosolr_delete_returns_deletions(basic_exporter_class, record_sets,
                                           new_exporter):
    """
    The EResourcesToSolr exporter `delete_records` method should return
    a dict with a `deletions` key, which has the list of eresources
    (record nums) that were deleted in the batch.
    """
    records = record_sets['eres_del_set']
    expclass = basic_exporter_class('EResourcesToSolr')
    exporter = new_exporter(expclass, 'full_export', 'waiting')

    vals = exporter.delete_records(records)
    assert 'deletions' in vals
    exp_deletions = [r.get_iii_recnum(True) for r in records]
    assert vals['deletions'] == exp_deletions

@pytest.mark.callback
def test_ertosolr_export_callback_commits_to_redis(basic_exporter_class,
                                                   new_exporter, redis_obj):
    """
    The EResourcesToSolr exporter `final_callback` method should commit
    updated holdings lists for new and updated eresources to Redis, and
    it should add them to or otherwise update the reverse holdings list
    appropriately.
    """
    existing = {
        'eresource_holdings_list:e2': ['c1', 'c2', 'c3'],
        'eresource_holdings_list:e3': ['c4', 'c5'],
        'reverse_holdings_list:0': {
            'c1': 'e2', 'c2': 'e2', 'c3': 'e2', 'c4': 'e3', 'c5': 'e3'
        }
    }

    for key, val in existing.items():
        redis_obj(key).set(val)

    vals = { 'h_lists': { 'e1': ['c6', 'c4'], 'e3': ['c5', 'c7'] } }
    expected = {
        'eresource_holdings_list:e1': ['c6', 'c4'],
        'eresource_holdings_list:e2': ['c1', 'c2', 'c3'],
        'eresource_holdings_list:e3': ['c5', 'c7'],
        'reverse_holdings_list:0': {
            'c1': 'e2', 'c2': 'e2', 'c3': 'e2', 'c4': 'e1', 'c5': 'e3',
            'c6': 'e1', 'c7': 'e3'
        }
    }

    expclass = basic_exporter_class('EResourcesToSolr')
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    exporter.final_callback(vals=vals, status='success')

    for key in redis_obj.conn.keys():
        assert key in expected
        assert redis_obj(key).get() == expected[key]

@pytest.mark.callback
def test_ertosolr_delete_callback_commits_to_redis(basic_exporter_class,
                                                   new_exporter, redis_obj):
    """
    The EResourcesToSolr exporter `final_callback` method should remove
    deleted eresources' holdings lists in Redis, and it should remove
    the applicable holdings records from the reverse holdings list.
    """
    existing = {
        'eresource_holdings_list:e1': ['c6', 'c4'],
        'eresource_holdings_list:e2': ['c1', 'c2', 'c3'],
        'eresource_holdings_list:e3': ['c5', 'c7'],
        'reverse_holdings_list:0': {
            'c1': 'e2', 'c2': 'e2', 'c3': 'e2', 'c4': 'e1', 'c5': 'e3',
            'c6': 'e1', 'c7': 'e3'
        }
    }

    for key, val in existing.items():
        redis_obj(key).set(val)

    vals = { 'deletions': ['e1', 'e3'] }
    expected = {
        'eresource_holdings_list:e2': ['c1', 'c2', 'c3'],
        'reverse_holdings_list:0': {
            'c1': 'e2', 'c2': 'e2', 'c3': 'e2'
        }
    }

    expclass = basic_exporter_class('EResourcesToSolr')
    exporter = new_exporter(expclass, 'full_export', 'waiting')
    exporter.final_callback(vals=vals, status='success')

    for key in redis_obj.conn.keys():
        assert key in expected
        assert redis_obj(key).get() == expected[key]

redpajama_set_name: RedPajamaGithub


Pre-service teachers explore theories of social and emotional development enabling children to build a sense of well-being and identity whilst also developing resilience. Pre-service teachers will get to know the major perspectives of understanding and supporting behaviour and explore how these relate to behavioural and educational theories and practices. They will gain an understanding of the role and practice of external agencies and professionals in supporting children, young people, teachers and families.


Welcome to the Scholarship Opportunities Homepage.
Below you will find a listing of scholarships available to students with brief information about the scholarship qualifications. To apply to scholarships which require an application, you must first sign in with the same user name and password you use to access the campus login portal. You will then have the opportunity to complete a general application and, if applicable, apply for specific scholarships.
Scopes No Scopes Applied High School Graduating Seniors Nursing To select multiple items, hold control or command and click each one.
Are you a current high school graduating senior?
One $1,000 scholarship will be awarded annually spring or fall semester.
Through generous support the Neall Family Charitable Foundation.
Newport News Shipbuilding Scholarship established in 2018. Designated for students pursuing programs to lead to NNS careers.
Established in 2012 to benefit current Thomas Nelson nursing students.


text:
Andrés Simón Goméz (* 15. September 1961 in Guantánamo) ist ein ehemaliger kubanischer Sprinter.

Bei den Leichtathletik-Hallenweltmeisterschaften 1989 in Budapest gewann er den Titel im 60-Meter-Lauf. In persönlicher Bestleistung von 6,52 s verwies er John Myles-Mills (6,59 s) und Pierfrancesco Pavoni (6,61 s) auf die Plätze. Bei weiteren Teilnahmen an Hallenweltmeisterschaften wurde Simón Goméz 1991 Fünfter und 1993 Siebter.

Sein bedeutendster Erfolg war der Gewinn der Bronzemedaille in der 4-mal-100-Meter-Staffel bei den Olympischen Spielen 1992 in Barcelona. Er führte die kubanische Staffel als Startläufer zusammen mit Joel Lamela,
Joel Isasi und Jorge Aguilera in 38,00 s auf Rang drei hinter den Mannschaften der Vereinigten Staaten (37,40 s) und Jamaikas (37,98 s). Die US-amerikanische Staffel stellte in diesem Rennen einen Weltrekord auf. Simón Goméz trat bei den Olympischen Spielen 1996 in Atlanta noch einmal mit der Staffel an und belegte dort den sechsten Rang.

Andrés Simón Goméz ist 1,60 m groß und hatte ein Wettkampfgewicht von 67 kg.

Bestleistungen
 100 m: 10,06 s, 1. August 1987, Havanna
 60 m (Halle): 6,52 s, 5. März 1989, Budapest

Weblinks

100-Meter-Läufer (Kuba)
4-mal-100-Meter-Staffel-Läufer (Kuba)
Olympiateilnehmer (Kuba)
Teilnehmer der Olympischen Sommerspiele 1992
Teilnehmer der Olympischen Sommerspiele 1996
Teilnehmer an den Panamerikanischen Spielen (Kuba)
Weltmeister (60-Meter-Lauf)
Universiadesieger (Leichtathletik)
Kubaner
Geboren 1961
Mann

redpajama_set_name: RedPajamaWikipedia


Stephan Klasen How Does Gender Inequality Affect a Country's Economic Performance?
Stephan Klasen is Professor of Development Economics at the University of Göttingen. Having completed his Ph.D. at Harvard University, he has also held posts at the University of Munich and at the University of Cambridge. Klasen's research focuses on poverty, inequality, environment, and gender. President of the European Development Research Network (since 2015), and a member of the UN Committee on Development Policy, Klasen regularly provides consultancy expertise to organizations including the World Bank, the OECD, and UNESCO.
- Poverty and sustainable development: a long-term panel data project in Thailand and Vietnam. 2016-2019 Funded by German Research Foundation. PI together with Andreas Wagener and Ulrike Grote, and Hermann Waibel.
- Research Unit 2432 'Socio-ecological systems in the Indian rural-urban interface. 2016-2018. Funded by German Research Foundation. PI for subproject on nutrition and food security at rural-urban interface. With Stephan von Cramon.
- Gender inequality and public goods provision. 2015-2018. Collaborative research project, funded by Ministry of Science and Technology of Lower Saxony (MWK). Joint with Amy Alexander (Gothenbburg) and Chris Welzel (Lüneburg).
- Collaborative Research Center 'Socioeconomic and ecological functions of lowlands rainforest transformation systems' (CRC990). Project on long-term welfare dynamics and emission trade-offs. Joint with Jann Lay. 2012-2015, after successful review, extended to 2016-2019.
Public policy discussions have tended to assume that reducing gender inequality in areas including education, labor force participation and pay will automatically lead to improved economic performance. In this video, STEPHAN KLASEN reviews existing economics research in order to determine whether this assumption is robust. Examining theoretical models, accounting studies, cross-country regressions, and micro-level studies, Klasen finds that while reducing gender gaps in education clearly has a positive impact on a country's economic performance, much more work is required before we have a reliable understanding of the economic impact of reductions in other forms of gender inequality. With evident relevance to public policy debates, Klasen's work draws attention to a considerable gap in knowledge that should occupy researchers for many years to come.
Stephan Klasen. "The Impact of Gender Inequality on Economic Performance in Developing Countries." Annual Review of Resource Economics (2018). doi:10.1146/annurev-resource-100517-023429.
See what Stephan Klasen recommends for reading.
Get more information on the institution where Stephan Klasen is doing research.


text:
shot_control_events:
=======================

*Config file section*

+----------------------------------------------------------------------------+---------+
| Valid in :doc:`machine config files </config/instructions/machine_config>` | **NO**  |
+----------------------------------------------------------------------------+---------+
| Valid in :doc:`mode config files </config/instructions/mode_config>`       | **NO**  |
+----------------------------------------------------------------------------+---------+

.. overview

Shot can contain ``control_events:`` which can move the shot to a specific state.

.. config

Required settings
-----------------

The following sections are required in the ``shot_control_events:`` section of your config:

events:
~~~~~~~
One or more values, type: ``string``. Use commas to separate multiple values.

A list of one or more events, which triggers the move of the shot to a specified state.

state:
~~~~~~
Single value, type: ``int``.

The integer that is provided for the state the shot should move to when the event is posted.
States are indexed at ``0``, which means the first state is ``0``, second state is ``1``, etc.

Optional settings
-----------------

The following sections are optional in the ``shot_control_events:`` section of your config.
(If you don't include them, the default will be used).

force:
~~~~~~
Single value, type: ``boolean`` (true/false). Default: ``true``

If set to true, the state of shot will be modified even if the shot is disabled. If set to false,
this will be ignored unless the shot is currently enabled when the event is posted.

force_show:
~~~~~~~~~~~
Single value, type: ``boolean`` (true/false). Default: ``false``

IF set to true, the show associated with this shot state will be played, even if the shot is already in that state.

Related How To Guides
---------------------

* :doc:`shots`


critical fixes below that i would like them merged into this RC.
Please pull and let me know if there is any problem.
- Fix Reviewed-by tag of the 2nd patch.
- Drop the FPGA 0 size fix, it needs some more change log info.


Program draws solar panels within roofs or boundaries (any type of polygon) and detects roof obstructions and setbacks.
Program draws clamps and railing for flush mounted and tilt up racking.
Program draws and automate roof attachments or footings.
Software is available for purchase for solar installers with in-house designers or PV design firms. Please contact us for a free 15 days trial.
Avila Solar AutoCAD Plug-in for solar layouts. Monthly subscription. Contact us for 15 days trial.
14% Discount. Avila Solar AutoCAD Plug-in for solar layouts. Contact us for 15 days trial.


The workshop on the Economics of the Music of Carnival, scheduled for Friday April 26, 2019, will be a meeting of stakeholders to explore ways of enhancing the growth of revenue streams from carnival music.
The future of steel pan music.
The workshop on the Economics of the Music of Carnival is the second of four workshops in preparation for the Global Summit on the Economics of Carnival. There is no registration fee for this workshop. Lunch and refreshments will be served free of charge. Register early to reserve your seat.


Sold for $216,000 on November 16th of 2018.
We have 24 photos of 214 Bells Creek Drive.
Welcome to 214 Bells Creek Drive.
This home is a Three bedroom, Two bath Traditional style. The home sits on a 0.20 acre lot.
"Your Direction Home" points to 214 BELLS CREEK DRIVE. Immaculate ONE owner property, situated in the highly sought after Five Forks ... "Your Direction Home" points to 214 BELLS CREEK DRIVE. Immaculate ONE owner property, situated in the highly sought after Five Forks area is NOW on the MARKET! This home has been meticulously maintained and is move-in ready. From the lovely Southern front porch to the sprawling fenced backyard, this home has it all. The beautiful formal Dining room, Kitchen and Great room are centrally located and seamlessly flow between each other, which allows for easy entertaining. Imagine being able to prepare meals in your spacious Kitchen featuring granite countertops, subway tile backsplash and upgraded appliances! The formal Dining room boosts a gorgeous trey ceiling and the Great room features a corner gas fireplace with storage as a focal point. You will find on the 2nd floor a fabulous Master suite, 2 generous size Bedrooms and a Loft, which is perfect for watching your favorite game. The Laundry room is also located on the 2nd floor. The backyard is fully fenced and is ready for fall cookouts with family and friends. Why build in the coveted Five Forks area when you can have a meticulous ONE owner home in an established neighborhood with community pool and award winning schools!
You may also call our office at 864-757-4000 to arrange a viewing of 214 Bells Creek Drive.


The Music Program at the First Presbyterian Church of the Covenant offers opportunities to Sing and to Ring – All to the Glory of God.
The Covenant Choir rehearses on Thursdays in the music room at 7:15 p.m. and Sunday mornings at 10:30 a.m. Interested to see what choir is all about? Come and find out! The Covenant choir presents their offering of music to the congregation through a weekly anthem. On occasion, they will also present a hymn of the month or another special musical selection. Their anthems represent music from a wide variety of musical genres. No rehearsals during the summer months.
The Covenant Bells rehearse at 6:30 p.m. on Thursdays in the Sanctuary. No rehearsals during the summer months. This choir presents their offering of music to the congregation about one Sunday a month. Previous bell experience is desired and a strong sense of rhythm is necessary, in order to join this choir.
Youth: Greater than the Sum, for grades 6-12, meets directly after Youth Group from 5:45-6:30 p.m. in the Sanctuary on Sundays. All are welcome regardless of previous experience! Please feel free to come with suggestions for music that helps you to feel and explore your faith. This group will continue to sing, ring bells and explore a wide variety of genres and instrumentation as we together explore the music that the Spirit uses to speak to us.
Kids: Spiritual Formation/Music hour for ages 4 through 5th grade is from 9:30-10:30 a.m. on the third floor on Sundays. All are welcome!!
Junior Ringers: We will be starting a chimes group for kids younger than 6th grade on Wednesdays nights from 6:00-6:30 (directly following Connections Dinner) in the Music Room.
Missional Music Opportunity: We have been using music to welcome our Sunday Supper and Connections guests. If you are interested in sharing your gifts during these times, whether it be vocal or instrumental, one song or a set of music, a solo or group, please contact Monty Service.
Solo Opportunities: Throughout the year there are numerous opportunities to share your musical gifts. First Covenant members and members of the community are encouraged to contact First Covenant Choirmaster & Organist Leslie Weber to present a vocal or instrumental offering during Sunday worship services.
Piano Lessons: If you are interested in piano lessons, child or Adult, taught here at the church, please contact Monty Service. Lessons are $15 for 30 minutes, the money goes to the church. If you would like more information or to find out if this might be for you let Monty know!
If you have an interest in music, contact Leslie Weber, Choirmaster & Organist, at [email protected] for adult music or contact Monty Service, Coordinator of Missional Music, at [email protected] for children, youth & missional opportunities.


With cookies as big as Frisbees and muffins the size of softballs, it's no wonder our kids' waistlines are expanding as rapidly as our own. The truth is large portions have become the norm. Even a "small" soda, ice cream or serving of pasta or fries is as big as a "large" would have been 20 years ago.
So how do you help your kids pare back? By helping them learn about portion control.
Educating yourself and your children about serving sizes is a good first step. When looking at labels, note that the serving size does not tell you the amount you should be eating. It is simply a guide to help you see how many calories and nutrients - plus how much fat, sugar, and salt - are in a specific quantity of that food.
Sometimes, it's OK to eat more than the serving size listed. For instance, if a serving of frozen vegetables is one cup, it's no problem to serve or eat more. Most vegetables are low in calories yet rich in nutrients.
But when it comes to foods that are high in calories, sugar or fat, the serving size is a useful guide to alert you that you may be getting more than is healthy.
Let's say your son downs a 20-ounce bottle of lemonade. The label shows the serving size is 8 ounces. Not only did he have 2 1/2 servings, he also had 2 1/2 times the listed calories and 2 1/2 times the sugar.
It's important to take responsibility for our own portions and to help kids learn to do the same. Along with paying attention to serving sizes, try some of the following tips.
Use smaller plates or bowls. Your kids are more likely to pour or serve larger portions when using bigger plates or bowls. Using smaller dishes helps control portions while giving the visual impression that there is more food. Like grown-ups, their eyes are usually bigger than their stomachs. This means that they often will take more than they need to fuel up.
Avoid the "endless bag" syndrome. Large bags of pretzels or chips have what seems like countless servings. Kids are prone to munch through several servings if given the chance. Either buy single serving (one-ounce) bags, or simply dole out one or two servings into a small bowl.
Keep extra food off the table. Keep the food out of sight. That will give them the chance to really see if they are still hungry after finishing their portion, rather than just automatically going for an extra helping because it's on the table.
Be mindful when dining out. Restaurants are known for larger-than-life portions. If your kids are young enough, try to select from the children's menu. You can also consider ordering an appetizer portion. Or two (or three) kids can share one entree. Also, don't be tempted to go for the giant value meal or the jumbo drink just because it's only a few cents more. The "deal" quickly loses its value when it triples your family's calories!
Avoid the "clean your plate" syndrome. Did your parents make you finish your entire meal before you could get up from the dinner table? Experts now agree this sends the wrong message. It's important to teach kids to follow their own hunger cues - and to stop when they feel full, not when their plate is empty.
Aim for three scheduled healthful meals and one or two healthy snacks throughout the day. Skipping a meal often leads to overeating at the next one.
Add more salads and fruit to your family's diet. This can help control hunger and give a sense of fullness while controlling calorie intake.
Limit distractions. Encourage your kids to sit at the table for all meals and snacks. It's easier to overeat (or eat too little) when distracted by a TV or video game. You also want to teach kids to slow down and actually enjoy (and taste) their food. Meals can be a nice way to gather for some quality time with one another.


I connected my kit to Garageband for the first time last night using a USB cable. It works fine but so far I can only figure out how to use the kits in Garageband.
Is there a way I can use the Alesis on-board kits while connected to Garageband?
Only MIDI information is sent over the USB connection, not audio.
There are multiple posts on this subject.


I know, this image is a tough one but it's the reality in many parts of the world and you've got to be made of stone if it doesn't give you an uncomfortable feeling in your stomach.
Yes, it's happy days and holiday season for most of us but we've all probably spent a lot on Christmas presents, decorations and filled up fridges with food. It won't balance our spending madness but why not also donate something for a good cause. There are so many hard working organizations out there that need your support and I encourage you all to give a sum, small or big, I've chosen Save The Children, which is a global organization, you can donate gifts on the site or any amount you wish, and it's only a few simple clicks away.
Tomorrow will be a good day!


text:
Stephen Wynn-Davies
Sussex woman's shock after her dead cat is thrown in bin
A Sussex woman said she was 'shocked and upset' to find her dead cat had been thrown in a bin after it was found on the side of the road.
Fiona Bruce 'delighted' as she brings BBC One's Antiques Roadshow to Sussex
Thousands of people flocked to Sussex for filming of BBC One's Antiques Roadshow.
Fire breaks out at Worthing house
Two fire engines are at the scene of a house fire in Worthing.
Sussex couple living in boiler suits as thousands of 'toxic' caterpillars invade home
A couple have taken to wearing white boiler suits to avoid coming into contact with thousands of 'toxic caterpillars' which have invaded their home.
Worthing police officer 'assaulted by domestic abuse suspect'
A police officer was assaulted by a domestic abuse suspect in a busy evening for Worthing Police.
Police chase assault suspect through Bognor Regis
A man was arrested in Bognor Regis on suspicion of assault, police have confirmed.
Two vehicle collision partially blocks Littlehampton road
A road in Littlehampton has been partially blocked by a two car road traffic collision, according to reports.
13-year-old boy rescued from rough seas in Sussex
An inshore lifeboat was launched to rescue a 13-year-old boy who was struggling in rough seas in Sussex.
Fire service called to Worthing car park
Fire crews have been called to a Worthing car park after reports of 'loose plastic sheets' on the exterior of the building.
Woman raped in Sussex gardens
Police are investigating the rape of a woman in the grounds of Brighton Pavilion.
Ambulance collides with car in Sussex town
An ambulance collided with a car in a busy Sussex road on Friday night (June 7).
Queen's Birthday Honours: Sussex PCC included in 2019 list
Sussex PCC Katy Bourne has been awarded an Officer of the Order of the British Empire (OBE) for public and political services.
Missing Littlehampton teenager found in Chichester
Missing teenager Charlotte Edwards has been found.
Delays on A29 after collision
The A29 has been partially blocked both ways after a collision.
Former headteacher at West Sussex school charged with child sex offences
The former headteacher at a now-closed West Sussex school has appeared in court charged with sex offences against young boys.
Collision blocks A27 at Worthing
There are long delays on the A27 at Worthing after a collision.
Pedestrian dies in A27 collision
A pedestrian has died following a collision with a car on the A27, police said.
Boy, 14, convicted of administering hydrochloric acid to fellow pupil at Sussex school
A 14-year-old boy has been convicted of administering hydrochloric acid to a fellow pupil at a school in Sussex, police have confirmed.
Ricky Gervais in run-in with seagulls in Sussex town
Comedian Ricky Gervais was given a warm welcome to Sussex yesterday (Tuesday, April 16) ahead of his two shows at the White Rock Theatre.

redpajama_set_name: RedPajamaCommonCrawl


Welcome to Chapter 54 of the International Right of Way Association.
Our chapter, also known as the Sea to Sky Chapter serves British Columbia and the Yukon. We have approximately 100 members who serve industries such as oil and gas, utilities and municipalities.
Continuing education and training are very important to our Chapter so every year we offer several courses by qualified instructors. Please see the education page for more information.


A modern specialized center for Travel and Tourism.
Visiting countries and learning about their culture and history is a sign of your culture and your culture.
Our Belarusian companies, Blair Krupp and Extra Tour, offer a tourist program to Belarus(5) stars and (4) stars and (3) stars .


text:
'Oh, have you ever seen a better football team than the one that plays for West.
They come from miles away just to see them play, 'cause they say that WEST IS BEST!'
2022 Coaching & Support Staff
Team Selections
Coaching Coordinator
2022 Season Draw
From the Beginning 1910 - 1964
"Laddo" and the 1917 revolt
2021 Officials
Club Song
History of the Club
First Grade Records
First Grade GF Wins > > > >
Reserve Grade Records
Third Grade Records
Player Awards / Officials fr 1967
Club Officials 1910 to 2021
TEAM OF THE CENTURY
Rosellas Rise to the Occasion
1st Grade Grand Final Videos
1967 West v North
1978, 80,81 and 82
1991 West v Toronto
Video H'lts
2015 to 2019 Highlights
Listen to Frankie Davidson singing the West Song
The Miniature Champ
by Slim Hunter
Scott Bradley - Fullback
WEST'S TEAM OF THE CENTURY! - Scott Bradley - Fullback
Tag" Spruce - Fullback
Brett Cullen - Winger
Neil Gibson
Neil Gibson - Winger
John Cootes - Centre
Dan "Laddo" Davies
Dan "Laddo" Davies - Centre
Paul Skovgaard
Paul Skovgaard - 5/8
Tony Price - Halback
Dennis Ward - Halfback
David Howell - Lock
Peter Howlett - Lock
Wagga" Johnson - 2nd row
"Wagga" Johnson - 2nd row
John Raper - 2nd Row (C)
John Hobby - Prop
Steve Smith - Prop
Allan Buman - Hooker
Allan Dagwell - Hooker
Glen Maloney - Manager
There are no news items available!
Played 1992 – 2000. 199 games with 179 in 1st grade. Scored a record total of 1 896 points for West. Played in winning Grand Final sides in 1992, 1997, 1998 and 1999.
Geoff Spruce
Played 1964 – 1973. 239 games with 221 in 1st grade. Played in winning Grand Finals sides in 1966 and 1970.
Played 1995 – 2004. 195 games with 182 in 1st grade. Played in winning 1997, 1998,1999 and 2004 winning Grand Final teams. Scored a record 230 tries for Wes
Played 1951 – 1971. Parramatta 1952. Played 203 games with 164 1st grade. Played in winning 1961 Grand Final side.
John Cootes
Played 1967 – 1973. 92 games with 83 in 1st grade. Scored 98 tries and kicked 194 goals for West. Played in winning 1970 Grand Final side. 5 games for NSW, 7 Tests for Australia. 1969 Australian tour to NZ, 1970 World Cup in England
Played 1915/16 and 1920 – 1923. Played in winning 1915, 1916 and 1921 Final sides. Represented Newcastle against England in 1920 and New Zealand in 1921. (deceased)
Played 1997 - 2002 Played 126 1st grade games and no lower grade games - a club record.Played in winning 1997,1998,1999 and 2002 grand Final sides
Played 1988 – 2002. Played 240 games with 222 in1st grade. Played in the 1992 side and was Captain Coach of winning Grand Final teams in 1997, 1998 and 1999
Dennis Ward
Played 1973 – 1975. Played 63 First Grade games. Captain / Coach of West from 1972 to 1974. In 1973 was the first player selected directly from West for a Kangaroo Tour.
David Howell
Played 1977 – 1983. Played 116 games with 114 in 1st grade. Captain / Coach of winning Grand Finals in 1980, 1981 and 1982. Captain of the winning 1978 Grand Final
Peter Howl ett
Played with West 1970 – 1974. Played 116 games with 109 in 1st grade. Played in winning 1970 Grand Final team. Played 2 games for NSW in 1973.
Played with West 1958 – 1967. Played 173 games with 165 in 1st grade. Played in winning Grand Final teams in 1961 and 1966. Represented Newcastle against South Africa in 1963 and Great Britain in 1966.
John Raper
Rugby League Immortal. Captain / Coach of West 1970 to 1972. Played 40 games including 39 in First Grade. Captain / Coach of the winning 1970 Grand Final team. (Captain / Coach)
John Hobby
Captain Coach of West from West 1966 – 1969. Played 89 First Grade games. Captain / Coach of the winning 1966 Grand Final team. (deceased)
Played with West 1977- 1983. Played 132 games with 118 in 1st grade. Played in the 1978, 1980 ,1981 and 1982 winning Grand Final teams.
Allan Buman
Played with West 1961 – 1968. Played 123 games with 113 in 1st grade. Played in the winning 1961 and 1966 winning Grand Final teams. 9 games for NSW. 2 Tests for Australia against New Zealand in 1965. The first player selected for Australia directly from West.
Allan Dagwell
Played with West 1966 – 1980. 332 games with 301 in 1st grade – both are club records. Played in the winning 1970 and 1978 Grand Final teams. Played 2 games for NSW in 1975. Played in winning Country side in 1975 which defeated City. Played 13 games for Newcastle.
Glen Maloney At the conclusion of the Centenary Dinner the evening was reviewed. It was decided that "Mr West" - Glen Maloney, the person who has had the most influence on the West Rosellas, should be appointed as Team Manager. Glen was the initial Secretary / Manager of West Leagues Club and Secretary of the Football Club from 1953 to 1975. It's fitting that this 1969 photo has the No 1 on it - if anyone deserves to be No 1 at West it is Glen Maloney!!
E westsrosellas@gmail.com P Russell Petrie 0421 345 235
© 2010 West Rosellas | Sitemap | Privacy | Disclaimer | Website Design Newcastle - Redback Solutions


This February was the coldest in five years - and March isn't looking much better as the 'Beast from the East' continues to bite.
We've already seen school closures, with trains down, flights halted and many commuters unable to get to work.
And in some areas, temperatures have fallen below -10 degrees.
As a result, many families will be able to claim Cold Weather Payments this week - a Government scheme designed to support struggling households during times of particularly bad weather.
People in living in Cambridgeshire could receive a cash boost if they are eligible under the scheme's rules.
According to the Department for Work and Pensions, you may apply for a Cold Weather Payment if you are getting certain benefits.
Payments are made if the average temperature in a person's area is recorded as zero degrees celsius or below for seven consecutive days.
According the the Government's postcode search system, a weather station in Cambridgeshire recorded such a cold snap between February 23 and March 1 this year.
With temperatures set to hover around zero for the rest of this week, more residents could find themselves eligible for a payment.
To find out if cold weather payments are in force in your area visit: coldweatherpayments.dwp.gov.uk.


Please read these Terms and Conditions ("Terms", "Terms and Conditions") carefully before using the http://www.arielambulance.org website (the "Service") operated by Ariel Ambulance Restoration Project ("us", "we", or "our").
By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part of the terms then you may not access the Service. This Terms & Conditions agreement is licensed by TermsFeed to Ariel Ambulance Restoration Project.
Our Service may contain links to third-party web sites or services that are not owned or controlled by Ariel Ambulance Restoration Project.
Ariel Ambulance Restoration Project has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party web sites or services. You further acknowledge and agree that Ariel Ambulance Restoration Project shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such web sites or services.


Below are possible answers for the crossword clue Baal, e.g..
Still struggling to solve the crossword clue 'Baal, e.g.'?
If you're still haven't solved the crossword clue Baal, e.g. then why not search our database by the letters you have already!


Die-cut in the shape of Noah's Ark, this thick, big-trim board book gives kids a fantastical inside view of a bustling, floating menagerie. Make your way through one level of this jam-packed boat after another, with die-cut doors and windows allowing for a peek ahead and behind. With a simple rhyming text and eye-catching artwork, there will be no doubt why Noah's Ark is every kid's favorite Bible story.


text:
A Void
La Disparition (1969) is a novel by Georges Perec. The title is French for The Disappearance. It was translated to English as A Void. It is a 300-page French lipogrammatic novel, written entirely without using the letter e (except for the author's name), following Oulipo constraints.
1 Translations
2 Plot summary
3 Major themes
It was translated into English by Gilbert Adair, with the title A Void, for which he won the Scott Moncrieff Prize in 1995. Three other unpublished English translations are titled A Vanishing by Ian Monk, Vanish'd! by John Lee, and Omissions by Julian West.
The book has also been translated into German (by Eugen Helmlé as Anton Voyls Fortgang, 1986), Italian (by Piero Falchetta as La scomparsa, 1995), Spanish (El secuestro, 1997), Swedish (by Sture Pyk as Försvinna, 2000), Russian (by Valeriy Kislow as Исчезание [Ischezanie], 2005), Turkish (by Cemal Yardımcı as Kayboluş, 2006), Dutch (by Guido van de Wiel as 't Manco, 2009), Romanian (Serban Foarta as Disparitia, editura Art, 2010) and Japanese (by Shuichirou Shiozuka as Emmetsu(煙滅), 2010).
All translators have imposed upon themselves a similar lipogrammatic constraint to the original, avoiding the most commonly used letter of the alphabet. This precludes the use of words normally considered essential such as je ("I") and le (masculine "the") in French, and "me" and "the" in English. The Spanish version contains no a, which is the second most commonly used letter in the language (first is "e").
A Void's plot follows a group of humans looking for a missing companion, Anton Vowl. It is in part a parody of noir and horror fiction, with many stylistic tricks, gags, plot twists, and a grim conclusion. On many occasions it implicitly talks about its own lipogrammatic limitation, highlighting its unusual orthography. By and by, protagonists within A Void work out which symbol is missing, but find it a hazardous topic to discuss, as any who try to bypass this story's constraint risk fatal injury. Philip Howard, writing a lipogrammatic appraisal of A Void in his column, said "This is a story chock-full of plots and sub-plots, of loops within loops, of trails in pursuit of trails, all of which allow its author an opportunity to display his customary virtuosity as an avant-gardist magician, acrobat and clown."
Major themes
Both of Georges Perec's parents perished in World War II, and he was brought up by his aunt and uncle. Warren Motte, writing an article on Perec in the literary magazine Context, picks up on this and interprets the themes of the book as follows.
The absence of a sign is always the sign of an absence, and the absence of the E in A Void announces a broader, cannily coded discourse on loss, catastrophe, and mourning. Perec cannot say the words père ["father"], mère ["mother"], parents ["parents"], famille ["family"] in his novel, nor can he write the name Georges Perec. In short, each "void" in the novel is abundantly furnished with meaning, and each points toward the existential void that Perec grappled with throughout his youth and early adulthood. A strange and compelling parable of survival becomes apparent in the novel, too, if one is willing to reflect on the struggles of a Holocaust orphan trying to make sense out of absence, and those of a young writer who has chosen to do without the letter that is the beginning and end of écriture ["writing"].
In French, the phrase "sans e" ("without e") sounds very much like "sans eux" ("without them"), another encrypted reference to loss.
Gadsby, another novel without the letter 'e'.
Le Train de Nulle Part, a novel without any verbs.
Unless indicated otherwise, the text in this article is either based on Wikipedia article "A Void" or another language Wikipedia page thereof used under the terms of the GNU Free Documentation License; or on research by Jahsonic and friends. See Art and Popular Culture's copyright notice.
Retrieved from "http://www.artandpopularculture.com/A_Void"
This page was last modified 18:22, 8 December 2022.


The No. 9 Pittsburgh Panthers (15-4) lost for the second straight game, losing to Seton Hall 64-61 Sunday afternoon.
The Panthers who have been the talk of the Big East after a 5-0 start are now 5-2 in conference play after back-to-back losses. Pitt's five-game road win streak was also snapped.
Former Pitt recruit Herb Pope had 19 points and nine rebounds, leading Seton Hall to their biggest win in over four years since head coach Bobby Gonzalez took over at Seton Hall.
Ashton Gibbs led Pitt with 23 points but was 4-for-15 from the field and 1-for-7 from 3-point range. It was an off night for Gibbs who for his part was 14-for-14 at the free throw line.
Jermaine Dixon added 11 points for Pitt as the Panthers only had two players score double-digit points.
Pitt rebounded defensively after Wednesday's lackluster performance but were not efficient in the offensive end, shooting 33.3% in the second half. Overall, Pitt shot just 35.3 percent (18-51) from the floor, its third worst field goal percentage on the year.
This was a game that got away from Pitt but in the Big East, these type of losses are going to happen.
A cocern for Pitt moving forward is their lack of secondary scoring.
*The loss drops Pitt to 15-4 overall and 5-2 in the Big East Conference. Seton Hall improves to 12-6 overall and 3-4 in the Big East. The Panthers are back in action on Thursday at home against St. John's in what will be a crucial game for the Panthers.
*Pitt lost two consecutive games for only the seventh total time since Jamie Dixon took over as head coach. Pitt has lost three consecutive games only two times since the 2003-04 season.


Colorado Merchant is exactly what it sounds like: Simple, Friendly, Reliable. We are based out of Fort Collins with support call centers based in Denver. When it comes to Merchant Processing, we strive to provide the best customer service, lowest rates, and all other solutions for your card payment needs. Colorado Merchant is teamed up with the top processors in the U.S. and offers you over 40 years of experience in the industry to bring you the highest quality of service and support. With us, accepting credit cards doesn't have to be a hassle. Not only do we make it easy, we make it inexpensive as well. We'll be here to answer all your questions, provide you with all of your solutions, and make things simple for you when it comes to accepting cards at for your business.
Call today or click to find out how you can get started!


Cheesecake.com began cheesecake delivery in 2002 by offering a wide assortment of cheesecake varieties that could be delivered to virtually any home or business in the United States.
No coupons have been found for Cheesecake.com although you will still receive 6% Cash Back by shopping with Mr. Rebates!


The ISH brings two trade fairs together under one roof: energy building and air-conditioning technology and the bathroom experience. Held every two years ISH draws around 2,400 companies together onto a fully booked trade fair site (250,000 square metres) - including all market and technology leaders. See the unique range of products and services for yourself at the next ISH in Frankfurt am Main from 15 to 19 March 2011!


text:
Category: Books,Justice,Prose/Essays — Seven @ 7:52 pm
I squawked about this on Twitter several days ago and posted it on my MJJ-777 Facebook page last Friday. Now, everyone in the MJ fan community is abuzz about it. Guess it took them a while to catch up with the news.
The GQ article "Was Michael Jackson Framed?" by Mary A. Fischer is now available on Amazon: http://www.amazon.com/Was-Michael-Jackson-Framed-Superstar/dp/0786754133.
If you have a Kindle, it's also available in that format for only $2.99: http://www.amazon.com/Was-Michael-Jackson-Framed-ebook/dp/B009G1SX0S/ref=tmm_kin_title_0
From the Amazon writer bio:
Award-winning writer and journalist Mary A. Fischer has tracked down crime and corruption stories from around the world for national magazines including, GQ, The Atlantic, Los Angeles Times magazine, New York, Rolling Stone, Men's Journal, O-Oprah, ELLE and AARP.
Twice she has been ranked as one of the top five print reporters in the U.S., when two of her GQ articles, including her cover story on Michael Jackson, were finalists for the National Magazine Award.
Known for pursuing under reported stories, Fischer is credited with breaking several high-profile criminal cases, among them, the '93 Michael Jackson case originally published in GQ, and the McMartin Preschool child molestation scandal. She was the first print reporter to take the controversial position, backed up by her six-month investigation, that there was no credible evidence against the McMartin defendants and the allegations against them were not credible.
In her memoir Stealing Love, Fischer tells the personal story of why she is passionately drawn to stories, and life situations, of injustice.
She lives in Los Angeles and is at work on another eBook and a news-making journalist project, this time in Washington D.C.
Joe Vogel, author of "Man in the Music, the Creative Life and Work of Michael Jackson" and the recent article "Studying Michael Jackson", says this about the Mary Fischer piece (via Twitter):
Mary A. Fischer was one of few voices of reason and fairness during the first MJ extortion case. Highly recommend this.
-Joe Vogel
Well, I've got my copy. I think this was and is a very important voice in the sensational pro-guilt wilderness surrounding the allegations against Michael. There were and sadly still are few factual and objective voices on the subject. Among a few others, I'm happy to support this one, too.
Tags: Books, Justice, Mary A. Fisher, Prose/Essays, Was Michael Jackson Framed
11 Responses to ""Was Michael Jackson Framed?" – Original GQ Article Available on Amazon!"
Nindy Hunt says:
Thank you for this info about "Was Michael Jackson Framed". I will help spread the word of this to the other fans.
Meap says:
October 1st, 2012 2:20 am
I had read this article earlier, but I read it again now. It brings tears to my eyes, Seven. How did Michael get through all this? Imagine a life where you cannot trust. And yet he shone so bright. This is what I believe: Because he spent all his life in the public eye, he always spoke his inner truth. Over the past years I have read and listened to much of Michael Jackson. Much thanks are to your untiring efforts and your steadfast love for MJ. And the passing years simply increase the injustice of all that Michael suffered. It's clear for all to see: Michael Jackson was exactly who he said he was. No secrets, no lies. He lived at a dimension that drove some people crazy with jealousy. So crazy that they went to any length to hurt, harm and maim him. How hard it must be for his three children to be without their father.
I salute you for what you do, Seven. Your courage and commitment are inspiring. It inspires me to look for the truth in all things and stand by it.
Nino says:
October 1st, 2012 12:04 pm
Boy, they really do take their time, don t they?! Still have the original GQ magazine… Sweet Michael!
Art Chick says:
October 1st, 2012 3:33 pm
I don't know if my comment went through. I got a message saying the site was offline. Then it didn't display properly. So trying again. Forgive me if this is a repeat. Just wanted to be sure you get it. This article can be read in full online here:
http://www.buttonmonkey.com/misc/maryfischer.html
Sina says:
Seven thanks for the reminder.I had also read the article before and cant believe its almost 20 years ago.
In spite of the medias witchhunt, at that time the majority of the public were still in favor of Michael and didnt believe the allegations. The article helped a great deal.
Things took a turn after Bashir succeeded in manipulating the public as most people behave like sheep and let themself be manipulated.
I still feel angry and frustrated that in this age a man was tortured to death in front of the whole world and we all let it happen.
carina for mjj says:
October 2nd, 2012 10:18 am
Thank you so much for your posts on Michael.In this post"Was Michael Jackson framed" that I read a few days ago I was able to connect to Matt Seminos article written on 9.30 2012.It was exellent and especially moving due to the last sentence in that article.:Why was it necessary to shoot the messenger.When I tried later to connect to that article again I was repeatedly unsuccessful.I owe you many thanks for letting me be aware of this good writer though.
As you may remember I have always admired the photos and pic.s on your post. Now that Michael is dead I understand there cannot be any new or current ones.You may have some in in your archive, if so please let the public see them.
maguk says:
October 3rd, 2012 4:00 pm
Dear Seven.. today I have done two things. I have read the Mary Fischer article,(which I have read before) and watched the 1988 Wembley concert (included in the Bad 25 set). The concert was fantastic in every respect (oh those lucky people who were there!), but one of the special bits for me, was Michael presenting his musicians and singers towards the end . I just thought it showed his sincerety, humility and loving spirit so well, and I couldn't help thinking about what was to come for him, and that made me both angry and sad.
I believe that gradually some people are revising their opinion of Michael,and am pleased to see positive articles appearing now and again.
Thankyou for letting us know this GQ artcle is available on Amazon. I'm sure there are lot's of fans who are not aware of it's exisitence, and hopefully there may be some non-fans who will be intrigued enough to buy it, as it's not too expensive, and who knows it may inspire some to find out even more about the "real" Michael. We can only hope !
I just wish I was able to say that with the passage of time Michael's loss becomes easier. However for me it often feels even harder to bear. I find it very difficult to believe that these allegations and their consequences did not contribute to his early death .. all so heartbreakingly unnecessary.
I should also like you to know I agree wholeheartedly with your decision not to permit comments on "Abortion Papers".
Thankyou for all your invaluable posts and keeping us up to date with Michael "news"
Why do you think MJ hasn't won things such as the Presidential medal of freedom or been honored at something like the Kennedy Center Awards….despite EVERYTHING he has achieved.
Just wondering….. =[
Venice says:
October 28th, 2012 4:01 am
I know this is hard to bear. It's heartbreaking to read all that Michael had to endured during his short time on Earth. He was such a beautiful man but these allegations and the 2005 trial had taken a toll on him. I only hope Michael is at peace now and no one can harm him anymore. He is safe in God's arms and only left us, his fans with lots of memories and tears. We love you, Michael.
TLS says:
Yes, it's good that this will be more widely read. I created a PDF from an online version of it years ago, having learned, like carina, that things "disappear" from the net all the time.
But I wanted MJ777 readers to know you don't have to buy a Kindle to read the Kindle version on your computer–just download the reader program for free and then buy the inexpensive electronic version from Amazon if you don't want a printed copy. That's how I'm reading "Behind the Mask: What Michael Jackson's Body Language Told the World." It can't go into the "factual" category of books about Jackson, but I enjoy reading the author's comparison of MJ's body language to that of the contemptible Martin Bashir.
Billie Jean lover says:
Hi, guys. MJ fan here. I read MJfacts "rebuttal" to this article which was only a huge rant based on Raymond Chandler's lies, with barely an sources quoted or anything. It also was written in an unsophisticated manner, which leads me to believe that it was written by some one last minute without much knowledge of the rules of grammar. Granted Fischer might have been slightly inaccurate on certain points, but on the whole it was great and very indicative of the Chandler family.


Melton RFC Under 11s a had brilliant start to the season on Sunday morning, playing under new rules.
Playing against Ilkeston, they showed improved teamwork, passing, rucking and mauls.
The Melton youngsters lost the first match 9-7, but won the second 5-4. Great passing along the line set up some tries, while others were created by line breaks and good pace.


text:
Sports, Baseball /
Nolan Ryan Autograph
Lynn Nolan Ryan Jr. (born January 31, 1947), nicknamed "the Ryan Express", is an American former professional baseball pitcher and sports executive. Over a record 27-year playing career in Major League Baseball (MLB) spanning four decades, Ryan pitched for the New York Mets, California Angels, Houston Astros, and Texas Rangers. After his retirement in 1993, Ryan served as chief executive officer (CEO) of the Texas Rangers and an executive advisor to the Houston Astros. He was inducted into the Baseball Hall of Fame in 1999, and is widely considered to be one of the best MLB pitchers of all time. More about Nolan Ryan
Current items with a signature of Nolan Ryan
These are the most current items with a signature of Nolan Ryan that were listed on eBay and on other online stores - click here for more items.
1968 Topps #177 NOLAN RYAN Rookie Card Mets HOF Facsimile Autograph Auto REPRINT - Baseball Card $8.95
1995 Upper Deck Collectors Choice NOLAN RYAN GOLD SIGNATURE card #52 Best 90s $29.99
2001 Upper Deck Legends of New York Nolan Ryan/Tom Seaver Facsimile Autograph Reprint - Mint Condition $9.95
2021 Leaf Ultimate Memorabilia Nolan Ryan Signature 15/16 $149.99
2022 Leaf Lumber Signature Nolan Ryan Auto 39/40 $159.99
2022 Leaf Lumber Signature Nolan Ryan Auto 8/40 $149.99
Nolan Ryan Navy Houston Astros Autographed Mitchell & Ness Cooperstown Collection Replica Jersey $399.99
Nolan Ryan Signed 1995 All Star Baseball Texas Rangers Autographed PSA COA $199.99
Nolan Ryan Signed 87 Topps Astros Baseball Card $150.00
Nolan Ryan Texas Rangers Autographed 2004 Playoff Prime Cuts Relic #32 Card - #47/50 $299.99
Texas Rangers Nolan Ryan Framed Piece Laser etched Signature FREE SHIP $125.00
Traded items with a signature of Nolan Ryan
In total, we tracked 8955 items since 01/01/2008. The chart below shows the trade volume over time.
If you're interested in Nolan Ryan Rookie cards you might want to take a look at our sister site that specializes in Baseball Rookie Cards only.
The most expensive item with a signature of Nolan Ryan (Nolan Ryan 2018 Panini Flawless 5714 K's Dual Jersey Signed PSA NM-MT 8 AUTO 10) was sold in July 2021 for $9999.00 while the cheapest item (Nolan Ryan Signed Plaque "Don't Mess With Texas" Vintage Rare Limited Amount) found a new owner for $0.01 in May 2020. The month with the most items sold (219) was April 2020 with an average selling price of $28.00 for an autographed item of Nolan Ryan. Sold items reached their highest average selling price in October 2018 with $134.47 and the month that saw the lowest prices with $17.50 was June 2009. In average, an autographed item from Nolan Ryan is worth $50.00.
Most recently, these items with a signature of Nolan Ryan were sold on eBay - click here for more items.
1990 Fleer Update NOLAN RYAN Signed Autographed Baseball Card Beckett BAS #U-131 $148.00
1990 Signed Autographed Upper Deck Nolan Ryan 5000 Strikeouts Card With JSA COA $63.00
2004 Topps Chrome Refractor Nolan Ryan Houston Astros HOF Signed AUTO 19/25 $888.55
METS ASTROS RANGERS: Nolan Ryan Signed Autographed 3x5 Index Card! $28.87
Nolan Ryan Cooperstown Autograph 58/75 Panini $64.19
Nolan Ryan Signed Autographed Rawlings Baseball w/ COA HOF $65.00
NOLAN RYAN-PITCHER-CALIFORNIA ANGELS #20- VINTAGE-AUTOGRAPHED-HALL OF FAMER $76.07
SGC Nolan Ryan Signed 8x10 Photo Framed New York Mets SGC Certificate & Hologram $100.00
SPECIAL SALE Nolan Ryan autograph 8x10 color photo w/coa (0) $21.50
Throwing Heat by Nolan Ryan and Frommer's Staff (1988, Hardcover) SIGNED!! $66.00
Nolan Ryan signed Baseball Trading Cards by Manufacturer
1983 Donruss
1993 Upper Deck
Latest News about Nolan Ryan
Nolan Ryan Had a Softer Side. He Just Hid It (Very) Well. (07/21/22): A new documentary explores the unique challenge of facing Ryan, the game's most prolific strikeout artist, but also shows off a gentler version of the Ryan Express.
On this date: Nolan Ryan vs. Robin Ventura, 27 years ago (08/04/20): On August 4, 1993, 46-year-old Nolan Ryan plunked 26-year-old Robin Ventura, and then got the better of him in the ensuing melee.
Nolan Ryan threw hard -- in his prime and in his 60s (04/14/20): One time, Ryan struck out the first batter of the game on three pitches. Ralph Garr walked back to the dugout and told his teammates, "This game is over."
White Sox Talk Podcast: Distant Replay: Robin Ventura vs. Nolan Ryan (11/19/19): In the latest edition of Distant Replay, we go back to August 4, 1993, when Robin Ventura famously charged the mound against future Hall of Famer Nolan Ryan, reliving the game and digging up stories you've never heard.
Astros, Nolan Ryan part ways (11/07/19): The Astros and Hall of Fame pitcher Nolan Ryan have parted ways. Ryan had been an executive advisor in the front office. His son Reid was also effectively demoted.
Older News Stories about Nolan Ryan
Astros shake up front office as Nolan Ryan leaves adviser role, owner's son join (11/2019): The Astros continue to alter the look of their front office
Letters: Mike Pompeo, Josh Brent, Confederate plaque, Facebook, Rangers Ballpark (12/2018): HedRe: Pompeo takes aim at global institutions — Secretary of state says groups such as the U.N. are in need of change, Wednesday news story.I...
Nolan Ryan's Hall plaque headed to Texas for 2-night stand (04/2015): COOPERSTOWN, N.Y. (AP) Nolan Ryan's Hall of Fame plaque is taking a road trip.
Nolan Ryan Hall of Fame Plaque to Leave Cooperstown, Visit Dell Diamond (03/2015): ROUND ROCK, Texas - The National Baseball Hall of Fame plaque of Nolan Ryan will be leaving its home in Cooperstown, NY for the first time in history.
Pedro Martinez: Nolan Ryan, Bret Saberhagen Were My Heroes Growing Up (01/2015): Pedro Martinez is a hero to many, but even the Boston Red Sox great has...
Eovaldi Express: New Yankee pitcher's Nolan Ryan connection (12/2014): Nathan Eovaldi was born in Houston, but raised in Alvin, a small Texas town famous for another fireballing pitcher. Growing up, Nolan Ryan was "everywhere," Eovaldi recalls, even on highway names. Eovaldi couldn't help but admire him.
Nolan Ryan Junior High STEM series aims to inspire students (11/2014): Teachers at Nolan Ryan Junior High have a new tool to inspire students: the STEMulation Academy After School Program. The once-a-month series is designed to offer students expanded opportunities to le
Nolan Ryan endorses proposed Fort Worth arena (10/2014): Fort Worth residents have until Nov. 4 to vote on funding options for the proposed 14,000-seat arena for the Cultural District.
Musicians + Sports: Chase Bryant On Nolan Ryan And Texas Baseball (09/2014): The "Take It on Back" singer does just that as he reminisces about the glory days of the Houston Astros and watching the legendary Baseball Hall of Fame pitcher Nolan Ryan hurl when he was a kid.
Nolan Ryan World Series canceled (07/2014): FARMINGTON — The Nolan Ryan World Series has been canceled. The series, which is for players ages 13 and under, was set to take place July 26 to 31 in Farmington at the Sports Complex.
Kershaw's gem was great, but batters feared Nolan Ryan (06/2014): Ron Rapoport: Was Clayton Kershaw's no-hitter more impressive than Nolan Ryan's 17-strikeout gem for the Angels in 1973? Ron Rapoport, who covered that game for the LA Times, considers the question.
Baseball's legendary Nolan Ryan talks ranch life, Little League memories and his (05/2014): This month, the pitcher releases: The Nolan Ryan Beef & Barbecue Cookbook, recipes that tell stories about his other passion: his second life as a cattleman.
Nolan Ryan's great-niece Dana Hendry of Rutgers softball has game in her blood (04/2014): PISCATAWAY — During her annual summer visits to Texas to visit her great-uncle Nolan, Dana Hendry has watched fireworks from the field after a Texas Rangers game and played Wiffle ball with her extended family inside a minor-league ballpark, but she hasn't yet sought advice on calling pitches.
Nolan Ryan to throw out first pitch Opening Day (03/2014): Two Astros legends will assume their original playing positions for the ceremonial first pitch on April 1 during the Astros 2014 Opening Day pregame festivities.
Astros name Nolan Ryan executive advisor (02/2014): The Houston Astros have named Hall of Fame pitcher and former Astro Nolan Ryan as the club's Executive Advisor, Astros Owner and Chairman Jim Crane announced today.
Could Nolan Ryan Move Quickly From Consultant To President/GM Of The Houston Ast (01/2014): Hall of Famer Nolan Ryan has met with the Houston Astros about a yet determined position. Could this simply be the first in a larger plan?
Nolan Ryan headlines Hooks banquet (12/2013): CORPUS CHRISTI – The Hooks' 10th season is just 111 days away.
Nolan Ryan rumored to be considering run for agriculture commissioner (11/2013): Try The Dallas Morning News premium site free for 4 weeks! Sign up with your email address and start using our newly designed experience optimized for tablet and desktop.
Mark Cuban Made More Money From Texas Rangers Than Nolan Ryan (10/2013): Mark Cuban is so smart that he even wins when he loses.
Nolan Ryan honored for more than pitching (09/2013): Hall of Famer, Texas Rangers exec built baseball team's greatness on and off the field.
Victoria man remembers going up against Nolan Ryan (08/2013): Victoria man remembers going up against Nolan Ryan (video)
Reid, Nolan Ryan coming to a grill near you (07/2013): Fans in Houston could soon get the chance to see Astros president of business operations Reid Ryan dueling with his father, Nolan Ryan, over a hot grill.
Nolan Ryan not worried about losing Nelson Cruz (06/2013): Cruz's name was linked to the ongoing investigation in a report on ESPN's "Outside the Lines."
Yu Darvish modest over Nolan Ryan's Verlander comparison: 'Justin Verlander is t (05/2013): Yu Darvish is flattered by the praise but hardly thinks he is worth it.
Nolan Ryan staying put as CEO of the Rangers (04/2013): Texas Rangers ceo Nolan Ryan looks into the stands Wednesday during the game against the Tampa Bay Rays at Rangers Ballpark in Arlington. / Tim Heitman, USA TODAY Sports
Nolan Ryan : No time frame to decide future with Rangers (03/2013): The club CEO will be with the Rangers for the season and home openers, sources say.
A.J. Pierzynski: Former Twin is Nolan Ryan's kind of guy (02/2013): SURPRISE, Ariz. -- It takes one to know one.
Nolan Ryan to Speak at Banquet (01/2013): Albany will soon be host to one of the most famous names in Major League Baseball.
Nolan Ryan to Release Beef Cookbook With Some of Fiery Ace's Favorite Recipes (11/2012): The first thing most baseball fans want from Hall of Famer Nolan Ryan is pitching advice. A close second may be recipes on the best ways to cook beef, of which Ryan is reportedly a master. Salivating baseball fans will get their wish in 2014, as Ryan is set to release a cookbook with his [...]
Nolan Ryan, sons eye Ottawa baseball stake (10/2012): Ottawa's new professional baseball team could have a legendary Hall of Fame pitcher as one of its owners.
Nolan Ryan comments on Roger Clemens' potential comeback (08/2012): If Roger Clemens does return to the majors this season, most people believe the Astros will be the team that employs the 50-year-old pitcher.
Josh Hamilton has no problem with Nolan Ryan's comments (07/2012): Rangers slugger Josh Hamilton is hitting just .199 in 156 at-bats over 42 games since the start of June, but he still has a .290 batting average this season.
Nolan Ryan Is Heading To Irving (06/2012): Nolan Ryan to speak at Forum Luncheon The Greater Irving-Las Colinas Chamber of Commerce is pleased ...
Mariners make Nolan Ryan wonder about Texas scoreboard (05/2012): Mariners make Nolan Ryan wonder about Texas scoreboard
Nolan Ryan speaks at Sam Houston State (04/2012): Nolan Ryan made his way to Huntsville as part of the Sam Houston State President's Speaker Series and talked about his one-time desire to play baseball at Texas A&M
Nolan Ryan baseball tops Rotary Bee's auction list (03/2012): A baseball signed by Nolan Ryan, a flat-screen television and gift certificates galore from local businesses are among the items to be auctioned during the Atlanta Area Rotary Club's 12th Annual Shrimp Feast, Spelling Bee, Live Auction and Bake Sale.
Best of West: Another Nolan Ryan no-hitter (02/2012): PORT ARTHUR — EDITOR'S NOTE: The following column from the Best of West Collection was originally published in the Port Arthur News on May 3, 1991.
Nolan Ryan confident Rangers will sign Darvish (01/2012): Texas president impressed by first meeting with Japanese pitcher
Nolan Ryan speaks in East Texas (12/2011): Hall of Famer talks baseball in Tyler...
Nolan Ryan donates items for local auction (10/2011): By Earl Vaughan Jr. Staff writer Peggy Koonce's friendship with the wife of Texas Rangers principal owner Nolan Ryan has helped her land some impressive memorabilia for her church's upcoming charity auction.
21 Best Rangers Ever: Nolan Ryan (09/2011): Arguably the key moment in the history of the Texas Rangers happened on December 7, 1988. That was the day that Nolan Ryan signed a free agent deal with the Texas Rangers, setting the beleaguered franchise on a course that's still taking shape.
Nolan Ryan confirms Rangers' interest in Berkman (08/2011): Dallas Morning News says Cards outfielder is 'prime target' after Cruz's injury.
Texas Rangers president Nolan Ryan pitches wildfire prevention in Forest Service (07/2011): The ad features Ryan, a hall of fame pitcher, beaning a man about to start a campfire despite hearing burn-ban warnings on the radio.
Pitching legend Nolan Ryan makes Waco stop (06/2011): Nolan Ryan spent part of his Saturday in Waco playing in a benefit golf tournament for the Texas Sports Hall of Fame.
Verlander speaks about injured vets, baseball and Nolan Ryan (05/2011): When he was a kid, he chucked a rock across an entire pond right after his father threw a similar sized rock only about halfway across. From about that time on, he has been a pitcher with an arm and velocity like few others.
Nolan Ryan Sets the Bar Nice and High (03/2011): You can't afford to disappoint the owner.
The Biography Content and picture on top of this page is available under the Creative Commons Attribution/Share-Alike License; additional terms may apply.