text:
Feature Issue on Parenting Teens and Young Adults with Disabilities | Spring/Summer 2006
Youth with Disabilities Just Want to Grow Up John Agosta Article
Expectations, Reality, and the Road Ahead Kerri Melda Article
The Family Life Cycle and Significant Intellectual Disability Ann and Rud Turnbull Article
Supporting Healthy Adolescent Development for Youth with Disabilities Kris Peterson Article
Eight Effective Steps to Employment Success Cary Griffin and Dave Hammis Article
SSA Employment Support Update Mary Hoover Article
Involving Youth with Disabilities in Community Service Activities John G. Smith, Ann Mavis, and Julia Washenberger Article
Postsecondary Education for Young Adults with Disabilities: What Families Can Do Kelly D. Roberts Article
Ways to Enhance Social Inclusion Brian Abery Article
Sex, Dating and Disability: How to Help Youth Make Healthy Choices Rebecca Hare Article
Learning Life Skills: The Resources Found in Centers for Independent Living David Hancox Article
The Power of Community Henry Barclay III Article
Person-Centered Planning for Students Article
Supporting Self-Advocacy for Youth Chester Finn Article
Assistive Technology and Transition Planning Tom J. Nurse Article
Making a New Home: Options for Young Adults to Live Away From the Family Home Bob Prouty Article
What Does Health Have to Do with Transition? Everything! Article
Honoring Values and Needs: Personalizing the Transition Planning Process Pam Stenhjem Article
Supporting Culturally Sensitive Transition Planning for American Indian Youth Vern Zacher (Ojibwe), Jean E. Ness, and Dennis Olson (Ojibwe) Article
How to Avoid Being Roadkill on the Road to Transition Katherine Carol Article
Graduation and Beyond: Beth's Story Cathy Ficker Terrill Article
The Ups and Downs of Finding a Support Person: Andreas' Story Susan Yuan Article
If I'd Known Then What I Know Now... Julia Washenberger Article
Impact Feature Issue on Parenting Teens and Young Adults with Disabilities
Assistive Technology and Transition Planning
Tom J. Nurse is Co-Founder, along with his daughter Shelby, of Disability Resource Associates, Clearwater, Florida
These are exciting times in which we live. The opportunities to use assistive technology as a tool to support the activities of youth and adults with disabilities have never been better. When assistive technology is combined with transition planning, the scope of opportunities for achieving life goals broadens greatly.
Assistive technology refers to "any item, piece of equipment, or product system that is used to increase, maintain, or improve functioning of individuals with disabilities"; it can be as simple as a pencil grip or complex as a touch-screen computer (Family Center on Technology and Disability, 2006a). This brief article offers some ideas, resources, and things to consider related to assistive technology and transition. This is a topic of particular passion for me as a parent of a wonderful 14-year-old daughter, Shelby, who has cerebral palsy and utilizes assistive technology every day.
Start Early, But it's Never Too Late
As a child learns new skills, those skills build the foundation for acquiring related higher-level skills. For a child with a disability, development may be slower, requiring more time, more repetition and a willingness to learn other ways to be successful, including utilizing assistive technology. For example being able to answer a yes-or-no question is the start to being able to engage in conversation, yet if a disability creates a barrier to communication then assistive technology may be a valuable tool to help make communication possible.
By law, a student's assistive technology needs must be considered in development of their individualized education program (IEP); it may be referred to as "assistive technology" in some IEPs, while in others it may be "accommodations, supports, program modifications or supplementary aids and services" (Family Center on Technology and Disability, 2006b).
Under IDEA 2004, transition planning must start no later than the first IEP to be in effect when the child turns 16. However, in reality earlier is often better. IDEA 2004 also states that a Transition IEP broadens formally to "a results- oriented process, that is focused on improving the academic and functional achievement of the child with a disability to facilitate the child's movement from school to post-school activities..." (National Dissemination Center for Children with Disabilities, 2005). Assistive technology needs should be included as part of the discussion to determine if a Transition IEP may be needed earlier than age 16, as well as included in the IEP itself.
Think Across Settings
Children and youth learn in all their environments, not just in school. Therefore, it's critical to consider utilizing assistive technology in all the child's environments including, home, school, and in the community. For example, independent living skills include tasks such as turning on lights, calling for assistance, changing the TV channel or talking on the phone. Typically these are more frequently part of home life, not the school day. However, often the expertise on how assistive technology could be utilized to develop these skills exists with the school-based assistive technology professionals. Successfully combining assistive technology considerations in all the child's environments requires communication between the family and school, which allows everyone to share their perspectives and expertise.
The steps below do not always occur in the same order and sometimes you have to go back and try again. But, they provide a starting point for evaluating how assistive technology can benefit a child in school and beyond into adult life:
Establish an understanding of the child's present level of academic performance by utilizing your state's standardized grade level student expectations to identify both areas of strength and where additional assistance may be needed.
Establish an understanding of the child's present level of functional performance by utilizing a tool such as the WATI Assistive Technology and Transition forms (www.wati.org/products/freematerials.html).
Develop a written vision of life after high school in a detailed post-school outcome statement. This statement can help the Transition IEP team identify needed supports and services.
Consider whether assistive technology can help achieve the outcomes.
Identify who's going to do what in acquiring the technology, providing training in its use if needed, and funding it. Also determine whether the funding source will allow the technology to go with the student into post-high school education and work.
Finally, as the old saying goes, "The harder you work, the luckier you'll get." Good luck.
Family Center on Technology and Disability. (2006a). Assistive technology and the IEP. Retrieved from www.fctd.info/resources/AT_IEP.php
Family Center on Technology and Disability. (2006b). Assistive technology glossary. Retrieved from www.fctd.info/resources/index.php
National Dissemination Center for Children with Disabilities (NICHCY). (2005). IDEA reauthorized statute: Secondary transition. Retrieved from www.nichcy.org/reauth/tb-second-trans.pdf.
Goto Previous Page Supporting Self-Advocacy for Youth Chester Finn Article
Goto Next Page Making a New Home: Options for Young Adults to Live Away From the Family Home Bob Prouty Article


This PR updates pytest from 4.0.1 to 4.4.1.
- `4810 <https://github.com/pytest-dev/pytest/issues/4810>`_: Logging messages inside ``pytest_runtest_logreport()`` are now properly captured and displayed.
- `4861 <https://github.com/pytest-dev/pytest/issues/4861>`_: Improve validation of contents written to captured output so it behaves the same as when capture is disabled.
- `4898 <https://github.com/pytest-dev/pytest/issues/4898>`_: Fix ``AttributeError: FixtureRequest has no 'confg' attribute`` bug in ``testdir.copy_example``.
- `4768 <https://github.com/pytest-dev/pytest/issues/4768>`_: Avoid pkg_resources import at the top-level.
- `4724 <https://github.com/pytest-dev/pytest/issues/4724>`_: ``pytest.warns()`` now emits a warning when it receives unknown keyword arguments.
- `2753 <https://github.com/pytest-dev/pytest/issues/2753>`_: Usage errors from argparse are mapped to pytest's ``UsageError``.
- `3711 <https://github.com/pytest-dev/pytest/issues/3711>`_: Add the ``--ignore-glob`` parameter to exclude test-modules with Unix shell-style wildcards.
Add the ``collect_ignore_glob`` for ``conftest.py`` to exclude test-modules with Unix shell-style wildcards.
- `4698 <https://github.com/pytest-dev/pytest/issues/4698>`_: The warning about Python 2.7 and 3.4 not being supported in pytest 5.0 has been removed.
install pytest 5.0 on those interpreters.
- `4707 <https://github.com/pytest-dev/pytest/issues/4707>`_: With the help of new ``set_log_path()`` method there is a way to set ``log_file`` paths from hooks.
- `4651 <https://github.com/pytest-dev/pytest/issues/4651>`_: ``--help`` and ``--version`` are handled with ``UsageError``.
- `4782 <https://github.com/pytest-dev/pytest/issues/4782>`_: Fix ``AssertionError`` with collection of broken symlinks with packages.
- `2895 <https://github.com/pytest-dev/pytest/issues/2895>`_: The ``pytest_report_collectionfinish`` hook now is also called with ``--collect-only``.
- `3899 <https://github.com/pytest-dev/pytest/issues/3899>`_: Do not raise ``UsageError`` when an imported package has a ``pytest_plugins.py`` child module.
- `4347 <https://github.com/pytest-dev/pytest/issues/4347>`_: Fix output capturing when using pdb++ with recursive debugging.
- `4592 <https://github.com/pytest-dev/pytest/issues/4592>`_: Fix handling of ``collect_ignore`` via parent ``conftest.py``.
were skipped by a ``unittest.skip()`` decorator applied in the subclass.
- `4739 <https://github.com/pytest-dev/pytest/issues/4739>`_: Fix ``parametrize(... ids=<function>)`` when the function returns non-strings.
- `4745 <https://github.com/pytest-dev/pytest/issues/4745>`_: Fix/improve collection of args when passing in ``__init__.py`` and a test file.
- `4770 <https://github.com/pytest-dev/pytest/issues/4770>`_: ``more_itertools`` is now constrained to <6.0.0 when required for Python 2.7 compatibility.
- `526 <https://github.com/pytest-dev/pytest/issues/526>`_: Fix "ValueError: Plugin already registered" exceptions when running in build directories that symlink to actual source.
- `3899 <https://github.com/pytest-dev/pytest/issues/3899>`_: Add note to ``plugins.rst`` that ``pytest_plugins`` should not be used as a name for a user module containing plugins.
- `4324 <https://github.com/pytest-dev/pytest/issues/4324>`_: Document how to use ``raises`` and ``does_not_raise`` to write parametrized tests with conditional raises.
now obey the scope of *autouse* fixtures.
autouse fixtures (see `517 <https://github.com/pytest-dev/pytest/issues/517>`__ for an example).
- `4660 <https://github.com/pytest-dev/pytest/issues/4660>`_: The number of *selected* tests now are also displayed when the ``-k`` or ``-m`` flags are used.
- `4688 <https://github.com/pytest-dev/pytest/issues/4688>`_: ``pytest_report_teststatus`` hook now can also receive a ``config`` parameter.
- `4691 <https://github.com/pytest-dev/pytest/issues/4691>`_: ``pytest_terminal_summary`` hook now can also receive a ``config`` parameter.
- `3547 <https://github.com/pytest-dev/pytest/issues/3547>`_: ``--junitxml`` can emit XML compatible with Jenkins xUnit.
- `4280 <https://github.com/pytest-dev/pytest/issues/4280>`_: Improve quitting from pdb, especially with ``--trace``.
Using ``q[quit]`` after ``pdb.set_trace()`` will quit pytest also.
- `4402 <https://github.com/pytest-dev/pytest/issues/4402>`_: Warning summary now groups warnings by message instead of by test id.
actually generating warnings, instead of how many tests call that code.
- `4536 <https://github.com/pytest-dev/pytest/issues/4536>`_: ``monkeypatch.delattr`` handles class descriptors like ``staticmethod``/``classmethod``.
- `4649 <https://github.com/pytest-dev/pytest/issues/4649>`_: Restore marks being considered keywords for keyword expressions.
- `4667 <https://github.com/pytest-dev/pytest/issues/4667>`_: ``pytest_terminal_summary`` uses result from ``pytest_report_teststatus`` hook, rather than hardcoded strings.
- `4669 <https://github.com/pytest-dev/pytest/issues/4669>`_: Correctly handle ``unittest.SkipTest`` exception containing non-ascii characters on Python 2.
- `4680 <https://github.com/pytest-dev/pytest/issues/4680>`_: Ensure the ``tmpdir`` and the ``tmp_path`` fixtures are the same folder.
- `4681 <https://github.com/pytest-dev/pytest/issues/4681>`_: Ensure ``tmp_path`` is always a real path.
- `4643 <https://github.com/pytest-dev/pytest/issues/4643>`_: Use ``a.item()`` instead of the deprecated ``np.asscalar(a)`` in ``pytest.approx``.
``np.asscalar`` has been `deprecated <https://github.com/numpy/numpy/blob/master/doc/release/1.16.0-notes.rstnew-deprecations>`__ in ``numpy 1.16.``.
- `4668 <https://github.com/pytest-dev/pytest/issues/4668>`_: The verbose word for expected failures in the teststatus report changes from ``xfail`` to ``XFAIL`` to be consistent with other test outcomes.
- `2256 <https://github.com/pytest-dev/pytest/issues/2256>`_: Show full repr with ``assert a==b`` and ``-vv``.
- `3456 <https://github.com/pytest-dev/pytest/issues/3456>`_: Extend Doctest-modules to ignore mock objects.
- `4617 <https://github.com/pytest-dev/pytest/issues/4617>`_: Fixed ``pytest.warns`` bug when context manager is reused (e.g. multiple parametrization).
- `3375 <https://github.com/pytest-dev/pytest/issues/3375>`_: Document that using ``setup.cfg`` may crash other tools or cause hard to track down problems because it uses a different parser than ``pytest.ini`` or ``tox.ini`` files.
- `4602 <https://github.com/pytest-dev/pytest/issues/4602>`_: Uninstall ``hypothesis`` in regen tox env.
- `2169 <https://github.com/pytest-dev/pytest/issues/2169>`_: ``pytest.mark.parametrize``: in previous versions, errors raised by id functions were suppressed and changed into warnings. Now the exceptions are propagated, along with a pytest message informing the node, parameter value and index where the exception occurred.
- `3078 <https://github.com/pytest-dev/pytest/issues/3078>`_: Remove legacy internal warnings system: ``config.warn``, ``Node.warn``. The ``pytest_logwarning`` now issues a warning when implemented.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlconfig-warn-and-node-warn>`__ on information on how to update your code.
- `3079 <https://github.com/pytest-dev/pytest/issues/3079>`_: Removed support for yield tests - they are fundamentally broken because they don't support fixtures properly since collection and test execution were separated.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlyield-tests>`__ on information on how to update your code.
- `3082 <https://github.com/pytest-dev/pytest/issues/3082>`_: Removed support for applying marks directly to values in ``pytest.mark.parametrize``. Use ``pytest.param`` instead.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlmarks-in-pytest-mark-parametrize>`__ on information on how to update your code.
- `3083 <https://github.com/pytest-dev/pytest/issues/3083>`_: Removed ``Metafunc.addcall``. This was the predecessor mechanism to ``pytest.mark.parametrize``.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlmetafunc-addcall>`__ on information on how to update your code.
- `3085 <https://github.com/pytest-dev/pytest/issues/3085>`_: Removed support for passing strings to ``pytest.main``. Now, always pass a list of strings instead.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlpassing-command-line-string-to-pytest-main>`__ on information on how to update your code.
are meant for use with ``distutils``, and a section named ``pytest`` has notoriously been a source of conflicts and bugs.
Note that for **pytest.ini** and **tox.ini** files the section remains ``[pytest]``.
- `3616 <https://github.com/pytest-dev/pytest/issues/3616>`_: Removed the deprecated compat properties for ``node.Class/Function/Module`` - use ``pytest.Class/Function/Module`` now.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlinternal-classes-accessed-through-node>`__ on information on how to update your code.
- `4421 <https://github.com/pytest-dev/pytest/issues/4421>`_: Removed the implementation of the ``pytest_namespace`` hook.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlpytest-namespace>`__ on information on how to update your code.
- `4489 <https://github.com/pytest-dev/pytest/issues/4489>`_: Removed ``request.cached_setup``. This was the predecessor mechanism to modern fixtures.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlcached-setup>`__ on information on how to update your code.
- `4535 <https://github.com/pytest-dev/pytest/issues/4535>`_: Removed the deprecated ``PyCollector.makeitem`` method. This method was made public by mistake a long time ago.
- `4543 <https://github.com/pytest-dev/pytest/issues/4543>`_: Removed support to define fixtures using the ``pytest_funcarg__`` prefix. Use the ``pytest.fixture`` decorator instead.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlpytest-funcarg-prefix>`__ on information on how to update your code.
- `4545 <https://github.com/pytest-dev/pytest/issues/4545>`_: Calling fixtures directly is now always an error instead of a warning.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlcalling-fixtures-directly>`__ on information on how to update your code.
- `4546 <https://github.com/pytest-dev/pytest/issues/4546>`_: Remove ``Node.get_marker(name)`` the return value was not usable for more than a existence check.
Use ``Node.get_closest_marker(name)`` as a replacement.
- `4547 <https://github.com/pytest-dev/pytest/issues/4547>`_: The deprecated ``record_xml_property`` fixture has been removed, use the more generic ``record_property`` instead.
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlrecord-xml-property>`__ for more information.
- `4548 <https://github.com/pytest-dev/pytest/issues/4548>`_: An error is now raised if the ``pytest_plugins`` variable is defined in a non-top-level ``conftest.py`` file (i.e., not residing in the ``rootdir``).
See our `docs <https://docs.pytest.org/en/latest/deprecations.htmlpytest-plugins-in-non-top-level-conftest-files>`__ for more information.
- `891 <https://github.com/pytest-dev/pytest/issues/891>`_: Remove ``testfunction.markername`` attributes - use ``Node.iter_markers(name=None)`` to iterate them.
- `3050 <https://github.com/pytest-dev/pytest/issues/3050>`_: Deprecated the ``pytest.config`` global.
- `3974 <https://github.com/pytest-dev/pytest/issues/3974>`_: Passing the ``message`` parameter of ``pytest.raises`` now issues a ``DeprecationWarning``.
an alternative for the moment.
If you have concerns about this, please comment on `issue 3974 <https://github.com/pytest-dev/pytest/issues/3974>`__.
- `4435 <https://github.com/pytest-dev/pytest/issues/4435>`_: Deprecated ``raises(..., 'code(as_a_string)')`` and ``warns(..., 'code(as_a_string)')``.
See https://docs.pytest.org/en/latest/deprecations.htmlraises-warns-exec for rationale and examples.
- `3191 <https://github.com/pytest-dev/pytest/issues/3191>`_: A warning is now issued when assertions are made for ``None``.
Because the ``assert_called_with`` method of mock objects already executes an assertion.
will not issue the warning.
- `3632 <https://github.com/pytest-dev/pytest/issues/3632>`_: Richer equality comparison introspection on ``AssertionError`` for objects created using `attrs <http://www.attrs.org/en/stable/>`__ or `dataclasses <https://docs.python.org/3/library/dataclasses.html>`_ (Python 3.7+, `backported to 3.6 <https://pypi.org/project/dataclasses>`__).
- `4278 <https://github.com/pytest-dev/pytest/issues/4278>`_: ``CACHEDIR.TAG`` files are now created inside cache directories.
be used by backup or synchronization programs to identify pytest's cache directory as such.
- `4292 <https://github.com/pytest-dev/pytest/issues/4292>`_: ``pytest.outcomes.Exit`` is derived from ``SystemExit`` instead of ``KeyboardInterrupt``. This allows us to better handle ``pdb`` exiting.
- `4371 <https://github.com/pytest-dev/pytest/issues/4371>`_: Updated the ``--collect-only`` option to display test descriptions when ran using ``--verbose``.
- `4386 <https://github.com/pytest-dev/pytest/issues/4386>`_: Restructured ``ExceptionInfo`` object construction and ensure incomplete instances have a ``repr``/``str``.
- `4416 <https://github.com/pytest-dev/pytest/issues/4416>`_: pdb: added support for keyword arguments with ``pdb.set_trace``.
other keyword arguments to the ``Pdb`` constructor.
- `4483 <https://github.com/pytest-dev/pytest/issues/4483>`_: Added ini parameter ``junit_duration_report`` to optionally report test call durations, excluding setup and teardown times.
- `4532 <https://github.com/pytest-dev/pytest/issues/4532>`_: ``-ra`` now will show errors and failures last, instead of as the first items in the summary.
This makes it easier to obtain a list of errors and failures to run tests selectively.
requested module cannot be imported.
- `3532 <https://github.com/pytest-dev/pytest/issues/3532>`_: ``-p`` now accepts its argument without a space between the value, for example ``-pmyplugin``.
- `4327 <https://github.com/pytest-dev/pytest/issues/4327>`_: ``approx`` again works with more generic containers, more precisely instances of ``Iterable`` and ``Sized`` instead of more restrictive ``Sequence``.
- `4397 <https://github.com/pytest-dev/pytest/issues/4397>`_: Ensure that node ids are printable.
- `4435 <https://github.com/pytest-dev/pytest/issues/4435>`_: Fixed ``raises(..., 'code(string)')`` frame filename.
- `4458 <https://github.com/pytest-dev/pytest/issues/4458>`_: Display actual test ids in ``--collect-only``.
- `4557 <https://github.com/pytest-dev/pytest/issues/4557>`_: Markers example documentation page updated to support latest pytest version.
- `4558 <https://github.com/pytest-dev/pytest/issues/4558>`_: Update cache documentation example to correctly show cache hit and miss.
- `4580 <https://github.com/pytest-dev/pytest/issues/4580>`_: Improved detailed summary report documentation.
- `4447 <https://github.com/pytest-dev/pytest/issues/4447>`_: Changed the deprecation type of ``--result-log`` to ``PytestDeprecationWarning``.
It was decided to remove this feature at the next major revision.
Merging #111 into master will decrease coverage by 0.05%.
Powered by Codecov. Last update 33ea91b...77b967c. Read the comment docs.


text:
import sqlite3
import urllib
import re
from urllib.request import urlopen
from bs4 import BeautifulSoup, NavigableString
from phyllo.phyllo_logger import logger
import nltk
from itertools import cycle

nltk.download('punkt')

from nltk import sent_tokenize

def parseRes2(soup, title, url, cur, author, date, collectiontitle):
    chapter = '-'
    [e.extract() for e in soup.find_all('br')]
    j = 1
    inv = ['i', 'u']
    get = strip_tags(soup, inv)
    getp = get.find_all('p')[:-1]
    for p in getp:
        # make sure it's not a paragraph without the main text
        try:
            if p['class'][0].lower() in ['border', 'pagehead', 'shortborder', 'smallboarder', 'margin',
                                         'internal_navigation']:  # these are not part of the main t
                continue
        except:
            pass
        sen=p.text
        i=1
        if sen.isupper():
            chapter=sen
        else:
            for s in sent_tokenize(sen):
                sentn = s
                num = i
                cur.execute("INSERT INTO texts VALUES (?,?,?,?,?,?,?, ?, ?, ?, ?)",
                            (None, collectiontitle, title, 'Latin', author, date, chapter,
                             num, sentn, url, 'prose'))
                i += 1

def strip_tags(soup, invalid_tags):

    for tag in soup.findAll(True):
        if tag.name in invalid_tags:
            s = ""

            for c in tag.contents:
                if not isinstance(c, NavigableString):
                    c = strip_tags(str(c), invalid_tags)
                s += str(c)

            tag.replaceWith(s)

    return soup

def main():
    # get proper URLs
    siteURL = 'http://www.thelatinlibrary.com'
    biggsURL = 'http://www.thelatinlibrary.com/ep.priapismo.html'
    biggsOPEN = urllib.request.urlopen(biggsURL)
    biggsSOUP = BeautifulSoup(biggsOPEN, 'html5lib')
    textsURL = []

    # remove some unnecessary urls
    while ("http://www.thelatinlibrary.com/index.html" in textsURL):
        textsURL.remove("http://www.thelatinlibrary.com/index.html")
        textsURL.remove("http://www.thelatinlibrary.com/classics.html")
        textsURL.remove("http://www.thelatinlibrary.com/neo.html")
    logger.info("\n".join(textsURL))

    title='DE PRIAPISMO'

    author = 'CLEOPATRAE EIVSQVE'
    author = author.strip()
    collectiontitle='EPISTOLAE DE PRIAPISMO CLEOPATRAE EIVSQVE REMEDIIS'
    date = '-'

    with sqlite3.connect('texts.db') as db:
        c = db.cursor()
        c.execute(
        'CREATE TABLE IF NOT EXISTS texts (id INTEGER PRIMARY KEY, title TEXT, book TEXT,'
        ' language TEXT, author TEXT, date TEXT, chapter TEXT, verse TEXT, passage TEXT,'
        ' link TEXT, documentType TEXT)')
        c.execute("DELETE FROM texts WHERE author = 'CLEOPATRAE EIVSQVE'")
        parseRes2(biggsSOUP, title, biggsURL, c, author, date, collectiontitle)

if __name__ == '__main__':
    main()

redpajama_set_name: RedPajamaGithub


text:
class ParserAstana : public BikeDataParser
{
public:
    QList<Station*> parseStationsList(QString allStations, bool withDetails);
};
Q_DECLARE_METATYPE(ParserAstana)

#endif // PARSERASTANA_H


If you have a plum, cherry, apricot, or chokecherry tree, you may already be familiar with black knot. But do you know what to do about it? Read on to find out.
Black knot is a fungal disease that's more commonly found on different fruiting and ornamental trees—especially plum and cherry. You'll know it by its hard, uneven, black galls that wrap around twigs and branches. But this is when it's already developed. It can take a whole season before it starts showing any signs or spores. Once it does it's already in the process of strangling new growth and attracting pests and disease.
The disease spreads easily during damp spring-like conditions. Depending on the wind and weather, it can travel throughout the tree or to its neighbor. Early signs include small, olive-colored swellings during the first season. These may be hidden by leaves, so you should watch disease-prone plants carefully. Over time, the swells get darker and expand during the second year, especially in humid weather.
Once the swells grow to become dark warts that coil along stems and branches, pruning and chemicals may not be enough to save the plant. The best way to control black knot is to catch it in the early stages before it becomes dark and established.
Pay close attention to your fruit trees and watch for any signs of disease throughout the year—especially in winter when all the leaves are gone. Look for cracks, discoloration, swelling, or other signs of infection around twig and leaf axils. Carefully remove the infected areas. Cut four to eight inches past the galls to ensure it's all removed. Use a pruning knife or chisel to remove galls on trunks and cut down the entire infected branch. Burn or bury the pruned wood, being careful not to let any spores escape to live on the ground. Thorough clean any pruning tools after use to help prevent spreading disease.
If you catch black knot soon enough, a quick pruning and careful disposal of the gall-infected branches may save the tree. But you should keep an eye out for other signs of spreading. Organic treatments can also help and are better than using harmful chemicals around your fruit.
Understand that some varieties of tree and shrubs are more susceptible to the disease than others. Choose your plants accordingly. If you live in a highly damp and humid environment where the fungus is more likely to grow, these are probably not the plants for you—unless you can grow them in a more climate-controlled space. Talk to your local nursery staff to see which varieties do best in your area.


We are pleased that you have visited our homepage and would like to thank you for your interest in our company. Dealing with our guests and interested parties is a matter of trust. Your trust is very important to us, thus committing us to use your data with great care and protect them from misuse. In order for you to feel safe and secure when you visit our website, we take the protection and confidential treatment of your personal data very seriously. Therefore, we act in compliance with the applicable legal regulations on the protection of personal data and data security.
The Residenz Hotel am Festspielhaus has implemented several technical and organisational measures as controller to ensure the most complete protection of personal data processed via this website. Nevertheless, Internet-based data transmissions can generally have security gaps, so that absolute protection can not be guaranteed. Consequently, every person concerned is free to submit personal data to us in alternative ways, for example by telephone.
The Residenz Hotel am Festspielhaus, located at Josef-WulffStr. 75, 45657 Recklinghausen, represented by Mr. Herrmann-Josef Thiel, is responsible for the data collection and processing.
This is immediately anonymised on our website so that a personal reference is no longer producible and a deletion of the data is therefore no mandatory.
The protection of your privacy is very important to us. We have therefore designed our website in such a way that it can be used anonymously.
The information which we receive and save during your visit to our website is solely used for internal business purposes and to improve the design of the websites The only exception is when there is a need to counter attacks which constitute criminal offences, or which hinder the functionality of our website. We therefore record for example the IP address of your computer, but this is then analysed anonymously.
Matomo is integrated on the websites of the Residenz Hotel am Festspielhaus (an open-source software tool for web analysis) Web analytics is the survey, collection and analysis of data on the behaviour of visitors to websites. Among other things, a web analytics tool collects data on which website a person concerned was linked to a website (so-called referrer), which sub-pages of the website were accessed or how often and for which length of stay a sub page was viewed. A web analysis is mainly used to optimise a website and for the cost-benefit analysis of Internet advertising. The software is operated on the server of the controller, the data protection sensitive log files are stored exclusively on this server. Matomo sets a cookie (the term cookie is described in point 4) on the information technology system of the person concerned. By setting the cookie, we are enabled to analyse the use of our website. Each time a single page of this website is called up, the internet browser on the information technology system of the person concerned is automatically prompted by the Matomo component, submitting data to our server for online analysis purposes. In the context of this technical procedure, we gain knowledge of personal data, such as the IP address of the person concerned, which among other things serves to help us understand the origin of visitors and clicks.
By means of the cookies, personally identifiable information, such as access time, the location from which access was made, and the frequency of visits to our website is stored. Each time you visit our website, this personal information, including the IP address of the Internet connection used by the person concerned, is transmitted to our server. This personal data is stored by us. We do not share this personal information with third parties.
You can decide whether a unique web analytics cookie may be stored in your browser in order to allow the operator of the website (Residenz Hotel am Festspielhaus) to collect and analyse different statistical data.
If you wish to opt out, click the link to remove the Matomo deactivation cookie in your browser.
Furthermore, the person concerned has the possibility of objecting to the collection of information generated by Matomo on the use of this website and preventing such.
To do this, the person concerned must set "Do Not Track" in his browser.
For the online reservation we need your personal information. We process your data in accordance with art. 6, paragraph 1.b of the GDPR for the purpose of fulfilment of the agreement.
4. E-mail address (for confirmation).
Entering the phone number and address data is optional and there are no negative consequences of not providing this information. Your details are only used to provide you with the services included in our contract and are of course treated in full confidentiality. In the framework of the online reservation, you will be automatically transferred to the online booking system of our selected cooperation partner BUSY ROOMS (Central Reservation System), which carries out the reservation for us. This is obliged to comply with data protection regulations. Collected customer data shall be deleted after completion of the order or termination of the business relationschip. Legal retention periods remain unaffacted.
30 days after departure (check out) all not needed, personal customer data will be anonymised. After that, we no longer have access to customer-specific data.
This website uses Google Analytics, a web analytics service provided by Google Inc. ("Google"). Google Analytics uses so-called "cookies", text files that are stored on your computer and which allow an analysis of your use of the website. The information generated by the cookie about your use of this website (including your IP address) is transferred to a Google server in the USA and stored there. Google will use this information to evaluate your use of the website, to compile reports on website activity for website operators and to provide other services related to website activity and Internet usage. Google may also transfer this information to third parties if required by law or if third parties process these data on behalf of Google. Google will not associate your IP address with any other data held by Google. You can prevent the installation of cookies by a corresponding setting in your browser software; however, we would like to point out that in this case you may not be able to use all functions of this website. Through the use of this website, you consent to the processing of data about you by Google in the manner described above and for the purposes set out above.
If you wish to block Facebook`s ability to associate your visit to our website with your Facebook user account, please log out of your Facebook user account.
In the context of the use of the Google Adwords ("Adwords") advertising program of Google Inc., 1600 Amphitheater Parkway, Mountain View, CA 94043, USA ("Google"), the following is used to analyse the campaign performance on this website. If you click on one of Google Ad, a cookie will be stored on your computer. The information collected by the Adwords Cookie generates conversion statistics. The cookies used in the context of conversion tracking lose their validity after 30 days, contain no personal data and are therefore not used for personal identification. If our website is accessed by the deadline, both Google and we can use the cookie to understand that the user clicked on the ad and was directed to this page. Each Google Adwords customer receives a different cookie. Thus, there is no possibility that cookies can be tracked through the websites of Adwords customers. Under this link you can make settings on the type of advertising displayed on Google. You can control more ad presets in the ads preferences.
On our website you will also find links to offers from other providers. You recognise this, for example on the respective logo or because a new browser window opens. Unless we are dealing with promotional offers made by the Residenz Hotel am Festspielhaus, we can not guarantee the conformity with the data protection regulations of the local providers.
Our free newsletter will only be sent to you when you order it using the online form provided.
For this purpose we collect your e-mail address in order to be able to send you the newsletter after confirmation of your registration. Data, which you voluntarily give us in the registration form, we use for a targeted communication. If you no longer wish to receive a newsletter in the future, you can unsubscribe at any time in the link provided in the newsletter or on our website.
You have the option to pay the selected voucher in advance or by credit card. We will send your booking confirmation to the email you provided. If required, personal data will be forwarded to the companies (see Information Data Recipient, Item 14) involved in the execution of this agreement, for example financial institutions for payment processing. The data required for the fulfilment of the agreement will be deleted no later than 6 months after termination of the agreement and will only be kept available for any further inquiries.
Your data will only be forwarded via secure SSL encryption to the payment provider selected by you in the ordering process for the purpose of processing payments. The transmission of your data to the payment service provider is made on the basis of Art. 6 (1) (a) of the GDPR (consent) and Art. 6 (1) (b) of the GDPR (processing for the execution of an agreement). You have the possibility to revoke your consent to data processing at any time. A revocation does not affect the past data processing operations.
If you pay by credit card the payment is handled by the payment provider concardis GmbH, D-65760 Eschborn Helfmann-Park 7/ Germany. The data required (card number, validity and test number will be forwarded to the payment provider in encrypted form and are not visible for the website operator. The electronic payment method using credit card is PCI-DSS certified and offers the customer the highest possible data security.
SSL is a protocol that allows a secure connection between the web browser and the server. It is used to secure online transactions by encrypting website data and confidential information over the Internet.
If you select "Payment in advance" you will see the data of the bank Sparkasse Vest Recklinghausen on which you can make the transfer.
If you apply online for the vacancies we advertise, we only collect the data that is required to process your application at the Residenz Hotel am Festspielhaus. These are title, first and last name, application documents and to contact us by email and telephone number. The specification of email and telephone number is voluntary, but the communication can be difficult if not stated. Your personal information and data are collected with the utmost care and integrity, stored and used only for purpose. The provisions according to the EU Data Protection Regulation will be observed accordingly. You consent to the processing and transmission of your data. The data agreement is based on section 26 of the GDPR. You assure that your information is true. You are also aware that false information can lead to the solution of a possible employment relationship. We will delete your information after the end of the application process and expiration of the legal retention period of 6 months insofar as no termination has taken place.
whether relevant personal data are processed; if this is the case, you have the right to information about these personal data and to the information listed in detail in Art. 15 of the GDPR.
You have the right to immediately request the correction of relevant and incorrect personal data and, if necessary, to complete the personal data that are incomplete. In addition, you have the right to demand the immediate deletion of personal data provided one of the reasons detailed in Art. 17 (GPDR) applies, for example if the data is no longer needed for the purposes pursued.
You have the right to request the restriction of processing if one of the conditions listed in Art. 18 (GDPR) is met, for example if you object to the processing, for the duration of any verification.
In certain cases, which are listed in detail in Art. 20 (DGPR), you have the right to receive the personal data concerning you in a structured, common and machine-readable format or to request the transfer of the data to a third party.
If data are collected on the basis of Art. 6, paragraph 1. f (data processing for the protection of legitimate interests), you have the right to object to the processing at any time for reasons that arise from your specific situation. We then no longer process your personal data unless there are evidently compelling reasons for processing that are worthy of protection, which outweighs the interests, rights and freedoms of the data subject, or the processing serves the assertion, exercise or defence of legal claims.
In accordance with Art. 77 (GDPR), you have the right to complain to a supervisory authority if you believe that the processing of your data violates data protection regulations. The right of appeal may in particular apply to a supervisory authority in the member state of your place of residence, your workplace, or the place of alleged infringement.


Preserving the history of Rockport, Massachusetts. Visit us at the Sewall-Scripture House located at 40 King Street.
July thru mid-September and by chance.
9 a.m. to 1 p.m. Mondays year-round, except major holidays.
You may also visit the Old Castle, located near the corner of Curtis Street and Granite Street (Route 127) in Pigeon Cove.
$5, which includes admission to both museums. Members and children under 12: Free.


Stepping back from the constant flow of mental judgements and preconceived ideas we have about the world.
Giving time to experience what we are experiencing without need to get to the next experience that may be more pleasurable.
To see events as if for the very first time without any preconceived labels or ideas of that experience.
To have reliance on our own intuition. To listen to the innate sensations or feelings which arise within us and to honour them.
To 'be', rather than 'do'. Allowing the experience be what it is and not creating an end goal.
Allowing things to be as they are, without denial or rejection of the present situation.
To have no attachment, repulsion or holding on to thoughts feelings or experiences.
The link below provides a 25 minute guidance recording which you can use to support your mindfulness practice. It can be used as part of relaxation techniques for anxiety. It can also be used as part of your relaxation techniques for sleep.
Please ensure you are not driving a vehicle or operating machinery while listening to the recording.


How to choose an irrigator for the oral cavity?
1 What is a dental irrigator and what is it for?
2 Who needs to use the irrigator?
11 How to use the irrigator? Video.
Irrigator – a fashionable novelty or a necessary device for cleaning teeth and oral hygiene? The opinion of the dentist.
What is the irrigator for the oral cavity, and what are the parameters for choosing this device? Before you start choosing the device you need to consult with the dentist, determine whether you need it and how many people in the family will use it – it depends on the type of irrigator that will need to be purchased. We will try to make out: who needs an irrigator for the oral cavity, what kinds of devices exist and which functions and parameters should be based on when choosing it.
What is a dental irrigator and what is it for?
Who needs to use the irrigator?
Women during pregnancy – in pregnant women increased risk of carious lesions and periodontal diseases, the irrigator carefully removes plaque, food remnants and easily massages the gum. Future mothers after some time using the irrigator note a significant improvement in the condition of the oral tissues.
Patients with bite problems or crowded teeth who undergo orthodontic treatment with braces and face the problem of high-quality cleaning of teeth – a directed jet of a special solution or water from the irrigator removes plaque and food residues from all hard-to-reach places.
People with periodontal diseases – dentists recommend using the device with gingivitis and the initial stages of periodontitis, while for a greater effect instead of water you need to use solutions that the doctor will appoint.
Patients with orthopedic structures in the mouth (removable and non-removable prosthetics, implants).
Smokers and people who have an unpleasant smell from the mouth.
Patients with a diagnosis of chronic rhinitis or sinusitis are often appointed to wash the nasal cavity, for which you can use a special nozzle.
Severe heart disease and cardiovascular system.
In any case, before using the device, you should consult your dentist.
Who will use the device — one person or all members of the family?
Do your family members orthopedic or orthodontic design, bite problems or diseases of the oral cavity?
Whether to use the device children and the elderly?
How often and how long you're traveling and whether you need to trip the device to care for the oral cavity?
How important is the noise level and the amount of power consumed?
There are three types of irrigators: a hydraulic pump that runs on electricity, stationary and portable; connects to the water supply.
For the family it is best to choose a stationary irrigator with a set of baits necessary for all household members.
These models operate from the network, a pulsating sufficiently powerful jet of liquid from the reservoir is supplied under pressure. It flushes soft dental plaque and food remnants from the interdental spaces from under orthopedic and orthodontic structures.
Sufficiently strong motor, allowing to create a good pressure of a jet of liquid.
Requires regular washing and drying nozzles, a special place to store attachments to prevent the accumulation of microorganisms on their surface.
The minimum cost of a stationary irrigator is about $40.
If you often leave home for a long time (on business trips, visit, travel) or intend to use the device at the dacha or at work, then it is worth paying attention to models of portable irrigators. They consist of a tank, a battery and a pump. The battery lasts about seven days.
The minimum price of the device is from $ 30.
The device is connected directly to the faucet, the kit usually includes attachments to various cranes. It is not necessary to remove it after use, since the device has an adapter, which allows you to switch the water.
Low quality of tap water.
The minimum price is from $ 20.
Cleaning with the help of a monostructure – at the moment the technology is practically not used. Since the cleaning is then carried out by a thin continuous stream of liquid.
Irrigators, creating a pulsating jet – thanks to small, almost unnoticeable pulsations, more effective cleaning and micro massage of the gums occur.
Cleaning with a jet of liquid with microbubbles of air is most effective, because in addition to cleaning the teeth, the gums are massaged and the periodontal pockets are cleaned.
For washing the nose and nasopharynx.
If it is planned that several people will use the device, it is better to buy a nozzle of your own color for each member of the family – this will not confuse them when using it. To obtain the best result, hygienic liquids for irrigation of the oral cavity can be used. Therapeutic rinsers and balms will be recommended to you by the doctor based on the condition of your oral cavity – it can be a fluid containing fluoride or calcium, drugs with anti-inflammatory, antibacterial or blood-restoring action.
The ability to adjust the head has almost all models of irrigators, when buying it is necessary to make sure that your device has such a function. It is indispensable if children, elderly people, patients with periodontal diseases use the device. And it is better for absolutely healthy people to start using the irrigator with the lowest power, gradually increasing it.
When choosing an irrigator for the oral cavity, pay attention to whether it is possible to repair it in case of breakage. Voltage drops, hard water and too frequent use can lead to damage to the device, and many models are not repaired at all, they can only be replaced.
Before the final choice of the manufacturer, pay attention to the availability in your city of service centers, where you can carry out warranty and post-warranty repair.
To avoid overheating, you can not turn on the machine with an empty tank.
If herbal decoctions are used for cleaning, they must be carefully filtered and washed after use.
Do not use an oil based fluid for irrigation of the oral cavity.
Braun – is a German company that mainly produces household appliances. This company owns the brand Oral-B, under which products for oral care are manufactured, and is very popular. A distinctive feature of this company is the high quality and affordable price of goods.
Water pik Technologies – the first to produce irrigators, produces these devices under the brands Water pik, Laars, Instapur.
Panasonic Corporation – Japanese company specializing in the production of electronics, produces quality irrigators, equipped with a maximum of technological features.
Bredmed – is a company from Italy, initially it specialized in the production of nebulizers, but now there are irrigators of this company.
How to use the irrigator? Video.
And finally – a video about what an irrigator needs and how to use it correctly.


According to IDC, 92 percent of organizations have adopted a cloud environment with 64 percent adopting a multi-cloud approach.3With a mix of different clouds, protecting data across workloads while meeting compliance and security requirements is a critical challenge for many organizations. In fact, according to a study conducted by IDC for Dell EMC, cross-cloud support was the highest recognized data protection deficiency for IT transformation.4 Dell EMC recognizes this challenge and continues to enhance its data protection appliances to help customers mitigate risk and protect their most valuable asset – their data – in multi-cloud environments.
Data Domain OS 6.2 and IDPA 2.3 software now provide customers with even more choice to extend their data protection to public clouds with expanded Cloud Tier support to Google Cloud Platform and Alibaba Cloud, thereby, enabling more flexibility for long-term retention. This is in addition to support already offered across AWS, Microsoft Azure, Dell EMC Elastic Cloud Storage, Virtustream, Ceph, IBM Cloud Object Storage, AWS Infrequent Access, Azure Cool Blob storage and Azure Government Cloud. Also, a new Free-space Estimator Tool for Cloud Tier helps enable more efficient capacity management to help reduce on-premises and cloud storage costs.
Also, Data Domain appliances provide faster restores from an on-premises appliance and faster recalls from public clouds. Given these enhancements, organizations can now restore their data up to two-and-a-half times faster from a Data Domain appliance1and recall their data up to four times faster from the cloud2 to a Data Domain appliance, allowing them to meet more stringent SLAs.


What are the Best Acer Swift 3 Black Friday & Cyber Monday Deals 2019 2019?
Looking for the Acer Swift 3 Black Friday & Cyber Monday Deals 2019? Then you are landed at the right place at the right time. This Black Friday and Cyber Monday Sale 2019 & Deals is gonna be a huge saving for all of us. People buy their required things in Black Friday & Cyber Monday sales and save huge money on the regular price. If you are planning to buy the Acer Swift 3, then Black Friday & Cyber Monday is the best opportunity to buy the best Acer Swift 3 and save up to 40% on the best Acer Swift 3. Check out the below best Acer Swift 3 Black Friday & Cyber Monday deals and save huge this Cyber Monday. I've put together a top list of the best Acer Swift 3 Sales & Deals available today. This list makes it easier for you to go through all favorite discounted products. You can take a look at all deals below.
When it comes to competitive laptop prices, it's tough to conquer Acer. The Taiwanese manufacturer has always offered cut-throat costs in India, especially when it has to do with its premium offerings. The company's brand new Swift 3 is yet another example of them. Acer sells a top notch variant of its new ultra-portable notebook for under Rs. 65,000, which can be significantly lower than what similarly configured notebooks in the contest price.
This notebook comes across as an excellent value offering for professionals and students looking for a thin and light laptop that does not skimp on functionality. So just how has Acer been able to attain this? And what type of compromises has it created on the way?
The Swift 3 might be the budget-friendly variant of Acer's flagship Ultrabook, the Swift 7 (Inspection ). In the USA, Acer has had to make certain compromises with all the components being sold here in order to keep the cost as competitive as possible. In a way, it has worked in Acer's favor, as you would be hard pushed to find any slim notebook with these specifications in this price at the moment. The pricing of Dell's XPS 13 (Inspection ) begins at above a lakh while HP's Envy 13-d115tu sits slightly under it. Most of the models that are priced in the range of the Swift 3 possess a Core i5 CPU, but then again, they also usually have full-HD displays, which the Swift 3 surpasses.
If you're looking for a strong thin and light laptop for work, then it's difficult to find much better value compared to Swift 3 right now. You can get it online beginning at Rs. 36,000 in reduced settings in case your budget is quite tight, but even the highest-end offering appears great concerning value. The low-resolution, the low-quality display is the only major flaw. Plus, the keyboard design could have been slightly improved.
Acer provides a good discount on Acer Swift 3 during Black Friday & Cyber Monday sale. You can save up to 48% on select laptops. So check this out best Acer Swift 3 Black Friday & Cyber Monday deals 2018 above.


In his August blog, Russell considers the implications of increasing workforce pressures and unveils exciting plans for a new College programme examining "the future paediatrician".
We have won two major grants to continue delivering the national Emergency Triage, Assessment and Treatment Plus (ETAT+) programme with Ministry of Health and WHO, and to develop a national paediatric nurse training and mentoring programme alongside this.
RCPCH's Dr Max Davie responds, saying a joined up approach to mental health is needed.
Professor Helen Bedford stresses the importance of the Measles, Mumps and Rubella (MMR) vaccine in response to news that measles rates in Europe have hit a record high in this decade.
The RCPCH has been working with a range of specialty groups and associations to help create an inclusive conference programme, ensuring delegates are able to update their knowledge on the areas important to them.


Winner: The Little Flower Soap Co.
Congrats to Holly at The Little Flower Soap Co. for winning a free ad space right here on my site. As I was searching for fabulous Mother's Day gift ideas, I came across this cute little shop. It is filled with soaps, lotions, lip balms, and bath salts. These homemade gifts are perfect for any occasion or for spoiling yourself. We all need a little spoiling every once in a while.
Holly also owns Sweet Pea Floral Designs, and creates floral wedding designs. She is a creative person and decided to use those creative juices in making homemade and quality products for her customers. Visit both of Holly's shops for more information on her products and designs.


Could This Be The Best Skincare Routine?
Aging is part of life, but still as we get older, we need to protect and care for our skin at all costs. It's not about being 45 and trying to look 30. It's about looking your best, and having great skin. Not everyone wants to go under the knife for a face lift, it is very invasive, and once it's done there is no turning back. The Korean skin care routine for anti aging can assist in keeping your skin looking clear and radiant. The routine is effective in helping your skin become clearer, smoother and hydrated. Hydrated skin not only looks better than dehydrated skin, it feels better and is healthier.
In Korea, there is a lot of pressure to maintain the appearance of youth and to keep your skin looking younger. Koreans are taught to look after their skin from a young age and they work to prevent skin issues from occurring. It is very common for Koreans to follow a rigorous antiaging skin care routine that involves using multiple products. Compared to what is considered the norm in the West, it is more work, but the results are clearly visibile.
Oil attracts oil, so an oil based cleanser is extremely effective at removing all types of grime and oil from the skin, like SPF, pollution, and sebum.
In Korea, essences are used everyday and are an important part of the antiaging routine. Essence are not toners but watery type solutions that are packed full of active ingredients. They are applied before a serum.
Many women are not aware that skin cells turn over. This is called skin cell renewal. The new skin cells come from beneath the skin and push forward to the surface. The skin you see on the surface of you face are actually dead. Regular exfoliation helps to promote faster skin cell turnover. When you do not exfoliate regularly you end up with dry, flaky skin. It may feel rough to touch or dehydrated and wrinkles are more prominent. All you need to do is add in exfoliating 2 – 3 times per week to improve your skin.
Serums are also considered a necessity in Korea. Serums are thicker than essences and also packed full of active ingredients that target sagging skin, wrinkles and redness. They play a significant role in skin care because they target specific conditions of the skin. Most treatments such as serums, boosters, and ampoules have tested and approved ingredients by professionals. They have the capacity to treat skin concerns like fine lines, hyperpigmentation, and acne.
Sheet masks are the corner stone of Korean skin care. They are used after the essence and serums/ampoules or boosters. They are individual sheets that are drenched in product, which are applied to the face. It is advisable you leave the sheet mask on our face for 15 to 20 minutes as you relax.
Sleeping masks are not a mask (like a sheet mask) but are simply a cream that is applied at night. Sleeping masks have a thick consistency and are essential for any woman who needs to target anti aging. They seal in moisture and plumps up the skin, while you sleep.
Korean skin care has many different (and slightly unusual) products. Anti aging products like the one below do seem odd, but the reviews for this product speak for themselves. We know that any product that is applied to the skin will only have short term effects and the only permanent solution to a completely smooth face is botox or a face lift. But many women do not want to go down that path.
Mature skin can still look beautiful. If you look after your skin as you age you will not only look better, but will feel more confident as you know you are taking care of yourself and the effort is paying off.
NextCould This Be The Best Skincare Routine?
Adsense Disclosure: We are a participant in the Google Adsense program.
Affiliate Disclosure: We are an affiliate of the StyleKorean affiliate program. If you purchase through our links we will receive a commission from that sale.


Nedstack has well over a decade of experience in building PEM fuel cell stacks. Nedstack is one of the leading PEM fuel cell producers in the world. Our extensive track-record includes over 500 systems based on Nedstack fuel cells currently in commercial operation world-wide as well as the world's largest PEM fuel cell system. A number of them have been in use ever since 2006.
Nedstack combines proprietary bipolar plate technology and design with the best available MEAs. The composition of our proprietary cell plate material results in low-cost cell plates with high electrical conductivity. This proven technology allows Nedstack to design a highly efficient fuel cell stack. At atmospheric pressure, Nedstack products reach higher fuel efficiency than PEM fuel cells of other suppliers. As Nedstack fuel cells operate at ambient pressure with low pressure drops, the need for expensive, heavy and power hungry compressors is avoided. Nedstack's efficient water cooling solution allows for a compact design with high power densities.
Our robust stack design provides stable performance under a wide range of customer conditions and also further extends the operational lifetime. We have optimized the balance between increased life span and continuous cost reductions to provide an attractive product to customers. We would be happy to help you select the appropriate stack power specification and realize a cost-effective solution without unnecessary overcapacity.
Nedstack has successfully realized a number of demonstration projects and can show many application examples. We know how to configure our stacks for easy integration, for example separating gas-side and electrical-side connections, and enable system integrators to use affordable Balance of Plant (BOP) components. All proprietary materials used in our stacks are easy to recycle and allow reuse of the major components.
Our XXL stacks are the best choice when lifespan is particularly critical. Nedstack can equip all fuel cells with a cell voltage monitoring (CVM) system. The CVM system allows an operator to remotely check the stack status in detail. Surprises are avoided, because the operator can pre-empt maintenance beforehand, in the rare event that a stack needs to be replaced. Nedstack's technical team is readily available and keeps sufficient stacks in stock to provide quick service and support to customers.


Home Gossips Manchu Hero to enter Directors' league?
Manchu Hero to enter Directors' league?
There are many such occasions where actors turned into established directors. Moreover, Tollywood have a long-standing love affair with notion of actor-turned-director.
The latest news is that, Manchu Vishnu is now likely to step behind the camera to take up directing. The actor who has determined to prove himself as an artist is all set for a new career. Currently, Vishnu is excited about his upcoming films, Gayatri and Achari America Yatra. The films are scheduled for a release on Feb 9 and 16 respectively.
His next project is titled 'Voter'. This film is in the final stages of production.
As per reports, Vishnu will make his directorial debut this year and the script is also being written. The actor is said to have a long time desire for direction. The other details are yet to be revealed. Also, an official announcement is awaited on his debut direction.
Gopichand's 25th film is slated for a May release?
Maestro Illayaraja will tune music for Chiru's Sye Raa?


If you are a business owner, chances are high that you have expenses that need to be made online or expenses which require a credit or debit card. Business credit cards are easier to use for expenses such as travel, rental cars, and similar expenses because they don't tie up funds held in your business checking account. As long as you have the cash flow to pay the bill each month, credit cards are a great way to go.
Business credit cards are also a great way to track and categorize business expenses or monitor employee spending. If you are looking for a new business credit card, then be sure to check out these offerings, all of which offer some form of a rewards program, including, cash rewards, rewards points, travel points, and more.
There are small business credit cards that will fill just about any need, whether your primary area of spending is office supplies, travel, gas stations, restaurants, advertising, and more.
Since businesses have specialized needs, I recommend seeking out the card that offers an excellent rewards program for your #1 expense category or applying for a business credit card that offers excellent rewards in multiple categories. If you're lucky, you will find a card that does both!
The Ink Business CashSM Credit Card from Chase is the card I use for my small business. It offers excellent cash back in several categories, including spending categories that apply to most businesses. This card offers a minimum cashback rate of 1%, with no limits, and 2% cash back or 5% cash back for certain categories (annual limits apply for these rewards tiers).
1% cash back – on everything else, with no limits.
For a limited time, you can also earn a $500 cash bonus when you spend $3,000 in the first three months of card ownership.
In addition, there is no annual fee, and you can get employee cards at no additional cost. There is also a 0% Intro APR on Purchases for 12 months.
Unless you have very specialized spending needs, I recommend this card for many small businesses.
You can compare this credit card and other small business credit cards on this page.
When you're trying to build a new business, it makes sense to have at least one open line of credit. After all, you may need to buy supplies, pay employees, or purchase special equipment at a time when funds are low. Having an open line of credit can help you get through lean times without taking drastic measures or getting a loan from a bank.
With that being said, business cards work a little differently than personal credit cards. For example, some banks, including Citi and Bank of America, don't report business credit card activity to their customer's personal credit reports. Meanwhile, some banks pick and choose how to apply the CARD Act of 2009 to business accounts, leaving business customers with fewer protections.
With all that being said, the 2015 Small Business Credit Card Study from CardHub.com did point out some big similarities between how banks treat business and personal credit card accounts. One similarity is that, like with personal accounts, individuals are held liable personally for their credit card use. Another: Almost every major card data uses information from your personal credit profile to determine eligibility for a business account.
In other words, it's nearly impossible to keep your personal and business credit profiles from intertwining. This is just another reason your credit matters; if you don't take care of your personal credit health, your business could suffer too.
Still, business credit cards still function the same way personal credit cards do. When you use your card to make a purchase, you are offered a temporary loan against your line of credit. If you pay your balance in full before the bill is due, you'll never need to pay interest. On the other hand, if you carry a balance, you'll pay a certain percentage of interest on top of the balance you owe each month. The amount of interest you'll pay is based on your APR, or Annual Percentage Rate.
Many small business cards charge an annual fee – Most of the best business cards on the market offer a slew of additional perks and rewards. Unfortunately, that generally means they charge an annual fee as well. In most cases, annual fees on business cards are between $49 and $150.
Some of the best small business cards offer generous rewards programs – Almost all small business credit cards offer perks as an incentive to use the card for everyday spending, business supplies, and equipment. These perks can include everything from travel rewards to points you can redeem for gift cards or cash back.
You don't necessarily need a Tax ID number to apply for a small business card – Although many people assume they need a Tax ID number of Employee Identification Number to qualify for a business card, that couldn't be farther from the truth. In many cases, you can qualify for a business card by stating your business is a sole proprietorship and using your Social Security Number on the application. You don't need to own a large business either; any activity you do on the side to earn extra money should be seen as business income in the eyes of the IRS.
Business cards often offer larger lines of credit than personal credit cards – Because small business cards are offered to those with business expenses that may be higher than one's personal expenses, small business cards often come with high lines of credit. Some even work as a balance transfer credit card with zero percent interest on balance transfer. And if you need to use your card for a large business purchase, having some flexibility is always a good thing.
A business credit card is great for a lot of corporations, small and large. Aside from the general convenience that credit cards offer, they offer many benefits.
Quick and easy application process – getting approved for a credit card can sometimes be done in minutes. An owner can have their new card in their hands in two short weeks. Time is a valuable commodity for any business.
Easy to qualify – it's almost impossible not to find a company that will offer you a credit card. Most times it is easier to qualify for a company credit card than to qualify for a traditional business loan. This can help owners that have a less than perfect credit score.
Rewards and incentives – almost every company offers a reward or incentive program. They can range from discounts, reward points, or travel incentives. Because each credit card has different rewards, make sure you find the right one for you.
Great for businesses that require traveling – because of the reward programs, a company card can make traveling a little easier. With enough reward points, you can cash in for a free flight, early boarding, or free flight upgrade.
Keeping track of expenses – using a corporate credit card is an excellent way for smaller businesses to document all of their transactions. It can make your accounting easier at the end of the month.
Adding "users" – being able to have employees added to the credit account is a great way to manage spending. It can streamline the purchasing process if you have employees that regularly make business purchases.
Separating business from personal – A smart practice is to keep your company and personal purchases as separate as possible. Mixing your personal and business accounts can create problems that the IRS enjoys fixing.
Emergencies – one of the obvious benefits (just like a personal credit card) is for emergencies. You never know when a piece of equipment will need replacing, but it's nice to have a card there to pay for it when it does.
Unfortunately, there is always a downside. Some business credit cards also come with a few cons.
Some Business Credit Cards Have Expensive Annual Fees – some credit cards come with pricey annual fees. For some owners, the convenience isn't worth the price. There are some companies that offer "No annual fees", which can help save you money through the years.
Personal liability – this is something to always be aware of when applying for a business credit card. In most cases, the person that applies for the business credit card will be held fiscally responsible for any unpaid credit card debt. This can destroy your business credit score, as well as your personal credit.
Variable-rates – unless you find one of the few fixed-rate credit cards, you will be dealing with variable Annual Percentage Rates. With company credit cards, companies are not required to give you notice of increasing APR. There are some companies that offer excellent rates when you signup and then raise the rates after.
Security Issues – unlike a personal credit card, a company credit card is often passed between employees. This opens up doors for theft, fraud, or unauthorized purchases.
Less protection – using a business credit card offers less financial protection than a personal card. Personal credit cards are protected under the 2009 Credit CARD Act. This Act helps protect cardholders against excessive fees and charges, but the Act does not cover any type of business card.
Less "grace period" – most companies offer grace periods for missing payments or for questioning charges made on a credit card. This isn't always true for a business credit card. Companies' often have stricter rules for your company card.
Now that you know all about small business credit cards and how they work, it's time to decide if a business line of credit is right for you. Here are some tips that can help you figure out which business card is right for you – and if you can qualify for one in the first place.
Be aware of your personal credit score and overall credit health – Since banks that issue small business cards will look at your personal credit score when you apply, it's important to keep your credit in tip-top shape. If it isn't there already, you might want to take some steps to improve it first. Since business cards usually offer a lot of perks, they are fairly difficult to qualify for.
Look for a card with low fees and/or a low APR – If you plan to utilize your line of credit often or carry a balance, it is wise to look for cards with the lowest APR possible. A card with a reasonable annual fee can also help keep more money in your pocket.
Compare perks and rewards – Most of the best small business cards offer a generous rewards program with points redeemable for gift cards, travel, or cash. Still, not all rewards programs are equal. Whatever you do, take special care to compare each rewards program to see how it stacks up. In addition to rewards, the right card can also help you qualify for all kinds of perks including cash back, trip cancellation/trip delay insurance, primary rental car insurance, and more.
If you need a line of credit for your small business, a small business credit card might be exactly what you need. By offering a flexible line of credit that is there when you need it, your credit card can save you a lot of hassle and help your business survive lean times.
Just make sure to research all of the best business cards before you apply. There are plenty of options, but only you can decide which card is best for your situation.


text:
Camp Wolters
Mineral Wells, Texas
Decaying military base deactivated in the 70s is now visited by urban explorers and military enthusiasts.
Aerial view of camp. http://randsco.com/_img/blog/0807/aerial_v... (http://randsco.com/_img/blog/0807/aerial_view-camp_wolters.jpg)
The main gate as it appears today. http://upload.wikimedia.org/wikipedia/en/t... (http://upload.wikimedia.org/wikipedia/en/thumb/c/cc/Fort_woltersa.jpg/800px-Fort_woltersa.jpg)
http://k43.pbase.com/o4/78/434878/1/582500... (http://k43.pbase.com/o4/78/434878/1/58250055.IMG_5922.jpg)
http://www.texasmilitaryforcesmuseum.org/1... (http://www.texasmilitaryforcesmuseum.org/1940/images/wolters/02wolters.jpg)
Abandoned Army Office springer (Atlas Obscura User)
Medal of Honor Memorial springer (Atlas Obscura User)
Generals Grant and Pickett Street sign springer (Atlas Obscura User)
Hospital springer (Atlas Obscura User)
Hospital and Hospital Powerhouse springer (Atlas Obscura User)
Warehouse springer (Atlas Obscura User)
Generals Pershing and Lee Street sign springer (Atlas Obscura User)
Three old Barracks springer (Atlas Obscura User)
Medal of Honor recipient Sprayberry springer (Atlas Obscura User)
Bordedup Barracks springer (Atlas Obscura User)
Firehouse No. 2 springer (Atlas Obscura User)
Abandoned Barracks springer (Atlas Obscura User)
Medal of Honor recipient Kettles springer (Atlas Obscura User)
Medal of Honor recipient Swanson springer (Atlas Obscura User)
Medal of Honor recipient Thomas springer (Atlas Obscura User)
Medal of Honor recipient Waugh springer (Atlas Obscura User)
Medal of Honor recipient Whiteley springer (Atlas Obscura User)
Medal of Honor recipient Baker springer (Atlas Obscura User)
Memorial to Medal of Honor recipients stationed at Fort Wolters springer (Atlas Obscura User)
Former pre-parole transfer facility now permanently closed. notoriousFIG (Atlas Obscura User)
Map of Fort Wolters springer (Atlas Obscura User)
Historical Marker springer (Atlas Obscura User)
Top Places in Mineral Wells
The Baker Hotel
Mineral Wells Fossil Park
A United States military installation about four miles outside of Mineral Wells, Texas, Camp Wolters operated as an Army camp from 1925 to 1946. After the war, the camp sat empty, deactivated for several years before reopening as an Air Force base in 1951 to train the Air Force engineers. Over the years, the camp was repurposed several times, but was finally deactivated in 1973. Today, parts of the site are used as an industrial park, a summer camp, and a Texas Army National Guard training center, but the many empty and abandoned buildings draw in urban explorers and military enthusiasts.
Fort Wolters was named for Brig. Gen. Jacob F. Wolters, a commander of the Fifty-sixth Brigade of the National Guard. The town of Mineral Wells donated fifty acres for the camp. It eventually grew to a total of 7,500 acres. At its peak, the camp could hold nearly 25,000 infantrymen.
When the camp was deactivated in the 70s, the government turned over all of its property to the General Service Administration for disposal. A series of complications resulted in most of the property not being destroyed: Some was given to the Lake Mineral Wells State Park, Weatherford College, and city and private businessmen.
Today, the majority of the site is known as Wolters Industrial Park and is privately owned by businessman. One of these surviving businesses is the Fort Wolters Helicopters Heliport, which is the only active aviation facility left in the area. It is located in the former engine shop of the Army Primary Helicopter Training Center.
Take I-20 to 180, and take 180 West to the entrance of Lake Mineral Wells park. Camp Wolters is the next entrance on the right. There are a number of still-operating businesses situated on the base.
repositories of knowledge architectural oddities architecture
Facebook1049881292
notoriousFIG, springer, Nicholas Jackson
Wikipedia: Fort Wolters: http://en.wikipedia.org/wiki/Fort_Wolters
Global Security: Camp Wolters: http://www.globalsecurity.org/military/facility/camp-wolters.htm
Fort Wolters Tour: Then and Now: http://www.fwcvhpa.org/fw/fw.htm
517 Grant Road
Mineral Wells, Texas, 76067
Possum Kingdom Stone Arch Bridge
Crumbling hotel echoes with the sounds of the '30s.
This former Texas landfill is flush with 300 million-year-old fossils, all fit for the taking.
Graford, Texas
The bridge continues the legacy of President Franklin D. Roosevelt's New Deal policy.
Paradise, Texas
The Lost Arm of F. Stewart
In Paradise Cemetery resides a mysterious headstone with a strange inscription.
Kilkenny, Ireland
Tullaherin Folk Museum and Round Tower
A collection of housewares from recent Irish history adjoined by a tower from ancient Irish history.
Porta Alchemica
An alchemist's "magic door" stands in the middle of a Roman park.
Heinold's First and Last Chance Saloon
Dive bar built out of the remains of a whaling ship.
The Grand Lodge of France
One of the oldest masonic museums in Paris.

redpajama_set_name: RedPajamaCommonCrawl


text:
Casper and Netflix's Slumberland are Teaming Up to Bring You an Adventurous Escape from Holiday Stress
In celebration of Netflix's new film "Slumberland," the streaming giant and sleep brand are offering cozy viewing experiences for the entire family
November 15, 2022 09:03 AM Eastern Standard Time
NEW YORK--(BUSINESS WIRE)--This holiday season, sleep company Casper wants to give consumers a chance to slow down, relax, and enjoy quality time with their families. In celebration of Netflix's highly-anticipated "Slumberland" film, Casper has teamed up with the leading streaming service to offer viewers an adventurous escape from the holiday madness. To partake in this dreamy collaboration, guests can attend regional ticketed screenings or participate virtually in The World's Largest Slumber Party.
Starring Jason Momoa, Marlow Barkley, and Chris O'Dowd, the film centers around a young girl named Nemo who discovers a secret map to the dreamworld of Slumberland – a magical and mysterious universe where all of our dreams exist when we sleep. With the help of Flip, an eccentric outlaw, she traverses through dreams and flees nightmares, with the hope that she will be granted one wish: to see her late father again. It will be available to stream on Netflix beginning Friday, November 18.
"We know the holidays are full of chaotic stress, and sometimes it can feel like you need a holiday from your holiday," said Chesen Schwethelm, Chief Marketing Officer at Casper. "As a brand that designs innovative products and experiences to help the world sleep better, we're thrilled to team up with Netflix to help families relax and unwind this holiday season, while escaping to Slumberland."
"Slumberland is about a magical and mysterious universe where all of our dreams exist when we sleep, and we can't wait to bring this adventure to the world," said Kevin Simms, Director of Marketing Partnerships at Netflix. "We are always looking for innovative and creative ways to authentically extend the stories we see on screen and we are thrilled to collaborate with Casper to help fans create memorable moments this holiday season."
To give fans an unforgettable viewing experience, Casper will be hosting exclusive Slumberland screenings at The Dreamery, its NoHo location in New York City on Saturday, November 19, and Sunday, November 20. Families and children of all ages are welcome and encouraged to wear their coziest PJs. Snacks, refreshments, and surprise giveaways from both Casper and Netflix will be provided. Tickets are limited and advanced registration is required. Show times are as follows:
Saturday, 11/19
Doors open 8:00 AM / Screening begins 8:30 AM EST
Doors open 11:30 AM / Screening begins 12:00 PM EST
Doors open 4:30 PM / Screening begins 5:00 PM EST
Sunday, 11/20
Full details and ticket registration can be found here: https://www.eventbrite.com/e/casper-slumberland-screening-at-the-dreamery-tickets-457332573037
If you're unable to join in person, you're invited to The World's Largest Slumber Party on Friday, 11/18 at 6:00 PM EST to watch Slumberland on Netflix from the comfort of your bed. Throughout the slumber party, viewers will have a chance to win prizes to help you drift off to sleep, including Casper Mattresses, Snoozewear Robes, Netflix subscriptions, and more. All you need to do is showcase your dreamy setup, using #CasperSlumberland #sweepstakes on Instagram. Please visit casper.com/slumberland for the full sweepstakes rules.
To learn more about Casper, head to Casper.com and follow the brand on Instagram, Twitter, TikTok, and Facebook. Follow the hashtag #CasperSlumberland for more updates.
ABOUT CASPER:
Casper believes everyone should sleep better. The sleep company has a full portfolio of obsessively engineered sleep products—including mattresses, pillows, bedding, and furniture—designed in-house by the Company's award-winning R&D team at Casper Labs. In addition to its e-commerce business, Casper owns and operates Sleep Shops across North America and its products are available at a growing list of retailers.
For Media Inquiries:
Dana Yacyk
Director, Brand Engagement
comms@casper.com


text:
import unittest
import os, sys, socket, time, re, inspect
from  random import randrange
from subprocess import Popen, PIPE, STDOUT
from copy import copy
import platform
from os.path import dirname as dirname
from threading import Thread, Event

def pick_addr():
    """Pick a new host:port address."""
    # TODO Conway 2015-07-14: need a safer way to pick ports.
    p =  randrange(10000, 20000)
    return "127.0.0.1:%s" % p

class ProcError(Exception):
    """An exception that captures failed process output"""
    def __init__(self, proc, what="non-0 exit"):
        out = proc.out.strip()
        if out:
            out = "\nvvvvvvvvvvvvvvvv\n%s\n^^^^^^^^^^^^^^^^\n" % out
        else:
            out = ", no output)"
        super(Exception, self, ).__init__(
            "%s %s, code=%s%s" % (proc.args, what, proc.returncode, out))

class Proc(Popen):
    """A example process that stores its stdout and can scan it for a 'ready' pattern'"""

    if "VALGRIND" in os.environ and os.environ["VALGRIND"]:
        env_args = [os.environ["VALGRIND"], "--error-exitcode=42", "--quiet", "--leak-check=full"]
    else:
        env_args = []

    def __init__(self, args, ready=None, timeout=30, skip_valgrind=False, **kwargs):
        """Start an example process"""
        args = list(args)
        if platform.system() == "Windows":
            args[0] += ".exe"
        self.timeout = timeout
        self.args = args
        self.out = ""
        if not skip_valgrind:
            args = self.env_args + args
        try:
            Popen.__init__(self, args, stdout=PIPE, stderr=STDOUT, **kwargs)
        except Exception, e:
            raise ProcError(self, str(e))
        # Start reader thread.
        self.pattern = ready
        self.ready = Event()
        # Help with Python 2.5, 2.6, 2.7 changes to Event.wait(), Event.is_set
        self.ready_set = False
        self.error = None
        self.thread = Thread(target=self.run_)
        self.thread.daemon = True
        self.thread.start()
        if self.pattern:
            self.wait_ready()

    def run_(self):
        try:
            while True:
                l = self.stdout.readline()
                if not l: break
                self.out += l.translate(None, "\r")
                if self.pattern is not None:
                    if re.search(self.pattern, l):
                        self.ready_set = True
                        self.ready.set()
            if self.wait() != 0:
                raise ProcError(self)
        except Exception, e:
            self.error = sys.exc_info()
        finally:
            self.ready_set = True
            self.ready.set()

    def safe_kill(self):
        """Kill and clean up zombie but don't wait forever. No exceptions."""
        try:
            self.kill()
            self.thread.join(self.timeout)
        except: pass
        return self.out

    def check_(self):
        if self.error:
            if isinstance(self.error, Exception):
                raise self.error
            raise self.error[0], self.error[1], self.error[2] # with traceback

    def wait_ready(self):
        """Wait for ready to appear in output"""
        self.ready.wait(self.timeout)
        if self.ready_set:
            self.check_()
            return self.out
        else:
            self.safe_kill()
            raise ProcError(self, "timeout waiting for '%s'" % self.pattern)

    def wait_exit(self):
        """Wait for process to exit, return output. Raise ProcError on failure."""
        self.thread.join(self.timeout)
        if self.poll() is not None:
            self.check_()
            return self.out
        else:
            raise ProcError(self, "timeout waiting for exit")

def count_tests(cls):
    methods = inspect.getmembers(cls, predicate=inspect.ismethod)
    tests = [ i for i,j in methods if i.startswith('test_') ]
    return len(tests)

class CompatSetupClass(object):
    # Roughly provides setUpClass and tearDownClass functionality for older python versions
    # in our test scenarios
    def __init__(self, target):
        self.completed = False
        self.test_count = count_tests(target)
        self.target = target
        self.global_setup = False

    def note_setup(self):
        if not self.global_setup:
            self.global_setup = True
            self.target.setup_class()

    def note_teardown(self):
        self.test_count -=  1
        if self.test_count == 0:
            self.completed = True
            self.target.teardown_class()

class ExampleTestCase(unittest.TestCase):

    @classmethod
    def setup_class(cls):
        pass

    @classmethod
    def teardown_class(cls):
        pass

    def completed(self):
        cls = self.__class__
        return cls.compat_ and cls.compat_.completed

    def setUp(self):
        cls = self.__class__
        if not hasattr(cls, "compat_"):
            cls.compat_ = CompatSetupClass(cls)
        if cls.compat_.completed:
            # Last test for this class already seen.
            raise Exception("Test sequencing error")
        cls.compat_.note_setup()
        self.procs = []

    def tearDown(self):
        for p in self.procs:
            p.safe_kill()
        self.__class__.compat_.note_teardown()

    def proc(self, *args, **kwargs):
        p = Proc(*args, **kwargs)
        self.procs.append(p)
        return p

class BrokerTestCase(ExampleTestCase):
    """
    ExampleTest that starts a broker in setUpClass and kills it in tearDownClass.
    """

    # setUpClass not available until 2.7
    @classmethod
    def setup_class(cls):
        cls.addr = pick_addr() + "/examples"
        cls.broker = Proc(["broker", "-a", cls.addr], ready="listening")
        cls.broker.wait_ready()

    # tearDownClass not available until 2.7
    @classmethod
    def teardown_class(cls):
        cls.broker.safe_kill()

    def tearDown(self):
        super(BrokerTestCase, self).tearDown()
        if not self.completed():
            b = type(self).broker
            if b.poll() !=  None: # Broker crashed
                type(self).setUpClass() # Start another for the next test.
                raise ProcError(b, "broker crash")

CLIENT_EXPECT="""Twas brillig, and the slithy toves => TWAS BRILLIG, AND THE SLITHY TOVES
Did gire and gymble in the wabe. => DID GIRE AND GYMBLE IN THE WABE.
All mimsy were the borogroves, => ALL MIMSY WERE THE BOROGROVES,
And the mome raths outgrabe. => AND THE MOME RATHS OUTGRABE.
"""

def recv_expect(name, addr):
    return "%s listening on amqp://%s\n%s" % (
        name, addr, "".join(['{"sequence"=%s}\n' % (i+1) for i in range(100)]))

class ContainerExampleTest(BrokerTestCase):
    """Run the container examples, verify they behave as expected."""

    def test_helloworld(self):
        self.assertEqual('Hello World!\n', self.proc(["helloworld", self.addr]).wait_exit())

    def test_helloworld_direct(self):
        self.assertEqual('Hello World!\n', self.proc(["helloworld_direct", pick_addr()]).wait_exit())

    def test_simple_send_recv(self):
        self.assertEqual("all messages confirmed\n",
                         self.proc(["simple_send", "-a", self.addr]).wait_exit())
        self.assertEqual(recv_expect("simple_recv", self.addr), self.proc(["simple_recv", "-a", self.addr]).wait_exit())

    def test_simple_recv_send(self):
        # Start receiver first, then run sender"""
        recv = self.proc(["simple_recv", "-a", self.addr])
        self.assertEqual("all messages confirmed\n",
                         self.proc(["simple_send", "-a", self.addr]).wait_exit())
        self.assertEqual(recv_expect("simple_recv", self.addr), recv.wait_exit())

    def test_simple_send_direct_recv(self):
        addr = pick_addr()
        recv = self.proc(["direct_recv", "-a", addr], "listening")
        self.assertEqual("all messages confirmed\n",
                         self.proc(["simple_send", "-a", addr]).wait_exit())
        self.assertEqual(recv_expect("direct_recv", addr), recv.wait_exit())

    def test_simple_recv_direct_send(self):
        addr = pick_addr()
        send = self.proc(["direct_send", "-a", addr], "listening")
        self.assertEqual(recv_expect("simple_recv", addr),
                         self.proc(["simple_recv", "-a", addr]).wait_exit())

        self.assertEqual(
            "direct_send listening on amqp://%s\nall messages confirmed\n" % addr,
            send.wait_exit())

    def test_request_response(self):
        server = self.proc(["server", "-a", self.addr], "connected")
        self.assertEqual(CLIENT_EXPECT,
                         self.proc(["client", "-a", self.addr]).wait_exit())

    def test_request_response_direct(self):
        addr = pick_addr()
        server = self.proc(["server_direct", "-a", addr+"/examples"], "listening")
        self.assertEqual(CLIENT_EXPECT,
                         self.proc(["client", "-a", addr+"/examples"]).wait_exit())

    def test_encode_decode(self):
        want="""
== Array, list and map of uniform type.
array<int>[int(1), int(2), int(3)]
[ 1 2 3 ]
list[int(1), int(2), int(3)]
[ 1 2 3 ]
map{string(one):int(1), string(two):int(2)}
{ one:1 two:2 }
map{string(z):int(3), string(a):int(4)}
[ z:3 a:4 ]
list[string(a), string(b), string(c)]

== List and map of mixed type values.
list[int(42), string(foo)]
[ 42 foo ]
map{int(4):string(four), string(five):int(5)}
{ 4:four five:5 }

== Insert with stream operators.
array<int>[int(1), int(2), int(3)]
list[int(42), boolean(false), symbol(x)]
map{string(k1):int(42), symbol(k2):boolean(false)}
"""
        self.maxDiff = None
        self.assertEqual(want, self.proc(["encode_decode"]).wait_exit())

    def test_recurring_timer(self):
        expect="""Tick...
Tick...
Tock...
"""
        self.maxDiff = None
        # Disable valgrind, this test is time-sensitive.
        self.assertEqual(expect, self.proc(["recurring_timer", "-t", ".05", "-k", ".01"], skip_valgrind=True).wait_exit())

    def ssl_certs_dir(self):
        """Absolute path to the test SSL certificates"""
        pn_root = dirname(dirname(dirname(sys.argv[0])))
        return os.path.join(pn_root, "examples/cpp/ssl_certs")

    def test_ssl(self):
        # SSL without SASL
        addr = "amqps://" + pick_addr() + "/examples"
        # Disable valgrind when using OpenSSL
        out = self.proc(["ssl", addr, self.ssl_certs_dir()], skip_valgrind=True).wait_exit()
        expect = "Outgoing client connection connected via SSL.  Server certificate identity CN=test_server\nHello World!"
        expect_found = (out.find(expect) >= 0)
        self.assertEqual(expect_found, True)

    def test_ssl_client_cert(self):
        # SSL with SASL EXTERNAL
        expect="""Inbound client certificate identity CN=test_client
Outgoing client connection connected via SSL.  Server certificate identity CN=test_server
Hello World!
"""
        addr = "amqps://" + pick_addr() + "/examples"
        # Disable valgrind when using OpenSSL
        out = self.proc(["ssl_client_cert", addr, self.ssl_certs_dir()], skip_valgrind=True).wait_exit()
        expect_found = (out.find(expect) >= 0)
        self.assertEqual(expect_found, True)

class ConnectionEngineExampleTest(BrokerTestCase):
    """Run the connction_engine examples, verify they behave as expected."""

    def test_helloworld(self):
        self.assertEqual('Hello World!\n',
                         self.proc(["helloworld", self.addr]).wait_exit())

    def test_simple_send_recv(self):
        self.assertEqual("all messages confirmed\n",
                         self.proc(["simple_send", "-a", self.addr]).wait_exit())
        self.assertEqual(recv_expect("simple_recv", self.addr), self.proc(["simple_recv", "-a", self.addr]).wait_exit())

    def test_simple_recv_send(self):
        # Start receiver first, then run sender"""
        recv = self.proc(["simple_recv", "-a", self.addr])
        self.assertEqual("all messages confirmed\n", self.proc(["simple_send", "-a", self.addr]).wait_exit())
        self.assertEqual(recv_expect("simple_recv", self.addr), recv.wait_exit())

    def test_simple_send_direct_recv(self):
        addr = pick_addr()
        recv = self.proc(["direct_recv", "-a", addr], "listening")
        self.assertEqual("all messages confirmed\n",
                         self.proc(["simple_send", "-a", addr]).wait_exit())
        self.assertEqual(recv_expect("direct_recv", addr), recv.wait_exit())

    def test_simple_recv_direct_send(self):
        addr = pick_addr()
        send = self.proc(["direct_send", "-a", addr], "listening")
        self.assertEqual(recv_expect("simple_recv", addr),
                         self.proc(["simple_recv", "-a", addr]).wait_exit())
        self.assertEqual("direct_send listening on amqp://%s\nall messages confirmed\n" % addr,
                         send.wait_exit())

    def test_request_response(self):
        server = self.proc(["server", "-a", self.addr], "connected")
        self.assertEqual(CLIENT_EXPECT,
                         self.proc(["client", "-a", self.addr]).wait_exit())

if __name__ == "__main__":
    unittest.main()