"The Warm Front Scheme makes a difference to the warmth and fuel bills of so many people. "However, more could be done to help those households most in need by reducing expenditure on measures which have limited impact on fuel costs and on homes which are already energy efficient. And funds should be redirected to better assist, for example, those in 'hard to treat' homes such as those not connected to mains gas or without cavity walls."
The Warm Front scheme for improving the energy efficiency of households suffering from fuel poverty has been more successful than the former Home Energy Efficiency Scheme which it replaced in June 2000. However, according to today's report to Parliament by head of the NAO Sir John Bourn, the scheme is not reaching those in greatest need, the energy efficiency and heating measures offered are not having as much impact as they might and, as a result, the scheme may make less of a contribution to eliminating fuel poverty than it could.
Warm Front is overseen and funded by the Department for the Environment, Food and Rural Affairs (DEFRA) and is an important part of the Fuel Poverty Strategy, which aims to eliminate fuel poverty in vulnerable groups by 2010 as far as reasonably practicable. The scheme assisted over 300,000 households in 2001-02 providing insulation and heating measures to an average value of £445 for each household. This gave each home assisted the potential to save around £150 a year through reduced fuel bills.
The scheme has a high level of customer satisfaction and attracts few complaints but could be made more effective.
The eligibility criteria for grants could better identify those most in need. Eligibility for grants under the scheme is determined by whether occupants of a household receive benefits such as income support, child tax credits and disability living allowance. But around a third of the fuel poor may be ineligible for help under the scheme because they are not claiming benefit or are not entitled to the relevant benefits. Conversely, between 40 and 70 per cent of households eligible for the scheme may not be fuel poor – because they have a reasonable level of income or live in a household which is already fuel efficient.
A wider range of measures could be made available. The heating and insulation measures available under Warm Front may be insufficient to move households out of fuel poverty in at least a fifth of cases. These homes receive only energy efficient light bulbs or draught-proofing, saving at most only £25 a year. And, although the range of measures provided by Warm Front is wider than that offered by the previous scheme, it is not well suited to some fuel poor households – principally, those not on the gas network (25 per cent of the fuel poor) and those without a cavity in outside walls (44 per cent of fuel poor households in England).
Grants could be better targeted towards the most fuel poor or the least energy efficient homes. Because no account is taken of the energy efficiency of the claimant's home when determining eligibility, only a small proportion (14 per cent in 2001-02) of grants reach the least energy efficient homes where they would have most benefit in addressing fuel poverty. And grants and assistance to the fuel poor in rural areas have been less common because urban areas generate applications more easily.
The report also notes that the Department's current targets and performance measures do not provide a clear or meaningful view of progress against the Fuel Poverty Strategy. The prime measure of success for the scheme is the number of households assisted by Warm Front rather than the improvements in energy efficiency achieved – a better indicator of the success in moving people out of fuel poverty.
The NAO's recommendations include the following.
Targets for Warm Front should be framed around the average improvement in the energy efficiency of the households assisted, as well as the number of homes assisted. Reporting against the target should include only homes where a significant reduction in energy costs has been achieved, helping to move households out of fuel poverty.
Given the limited amount of data which the Department has about the effect of Warm Front on the actual fuel costs of households helped, it should research whether the scheme has moved households out of fuel poverty, to better inform its scheme design and assess scheme success.
The Department should review the effectiveness of the scheme's eligibility provisions and consider concentrating eligibility only on those groups on low incomes as shown by receipt of means-tested benefits.
The Department should also consider how to concentrate its resources on those eligible homes with the lowest energy efficiency where the most cost-effective improvements can be made, with greater flexibility over the range of measures that can be provided.


Look up "decadence" in the dictionary and you'll find Guli's desserts.
Have a sweet tooth that needs satisfying? (Don't we all?) Dessert lovers rejoice at Guli's Desserts in Sarona Market. Choose a Belgian waffle or donut holes as the base, smother it with Italian ice cream, and choose from a huge array of toppings to add to your decadent creation. First, gawk at how pretty it is. Then sit down and savor every last bite of heavenly, sugary goodness.


This .rar contains everything a new RVS mapper should need to get started. It covers the basics pretty well, but it takes time to learn.
Let me know if the link is down Happy RVS gaming!
Last edited by SpecOps on Wed Dec 17, 2014 5:58 pm, edited 1 time in total.
Last edited by SpecOps on Wed Dec 17, 2014 6:00 pm, edited 2 times in total.
Hey spec good job! Edited a few things explained in the readme just to help you on a few things Open up this version of the map and check it out, showed u how to "zone" using a portal sheet, cuts down on the fps lag If you master a few more things I'm sure ur on your way my friend!
Last edited by SpecOps on Wed Dec 17, 2014 5:59 pm, edited 1 time in total.


(Clearwisdom.net) On June 13, Lord Moyne of the U.K. wrote a letter to Icelandic officials regarding the recent barring of Falun Gong practitioners from entering into Iceland.
It is distressing to read that your country has excluded groups of people who were proposing to visit Iceland to protest against the persecution of the Falun Gong in China on the occasion of the visit to Iceland of President Jiang Zemin. As you should be aware, this persecution is extremely vicious and has resulted in the detention of many thousands of people. In many cases they have been tortured and there have been hundreds of deaths. Reliable reports indicate that the persecution is to a great extent the personal responsibility of President Jiang.
You Government ought to have been aware that in many countries where members and supporters of the Falun Gong have staged protests, these protests have in every case been entirely peaceful.
Where the movement and its supporters demonstrate against President Jiang in a country he is visiting, they have a record of always obeying police instructions promptly and unconditionally. The purpose of the demonstration is not to interfere with the visit as such, but to attract the attention of the local population. I have myself taken part in such demonstrations in London, Dublin, Brussels, Geneva, Berlin, Dresden and Wolfsburg and this was the practice in every case.
It is disappointing that the Government of Iceland feels it necessary to cringe in this way to an unpleasant dictator. The reputation of your country in the matter of human rights will certainly suffer.


text:
East Cedar Creek F. W. S. D.
EMERGENCY ALERTS WILL BE POSTED HERE.
FRIDAY January 27,2023 - our crews are working on the water main in WOODWILKS area due to a water leak that was reported to us. If you are in this area or surrounding areas, you may experience low pressure or no water pressure during this time. We will not pull of the job until the job is complete and water is restored.
About Us FAQ Messages from the General Manager
Billing & Termination Forms Agendas and Minutes
Conservation & Drought Plan Pay My Bills Important Links
Contact Us Public Notice
Customer Education - Videos Rates & Policies
Customer Tips & Information Service Area
Drinking Water Report Brookshire Water Treatment, Quality, & Distribution
Drinking Water Report McKay Wastewater Treatment & Collection
Employment - Job Openings Transparency
Board Meetings are every third Wednesday of the month at 12:30pm at the Administration Building.
The District's Board meetings are open to the public and we will strive to maintain social distancing and will also be available by video/telephone conference on Zoom as long as possible. The link to join the meetings by zoom video and/or telephone conference will be posted under the "Public Notice" page above at least 72 hours before the meetings are held. You can also contact our office for the zoom meeting details. *****Please note as of September 1st, 2021 anyone wishing to participate in meeting will be required to be visibly seen and clearly audible to other participants. *********
Our Board Meetings are held on every third Wednesday of the month unless otherwise posted (see public notice section on this website). These meetings are open to the public and there is always a Public Comment section on the agenda. The Public Comment section is for the Public to address non-agenda items and/or request that their item to be considered on a future agenda. Individuals are limited to a maximum of five (5) minutes. The Board cannot deliberate or take action on non-agenda items. On 08/21/2019 the Board of Directors adopted the following rules effective September 1, 2019 for allowing each member of the public who desires to address the Board regarding an item on an agenda for all open meetings. Click the link below for the full rules on public addressing agenda items in open meetings.
CLICK HERE FOR POLICY FOR PUBLIC TESTIMONY DURING OPEN MEETING
President Jim Willi / Elected 2020 - Term Expires 11/2024
Vice-President Bill Goheen/ Elected 2022 - Term Expires 11/2026
Secretary Joe Lomonaco / Elected 2018 - Term Expires 11/2026
Treasurer Ted Bayless / Elected 2020 - Term Expires 11/2024
Director Larry Bratton / Elected 2018 - Term Expires 11/2026
Director Rob Rea/ Appointed 2021 - Term Expires 11/2024
Director Patrick Mullaney/Appointed 2022 - Term Expires 11/2026
HOLIDAY OFFICE CLOSURE FOR 2023
Please check back as these dates are subject to change
Monday January 2, 2023 New Year's Day
Friday April 7, 2023 Good Friday
Monday May 29, 2023 Memorial Day
Tuesday July 4, 2023 Independence Day
Monday September 4, 2023 Labor Day
Friday November 11, 2023 Veteran's Day
Thursday November 23, 2023 Thanksgiving Day
Friday November 24, 2023 Day After Thanksgiving
Monday December 25, 2023 Christmas Day
Tuesday December 26, 2023 Day After Christmas
SEVERE WEATHER NOTICE
PLEASE BE AWARE that during times of inclement weather we may have delayed openings, close our office early, or in some severe cases not open the office at all. You can contact our office at (903) 887-7103 to confirm that we are open before traveling and be prompted on what to do if you have an emergency. Closings will be published here on our website and on our facebook page.

redpajama_set_name: RedPajamaCommonCrawl


Is your website failing to attract customers to your Surrey business?
Would you like to speak to affordable web design specialists near you, to understand more about improving your web presence?
Maybe you need a web consultancy service, where we can help you develop your digital strategy for the future? Here at JJ Solutions, we are a full-service web design company, offering everything from small website updates, to full projects for large organisations of all descriptions.
Our small team are passionate about fantastic design and all our websites are tailored to the individual needs and budgets of our clients. Our bespoke websites not only look brilliant, but are responsive, functional across different platforms and designed with SEO in mind.
In order to deliver the right web solutions for you, we listen and take time to understand your brand, your requirements and your short and long-term business objectives. We cater for all types of businesses and budgets and aim to build strong relationships, working with companies to help them achieve significant business growth and better customer care.
We can create content management systems to give our clients the knowledge and the tools to update their websites in the future and can help with systems development, so they can work smarter and more efficiently.
If you need more from your website, call us today on 020 3871 8773.
Our team of writers can write quality content for your site that Google loves!
Are you looking for an eCommerce site or small or medium-business WordPress site? Here at JJ Solutions we are a WordPress agency, who build WordPress websites that will get you found and noticed online. We can take any idea and turn it into a seamless WordPress theme.
We develop custom themes and plugins, all coded with care.
Our WordPress developers can develop a site for your business from scratch to match your brand identity and offer a unique experience to your users.
We train our clients so they can update their WordPress sites, quickly and easily. They can add, remove and edit pages at the click of a button!
Our fully-optimised WordPress sites are all future-proofed and scalable so as your business grows, so can your site.
Get real ROI with our affordably-priced WordPress sites that are renowned for their reliability, functionality and robustness.
We provide on-going technical support so will have a solution for any query you may have.
See a recent WordPress site we built for Fancy Metal Goods. Call us today to discuss your WordPress requirements.
We understand that having a good website is much more than just aesthetics. Effective web design will bring your brand to life, engage with your potential customers and can be the difference between them becoming your customers, or those of your competitors. We strive to gain an in-depth understanding on our clients' businesses, the needs of their customers and their aims. We will then create websites that are user-focused and responsive.
With each year that passes, mobile devices become more a part of our everyday lives, where we surf the internet, make social connections and buy products. We work with our clients to plan how they want their users to view and interact with their site, depending on the type of device they are using. Their sites will view beautifully on mobiles, iPads and computers.
Are you looking for a first class WordPress designer in Surrey?
We use all the latest technologies and systems to create the most powerful and effective websites for our customers. One of our most popular requests is WordPress design and our experienced designers and developers are passionate about the creative flexibility of WordPress. This platform is no longer just for blogging; we can build you a dynamic and tailor-made WordPress site to suit the needs of your business. Our extensive knowledge means that we know what works, why and how and we can offer this expertise at some of the best prices available. With some basic training, we can also teach you how the site works, so you can help update your own site in the future, without the need for specialist software or technical skills.
We take time to listen to you: We know that you know your business better than anyone, so the first step for us is to listen to your aims, the market and your business. We will then go and do some research of our own and understand this area – this approach really makes a difference.
We deliver on time and within budget: We will always be clear from the initial proposal about timescale and costs and will set expectations to ensure success to compete satisfaction. We have low overheads and can pass all these savings onto you.
We are web design specialists: Our founders, James and Jason, are experts in their fields and have decades of experience creating web solutions that really work. If you need simple website or a design with all the bells and whistles, they have the expertise to help. We have created thousands of sites for almost every business you could think of!
We keep it simple: Many web design companies love to build complex sites. We create user-friendly simple sites, that look good, are quick to load and are less prone to problems.
We're honest: Much of our business has grown through word-of-mouth recommendations and we intend to keep growing this way. We will treat you fairly and will do a great job. We will also give you the tools and information to make informed choices in the future. See our reviews for some recommendations.
We are always happy to chat to you about your business needs. Please call 020 3871 8773, email us at hello@jj-solutions.com or fill in an online contact form and we will give you a call back.


text:
function print_usage {
    echo 'build-win-application.sh
Build an Windows applicaiton installer for Orange Canvas

Note: needs makensis and 7z on PATH

Options:

    -b --build-base PATH    Build directory (default build/win-installer)
    -d --dist-dir           Distribution dir
    --download-cache DIR    Cache downloaded packages in DIR
    -r --requirements       Extra requirements file
    --standalone            Build a standalone application.
    -h --help               Print this help
'
}

while [[ ${1:0:1} = "-" ]]; do
    case $1 in
        -b|--build-base)
            BUILDBASE=$2
            shift 2
            ;;
        -d|--dist-dir)
            DISTDIR=$2
            shift 2
            ;;
        --download-cache)
            DOWNLOADDIR=$2
            shift 2
            ;;
        -r|--requirements)
            REQUIREMENT=$2
            shift 2
            ;;
        --standalone)
            STANDALONE=1
            shift 1
            ;;
        -h|--help)
            print_usage
            exit 0
            ;;
        -*)
            echo "Unkown argument $1" >&2
            print_usage >&2
            exit 1
            ;;
    esac
done

PLATTAG=win32

PYTHON_VER=3.4.3
PYTHON_MD5=cb450d1cc616bfc8f7a2d6bd88780bf6

PYTHON_VER_SHORT=${PYTHON_VER%.[0-9]*}
PYVER=$(echo $PYTHON_VER_SHORT | sed s/\\.//g)
PYTHON_MSI=python-$PYTHON_VER.msi

PYQT_VER=4.11.3
PYQT_MD5=7f0e53bbae9b8d39ae2dbe90fb8104cd

NUMPY_VER=1.9.2
NUMPY_MD5=0c06b7beabdc053ef63699ada0ee5e98

SCIPY_VER=0.15.1
SCIPY_MD5=e24c435e96dc7fbde8eac62ca8c969c8

DISTDIR=${DISTDIR:-dist}

BUILDBASE=${BUILDBASE:-build}/temp.$PLATTAG-py$PYTHON_VER_SHORT-installer
DOWNLOADDIR=${DOWNLOADDIR:-build/temp.download-cache}

# BUILDBASE/
#   core/
#     python/
#     msvredist/
#   wheelhouse/
#       [no]sse[2|3]/
#   nsisplugins/cpucaps.dll
#   startupscripts/
#   requirements.txt

# Clean any leftovers from previous runs
if [[ -d "$BUILDBASE" ]]; then
    rm -r "$BUILDBASE"
fi

mkdir -p "$BUILDBASE"/core/python
mkdir -p "$BUILDBASE"/core/msvredist
mkdir -p "$BUILDBASE"/wheelhouse
mkdir -p "$BUILDBASE"/nsisplugins
mkdir -p "$BUILDBASE"/startupscripts

mkdir -p "$DOWNLOADDIR"
mkdir -p "$DISTDIR"

touch "$BUILDBASE"/requirements.txt

echo "
#:wheel: scikit-learn https://pypi.python.org/packages/3.4/s/scikit-learn/scikit_learn-0.15.2-cp34-none-win32.whl#md5=40552c03c3aed7910d03b5801fbb3f26
scikit-learn==0.15.2

#:wheel: matplotlib https://pypi.python.org/packages/cp34/m/matplotlib/matplotlib-1.4.2-cp34-none-win32.whl#md5=f18b7568493bece5c7b3eb7bb4203826
matplotlib==1.4.2

#:wheel: ipython https://pypi.python.org/packages/3.4/i/ipython/ipython-2.4.1-py3-none-any.whl#md5=7e377fe675a88eb49e720c98de4a7ee4
ipython==2.4.1

#:wheel: pyzmq https://pypi.python.org/packages/3.4/p/pyzmq/pyzmq-14.5.0-cp34-none-win32.whl#md5=333bc2f02d24aa2455ce4208b9d8666e
pyzmq==14.5.0

#:source: Markupsafe
Markupsafe==0.23

#:source: certifi
certifi==14.05.14

#:source: Jinja2
jinja2==2.7.3

#:source: tornado
tornado==4.1

#:wheel: pygments https://pypi.python.org/packages/3.3/P/Pygments/Pygments-2.0.2-py3-none-any.whl#md5=b38281817abc47c82cf3533b8c6608f6
pygments==2.0.2

#:wheel: networkx https://pypi.python.org/packages/2.7/n/networkx/networkx-1.9.1-py2.py3-none-any.whl#md5=15bb60c9b386563a6d4765264f5bf687
networkx==1.9.1

#:source: decorator
decorator==3.4.0

#:source: sqlparse
sqlparse==0.1.13

#:wheel: Bottlecheset https://dl.dropboxusercontent.com/u/100248799/Bottlechest-0.7.1-cp34-none-win32.whl#md5=629ba2a148dfa784d0e6817497d42e97
--find-links https://dl.dropboxusercontent.com/u/100248799/Bottlechest-0.7.1-cp34-none-win32.whl
Bottlechest==0.7.1

#:source: pyqtgraph
pyqtgraph==0.9.10
" > "$BUILDBASE"/requirements.txt

function __download_url {
    local url=${1:?}
    local out=${2:?}
    curl --fail -L --max-redirs 4 -o "$out" "$url"
}

function md5sum_check {
    local filepath=${1:?}
    local checksum=${2:?}
    local md5=

    if [[ -x $(which md5) ]]; then
        md5=$(md5 -q "$filepath")
    else
        md5=$(md5sum "$filepath" | cut -d " " -f 1)
    fi

    [ "$md5" == "$checksum" ]
}

#
# download_url URL TARGET_PATH MD5_CHECKSUM
#
# download the contants of URL and to TARGET_PATH and check that the
# md5 checksum matches.

function download_url {
    local url=${1:?}
    local targetpath=${2:?}
    local checksum=${3:?}

    if [ -f "$targetpath" ] && ! md5sum_check "$targetpath" "$checksum"; then
        rm "$targetpath"
    fi

    if [ ! -f "$targetpath" ]; then
        __download_url "$url" "$targetpath"
    fi

    if ! md5sum_check "$targetpath" "$checksum"; then
        echo "Checksum does not match for $OUT"
        exit 1
    fi
}

#
# Download python msi installer
#
function prepare_python {
    local url="https://www.python.org/ftp/python/$PYTHON_VER/$PYTHON_MSI"
    download_url "$url" "$DOWNLOADDIR/$PYTHON_MSI" $PYTHON_MD5
    cp "$DOWNLOADDIR/$PYTHON_MSI" "$BUILDBASE"/core/python
}

function prepare_msvredist {
    local url="https:/orange.biolab.si/files/3rd-party/$PYVER/vcredist_x86.exe"
    download_url $url \
                 "$BUILDBASE/core/msvredist/vcredist_x86.exe" \
                 b88228d5fef4b6dc019d69d4471f23ec
}

function prepare_msvcr100 {
    download_url "https://dl.dropboxusercontent.com/u/100248799/msvcr100.dll" \
                 "$DOWNLOADDIR/msvcr100.dll" \
                 bf38660a9125935658cfa3e53fdc7d65

    cp "$DOWNLOADDIR/msvcr100.dll" "$BUILDBASE/core/msvredist/msvcr100.dll"

    download_url "https://dl.dropboxusercontent.com/u/100248799/msvcp100.dll" \
                 "$DOWNLOADDIR/msvcp100.dll" \
                 e3c817f7fe44cc870ecdbcbc3ea36132

    cp "$DOWNLOADDIR/msvcp100.dll" "$BUILDBASE/core/msvredist/msvcp100.dll"
}

function prepare_pyqt4 {
    download_url \
        https://dl.dropboxusercontent.com/u/100248799/PyQt4-${PYQT_VER}-cp34-none-win32.whl \
        "$DOWNLOADDIR"/PyQt4-${PYQT_VER}-cp34-none-win32.whl \
        7f0e53bbae9b8d39ae2dbe90fb8104cd

    cp "$DOWNLOADDIR"/PyQt4-${PYQT_VER}-cp34-none-win32.whl "$BUILDBASE"/wheelhouse
}

function prepare_scipy_stack {
	local numpy_superpack=numpy-$NUMPY_VER-win32-superpack-python$PYTHON_VER_SHORT.exe
	local scipy_superpack=scipy-$SCIPY_VER-win32-superpack-python$PYTHON_VER_SHORT.exe

    download_url http://sourceforge.net/projects/numpy/files/NumPy/$NUMPY_VER/$numpy_superpack/download \
                 "$DOWNLOADDIR"/$numpy_superpack \
                 $NUMPY_MD5

    download_url http://sourceforge.net/projects/scipy/files/scipy/$SCIPY_VER/$scipy_superpack/download \
                 "$DOWNLOADDIR"/$scipy_superpack \
                 $SCIPY_MD5

    7z -o"$DOWNLOADDIR"/numpy -y e "$DOWNLOADDIR"/$numpy_superpack
    7z -o"$DOWNLOADDIR"/scipy -y e "$DOWNLOADDIR"/$scipy_superpack

	local wheeltag=cp${PYVER}-none-win32
	local wheeldir=

    for SSE in nosse sse2 sse3; do
		wheeldir="$BUILDBASE"/wheelhouse/$SSE
        mkdir -p "$wheeldir"

        python -m wheel convert -d "$wheeldir" \
               "$DOWNLOADDIR"/numpy/numpy-$NUMPY_VER-$SSE.exe

        mv "$wheeldir"/numpy-$NUMPY_VER-*$SSE.whl \
		   "$wheeldir"/numpy-$NUMPY_VER-$wheeltag.whl

        python -m wheel convert -d "$wheeldir" \
			   "$DOWNLOADDIR"/scipy/scipy-$SCIPY_VER-$SSE.exe

        mv "$wheeldir"/scipy-$SCIPY_VER-*$SSE.whl \
		   "$wheeldir"/scipy-$SCIPY_VER-$wheeltag.whl
    done

    # copy the CpuCaps.dll nsis plugin into place
    cp "$DOWNLOADDIR"/numpy/cpucaps.dll \
       "$BUILDBASE"/nsisplugins
}

function prepare_req {
    python -m pip wheel \
        -w "$BUILDBASE/wheelhouse" \
        -f "$BUILDBASE/wheelhouse" \
        -f "$BUILDBASE/wheelhouse/nosse" \
        "$@"
}

function prepare_orange {
    python setup.py egg_info
    local version=$(grep -E "^Version: .*$" Orange.egg-info/PKG-INFO | awk '{ print $2 }')

    python setup.py egg_info \
        build --compiler=msvc \
        bdist_wheel -d "$BUILDBASE/wheelhouse"

    echo "# Orange " >> "$BUILDBASE/requirements.txt"
    echo "Orange==$version" >> "$BUILDBASE/requirements.txt"
}

function prepare_extra {
    python -m pip wheel \
        -w "$BUILDBASE/wheelhouse" \
        -f "$BUILDBASE/wheelhouse" \
        -f "$BUILDBASE/wheelhouse/nosse" \
        --no-deps \
        --no-index \
        -r "$1"

    echo "Inserting extra requirements"
    cat "$1" | grep -v -E '(--find-links)|(-f)' >> "$BUILDBASE"/requirements.txt
}

function create_startupscript {
    local template="@echo off
set __DIRNAME=%~dp0
set PATH=\"%__DIRNAME%\Python${PYVER}\";%PATH%
shift
start \"__TITLE__\" /B /D \"%__DIRNAME%\Python${PYVER}\" \"%__DIRNAME%\Python${PYVER}\python.exe\" __ARGS__ %*
"
    local title=${1:?}
    local args=${2}

    local script=$(echo "$template" | sed "s/__TITLE__/$title/g" | sed "s/__ARGS__/$args/g")
    echo "$script"
}

function create_aliasscript {
    local template="@echo off
set __DIRNAME=%~dp0
set PATH=\"%__DIRNAME%\Python${PYVER}\";%PATH%
shift
\"%__DIRNAME%\Python${PYVER}\python.exe\" __ARGS__ %*
"
    local args=${2}

    local script=$(echo "$template" | sed "s/__ARGS__/$args/g")
    echo "$script"
}

function prepare_startupscripts {
    local dir="$BUILDBASE"/startupscripts
    create_aliasscript "ipython" "-m IPython" > "$dir"/ipython.bat
    create_startupscript "ipython-qtconsole" "-m IPython qtconsole" > "$dir"/ipython-qtconsole.bat
    create_startupscript "ipython-notebook" "-m IPython notebook" > "$dir"/ipython-notebook.bat
    create_aliasscript "pip" "-m pip" > "$dir"/pip.bat
    create_startupscript "Orange Canvas" "-m Orange.canvas" > "$dir"/orange-canvas.bat
}

function prepare_all {
    prepare_python
    prepare_msvcr100
    prepare_scipy_stack
    prepare_pyqt4
    # Need to specifically restrict the numpy/scipy versions, otherwise
    # pip wheel will try to download/build them as soon as there is a newer
    # version available on pip.
    prepare_req numpy==$NUMPY_VER scipy==$SCIPY_VER -r "$BUILDBASE/requirements.txt"
    prepare_orange

    if [[ "$STANDALONE" ]]; then
        prepare_startupscripts
    fi

    if [[ "$REQUIREMENT" ]]; then
        prepare_extra "$REQUIREMENT"
    fi
}

function abs_dir_path {
    echo $(cd "$1"; pwd)
}

function create_installer {
    local basedir=${1:?}
    local output_path=${2:?}
    local nsis_script=${3:?}
    local basedir_abs=$(cd "$basedir"; pwd)

    # output path must be absolute.
    if [[ ${output_path:0:1} != "/" ]]; then
        output_path="$(pwd)/$output_path"
    fi

    makensis -DOUTFILENAME="$output_path" \
             -DPYTHON_VERSION=$PYTHON_VER \
             -DPYTHON_VERSION_SHORT=$PYTHON_VER_SHORT \
             -DPYVER=$PYVER \
			 -DBASEDIR="$basedir_abs" \
             -DNSIS_PLUGINS_PATH="$basedir_abs"/nsisplugins \
             "$nsis_script"
}

# Prepare prerequisites
prepare_all

VERSION=$(grep -E "^Orange==" "$BUILDBASE/requirements.txt" | sed s/^Orange==//g)

# Package everything in an installer
if [[ $STANDALONE ]]; then
    NSIS_SCRIPT=scripts/windows/install-standalone.nsi
    INSTALLER=Orange3-${VERSION:?}.$PLATTAG-py$PYTHON_VER_SHORT-install-standalone.exe
else
    NSIS_SCRIPT=scripts/windows/install.nsi
    INSTALLER=Orange3-${VERSION:?}.$PLATTAG-py$PYTHON_VER_SHORT-install.exe
fi

create_installer "$BUILDBASE" "$DISTDIR/$INSTALLER" "$NSIS_SCRIPT"

redpajama_set_name: RedPajamaGithub


You can come to us or we can come to you.
The Eulenspiegel (OIL-N-SPEEGEL) Puppets delight audiences with a large repertoire of international folktales and historical fiction, including Sal Fink, Catfish Wrangler, The Amazing Adventures of Willy the Woolly, Stories and Cuentos, Little Red Riding Hood, and many others.
December 5, 2018: In February, Eulenspiegel will add a new puppeteer, Meera Gessner! Meera is an outrageously talented visual artist, a whimsical creator, and an all-around fun person. She will create and perform this summer's Neighborhood Tour shows, be available for library and festival shows, and work as a Teaching Artist. Since September, Stephanie Vallez has acted as Eulenspiegel's Volunteer Coordinator. To give Cara more time for her other pursuits, Stephanie has taken over the Outreach Director duties and is branching out as an adjunct puppeteer. Never fear, Cara remains in the Eulenspiegel family as Artist-in-Residence!
Our new show is rescheduled to Saturday, Jan. 26, at 11 AM and 2 PM!
We have a super fun, brand new show available for touring! It's another in our series of regional history shows, this one featuring Johnny Appleseed and other apple heroes! Johnny interacts with animals, wild and domestic, Native Americans, settlers, and of course apple trees. Henderson Luelling leaves his home in Salem, Iowa in the 1850's with wagonloads of growing apple trees, crosses the Rocky Mountains with them, and resettles in Oregon to start the apple industry in the Northwest. Jesse Hiatt nurtures and battles the first Red Delicious apple. All three apple heroes have a field day battling the weather, and Ron Hillis captures it all with his whimsical music.
Listen to Prokofief's beloved music as you watch Peter outsmart the wolf! Eulenspiegel Puppets use beautifully crafted large tabletop puppets and rod puppets to tell this classic tale of a young boy, his grandfather, his pets, and the creatures that live in the meadow and the forest.
Freedom Star: Gertie's Journey on the Underground Railroad uses near lifesize handheld puppets, rod puppets, shadow puppets, and hand-dyed scenery to tell a dramatic and moving story, based on local history, of a young girl who escapes from a farm in Missouri and makes her way through Iowa on her way to freedom.
Eulenspiegel Puppets performs a delightful tale of the lovable mammoths who roamed the Iowa prairies 10,000 years ago! Follow Willy the young woolly mammoth and his friend Bonny the Bunny as they overcome the dangers of sinkholes and saber tooth tigers. Learn about the Ice Age and the power of friendship.


The Minister of Health, Prof. Isaac Adewole, has revealed measures put in place by the Federal Government to reduce the spate of medical tourism among Nigerians.
According to him, the government was upgrading eight hospitals in various specialties, providing loans to private hospitals through the Bank of Industry for the upgrading of their equipment and facilities, and crashing of price for accessing treatment for different ailments in state-owned hospitals.
Adewole said this during the weekend at the unveiling of a hospital's state-of-the-art laser equipment for minimal access surgeries in Abuja.
The Minister said recent reports from health facilities across the country show an increasing number of Nigerians abroad on medical vacation were returning to home to continue their health procedures owing to measures put in place by government to reduce the cost of accessing treatment for various ailments.
Adewole, who was represented by National Hospital's Chief Medical Director, Dr. Jafaru Momoh, said: "We are already reversing medical tourism. We have been able to observe that more people are returning from India and the Middle East to continue their treatments at home because they are beginning to realise it is cheaper to have their medical procedures in Nigeria.
"Cancer is one of the major reasons people travel abroad for treatment. But, the government is upgrading eight hospitals in different specialties to cater for the needs of those who travel abroad for medical treatment.
"Two of the hospitals are already on stream. The Lagos University Teaching Hospital, the University of Ibadan Teaching Hospital, and the Ahmadu Bello University Teaching Hospital will soon come on stream.
"By the time all the eight hospitals are on stream, there will be a further reduction in medical tourism among Nigerians.


text:
Ghosn's Arrests Called 'Extrajudicial Abuse' by UN Panel
By Hugo Miller -- bloomberg -- Carlos Ghosn's detention for almost 130 days in a Japanese jail was neither necessary nor reasonable and violated the former Nissan Motor Co. chairman's human rights, a UN panel concluded in a harsh critique of Tokyo prosecutors who led the case against him. The decision to arrest Ghosn four times in a row so as to extend his detention was "fundamentally unfair," the United Nations Human Rights Council's Working Group on Arbitrary Detention said in a report Monday posted on its website. The panel said that it would refer the case to the UN's rapporteur on torture, cruel and other inhuman or degrading treatment. "The repeated arrest of Mr. Ghosn appears to be an abuse of process intended to ensure that he remained in custody," the panel said, pointing out that on at least two occasions he was arrested for the same alleged crime, only for a different time period. "This revolving pattern of detention was an extrajudicial abuse of process that can have no legal basis under international law." Ghosn and former Nissan director Greg Kelly were arrested in Tokyo on Nov. 19, 2018, and accused of underreporting the former chairman's compensation. Both have denied wrongdoing. Additional charges were filed later accusing Ghosn of using company assets improperly, which he has also denied.
Ghosn made a daring escape from Japan to Lebanon hidden inside a large box aboard a private jet in late December. It was, Ghosn argued defiantly in Beirut later, the only way for him to avoid what he called trumped-up charges of financial misdeeds concocted with the help of his former Nissan colleagues. His arrest and removal as chairman of Nissan, Renault SA and Mitsubishi Motors Corp. shook the foundations of the automaking alliance he built and triggered management and operational turmoil. While Ghosn is unlikely to ever face trial or detention in Japan, the report could be relevant for several ongoing legal proceedings related to the former auto executive. The most immediate potential impact may be on the impending extradition from the U.S. of former Green Beret Michael Taylor and his son Peter, who are sought by Japanese prosecutors for their role in helping Ghosn escape the country.
The UN group's report is another embarrassing setback for the Japanese government, which was caught off guard when Ghosn slipped surveillance and fled the country. Although Japanese prosecutors typically win 99% of their cases, mostly through confessions obtained during detention, the country has insisted that it has a proper legal system that doesn't ignore human rights, rejecting accusations that it practices "hostage justice." In 2019, French President Emmanuel Macron told then-Japanese Prime Minister Shinzo Abe that he felt Ghosn's detention was "too long and too hard." "We welcome a courageous decision from an independent and respected authority, that undeniably establishes Mr. Ghosn's detention was arbitrary, he was denied his right to impartial justice, and his treatment was unfair and degrading." his lawyers, Francois Zimeray and Jessica Finelle, said in a statement.
The Japanese government called the decision "totally unacceptable" as well as not legally binding. The panel was wrong in saying that Ghosn was arrested and held four times without being brought before a judge and that the "provision of opportunities" to challenge his detention before a judge was delayed, according to the government's statement. "Japan therefore deeply regrets that the Working Group continued to consider the case and rendered opinions based on limited information and biased allegations from the source, not based on accurate understanding on Japan's criminal justice system," it said in the statement. A representative for Nissan declined to comment. The UN group also concluded that his fourth, early-morning arrest surrounded by paparazzi and his appearance in handcuffs and waist retentions, denied him the right to a fair trial because it made him look like a dangerous criminal. Lastly, the panel said, he was regularly subject to daily, five-hour interrogation sessions while his conversations with his lawyers were non-confidential and limited to 30 minutes, denying him the right to a proper defense.
To be sure, the UN panel said its conclusions on his detention weren't a comment on his escape from Japan and "should not be construed as condoning or offering any justification for such a departure." The UN panel is the same one which said WikiLeaks founder Julian Assange's rights had been violated during his seven-year stay at Ecuador's embassy in London because he faced arrest by police if he left the premises, an opinion criticized by lawyers. Ghosn still has a lawsuit against Nissan for 15 million euros ($18 million) as part of a Dutch wrongful dismissal lawsuit over his firing. Nissan has counter-sued in Japan for 10 billion yen ($96 million) in damages, seeking to recover what it alleges were monetary damages inflicted on the company by Ghosn "as a result of years of his misconduct and fraudulent activity." What may change both suits is the UN's own bold decision to both urge an independent investigation into the circumstances of Ghosn's detention and recommend his right to sue for damages. "Taking into account all the circumstances of the case, the appropriate remedy would be to accord Mr. Ghosn an enforceable right to compensation and other reparations, in accordance with international law," the panel said. — With assistance by Chris Elser (Adds Japanese government statement in 10th paragraph)


U.S. may not participate in international child support treaty | Marvin Law Office, L.L.C.
On behalf of Marvin Law Office, L.L.C. posted in Child Support on Tuesday, April 21, 2015.
The United States' participation in an international treaty on child support may be in jeopardy, after a legislative committee in one state voted against a key bill. As a result, parents in Minnesota and across the country may not enjoy the treaty's benefits when it comes to getting child support from noncustodial co-parents abroad.
The treaty is called the Convention on the International Recovery of Child Support and Other Forms of Family Maintenance. The New York Times reports that it took five years for The Hague Conference on Private International Law to negotiate. In order for the U.S. to ratify it, all 50 state legislatures must approve it. So far, 19 have done so.
It appeared at first that Idaho was going to join them. The state Senate passed the necessary bill unanimously and without debate. But on the last day of the legislative session, the House Judiciary, Rules and Administration Committee voted down the bill 9-8.
Committee members who voted against the bill gave various reasons for their decision. Some said they did not like the idea of foreign tribunals deciding child support cases involving American parents. Others said they felt the federal government was "rude" in the way it encouraged passage.
By not passing the bill, Idaho risks losing $16 million in federal funding for the state's child welfare system, which would essentially defund the state's child support enforcement program. The state could also lose $30 million in grants for Head Start and other programs.
Whether or not the U.S. ratifies this treaty, it is possible, though more complicated, to obtain the child support you need when the other parent lives in another country. A family law attorney can be a big help.


text:
2017: A Remarkable and Productive Year
This proved to be a busy and extraordinary year, with millions of people organizing around the country; from "No Muslim Ban" demonstrations which brought thousands to protest at airports in January, to the President's misguided and dangerous plan, announced in December, to unilaterally move the American Embassy in Israel to Jerusalem. The Philadelphia Chapter of CAIR had an exceedingly eventful year as well. Funding was significantly up, enabling us to hire two new staff members: the learned and dedicated Dr. Ahmed Selim Tekelioglu as our Director of Outreach and Education, and the multi-talented Timothy Welbeck, Esq. as our Civil Rights Attorney.
Download Our 2017 Annual Report (pdf)
2016: An Essential Establishment
During and after a presidential campaign marked by an eruption of public racism, xenophobia, misogyny, Islamophobia, and anti-Semitism, CAIR-Philadelphia remained ever-vigilant in the defense of Muslim civil rights. This year firmly established that there is simply no other organization in the U.S. that has CAIR's breadth of activities. We continued and expanded our educational offerings, media outreach, and interfaith activity, including our first Muslim Women's Symposium, second annual Muslim Capitol Day, Interfaith Ramadan Iftar, a "Countering Islamophobia" town hall meeting coinciding with the Democratic National Convention.
2015: Challenges and Successes
This year may have been CAIR-Philadelphia's most productive and challenging yet. In the face of an unprecedented display of anti-Muslim bigotry and extremist violence, CAIR and its interfaith allies were outspoken in denouncing the virulent Islamophobia on the airwaves and online, with CAIR-Philadelphia staff appearing in dozens of media reports. Our combined efforts generated the creation of the Delaware Valley Muslim Leadership Forum, Philadelphia Eid Coalition, and an annual Muslim Capitol Day.
2014: Serving and Representing Our Community
This year saw CAIR-Pennsylvania continuing its stellar record of providing legal services to the American Muslim community in our great Commonwealth, and advocating for greater understanding of Islam by the media and the American public. Highlights include our filing a federal lawsuit against a township for refusing to allow a mosque to be built, leading the response to hateful ads placed on SEPTA buses, and being honored by inclusion in the exhibit Civil Rights in Philadelphia: 50th Anniversary of the Civil Rights Act of 1964 at the Philadelphia International Airport, plus so much more.
2013: Transition and Optimism
This year was a time of transition for CAIR-Pennsylvania. In the Philadelphia Office, Executive Director Moein Khawaja left CAIR to attend law school. After an exhaustive search, interfaith activist and filmmaker Jacob Bender was hired to replace Moein. In spite of several other staff transitions, CAIR-PA was able to provide extensive service to the Muslim community in the Commonwealth, including legal representation, educational and cultural programming, and promoting greater interfaith understanding.
2012: Asserting Our Voice
CAIR-Philadelphia continued to lead opposition to PA HB 2029, resulting in the cancellation of a public hearing and subsequent expiration of the bill. Our legal department continued to focus on the vulnerable populations within the American Muslim community and address governmental policies which discriminate against American Muslims. Our media presence was also increased, including producing our very own documentary, that aired on Philadelphia Community Access Media.
2011: Growth and Development
In late 2011, CAIR-Philadelphia learned of PA House Bill 2029, proposed legislation that targeted Islam and Muslims. Our office was uniquely prepared to respond to this challenge with the resources and coalitions to defeat the legislation, thanks to the skills of our first staff attorney along with the combined resources of existing staff members. Our staff and board also organized or were featured in over 45 events, nearly one per week. CAIR-Philadelphia has emerged as an institution that will shape the future of American Muslim life.
2010: Responding and Redesigning
2010 was an incredible year for CAIR-Philadelphia! In early 2010, the staff underwent comprehensive media relations training and all office operations and equipment were upgraded to the highest professional standards. We introduced our new advisory board and redesigned Know Your Rights workshops, Islamophobia seminars, and Muslim Youth Leadership Programs. Training and development were crucial as events nationwide called on our staff to offer the local Muslim perspective on these issues.
2008: Spreading Our Wings
CAIR-Pennsylvania experienced a 28% increase in civil rights and immigration complaints over the previous year, expanded the breadth of our course offerings and initiated programming designed to empower young Americans to make a difference. In April we held our second annual banquet; Former Diplomat and author Michael Morgan, and several other excellent speakers addressed a sold-out crowd of some 700 people. Proceeds from this event allowed CAIR-Pennsylvania to promote Justin to Executive Director and hire Marwa El-Turky as the new Director of Civil Rights. We continued to seek means to enhance understanding of Islam and encourage dialogue to dispel stereotypes and prevent prejudice; protect civil rights to block attempts at marginalizing our community; and empower American Muslims to make positive contributions to society. Read More…
2007: Milestones
CAIR-Pennsylvania continued its efforts to spark dialogue with additional offering our "Understanding Islam and Muslims through History and Jurisprudence" course five times during the year and hosting or co-sponsoring various other interfaith events. In April of this year we held our first annual banquet, Connecting and Sharing. Gov. Edward G. Rendell and several other excellent speakers addressed a sold-out crowd of some 500 people.
The success of this event allowed CAIR-Pennsylvania to hire a full-time Director of Civil Rights, Justin L. Peyton, in September to address the civil rights needs of the Pennsylvania Muslim community. In the waning months of the year he handled 57 complaints from all across the state and securing a few key accommodations for Muslims in the workplace. Read More…
2006: Community Outreach
CAIR-Pennsylvania's accomplishments during this year included participating in CAIR-National's "Explore the Life of Muhammad Campaign," beginning to offer our highly successful 10-part course entitled "Understanding Islam and Muslims through History and Jurisprudence" and giving Know Your Rights Presentations at local mosques, as well as numerous interfaith presentations, workshops and seminars. Read More…
2005: First Steps
On January 30th, CAIR-Pennsylvania held its inaugural event, a program entitled "Civil Rights to Human Rights: From Guantanamo to Abu Ghuraib" at Temple University. On April 2005, after a few short months of running the chapter on a completely volunteer basis, CAIR-Pennsylvania employed its first full-time staff member, Adeeba Al-Zaman, as our Director of Communications to focus on building relationships with local media professionals. Her work resulted in appearances on local programs such as the Michael Smerconish Show, the Dom Giordano Show, and Fox 29's "Good Day Philadelphia". Read More…
2004: Founding
In 2004, thirteen Muslims from the Greater Philadelphia area came together with the idea of bringing the benefits of CAIR's work to the local community. In December of that year, these pioneers' diligent efforts resulted in the establishment of CAIR's first official chapter in Pennsylvania (CAIR-Pennsylvania), with the opening of an office in center city Philadelphia. Read More…


During the last 11 meetings with Leicester City playing at home, Leicester have won 3 times, there have been 4 draws while Burnley FC have won 4 times. The goal difference is 12-8 in favour of Leicester City.
A year ago, Leicester were number 16 in the table with 13 points. Now they are number 9 with 17 points.
The most common result of matches between Leicester and Burnley when Leicester is playing at home is 0-1. 4 matches have ended with this result.
When playing at home, Leicester have not lost to Burnley FC in their last 6 encounters.
Leicester have lost just 1 of their last 4 Premier League games against Burnley FC.
During the last 22 meetings, Leicester have won 9 times, there have been 6 draws while Burnley FC have won 7 times. The goal difference is 23-16 in favour of Leicester.
Burnley FC have won just 1 of their last 4 Premier League games against Leicester.
Burnley FC's last away win against Leicester was in 2007.
Leicester scores 1.67 goals when playing at home and Burnley FC scores 1.19 goals when playing away (in average).
Leicester scores 1.6 goals in a match against Burnley FC and Burnley FC scores 0.6 goals against Leicester City (in average).
Leicester have lost just 1 of their last 5 games against Burnley FC (in all competitions).
Leicester haven't scored in 1 of their 7 home matches in Premier League this season.
Average number of goals in meetings between Leicester and Burnley FC is 2.2.
When Leicester leads 1-0 at home, they win in 92% of their matches.
Burnley FC haven't scored in 1 of their 6 away matches in Premier League this season.
When Burnley FC is down 1-0 away, they win 7% of their matches.
Average number of goals in the first half in meetings between Leicester and Burnley FC is 1.
The most common result of matches between Leicester City and Burnley FC is 0-1. 6 matches have ended with this result.
In the last 5 meetings Leicester won 3, Burnley FC won 1, 1 draws.
When Burnley FC leads 0-1 away, they win in 72% of their matches.


text:
How to Be a Better Traveler
By Sunny Sea Gold on July 1, 2014
Credit: MÁGOZ
Before we had kids, my husband and I loved to travel—he proposed to me on a bench in Reykjavik after a road trip across southern Iceland, and we spent our first anniversary jumping into natural freshwater pools on the Mexican Riviera. Our last big trip was more than two years ago, when we attempted to enjoy a small island in the Bahamas with a teething seven-month-old. (D'oh!) Now, as the parents of two young girls, travel mostly seems like more trouble than it's worth—and the inherent risks we used to accept without thinking, such as the possibility of a plane crash, seem stark now that children are involved. Sometimes I don't know if I'll ever have the guts to go anywhere cool again. But I want to, and I want to teach my kids how enriching and fun it can be to visit somewhere totally new. With any luck, these mind hacks from psychologists and travel experts can help me—and anyone else anxious about leaving their comfort zone—become a better traveler.
#1 Lean into the stress. Anyone who says travel isn't stressful is lying. Crowds, lines, delays and miscommunications are rampant—and that's before your plane lifts off. "Travel stress is normal," says psychologist Jonathan Bricker of the University of Washington, who has studied people's reactions to tension during travel. "The key is what to do when you have it. Most people either get angry or try to avoid it." But feeling irate or attempting to avoid stress usually backfires and leads to more stress—or to a tendency to avoid travel altogether, according to his research. The alternative? "Acceptance! The willingness to just let the stress be there, to just notice it, to let it come and go on its own," Bricker says. Mindful acceptance is a proven tactic for stress reduction—the difficult parts of your trip will be over before you know it, and you'll be on your way.
#2 Talk to anyone and everyone. Being out of our element and immersed in a foreign culture can be tough for those of us who like security and routine. "What makes us most uncomfortable in another culture is our lack of understanding of it," says Michael Brein, a travel psychologist based near Seattle who has analyzed more than 1,600 people's travel tales. "But the more I can get to know what the culture is all about, often by talking to people, the more comfortable I'm going to feel." Doing so releases us to just enjoy and take things in, anxiety-free. "Some of the best travel experiences I've ever had have just been the people I've interacted with overseas, like in cafes or shops. As I talked to them and came to understand the quirks of the culture, then I began to have more interpersonally rewarding experiences." You can also use these conversations to step outside the security blanket of your guidebook, he says. Discovering unpublished gems, such as locals' favorite restaurants or day trips, can lead to the most memorable adventures.
#3 Channel your younger self. What would you think if a new friend you met in a poverty-stricken country with no diplomatic ties to the U.S. asked you and your traveling partner to come back to his aunt's house for dinner? Me, today: "Food poisoning! Getting lost in a 'bad' neighborhood. Kidnapping, maybe!" Me, at age 24: "I would be honored—what bus do we take?" To this day, eating homemade arroz con pollo and drinking a mysterious, unlabeled mint liquor in that family's living room in central Havana is a peak experience of my life. "The younger person is more adaptable and learns better," Brein says. "When we're younger, we're willing to take more risks—and because of all we learn by doing that, the outcome of a travel experience can be so much more special." When an exciting but slightly scary opportunity arises during travel, Brein observes, just try channeling your younger self for a moment. Taking a risk—within reason—can mean the difference between a trip you remember until the day you die and one that fades away the moment you get back home.
#4 Practice closer to home. No matter how much I channel my postcollege self, I know I'm nowhere near ready to drag my kids onto a hot, sweaty bus in Havana. So what can I do to slowly but surely build my confident-traveler muscle? "Take a staycation near your town and just do some new and different things. Walk into mom-and-pop shops and talk to the owners like you would if you were abroad, sit in coffee shops and interact with patrons," Brein says. "If you do some of these around town or on short trips, you'll begin to feel the good, positive consequences of taking a little bit more of a chance." Okay, so maybe our next family trip won't be turtle-egg watching in Akumal, but I have a feeling that overnight camping an hour away from home will be plenty exciting—and perhaps set the stage for bigger trips to come.
This article was originally published with the title "How to Be a Better traveler" in SA Mind 25, 4, 16 (July 2014)
Sunny Sea Gold is a health and psychology writer, the "How to Do Anything Better" columnist for Scientific American Mind, and the author of Food: The Good Girl's Drug (Berkley Books, 2011). Follow Sunny Sea Gold on Twitter
Recent Articles by Sunny Sea Gold
4 Ways to Be a Better Voter
Seven Ways to Keep Discord off the Thanksgiving Table
How to Be a Better News Consumer
Science News Briefs from around the World: February 2023
Daniel Leonard


text:
From Intern to Leader: Meet Michael Reilly
Author: Carla Rivera
Driven by a passion for building systems and energy-efficient design, Mike Reilly has turned internship opportunities at CannonDesign into a career as a key leader of the firm's mechanical engineering group. Based in CannonDesign's New York City office, Mike's successful design solutions today stem from the valuable internship experience he gained while a student at Penn State University.
Given Mike's success story from intern to leader, we sat down with Mike to gain further insight into his experiences at CannonDesign.
Life as a CannonDesign Intern
Q: Are there memories or people who stand out from your internship experiences with CannonDesign?
MR: Definitely. I was lucky in that I quickly established a strong mentoring relationship with Mike Rush. Mike worked with me during my early days and months as an intern. He took me under his wing as I learned about engineering systems, client engagement, technical and software skills – everything I needed to be successful. Now, years later, Mike has since passed away, but I have such fond memories and appreciation of our time together – he set me on the path for success in this industry.
The internship exceeded my expectations as my mentors let me work with our clients on real projects for the firm. It was empowering to have such a sense of ownership at a young age.
Others, like Chip Berry and Ralph McCormick, also became key figures during my internship and they continue to work with me and help me in my career today. Chip and Ralph brought me back for three separate internships while I was a student at Penn State University and each time I was able to work with new clients, learn new skills, meet new people – it laid the foundation for my success.
Q: What types of work did you handle during your internships?
MR: The internship exceeded my expectations as my mentors let me work with our clients on real projects for the firm. It was empowering to have such a sense of ownership at a young age. I attended client meetings with senior leaders, I was out in the field surveying and helping with studies. I worked with Nassau Community College, New York University and South Nassau Communities Hospital during my internships.
Q: What's the most important lesson you learned as an intern that helps you in your career today?
MR: It's all about listening. That was true when I was an intern and it's still true today. Whether you're with a client, another engineer or an architect, if you listen you can help them and really make a difference.
Q: Why did you keep coming back for multiple internships? Did you keep in touch with CD while you were in school between internships?
MR: I kept coming back because I enjoyed the people I worked with and the types of work we were doing. I still work with many of the same architects and engineers I worked with during my internship. I definitely kept in touch with CannonDesign while back at Penn State. My final thesis was on the Nassau Community College Life Sciences Building I'd helped with as an intern.
Mike Reilly (left) works with Ralph McCormick to review engineering diagrams.
Mike's Career Today
Q: What is your current role with CannonDesign?
MR: I lead the firm's mechanical engineering efforts in the New York City office and am able to work with very interesting clients in the healthcare and education fields while collaborating with CannonDesign's engineering team.
Q: What are you excited about working on in the year ahead?
MR: Over the past year, I had the chance to team with our Chicago office on the Froedtert Center for Advanced Care in Milwaukee. I hope to continue the relationships and mentoring I've gained from that experience of connecting with the Chicago
Q: If you could go back and give "intern Mike" one piece of advice – what would it be?
MR: Listen, listen and listen more. There is so much knowledge to gain and learn from other people's experience and skills. Soak up as much as you can – this is how you'll become a better engineer.
Fast Facts About Mike
Favorite activities outside of work: Spending time with friends and SCUBA diving
Best lunch spot near the NYC office: Park Italian on 45th between 5th and 6th – best Italian food in the area
Favorite movie of all time: Gladiator with Russell Crowe
Favorite sports team: The New York Rangers. Go Rangers!
Learn more about our engineering and internship opportunities on our careers page >
CannonDesign's San Francisco Office Moves Into New Downtown Home
A Sweet Treat: NPR Features CannonDesign Team in Gingerbread Creation Story
Washington DC Office Participates in CANstruction 2019
We Live, We Learn, We Lead: Recap of the SWE 19 Conference
Baltimore Office Receives The Mayor's Business Recognition Award
Load More...Follow us on Instagram


In Part 1, we covered everything you need to know about the Ethereum ice age, the difficulty bomb, and the changes to Ethereum's inflation rate set to come with October's Constantinople update.
Now that you have a firm grasp of Ethereum's current development status and plans for the immediate future, we can take a look at the platform's long-term plans, particularly Ethereum's long-awaited 2.0 update, which focuses on Casper, sharding, and eWASM.
These changes are going to completely reshape the Ethereum network and could kickstart a new wave of growth for the platform.
The most anticipated part of Ethereum 2.0 is likely the platform's long-awaited proof of stake (PoS) algorithm, Casper. Ethereum's transition to proof of stake has been prompted by two main concerns: energy waste and mining centralization.
One of the most frequent criticisms of cryptocurrencies is the extreme energy waste that comes with proof of work (PoW) mining.
This is a mining system used by Bitcoin, Ethereum, and many other coins in which miners race against one another using powerful computers to try and find the answer to a complex computational puzzle. The first miner to solve the puzzle is given the right to add a new block to the blockchain and is rewarded with newly minted coins as well as transaction fees.
PoW mining was first implemented to add real-world economic costs for adding blocks to the blockchain. Malicious actors are dissuaded from attempting to manipulate the blockchain because it is prohibitively expensive to do so.
The problem with this system, however, is that as Ethereum and other PoW cryptocurrencies have grown larger and more valuable, so too have the costs and energy expenditures of mining operations. It's difficult to get up-to-date numbers, but recent estimates show that the amount of electricity used in Bitcoin mining alone is nearing half a percent of the world's total energy use per day.
Critics call this an obvious waste of energy, and it appears that the Ethereum Foundation agrees. One of the key upsides of the new Casper PoS system is that it will drastically reduce the energy costs of Ethereum mining, while maintaining or even boosting the security of the network.
As for how Casper will boost the security of the network, much of that has to do with creating a more decentralized network of miners.
In the early days of Bitcoin and Ethereum, it was possible for network participants to successfully mine new blocks using regular GPUs. As explained earlier, however, mining has become significantly more difficult over time.
This difficulty increase is due to two factors: the increasing complexity of the Ethereum mining algorithm and the advent of large mining pools.
Mining pools are exactly what they sound like—organizations that allow individuals to pool their resources together to boost their chances of successfully mining new blocks. The idea is innocent enough, but a handful of mining pools have grown so large and powerful that they now dominate the Ethereum network.
As you can see, the number of distinct miners has dropped dramatically since Ethereum's inception. Today, Etherchain estimates that the Ethereum network is maintained by fewer than 70 miners, meaning Ethereum is actually quite centralized from a mining perspective.
Mining centralization poses numerous threats to the health of a blockchain network, the largest of which is called a 51% attack. A 51% attack is a blockchain vulnerability that is present if a single mining organization (or a colluding group of organizations) controls 51% or more of the network's hashing power. Essentially, any organization with this much control of the network would be able to manipulate the blockchain, double-spend coins and destroy the network's integrity. Users would be at the mercy of the controlling organization and other miners would not have the power to overthrow them.
Clearly this is a problem, and it's one of the primary reasons why having a decentralized network of miners is so important.
As stated above, Casper is a proof of stake (PoS) mining algorithm. PoS differs from PoW in several ways.
In this way, Casper will completely remove the high electricity costs that come with the existing PoW system. At the same time, Casper will also lower the barrier to entry for individuals or groups who would like to participate in Ethereum mining. 32 Ether is currently worth about $7500, which is significantly less expensive than the hardware and electricity costs required for an individual to participate in PoW mining. This drop in cost should lead to more people participating in Ethereum mining, which will in turn produce a more widely distributed network of miners.
The second major feature coming as part of Ethereum 2.0 is a scaling solution called sharding. Ethereum currently processes about 15 transactions per second (TPS), which severely limits the platform's ability to deliver services to a large audience. Compare this to VISA, which operates at an average of 1600 TPS, and the limitations here are clear.
A big reason why Ethereum and other blockchains have such low transactions per second (Bitcoin, for example, averages about 7 TPS) is because blockchains have to process each transaction in sequence. According to Rocket Pool, "from a scalability perspective, the current Ethereum blockchain is a single pipe that all transactions have to be pushed through." What sharding will do is essentially increase the number of "pipes".
More specifically, sharding will allow the Ethereum blockchain to be split up into smaller pieces called shards.
Each shard will essentially be its own small blockchain running the Ethereum proof of stake protocol. Shards will be in constant communication with one another and with the main Ethereum chain, but each shard will be able to process and validate transactions independently. This structure will effectively allow the Ethereum network to process many transactions at the same time, rather than having to validate them in sequence.
Rocket Pool estimates that the potential number of shards could be upwards of 1000, which could bring Ethereum's network speed up to about 15,000 TPS.
The final major component of Ethereum 2.0 is called eWASM. Described as a standardized "instruction-set", eWASM will soon be integrated into Ethereum as a replacement for the existing Ethereum Virtual Machine (EVM).
The EVM allows anyone from around the world to make use of Ethereum's decentralized applications, if given enough time and memory. It essentially ensures that applications will work for everyone.
eWASM, which is currently being developed by engineers from Google, Mozilla, Apple, and Microsoft, will act in much the same way while offering several upgrades over the EVM. According to Rocket Pool, eWASM is expected to be faster, more secure, and more portable than the EVM. eWASM also offers additional benefits, including supporting more languages beyond Ethereum's Solidity, which should make it easier for developers to create Ethereum applications.
It should be clear that these are fundamental changes coming to the Ethereum network. Each of the above updates has the potential to greatly increase Ethereum's speed and efficiency. Many throughout 2018 have questions whether Ethereum and its development team have what it takes to remain the number one dapp platform in the world, or if younger, sleeker platforms like EOS might simply outclass the old king. Ethereum 2.0 will be the ultimate test.
This concludes Part 2 of our two-part series on the future of Ethereum. If you read both parts, you are now up to date on what we can expect from Ethereum in the coming months and years. Part 1 described features we will see introduced in October's Constantinople update, while the features described in this article have vaguer timelines: Casper is expected to be released some time in 2019, while sharding is set for 2020.
If you want up to date information regarding Ethereum 2.0's development status, you can follow the Ethereum Github here.


Maria Pecoff (Peacoff) - I am a freelance therapist travelling all over London. I specialise in Prenatal/Antenatal/Postnatal Reflexology. This is a well regarded and exceptional therapy to have during and after pregnancy, it is natural and non invasive, a truly wonderful treatment.
There are many benefits of having Reflexology, you can help to alleviate the symptoms of muscular aches and pains, stress, insomnia, migraine, fatigue, hay fever, digestive, reproductive, circulatory, and hormone imbalances. In addition to that you can use Reflexology to help to increase stamina, energise, detox, invigorate, revive and relax.
Please call or email me directly to find out more about what I do, how I work and home visits.
"You'll be amazed at how good you feel after just one session!"
I am a qualified infant massage instructor, & Baby Yoga Instructor running regular courses and classes for both group sessions and 1-2-1. Baby massage is extremely beneficial for babies for their overall well being and development. It is also a great way to bond with your baby and create some real quality time together. Please see my website for more information. www.myblissfulbabymassage.com Baby Yoga classes also available.


text:
P.M: St. Lucia On The Move Again
VP Digital May 21, 2016 7:41 pm May 21, 2016 1
PRIME Minister Kenny Anthony Thursday night gave St Lucians an assessment of the state of St Lucia as he announced that general elections would be held on June 6.
Addressing the nation on radio and television, Anthony said the past four years under Labour had been "a period of adjustment for our economy and indeed, for all of us".
He added: "I remain eternally grateful to you for the support and understanding that you have shown for the adjustments we have made to ensure that our economy became stronger, better, and more resilient. Some of our measures were not always popular but it was never in doubt that the measures were implemented in the best interests of our country. By our common will and collective efforts, we saved our country from the IMF.
"The results of our efforts have now begun to yield fruits.
"Our economy has returned to growth. Last year, it grew by 1.3%.
"We have reduced our fiscal deficit from 9.6% of GDP in 2012 to 3.1% in 2015. This is a remarkable reduction by any measure.
"Our current account surplus increased to $73.8 million in 2015/16. We also registered a significantly improved performance in the primary surplus, which grew to $45.3 million in 2015/16 from $3.7 million in 2014/2015".
Anthony said unemployment was "finally trending downwards", from a high of 24.5% to 20% in the last quarter. There was a net increase in the number of employed persons by 3.8% to 77,131. In the fourth quarter alone, the labour force grew by 5,220 persons.
He added: "It is clear we are the only government with a plan for jobs! We need to continue on our path.
"Tourism arrivals continue to increase steadily. For the first time ever, we surpassed the one million mark for combined stay-over and cruise passenger arrivals.
"The construction sector expanded by 7.4%.
"Manufacturing too, is on the rebound. The sector grew by an estimated 13.7%.
"Agricultural production, though uneven, is rising, with banana exports surging by 35.3%. Many of us may not be aware, but Saint Lucia is the only Windward Island still exporting bananas to the United Kingdom.
"Investment has also returned to our country. Currently, two major new hotels are under construction. Some 700 Saint Lucians are employed at the Royalton at Cap Estate; another 275 are employed at the Harbour Club in Rodney Bay. When the Royalton is completed, some 650 to 700 Saint Lucians are expected to find jobs. In the next few days, I expect a sod turning ceremony will be held to signal the construction of the new hotel, Sunset Bay Hotel, at "Sabwisha", in Choiseul. The developers have already paid for the land.
"The local private sector too is investing in our country again. Unicomer Limited, the parent company of Courts (Saint Lucia) is constructing its new headquarters. The Dayana Centre in the City Centre is nearing completion."
Anthony said the the public sector too was playing its part. "A sod turning ceremony has already been held to confirm the commencement of the Administrative Complex in Vieux Fort. Two new bridges, one in Thomazo and the other in Canaries are about to commence construction. Plans are now at an advanced stage for the commencement of the Secondary Roads Improvement Project to pave the way for the expansion of the Choc to Gros Islet Highway. The European Union has confirmed financing of a new bridge at Piaye and the reconstruction of the Venus Road in the Anse la Raye quarter.
"The prospects for the health sector are promising.
"The creative industries have begun to take shape; youth and sports are in good hands.
"We continue to educate the children of Saint Lucia to equip them to be the future drivers of our country's destiny. We provided our students from Form 3 to Form 5 in our secondary schools with Laptops. We plan to extend this programme to Form 1 of all our secondary schools.
"We are well on our way to diversifying our energy needs by developing alternative sources of energy.
"All over the country we are opening modern, state-of-the art Information Technology Centres to give all Saint Lucians free access to computers and high-speed internet for learning and entrepreneurship.
"Our country is, once again, proud, resilient and on the move! However, it is also delicately poised, and all of these gains and the sacrifices we have made to get us here can be quickly undone and reversed by recklessness and irresponsible actions".
6.4KLikes
Even More Stories!
PM's Attaché Responds to Opposition Concerns on Appointments to Public and Teaching Service Commissions
"Get online or get left behind!" Sanovnik Destang Shares Best Practices to Drive Bookings and Revenue
Summer Art Programme Underway
5 Reasons You Should Buy Local
Career Fair 'Navigates Pathways of Opportunities'
Best Products Made in Saint Lucia
President Tsai Ing-wen of Taiwan to Embark on State Visit to Saint Lucia
Get out!!! Get out!!!! We don't want you again mofo.
Carnival 2019 Ends on High Note
Ti Carro is Saint Lucia Calypso Monarch 2019
Ole Mas – Still Striving
Raspberry Pi Summer Workshop Concludes


text:
package sampleclean.api

import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.SparkContext
import org.apache.spark.sql.SchemaRDD
import org.apache.spark.sql.Row
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SQLContext
import scala.util.Random

import scala.collection.JavaConversions._

import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.HiveMetaStoreClient;
import org.apache.hadoop.hive.metastore.api.StorageDescriptor;

import SampleCleanContext._
import sampleclean.util.TypeUtils._
import sampleclean.util.QueryBuilder
import sampleclean.parse.SampleCleanQueryParser

import scala.concurrent._

/**
 * As an analog to the SparkContext, the SampleCleanContext
 * gives a handle to the current session. This class provides
 * the basic API to manipulate the data structures. We assume
 * that the data is initially in a HIVE store.
 *
 * In its current implementation, the SampleCleanContext
 * supports both persistent data in HIVE or keeping the data
 * in memory as an RDD.
 * @param sc an existing Spark Context
 */
@serializable
class SampleCleanContext(@transient sc: SparkContext) {

	//Use these functions to access the Spark
	//and Hive contexts in API calls.

	/**
   * Returns the HiveContext
	 */
	def getHiveContext():HiveContext = {
		return new HiveContext(sc)
	}

	/**
   * Returns the SparkContext
	 */
  private [sampleclean] def getSparkContext():SparkContext = {
		return sc
	}

	//a reference to the contexts Query Builder
  private [sampleclean] val qb = new QueryBuilder(this)

  /**
   * This function initializes the clean and dirty samples as
   * Schema RDD's and returns a tuple (Clean, Dirty). There is an additional
   * flag to persist the RDD in HIVE if desired.
   *
   * @param baseTable name of base table
   * @param sampleTable name of sample table
   * @param samplingRatio sampling ratio between 0.0 and 1.0
   * @param persist set to true to persist RDD in HIVE (default = true)
   */
	def initialize(baseTable:String, sampleTable:String, samplingRatio: Double=1.0, persist:Boolean=true): (SchemaRDD, SchemaRDD) = {

		val hiveContext = new HiveContext(sc)
		//creates the clean sample using table sampling procedure
		//when databricks gives us a better implementation of sampling
		//we can use that.
		//val selectionList = List("reflect(\"java.util.UUID\", \"randomUUID\") as hash",
		//	                     "1 as dup", "*")
		val selectionList = List("reflect(\"java.util.UUID\", \"randomUUID\") as hash",
			                     "1 as dup", "*")

		if(persist)
		{
			var baseQuery = qb.createTableAs(qb.getBaseName(baseTable)) +
			qb.buildSelectQuery(selectionList,baseTable)

			hiveContext.sql(baseQuery)

			var query = qb.createTableAs(qb.getCleanSampleName(sampleTable)) +
			qb.buildSelectQuery(List("*"),qb.getBaseName(baseTable)) +
			qb.tableSample(samplingRatio)

			hiveContext.sql(query)

			//hiveContext.sql("cache table "+ qb.getCleanSampleName(sampleTable))
			hiveContext.cacheTable(qb.getCleanSampleName(sampleTable))

			hiveContext.sql(qb.setTableParent(qb.getCleanSampleName(sampleTable),qb.getBaseName(baseTable) + " " + samplingRatio))

			query = qb.createTableAs(qb.getDirtySampleName(sampleTable)) +
					qb.buildSelectQuery(List("*"),qb.getCleanSampleName(sampleTable))

			hiveContext.sql(query)

			hiveContext.sql(qb.setTableParent(qb.getDirtySampleName(sampleTable),qb.getBaseName(baseTable) + " " + samplingRatio))

			//hiveContext.sql("cache table "+ qb.getDirtySampleName(sampleTable))
		}

		return (hiveContext.sql(qb.buildSelectQuery(List("*"),
								qb.getCleanSampleName(sampleTable))),
				hiveContext.sql(qb.buildSelectQuery(List("*"),
								qb.getDirtySampleName(sampleTable))))
	}

	/**
   * This function initializes the clean and dirty consistently hashed
	 * samples as Schema RDD's in a tuple (Clean, Dirty).
   * There is an additional flag to persist the rdd in HIVE if desired.
   *
   * @param baseTable name of base table
   * @param sampleTable name of sample table
   * @param onKey name of column that contains unique identifiers
   * @param samplingRatio sampling ratio between 0.0 and 1.0
   * @param persist set to true to persist RDD in HIVE (default = true)
   */
	def initializeConsistent(baseTable:String, sampleTable:String, onKey:String, samplingRatio: Double = 1.0, persist:Boolean=true): (SchemaRDD, SchemaRDD) = {

		val hiveContext = new HiveContext(sc)
		//creates the clean sample using a consistent hashing procedure
		val selectionList = List("reflect(\"java.util.UUID\", \"randomUUID\") as hash",
			                     "1 as dup", "*")
		//val selectionList = List("concat(*)",
		//	                     "1 as dup", "*")

		if(persist)
		{
			var baseQuery = qb.createTableAs(qb.getBaseName(baseTable)) +
			qb.buildSelectQuery(selectionList,baseTable)

			hiveContext.sql(baseQuery)

			var query = qb.createTableAs(qb.getCleanSampleName(sampleTable)) +
			qb.buildSelectQuery(List("*"),qb.getBaseName(baseTable)) +
			qb.tableConsistentHash((1.0 / samplingRatio).toLong,onKey)

			hiveContext.sql(query)

			hiveContext.cacheTable(qb.getCleanSampleName(sampleTable))

			hiveContext.sql(qb.setTableParent(qb.getCleanSampleName(sampleTable),qb.getBaseName(baseTable) + " " + samplingRatio))

			query = qb.createTableAs(qb.getDirtySampleName(sampleTable)) +
					qb.buildSelectQuery(List("*"),qb.getCleanSampleName(sampleTable))

			hiveContext.sql(query)

			hiveContext.sql(qb.setTableParent(qb.getDirtySampleName(sampleTable),qb.getBaseName(baseTable) + " " + samplingRatio))

		}

		return (hiveContext.sql(qb.buildSelectQuery(List("*"),
								qb.getCleanSampleName(sampleTable))),
				hiveContext.sql(qb.buildSelectQuery(List("*"),
								qb.getDirtySampleName(sampleTable))))
	}

  /**
   * This function cleans up after using initializeHive by dropping
   * any temp tables in HIVE. If you use HIVE and don't execute this command,
   * the samples will persist between sessions as it will be written
   * to disk.
   */
	def closeHiveSession() = {
		val hiveContext = new HiveContext(sc)

		for (t <- getAllTempTables())
		{
			hiveContext.sql("DROP TABLE IF EXISTS " + t)
		}
	}

	/**
	 * This function executes a hiveql query (potentially re-writing it to sampleclean)
	 * @type {Object} result
	 */
	def hql(query:String):SchemaRDD = {
		val parser = new SampleCleanQueryParser(this, new SampleCleanAQP())
		val hiveContext = getHiveContext()
		val result = parser.parse(query)

		if(result._1)
			return result._2
		else
			return hiveContext.sql(query)
	}

	/* Returns an RDD which points to a full table
	*/
  private [sampleclean] def getFullTable(sampleName: String):SchemaRDD = {

		val hiveContext = new HiveContext(sc)

		//println(getParentTable(qb.getCleanSampleName(sampleName)))

		return hiveContext.sql(qb.buildSelectQuery(List("*"),
							   getParentTable(qb.getCleanSampleName(sampleName))))
	}

  /**
   * Returns an RDD which points to a sample
   * of a base table.
   * @param sampleTable sample table name
   */
	def getCleanSample(sampleTable: String):SchemaRDD = {
		val hiveContext = new HiveContext(sc)
		return hiveContext.sql(qb.buildSelectQuery(List("*"),qb.getCleanSampleName(sampleTable)))
	}

  /**
   * Returns an RDD which points to a sample
   * of a full table. This method returns a tuple
   * of the hash and the requested attribute.
   * @param tableName sample table name
   * @param attr attribute name
   */
  private [sampleclean] def getCleanSampleAttr(tableName: String, attr: String):SchemaRDD = {
		val hiveContext = new HiveContext(sc)
		return hiveContext.sql(qb.buildSelectQuery(List("hash",attr),qb.getCleanSampleName(tableName)))
	}

	/* Returns an RDD which points to a sample
	 * of a full table. This method returns a tuple
	 * of the hash and the requested attribute
	 */
  private [sampleclean] def getCleanSampleAttr(tableName: String, attr: String, pred:String):SchemaRDD = {
		val hiveContext = new HiveContext(sc)
		return hiveContext.sql(qb.buildSelectQuery(List("hash",attr),qb.getCleanSampleName(tableName), pred))
	}

	/**
   * Saves the clean sample as a dirty sample
	 */
  private [sampleclean] def rebaseSample(tableName: String) = {
		val hiveContext = new HiveContext(sc)
		val sqlContext = new SQLContext(sc)
		val tableNameClean = qb.getCleanSampleName(tableName)
		val tableNameDirty = qb.getDirtySampleName(tableName)
		hiveContext.sql(qb.overwriteTable(tableNameDirty) +
						qb.buildSelectQuery(List("*"),
   		    					            tableNameClean))
	}

  	/**
     * Given a working set this function applies the changes back
     * to the parent table.
	 */
   def writeToParent(sampleName: String) = {
		val hiveContext = new HiveContext(sc)
		val sqlContext = new SQLContext(sc)
		var parent = getParentTable(qb.getCleanSampleName(sampleName))
		parent = parent.substring(0,parent.length - 5)
		val tableNameClean = qb.getCleanSampleName(sampleName)
		val m = getSamplingRatio(tableNameClean)

		if (m < 1.0)
			throw new RuntimeException("Writing back samples is not currently supported")

		hiveContext.sql(qb.overwriteTable(parent) +
						qb.buildSelectQuery(getHiveTableSchema(parent),
   		    					            tableNameClean))
	}

	/**
   * Resets the clean sample to the initial dirty sample
   * @param sampleTable sample table name
	 */
	def resetSample(sampleTable: String) = {
		val hiveContext = new HiveContext(sc)
		val sqlContext = new SQLContext(sc)
		val tableNameClean = qb.getCleanSampleName(sampleTable)
		val tableNameDirty = qb.getDirtySampleName(sampleTable)
		hiveContext.sql(qb.overwriteTable(tableNameClean) +
						qb.buildSelectQuery(List("*"),
   		    					            tableNameDirty))
	}

	/**
   * This function takes a sample and a rdd of (Hash, Val) and updates those records in the RDD.
	 * it returns a new updated SchemaRDD, and there is a persist flag to write these results to HIVE.
	 */
  private [sampleclean] def updateTableAttrValue(tableName: String, attr:String, rdd:RDD[(String, String)], persist:Boolean = true): SchemaRDD= {
		val hiveContext = new HiveContext(sc)
		val sqlContext = new SQLContext(sc)
		val tableNameClean = qb.getCleanSampleName(tableName)
		val tmpTableName = "tmp"+Math.abs((new Random().nextLong()))

    // TODO spark issues in test
    //
    	//hql("DROP TABLE tmp")
    	hiveContext.createDataFrame(enforceSSSchema(rdd)).saveAsTable(tmpTableName)
		//hiveContext.registerRDDAsTable(sqlContext.createSchemaRDD(enforceSSSchema(rdd)),"tmp")
		//hiveContext.sql(qb.createTableAs(tmpTableName) +qb.buildSelectQuery(List("*"),"tmp"))

		//Uses the hive API to get the schema of the table.
		var selectionString = List[String]()
		var selectionString2 = List[String]()

		for (field <- getHiveTableSchema(tableNameClean))
		{
			if (field.equals(attr))
				selectionString = tmpTableName+"."+"updateAttr as " + attr:: selectionString // To Sanjay: It was tmpNameClean before. Since it failed to compile, I changed it to tableNameClean
			else
				selectionString = tableNameClean+"."+field :: selectionString

			selectionString2 = tableNameClean+"."+field :: selectionString2
		}

		selectionString = selectionString.reverse

   		//applies hive query to update the data
   		if(persist){
   			val tmpTableName2 = tmpTableName+"2"

   			hiveContext.sql(qb.createTableAs(tmpTableName2) +
   		    				qb.buildSelectQuery(selectionString,
   		    					             tableNameClean,
   		    					             "true",tmpTableName,
   		    					             "hash"))

   			hiveContext.sql("set hive.optimize.bucketmapjoin = true");
   			hiveContext.sql("drop table "+tableNameClean);

   			hiveContext.sql("ALTER TABLE " + tmpTableName2 + " RENAME TO " +tableNameClean);
   		    /*hiveContext.sql(qb.createTableAs(tmpTableName2) +
   		    				qb.buildSelectQuery(selectionString,
   		    					             tableNameClean,
   		    					             "true",tmpTableName,
   		    					             "hash"))*/
   	   }

   		/*return hiveContext.sql(qb.buildSelectQuery(selectionString,
   			                   tableNameClean,
   			                   "true",tmpTableName,"hash"))*/
		return hiveContext.sql(qb.buildSelectQuery(selectionString2,
   			                   tableNameClean,
   			                   "true"))

	}

	/**This function takes a sample and a rdd of (Hash, Dup) and updates those records in the RDD.
	 * it returns a new updated SchemaRDD, and there is a persist flag to write these results to HIVE.
	 */
  private [sampleclean] def updateTableDuplicateCounts(tableName: String, rdd:RDD[(String, Double)], persist:Boolean = true): SchemaRDD= {
		val hiveContext = new HiveContext(sc)
		val sqlContext = new SQLContext(sc)
		val tableNameClean = qb.getCleanSampleName(tableName)
		val tmpTableName = "tmp"+Math.abs((new Random().nextLong()))
		//hiveContext.registerRDDAsTable(sqlContext.createSchemaRDD(enforceDupSchema(rdd)),"tmp")
		//hql("DROP TABLE tmp")
		hiveContext.createDataFrame(enforceDupSchema(rdd)).saveAsTable(tmpTableName)
		//hiveContext.sql(qb.createTableAs(tmpTableName) +qb.buildSelectQuery(List("*"),"tmp"))

		//Uses the hive API to get the schema of the table.
		var selectionString = List[String]()

		for (field <- getHiveTableSchema(tableNameClean))
		{
			if (field.equals("dup"))
				selectionString = typeSafeHQL(tmpTableName+".dup",1) :: selectionString // To Sanjay: It was tmpNameClean before. Since it failed to compile, I changed it to tableNameClean
			else
				selectionString = tableNameClean+"."+field :: selectionString
		}

		selectionString = selectionString.reverse

		//println(selectionString)

   		//applies hive query to update the data
   		if(persist){
   		    hiveContext.sql(qb.overwriteTable(tableNameClean) +
   		    				qb.buildSelectQuery(selectionString,
   		    					             tableNameClean,
   		    					             "true",tmpTableName,
   		    					             "hash"))
   	   }

   		return hiveContext.sql(qb.buildSelectQuery(selectionString,
   			                   tableNameClean,
   			                   "true",tmpTableName,"hash"))

	}

	/**This function takes a sample and a rdd of (Hash) and keeps those records in the RDD.
	 * It returns a new updated SchemaRDD, and there is a persist flag to write these results to HIVE.
	 */
  private [sampleclean] def filterTable(tableName: String, rdd:RDD[String], persist:Boolean = true): SchemaRDD = {
		val hiveContext = new HiveContext(sc)
		val sqlContext = new SQLContext(sc)
		val tableNameClean = qb.getCleanSampleName(tableName)
		val tmpTableName = "tmp"+Math.abs((new Random().nextLong()))

		//hiveContext.registerRDDAsTable(sqlContext.createSchemaRDD(enforceFilterSchema(rdd)),"tmp")
		//hql("DROP TABLE tmp")
		hiveContext.createDataFrame(enforceFilterSchema(rdd)).saveAsTable(tmpTableName)

		//hiveContext.sql(qb.createTableAs(tmpTableName) + qb.buildSelectQuery(List("hash"),"tmp"))

		if(persist){
			hiveContext.sql(qb.overwriteTable(tableNameClean) +
   		    				qb.buildSelectSemiJoinQuery(List(tableNameClean+".*"),
   		    					             tableNameClean,
   		    					             "true",tmpTableName,
   		    					             "hash"))
		}

		val result = hiveContext.sql(qb.buildSelectSemiJoinQuery(List(tableNameClean+".*"),
   		    					             tableNameClean,
   		    					             "true",tmpTableName,
   		    					             "hash"))

		return result

	}

	/**
	 * Given a column name, a row, and a sampleName it returns the column as
	 * a string.
	 * @param sampleName a sample from which the row comes
	 * @param colName the name of the col you want to access
	 * @return in
	 */
  private [sampleclean] def getColAsIndex(sampleName:String, colName:String):Int=
    {
    	val tableNameClean = qb.getCleanSampleName(sampleName)
    	val schemaString = getHiveTableSchema(tableNameClean)
    	val index = schemaString.indexOf(colName.toLowerCase)
    	if(index >= 0)
    		return index
    	else
    		return -1
    }

  /**
   * Given a column name, a row, and a sampleName it returns the column as
   * a string.
   * @param sampleName a sample from which the row comes
   * @param colName the name of the col you want to access
   * @return in
   */
  private [sampleclean] def getColAsIndexFromBaseTable(sampleName:String, colName:String):Int=
    {
    	val tableNameClean = getParentTable(qb.getCleanSampleName(sampleName))
    	val schemaString = getHiveTableSchema(tableNameClean)
    	val index = schemaString.indexOf(colName.toLowerCase)
    	if(index >= 0)
    		return index
    	else
    		return -1
    }

  /**
   * Given a column name, a row, and a sampleName it returns the column as
   * a string.
   * @param row A row to query
   * @param sampleName a sample from which the row comes
   * @param colName the name of the col you want to access
   * @return string
   */
  private [sampleclean] def getColAsString(row:Row, sampleName:String, colName:String):String=
    {
    	val tableNameClean = qb.getCleanSampleName(sampleName)
    	val schemaString = getHiveTableSchema(tableNameClean)
    	val index = schemaString.indexOf(colName.toLowerCase)
    	if(index >= 0)
    		return row(index).asInstanceOf[String]
    	else
    		return null
    }

  /**
   * Given a column name, a row, and a baseTable it returns the column as
   * a string.
   * @param row A row to query
   * @param sampleName a sample from which the row comes
   * @param colName the name of the col you want to access
   * @return string
   */
  private [sampleclean] def getColAsStringFromBaseTable(row:Row, sampleName:String, colName:String):String=
    {
    	val tableNameClean = getParentTable(qb.getCleanSampleName(sampleName))
    	val schemaString = getHiveTableSchema(tableNameClean)
    	val index = schemaString.indexOf(colName.toLowerCase)
    	if(index >= 0)
    		return row.getString(index)
    	else
    		return null
    }

  /**
   * Given a column name, a row, and a sampleName it returns the column as
   * a double.
   * @param row A row to query
   * @param sampleName a sample from which the row comes
   * @param colName the name of the col you want to access
   * @return double
   */
  private [sampleclean] def getColAsDouble(row:Row, sampleName:String, colName:String):Double=
    {
    	val tableNameClean = qb.getCleanSampleName(sampleName)
    	val schemaString = getHiveTableSchema(tableNameClean)
    	val index = schemaString.indexOf(colName.toLowerCase)
    	if(index >= 0)
    		return row.getDouble(index)
    	else
    		return Double.NaN
    }

	/**Given a table name, this retrieves the schema as a list
	* from the Hive Catalog
	*/
  private [sampleclean] def getHiveTableSchema(tableName:String):List[String] = {
		var schemaList = List[String]()
		blocking {

		try{
			val msc:HiveMetaStoreClient = new HiveMetaStoreClient(new HiveConf());
			val sd:StorageDescriptor = msc.getTable(tableName).getSd();
			val fieldSchema = sd.getCols();
			for (field <- fieldSchema)
				schemaList = field.getName() :: schemaList
		}
		catch {
     		case e: Exception => 0
   		}

   		}

		return schemaList.reverse
	}

  /**
   * Given a table name, this retrieves the schema as a list
   * from the Hive Catalog
   */
  private [sampleclean] def getTableContext(tableName:String):List[String] = {
		val cleanSampleName = qb.getCleanSampleName(tableName)
		var schemaList = List[String]()
		blocking {

		try{
			val msc:HiveMetaStoreClient = new HiveMetaStoreClient(new HiveConf());
			val sd:StorageDescriptor = msc.getTable(cleanSampleName).getSd();
			val fieldSchema = sd.getCols();
			for (field <- fieldSchema)
				schemaList = field.getName() :: schemaList
		}
		catch {
     		case e: Exception => 0
   		}

   		}

		return schemaList.reverse
	}

  /**Given a table name and col names, this retrieves the indices of these cols in the table
    * from the Hive Catalog
    */
  private [sampleclean] def getColIndicesByNames(tableName:String, colNames:List[String]):List[Int] = {
    val schemaList = getHiveTableSchema(tableName)
    colNames.foldRight(List[Int]())((a, b) => schemaList.indexOf(a) :: b)
  }

  /**Given a table name and a col name, this retrieves the index of the col in the table
    * from the Hive Catalog
    */
  private [sampleclean] def getColIndexByName(tableName:String, colName:String):Int = {
    val schemaList = getHiveTableSchema(tableName)
    schemaList.indexOf(colName)
  }

  /**Return a map that is from col names to col indices for the clean sample table
    */
  private [sampleclean] def getSampleTableColMapper(sampleName:String):List[String] => List[Int] = {
    val cleanSampleName = qb.getCleanSampleName(sampleName)
    getColIndicesByNames(cleanSampleName, _: List[String])
  }

  /**Return a map that is from col names to col indices for the full table
    */
  private [sampleclean] def getFullTableColMapper(sampleName:String):List[String] => List[Int] = {
    val fullTableName = getParentTable(qb.getCleanSampleName(sampleName))
    getColIndicesByNames(fullTableName, _: List[String])
  }

  /** This function returns all the tables we have created in this session
	as temporary tables.
	*/
  private [sampleclean] def getAllTempTables():List[String] = {
		var dbList = List[String]()
		var tableList = List[String]()
		try{
			val msc:HiveMetaStoreClient = new HiveMetaStoreClient(new HiveConf());
			for(l <- msc.getAllDatabases())
				dbList = l :: dbList

			var tmpTableList = List[String]()
   			for(d <- dbList)
   			{
   				for(t <- msc.getAllTables(d))
   				{
   					if ((t contains "tmp") ||
   						(t contains "_base") ||
   						(t contains "_clean") ||
   						(t contains "_dirty") )
   					{
   						tableList = t :: tableList
   					}
   				}
   			}
		}
		catch {
     		case e: Exception => 0
   		}

		return tableList
	}

	/*This function uses the hive catalog to get the parent table
	 */
  private [sampleclean] def getParentTable(tableName:String):String =
	{
		try{
			val msc:HiveMetaStoreClient = new HiveMetaStoreClient(new HiveConf());
			return msc.getTable(tableName).getParameters().get("comment").trim.split(" ")(0)
		}
		catch {
     		case e: Exception => 0
   		}
   		return ""
	}

  /**
   * Returns the sampling ratio used to create a sample table.
   * The table should exist in Hive. The clean sample name can be
   * accessed through getCleanSampleName from the class val qb
   * @param tableName table name
   */
	def getSamplingRatio(tableName:String):Double =
	{
		try{
			val msc:HiveMetaStoreClient = new HiveMetaStoreClient(new HiveConf());
			return msc.getTable(tableName).getParameters().get("comment").trim.split(" ")(1).toDouble
		}
		catch {
     		case e: Exception => println(e)
   		}
   		return 1.0
	}
}

//This object provides some helper methods from the SampleCleanContext
@serializable
private [sampleclean] object SampleCleanContext {
	//two case clases that can help force typing
	case class FilterTuple(hash: String)
	case class DupTuple(hash: String, dup: Int)
	case class SSTuple(hash: String, updateAttr:String)
	case class SDTuple(hash: String, updateAttr:Double)

	//These methods take un-named cols in RDDs and force them
	//into named cols.
	def enforceFilterSchema(rdd:SchemaRDD): RDD[FilterTuple] = {
		return rdd.map( x => FilterTuple(x(0).asInstanceOf[String]))
	}

	def enforceFilterSchema(rdd:RDD[String]): RDD[FilterTuple] = {
		return rdd.map( x => FilterTuple(x.asInstanceOf[String]))
	}

	def enforceDupSchema(rdd:RDD[(String, Double)]): RDD[DupTuple] = {
		return rdd.map( x => DupTuple(x._1.asInstanceOf[String],x._2.asInstanceOf[Int]))
	}

	def enforceDupSchema(rdd:SchemaRDD): RDD[DupTuple] = {
		return rdd.map( x => DupTuple(x(0).asInstanceOf[String],x(1).asInstanceOf[Int]))
	}

	def enforceSSSchema(rdd:RDD[(String, String)]): RDD[SSTuple] = {
		return rdd.map( x => SSTuple(x._1.asInstanceOf[String],x._2.asInstanceOf[String]))
	}

	def enforceSSSchema(rdd:SchemaRDD): RDD[SSTuple] = {
		return rdd.map( x => SSTuple(x(0).asInstanceOf[String],x(1).asInstanceOf[String]))
	}

	def enforceSDSchema(rdd:RDD[(String, Double)]): RDD[SDTuple] = {
		return rdd.map( x => SDTuple(x._1.asInstanceOf[String],x._2.asInstanceOf[Double]))
	}

	def enforceSDSchema(rdd:SchemaRDD): RDD[SDTuple] = {
		return rdd.map( x => SDTuple(x(0).asInstanceOf[String],x(1).asInstanceOf[Int]))
	}

}


Should you have any queries pertaining to our products and services, kindly fill up the online enquiry form below or alternately, contact us via the details indicated on this page.
For any queries on investor relations matters, please feel free to contact us by using the link below. You will be forward to a Contact Form which you may use for your convenience.


text:
Q: Perspective calculation in CSS3 When you use 'perspective' property in css3, in fact it gives you different element height.

For div with height 200px,perspective 400px and rotateX 45deg, actual size will be 104px.
How can i calculate angle (45deg) for item, based on actual size (104px)?

redpajama_set_name: RedPajamaStackExchange