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

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.AbstractIterator;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.net.HttpHeaders;
import io.airlift.http.client.HttpClient;
import io.airlift.http.client.JsonResponseHandler;
import io.airlift.http.client.Request;
import io.airlift.http.client.StaticBodyGenerator;
import io.airlift.http.client.UnexpectedResponseException;
import io.airlift.json.JsonCodec;
import io.airlift.json.JsonCodecBinder;
import io.airlift.json.JsonCodecFactory;
import io.airlift.log.Logger;
import io.trino.plugin.pinot.ForPinot;
import io.trino.plugin.pinot.PinotColumnHandle;
import io.trino.plugin.pinot.PinotConfig;
import io.trino.plugin.pinot.PinotErrorCode;
import io.trino.plugin.pinot.PinotException;
import io.trino.plugin.pinot.PinotInsufficientServerResponseException;
import io.trino.plugin.pinot.PinotSessionProperties;
import io.trino.plugin.pinot.query.PinotQueryInfo;
import io.trino.spi.connector.ConnectorSession;
import org.apache.pinot.common.response.broker.BrokerResponseNative;
import org.apache.pinot.common.response.broker.ResultTable;
import org.apache.pinot.spi.data.Schema;

import javax.inject.Inject;

import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableMap.toImmutableMap;
import static com.google.common.collect.Iterables.getOnlyElement;
import static io.airlift.http.client.HttpUriBuilder.uriBuilderFrom;
import static io.airlift.http.client.JsonResponseHandler.createJsonResponseHandler;
import static io.airlift.json.JsonCodec.jsonCodec;
import static io.airlift.json.JsonCodec.listJsonCodec;
import static io.airlift.json.JsonCodec.mapJsonCodec;
import static io.trino.plugin.pinot.PinotErrorCode.PINOT_EXCEPTION;
import static io.trino.plugin.pinot.PinotErrorCode.PINOT_INVALID_CONFIGURATION;
import static io.trino.plugin.pinot.PinotErrorCode.PINOT_UNABLE_TO_FIND_BROKER;
import static java.lang.String.format;
import static java.util.Locale.ENGLISH;
import static java.util.Objects.requireNonNull;
import static java.util.function.UnaryOperator.identity;
import static org.apache.pinot.spi.utils.builder.TableNameBuilder.extractRawTableName;

public class PinotClient
{
    private static final Logger LOG = Logger.get(PinotClient.class);
    private static final String APPLICATION_JSON = "application/json";
    private static final Pattern BROKER_PATTERN = Pattern.compile("Broker_(.*)_(\\d+)");
    private static final String TIME_BOUNDARY_NOT_FOUND_ERROR_CODE = "404";
    private static final JsonCodec<Map<String, Map<String, List<String>>>> ROUTING_TABLE_CODEC = mapJsonCodec(String.class, mapJsonCodec(String.class, listJsonCodec(String.class)));
    private static final JsonCodec<QueryRequest> QUERY_REQUEST_JSON_CODEC = jsonCodec(QueryRequest.class);

    private static final String GET_ALL_TABLES_API_TEMPLATE = "tables";
    private static final String TABLE_INSTANCES_API_TEMPLATE = "tables/%s/instances";
    private static final String TABLE_SCHEMA_API_TEMPLATE = "tables/%s/schema";
    private static final String ROUTING_TABLE_API_TEMPLATE = "debug/routingTable/%s";
    private static final String TIME_BOUNDARY_API_TEMPLATE = "debug/timeBoundary/%s";
    private static final String QUERY_URL_TEMPLATE = "http://%s/query/sql";

    private final List<URI> controllerUrls;
    private final HttpClient httpClient;
    private final PinotHostMapper pinotHostMapper;

    private final LoadingCache<String, List<String>> brokersForTableCache;

    private final JsonCodec<GetTables> tablesJsonCodec;
    private final JsonCodec<BrokersForTable> brokersForTableJsonCodec;
    private final JsonCodec<TimeBoundary> timeBoundaryJsonCodec;
    private final JsonCodec<Schema> schemaJsonCodec;
    private final JsonCodec<BrokerResponseNative> brokerResponseCodec;

    @Inject
    public PinotClient(
            PinotConfig config,
            PinotHostMapper pinotHostMapper,
            @ForPinot HttpClient httpClient,
            JsonCodec<GetTables> tablesJsonCodec,
            JsonCodec<BrokersForTable> brokersForTableJsonCodec,
            JsonCodec<TimeBoundary> timeBoundaryJsonCodec,
            JsonCodec<BrokerResponseNative> brokerResponseCodec)
    {
        this.brokersForTableJsonCodec = requireNonNull(brokersForTableJsonCodec, "brokersForTableJsonCodec is null");
        this.timeBoundaryJsonCodec = requireNonNull(timeBoundaryJsonCodec, "timeBoundaryJsonCodec is null");
        this.tablesJsonCodec = requireNonNull(tablesJsonCodec, "tablesJsonCodec is null");
        this.schemaJsonCodec = new JsonCodecFactory(() -> new ObjectMapper()
                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)).jsonCodec(Schema.class);
        this.brokerResponseCodec = requireNonNull(brokerResponseCodec, "brokerResponseCodec is null");
        requireNonNull(config, "config is null");
        if (config.getControllerUrls() == null || config.getControllerUrls().isEmpty()) {
            throw new PinotException(PINOT_INVALID_CONFIGURATION, Optional.empty(), "No pinot controllers specified");
        }
        this.pinotHostMapper = requireNonNull(pinotHostMapper, "pinotHostMapper is null");

        this.controllerUrls = config.getControllerUrls();
        this.httpClient = requireNonNull(httpClient, "httpClient is null");
        this.brokersForTableCache = CacheBuilder.newBuilder()
                .expireAfterWrite(config.getMetadataCacheExpiry().roundTo(TimeUnit.MILLISECONDS), TimeUnit.MILLISECONDS)
                .build((CacheLoader.from(this::getAllBrokersForTable)));
    }

    public static JsonCodecBinder addJsonBinders(JsonCodecBinder jsonCodecBinder)
    {
        jsonCodecBinder.bindJsonCodec(GetTables.class);
        jsonCodecBinder.bindJsonCodec(BrokersForTable.InstancesInBroker.class);
        jsonCodecBinder.bindJsonCodec(BrokersForTable.class);
        jsonCodecBinder.bindJsonCodec(TimeBoundary.class);
        jsonCodecBinder.bindJsonCodec(BrokerResponseNative.class);
        return jsonCodecBinder;
    }

    protected <T> T doHttpActionWithHeadersJson(Request.Builder requestBuilder, Optional<String> requestBody, JsonCodec<T> codec)
    {
        requestBuilder.setHeader(HttpHeaders.ACCEPT, APPLICATION_JSON);
        if (requestBody.isPresent()) {
            requestBuilder.setHeader(HttpHeaders.CONTENT_TYPE, APPLICATION_JSON);
            requestBuilder.setBodyGenerator(StaticBodyGenerator.createStaticBodyGenerator(requestBody.get(), StandardCharsets.UTF_8));
        }
        Request request = requestBuilder.build();
        JsonResponseHandler<T> responseHandler = createJsonResponseHandler(codec);
        T response = null;
        try {
            response = httpClient.execute(request, responseHandler);
        }
        catch (UnexpectedResponseException e) {
            throw new PinotException(
                    PinotErrorCode.PINOT_HTTP_ERROR,
                    Optional.empty(),
                    format(
                            "Unexpected response status: %d for request %s to url %s, with headers %s, full response %s",
                            e.getStatusCode(),
                            requestBody.orElse(""),
                            request.getUri(),
                            request.getHeaders(),
                            response));
        }
        return response;
    }

    private <T> T sendHttpGetToControllerJson(String path, JsonCodec<T> codec)
    {
        return doHttpActionWithHeadersJson(
                Request.Builder.prepareGet().setUri(uriBuilderFrom(getControllerUrl()).appendPath(path).build()),
                Optional.empty(),
                codec);
    }

    private <T> T sendHttpGetToBrokerJson(String table, String path, JsonCodec<T> codec)
    {
        return doHttpActionWithHeadersJson(
                Request.Builder.prepareGet().setUri(URI.create(format("http://%s/%s", getBrokerHost(table), path))),
                Optional.empty(),
                codec);
    }

    private URI getControllerUrl()
    {
        return controllerUrls.get(ThreadLocalRandom.current().nextInt(controllerUrls.size()));
    }

    public static class GetTables
    {
        private final List<String> tables;

        @JsonCreator
        public GetTables(@JsonProperty("tables") List<String> tables)
        {
            this.tables = tables;
        }

        public List<String> getTables()
        {
            return tables;
        }
    }

    public List<String> getAllTables()
    {
        return sendHttpGetToControllerJson(GET_ALL_TABLES_API_TEMPLATE, tablesJsonCodec).getTables();
    }

    public Schema getTableSchema(String table)
            throws Exception
    {
        return sendHttpGetToControllerJson(format(TABLE_SCHEMA_API_TEMPLATE, table), schemaJsonCodec);
    }

    public static class BrokersForTable
    {
        public static class InstancesInBroker
        {
            private final List<String> instances;

            @JsonCreator
            public InstancesInBroker(@JsonProperty("instances") List<String> instances)
            {
                this.instances = instances;
            }

            @JsonProperty("instances")
            public List<String> getInstances()
            {
                return instances;
            }
        }

        private final List<InstancesInBroker> brokers;

        @JsonCreator
        public BrokersForTable(@JsonProperty("brokers") List<InstancesInBroker> brokers)
        {
            this.brokers = brokers;
        }

        @JsonProperty("brokers")
        public List<InstancesInBroker> getBrokers()
        {
            return brokers;
        }
    }

    @VisibleForTesting
    public List<String> getAllBrokersForTable(String table)
    {
        ArrayList<String> brokers = sendHttpGetToControllerJson(format(TABLE_INSTANCES_API_TEMPLATE, table), brokersForTableJsonCodec)
                .getBrokers().stream()
                .flatMap(broker -> broker.getInstances().stream())
                .distinct()
                .map(brokerToParse -> {
                    Matcher matcher = BROKER_PATTERN.matcher(brokerToParse);
                    if (matcher.matches() && matcher.groupCount() == 2) {
                        return pinotHostMapper.getBrokerHost(matcher.group(1), matcher.group(2));
                    }
                    else {
                        throw new PinotException(
                                PINOT_UNABLE_TO_FIND_BROKER,
                                Optional.empty(),
                                format("Cannot parse %s in the broker instance", brokerToParse));
                    }
                })
                .collect(Collectors.toCollection(ArrayList::new));
        Collections.shuffle(brokers);
        return ImmutableList.copyOf(brokers);
    }

    public String getBrokerHost(String table)
    {
        try {
            List<String> brokers = brokersForTableCache.get(table);
            if (brokers.isEmpty()) {
                throw new PinotException(PINOT_UNABLE_TO_FIND_BROKER, Optional.empty(), "No valid brokers found for " + table);
            }
            return brokers.get(ThreadLocalRandom.current().nextInt(brokers.size()));
        }
        catch (ExecutionException e) {
            Throwable throwable = e.getCause();
            if (throwable instanceof PinotException) {
                throw (PinotException) throwable;
            }
            else {
                throw new PinotException(PINOT_UNABLE_TO_FIND_BROKER, Optional.empty(), "Error when getting brokers for table " + table, throwable);
            }
        }
    }

    public Map<String, Map<String, List<String>>> getRoutingTableForTable(String tableName)
    {
        Map<String, Map<String, List<String>>> routingTable = sendHttpGetToBrokerJson(tableName, format(ROUTING_TABLE_API_TEMPLATE, tableName), ROUTING_TABLE_CODEC);
        ImmutableMap.Builder<String, Map<String, List<String>>> routingTableMap = ImmutableMap.builder();
        for (Map.Entry<String, Map<String, List<String>>> entry : routingTable.entrySet()) {
            String tablenameWithType = entry.getKey();
            if (!entry.getValue().isEmpty() && tableName.equals(extractRawTableName(tablenameWithType))) {
                ImmutableMap.Builder<String, List<String>> segmentBuilder = ImmutableMap.builder();
                for (Map.Entry<String, List<String>> segmentEntry : entry.getValue().entrySet()) {
                    if (!segmentEntry.getValue().isEmpty()) {
                        segmentBuilder.put(segmentEntry.getKey(), segmentEntry.getValue());
                    }
                }
                Map<String, List<String>> segmentMap = segmentBuilder.build();
                if (!segmentMap.isEmpty()) {
                    routingTableMap.put(tablenameWithType, segmentMap);
                }
            }
        }
        return routingTableMap.build();
    }

    public static class TimeBoundary
    {
        private final Optional<String> onlineTimePredicate;
        private final Optional<String> offlineTimePredicate;

        public TimeBoundary()
        {
            this(null, null);
        }

        @JsonCreator
        public TimeBoundary(
                @JsonProperty String timeColumnName,
                @JsonProperty String timeColumnValue)
        {
            if (timeColumnName != null && timeColumnValue != null) {
                offlineTimePredicate = Optional.of(format("%s < %s", timeColumnName, timeColumnValue));
                onlineTimePredicate = Optional.of(format("%s >= %s", timeColumnName, timeColumnValue));
            }
            else {
                onlineTimePredicate = Optional.empty();
                offlineTimePredicate = Optional.empty();
            }
        }

        public Optional<String> getOnlineTimePredicate()
        {
            return onlineTimePredicate;
        }

        public Optional<String> getOfflineTimePredicate()
        {
            return offlineTimePredicate;
        }
    }

    public TimeBoundary getTimeBoundaryForTable(String table)
    {
        try {
            return sendHttpGetToBrokerJson(table, format(TIME_BOUNDARY_API_TEMPLATE, table), timeBoundaryJsonCodec);
        }
        catch (Exception e) {
            String[] errorMessageSplits = e.getMessage().split(" ");
            if (errorMessageSplits.length >= 4 && errorMessageSplits[3].equalsIgnoreCase(TIME_BOUNDARY_NOT_FOUND_ERROR_CODE)) {
                return timeBoundaryJsonCodec.fromJson("{}");
            }
            throw e;
        }
    }

    public static class QueryRequest
    {
        private final String sql;

        @JsonCreator
        public QueryRequest(@JsonProperty String sql)
        {
            this.sql = requireNonNull(sql, "sql is null");
        }

        @JsonProperty
        public String getSql()
        {
            return sql;
        }
    }

    public interface BrokerResultRow
    {
        Object getField(int index);
    }

    private static class ResultRow
            implements BrokerResultRow
    {
        private final Object[] row;
        private final int[] indices;

        public ResultRow(Object[] row, int[] indices)
        {
            this.row = requireNonNull(row, "row is null");
            this.indices = requireNonNull(indices, "indices is null");
        }

        @Override
        public Object getField(int index)
        {
            return row[indices[index]];
        }
    }

    public static class ResultsIterator
            extends AbstractIterator<BrokerResultRow>
    {
        private final List<Object[]> rows;
        private final int[] indices;
        private int rowIndex;

        private ResultsIterator(List<Object[]> rows, int[] indices)
        {
            this.rows = requireNonNull(rows, "rows is null");
            this.indices = requireNonNull(indices, "indices is null");
        }

        @Override
        protected BrokerResultRow computeNext()
        {
            if (rowIndex == rows.size()) {
                return endOfData();
            }
            return new ResultRow(rows.get(rowIndex++), indices);
        }
    }

    private BrokerResponseNative submitBrokerQueryJson(ConnectorSession session, PinotQueryInfo query)
    {
        String queryRequest = QUERY_REQUEST_JSON_CODEC.toJson(new QueryRequest(query.getQuery()));
        return doWithRetries(PinotSessionProperties.getPinotRetryCount(session), retryNumber -> {
            String queryHost = getBrokerHost(query.getTable());
            LOG.info("Query '%s' on broker host '%s'", queryHost, query.getQuery());
            Request.Builder builder = Request.Builder.preparePost()
                    .setUri(URI.create(format(QUERY_URL_TEMPLATE, queryHost)));
            BrokerResponseNative response = doHttpActionWithHeadersJson(builder, Optional.of(queryRequest), brokerResponseCodec);

            if (response.getExceptionsSize() > 0 && response.getProcessingExceptions() != null && !response.getProcessingExceptions().isEmpty()) {
                // Pinot is known to return exceptions with benign errorcodes like 200
                // so we treat any exception as an error
                throw new PinotException(
                        PINOT_EXCEPTION,
                        Optional.of(query.getQuery()),
                        format("Query %s encountered exception %s", query.getQuery(), response.getProcessingExceptions().get(0)));
            }
            if (response.getNumServersQueried() == 0 || response.getNumServersResponded() == 0 || response.getNumServersQueried() > response.getNumServersResponded()) {
                throw new PinotInsufficientServerResponseException(query, response.getNumServersResponded(), response.getNumServersQueried());
            }

            return response;
        });
    }

    /**
     * columnIndices: column name -> column index from column handles
     * indiceToGroupByFunction<Int,String> (groupByFunctions): aggregationIndex -> groupByFunctionName(columnName)
     * groupByFunctions is for values
     * groupByColumnNames: from aggregationResult.groupByResult.groupByColumnNames()
     * aggregationResults[GroupByColumns, GroupByResult]
     * GroupByColumns:  String[] // column names, i.e. group by foo, bar, baz
     * GroupByResult: Row[]
     * Row: {group: String[] // values of groupBy columns, value: aggregationResult}
     * <p>
     * Results: aggregationResults.get(0..aggregationResults.size())
     * Result: function, value means columnName -> columnValue
     */
    public Iterator<BrokerResultRow> createResultIterator(ConnectorSession session, PinotQueryInfo query, List<PinotColumnHandle> columnHandles)
    {
        BrokerResponseNative response = submitBrokerQueryJson(session, query);
        return fromResultTable(response, columnHandles, query.getGroupByClauses());
    }

    @VisibleForTesting
    public static ResultsIterator fromResultTable(BrokerResponseNative brokerResponse, List<PinotColumnHandle> columnHandles, int groupByClauses)
    {
        requireNonNull(brokerResponse, "brokerResponse is null");
        requireNonNull(columnHandles, "columnHandles is null");
        ResultTable resultTable = brokerResponse.getResultTable();
        String[] columnNames = resultTable.getDataSchema().getColumnNames();
        Map<String, Integer> columnIndices = IntStream.range(0, columnNames.length)
                .boxed()
                // Pinot lower cases column names which use aggregate functions, ex. min(my_Col) becomes min(my_col)
                .collect(toImmutableMap(i -> columnNames[i].toLowerCase(ENGLISH), identity()));
        int[] indices = new int[columnNames.length];
        int[] inverseIndices = new int[columnNames.length];
        for (int i = 0; i < columnHandles.size(); i++) {
            String columnName = columnHandles.get(i).getColumnName().toLowerCase(ENGLISH);
            indices[i] = requireNonNull(columnIndices.get(columnName), format("column index for '%s' was not found", columnName));
            inverseIndices[indices[i]] = i;
        }
        List<Object[]> rows = resultTable.getRows();
        // If returning from a global aggregation (no grouping columns) over an empty table, NULL-out all aggregation function results except for `count()`
        if (groupByClauses == 0 && brokerResponse.getNumDocsScanned() == 0 && resultTable.getRows().size() == 1) {
            Object[] originalRow = getOnlyElement(resultTable.getRows());
            Object[] newRow = new Object[originalRow.length];
            for (int i = 0; i < originalRow.length; i++) {
                if (!columnHandles.get(inverseIndices[i]).isReturnNullOnEmptyGroup()) {
                    newRow[i] = originalRow[i];
                }
            }
            rows = ImmutableList.of(newRow);
        }
        return new ResultsIterator(rows, indices);
    }

    public static <T> T doWithRetries(int retries, Function<Integer, T> caller)
    {
        PinotException firstError = null;
        checkState(retries > 0, "Invalid num of retries %s", retries);
        for (int i = 0; i < retries; ++i) {
            try {
                return caller.apply(i);
            }
            catch (PinotException e) {
                if (firstError == null) {
                    firstError = e;
                }
                if (!e.isRetryable()) {
                    throw e;
                }
            }
        }
        throw firstError;
    }
}


text:
Business Featured News
Fincantieri receives contract to construct four ships
04/01/2020 04/01/2020 themarinenews	Combat, Fincantieri, Fincantieri Marinette Marine, FMM, Gibbs & Cox, Giuseppe Bono, Italy, Lockheed Martin, Marine, Marinette, Marinette Marine, Mike Pence, Multi-Mission Surface Combatant, President, Saudi Arabia, ship, U.S. Navy, Vice President, Wisconsin, yard
The U.S. Navy awarded a Lockheed Martin-led team, which includes Fincantieri Marinette Marine (FMM), a multi-billion dollar (USD) order for
Andersson Wins In Sharjah – Torrente Wins World Championship
22/12/2019 22/12/2019 themarinenews	Alberto Comparato, Bartek Marszalek, boat, Cédric Deguisne, champion, championship, Christmas, Davin Del Pin, F1H2O, Finland, France, Italy, Jonas Andersson, Marit Stromoy, Norway, Philippe Chiappe, Poland, Powerboat, race, racing, Sami Selio, Sharjah, Shaun Torrente, Swedden, Thani Al Qemzi, UAE, UIM, UIM F1H2O World Championship, Union Internationale Motonautique, United Arab Emirates, USA, Victory
Sweden's Jonas Andersson did everything in his power in his bid to win his first UIM F1H2O World Championship with
Featured Style
Gourmet every day
20/12/2019 20/12/2019 themarinenews	2020, Caribbean, charter, Charter Chef, charter news, Dardanella, Feadship, France, French cuisine, gastronomy, Gourmet, Iduna, Italy, Jan Verkerk, Michelin-star, motor yacht, sailing, Sailing Yacht, Sherakhan, spain, Switzerland, Toine Smulders, winter
A look into the daily life and work of Sherakhan's Michelin-starred Charter Chef, Toine Smulders. Sherakhan is available for charter
Sanlorenzo to go public on December 10
09/12/2019 09/12/2019 themarinenews	Amundi, Azimut, Cannes Yachting Festival, Fideuram, IPO, Italian, Italian Stock Exchange, Italy, JP Morgan, Kairos, Massimo Perotti, Mediolanum, Milan Stock Exchange, Milano Finanza, Norges, Sanlorenzo, stock exchange, yard
Financial news source Milano Finanza has reported that Italian yard Sanlorenzo has been on track for its trading debut on
Al Qemzi Crowns Season with Abu Dhabi Grand Prix Victory
08/12/2019 08/12/2019 themarinenews	Abu Dhabi, Ahmad Al Fahim, champion, Crown, Duarte Benavente, Dutchman, Emirati, F2, Ferdinand Zandbergen, Formula2, German, Grand Prix, Guido Cappellini, Héctor Sanz, Italy, Johan Österberg, Kalle Vilppo, Lithuania, Mansoor Al Mandoori, Mette Bjerknæs, Nations Cup, Nikita Lijcs, Norway, Poland, Portugal, Rashed Al Qemzi, spain, Stefan Hagin, Sweden, UAE, UIM, UIM F2 World Championship, Union Internationale Motonautique, United Arab Emirates, Uvis Slakteris, World Endurance Championship
Rashed Al Qemzi crowned his brilliant season in the 2019 UIM F2 World Championship today with an emphatic home victory
Open day at the base of the Luna Rossa Prada Pirelli team
08/12/2019 08/12/2019 themarinenews	AC75, America's Cup, ecosystem, Italy, Luna Rossa Prada Pirelli, Marine, Max Sirena, Molo Ichnusa, Open Day, Pirelli, race, sail, sailing, Yacht
Enthusiasm and surprise contributed to the success of this first Open Day at the Molo Ichnusa base. On November 19th
Al Qemzi Claims Abu Dhabi Grand Prix Pole with Brilliant Surge
07/12/2019 07/12/2019 themarinenews	Abu Dhabi, Abu Dhabi Marine Academy, Britain, Duarte Benavente, F2 Championship, Ferdinand Zandbergen, Finland, Germany, Grand Prix, Guido Cappellini, Italy, Kalle Vilppo, Lithuania, Netherlands, Norway, Owen Jeff, Portugal, Rashed Al Qemzi, Stefan Hagin, Sweden, Thomas Kurth, Tobias Munthe-Kaas, UAE, UIM, Union Internationale Motonautique, United Arab Emirates
Rashed Al Qemzi underlined his dominance of the 2019 UIM F2 World Championship with another sparkling display to claim pole
Tommaso Spadolini completes significant refit
23/10/2019 22/10/2019 themarinenews	A2, boat, C.A.R.M., Corsica, decor, design, Eurocraft Cantieri Navali, exterior, holiday, interior, Italy, Lavagna, Madhuri, New York, open boat, PDA, Peter Marino, refit, renovate, Sardinia, shipyard, sport, Superyacht, Tommaso Spadolini, yard
A2 (ex-Madhuri) is a 37.6m open-style sports boat with a top speed of over 30 knots, built by Eurocraft Cantieri
The Gritti Palace wins the Venice Hospitality Challenge
23/10/2019 22/10/2019 themarinenews	Alfredo Ricci, Barcelona, BMW, boat, Champagne Moët & Chandon, Environmental, Gaspar Vincec, Generali, Gritti Palace, hotel, Italian, Italy, Massimiliano Di Silvestre, Mirko Sguario, Mure a Dritta, One Ocean Foundation, Paolo Montefusco, sailing, sailor, San Clemente Palace Kempinski, Sustainability, Venetian, Venice, Venice Yacht Club, Yacht
The VI edition of the Venice Hospitality Challenge with the Overall victory and in Class 1 of Way of Life.
The all new Dipiu900F Tender at Cannes
20/10/2019 20/10/2019 themarinenews	Baoli Beach, boat, boatyard, Cannes, Cannes Film Festival, Cannes Yachting Festival, design, Dior, Dipiu, Dipiu900F, Hermès, Italian, Italy, Laboratorio del Mare, Loro Piana, Powerboat, project, racing, Roberto Curtó, tailor-made, tender, Volvo, Yacht
The new Dipiù 900 F debuted in Cannes: not at the boat show, but the at the Film Festival, where

redpajama_set_name: RedPajamaCommonCrawl


I'm giving away a Scentsy Package! I use random.org to pick winners!
I really want to win.. what can I do to increase my chances?
Post a comment below telling me what your favorite scent is!
Absalutly love scentsy my favorite is blueberry cheesecake, but love all the others too.Have been using scentsy for a year now will never go back to candles again keep brining us new scents but keep the old .
It's hard to choose a favorite…I love Peach a la Mode, Blueberry Cheesecake, Orange Dreamsicle, Cranberry Muffin, Paradise Punch, Poinsetta Pine…the list goes on!
I LOVE peach a la mode. DEFINITELY my new favorite!!
My favorite scent is Beach!
My favorite scent is clean breeze….also like luna or black raspberry vanilla!!!! There is not many I don't like….
Cherry Limeade is my absolute favorite, but I love Blueberry Cheesecake and a bunch of others. It's hard to pick just one.


Energy giant Vattenfall has landed a new contract to install electric vehicle charging infrastructure in the UK after landing a tender from Canterbury City Council.
Solar stands to be a "new backbone" of the power sector as it cements its status as the world's "dominant new build generation technology", Vattenfall's head of solar and battery storage has said.
Vattenfall is to make a play for dominance in the UK's electric vehicle charging market with the launch of its open access InCharge concept next month.
Vattenfall has brought online its 22MW battery project co-located with the Pen y Cymoedd onshore wind farm in Wales, becoming the latest company to start delivering sub-second frequency response to National Grid.
Vattenfall is bringing customisable power purchase agreements (PPAs) to business customers in Britain as part of a "new approach" to corporate energy sourcing.


What's the best place to learn Permaculture? I believe that it is a place where Permaculture is practiced and visible.
Ndanifor Permaculture Eco-village is on it's way to being such a site for Cameroon and Central Africa. Already the farm is practicing Permaculture and growing beautiful organic vegetables.
Our next big step is to build a facility- the Eco-Lodge and Learning Center– to host training programs both for local groups and international events like our annual Summer Youth Camp and Permaculture Design Courses.
The design is based on the location: we orient the buildings for good natural ventilation, daylight in all rooms and ease of moving around. Sleeping rooms are separated from group rooms such as the meeting hall and dining room, so they can be restful while programs are in progress.
It is important to us to use local crafts and skills throughout. They will demonstrate the beauty of raffia bamboo, of earth, of handmade lampshades, locally built furniture and of every day items like cups and plates.
All buildings will be built with local materials as much as possible . This means using the earth from the site, stones from a quarry in the neighborhood, locally harvested wood and raffia palm harvested on the land.
We will make sure that our systems are set up in sustainable ways: water from the spring will be used for cooking and drinking. We will collect rainwater in tanks for showers and laundry use. The grey water from Showers and laundry will be filtered and then used for irrigation of the landscape close to the buildings. Kitchen water will be directed to a biogas system.
Toilets are set up as composting toilets to start. Once we build our biogas system, we will construct toilets that feed directly into the system, along with kitchen waste and animal manure. The biogas system will then produce gas to use for cooking stoves in our kitchen. What is left at the end is fertilizer for the gardens.
Our Electricity will be provided by Solar Panels. We will also use solar energy to heat water for the kitchen and showers.
Check out "Permaculture in the design of buildings"- a recent article on Elke's blog for more info on design.
We are beginning construction of the meeting hall and small cabin early 2014.
If you have expertise to share please contact Elke at elke@elkecole.com , so we can see how to fit your ideas into the planning.
If you are far away and wish to make a financial contribution we will be grateful for your support. Please contact us.
Elke Cole is a Natural Builder and Architect and volunteer for Better World.


text:
van Vogt
The complete stories and novels: synopses, (...)
A. E. van Vogt's best short stories
A. E. van Vogt's best novelettes and novellas
A. E. van Vogt's best novels
Overviews of all the stories & novels
Jack London's best short stories and novelettes
Jack London's best novels and novellas
Jack London memoirs
Maupassant
Great Sci-fi
Great Poetry
The Greatest Novels
The Most-Visited Articles
Études/articles en français
Tableaux généalogiques
Family Memoirs
Family Awards - John N. Smith
Family Essays
Marie Micheline Smith (1941-2018)
Serge Benedetti (1950-2012)
Avraham Berger (1946-2012)
Margot Marne Smith (1916-1996)
Going out / Sortir
About this site / Sur le site
"Ward No. 6" and other stories by Anton Chekhov
24 December 2019 by Anton Chekhov
1. OLD AGE (1886) The architect Uzelkov returns on mission to the town that he had left twenty years before after his divorce there, and is invited to dinner by the wily lawyer who had handled his divorce and who reveals to him during the dinner what really went on with his (...)
"Easter Eve" and other great Chekhov stories
7 December 2019 by Anton Chekhov
1. OYSTERS (1884) An eight-year-old boy accompanying his unemployed father who has decided to go out to beg for alms notices the strange word "oysters" on a sign inside a restaurant. The story continues in ever-starker tones as the little fellow progressively discovers the (...)
"The Lady with The Dog" and other great stories by Anton Chekhov
1. A TRIVIAL INCIDENT (1886) The narrator recounts how he and his companion, a Prince, had been prevented from hunting in the forest of Madame Kandurin, with whom the prince had formerly been connected. The two go to the lady's mansion, where the narrator realises the extent (...)
The complete (319) stories of Anton Chekhov: synopses, comments and ratings
4 December 2019 by Ray
Anton Chekhov (1860-1904) was probably the most prolific writer of short stories of all time, with 319 published stories to his credit before his death from tuberculosis at the age of 44, as well as 2 novels [1], 16 plays [2] and a number of newspaper articles and essays.
Here you will find a (...)
Anton Chekhov's funniest story: "From the Diary of a Violent-tempered Man" (1887)
4 September 2015 by Anton Chekhov
Anton Chekhov (1860-1904) wrote some 239 short stories during his all-too-short career. Although in the main they tend to centre on the dissatisfactions and less-than-joyous aspects of the lives of people from all walks of life, many of them do have a certain whimsical character bordering on (...)
2000-2020 — Prospero's Isle
Directeur de publication : V. & R. Smith
Log in | Site Map | Mentions légales | RSS 2.0


text:
Ireland goes into "semi-lockdown" despite 93% vaccination rate as COVID-19 cases spike
Ireland may be one of the most vaccinated countries in Europe against COVID-19, but that hasn't been enough to stop the spread of the virus there, and now the population is facing new curfews and other restrictions.
Prime Minister Micheal Martin said the rise in infections being seen there is a "cause of deep concern" and announced the country will institute several new "semi-lockdown" measures to stop people from socializing and spreading the disease. One part of the new approach is a nationwide midnight curfew on restaurants, clubs and bars.
The move could be devastating to the already-shaky dining and entertainment industry. The Vintners' Federation of Ireland, which represents around 4,000 Irish pub owners, said it will effectively close their establishments, stating: "The news that restricted trading hours are set to be reintroduced is a hugely disappointing development for the many late-night pubs and night clubs many of whom will now be forced to shut just three weeks after reopening."
There will also be new work from home guidelines that encourage people who are able to work from home to do so. In addition, Covid passports will now be required to enter theaters and cinemas.
The government has also instructed fully vaccinated household close contacts of people with the virus to stay at home for five days and get tested.
In Ireland, 93 percent of the population is vaccinated, so these extreme measures and the case spikes that prompted them should raise a lot of questions among those who have put so much faith in these vaccines.
Ireland's high vaccination rate has done little to stop cases from rising 275 percent in the past month, yet somehow they have come to the conclusion that more vaccines are needed, as Martin has instructed health authorities to look into reducing the five-month gap between a person's initial round of vaccines and booster shots.
The PM told his party on Wednesday that he cannot guarantee there won't be another full lockdown in the coming weeks. He said: "We are in a challenging period, and the coming weeks will be uncertain, with no guarantees."
Meanwhile, Irish Parliament Member Willie O'Dea has threatened more severe lockdowns if people continue to gather in large groups without masks. The former minister expressed dismay at seeing people gathered in long lines outside clubs in Limerick just 24 hours after the government asked people to limit their social contacts.
"The function of the original lockdown was to stop people congregating and behaving irresponsibly, and the Government policy now is to depend on people to do that voluntarily. Of course if they don't do that voluntarily, it could inevitably lead to another lockdown, which nobody wants."
Cases are still climbing in countries with high vaccination rates
Ireland isn't the only country with a high vaccination rate to experience a recent surge in cases. Perhaps the best example is Israel, which was an early world leader in getting its population vaccinated. In a recent wave of new cases in the country, 71 percent of Israelis who were seriously ill with the virus had been fully vaccinated.
In Singapore, where almost 80 percent of the population has been vaccinated, infections spiked from a two-digit case count in June to a four-digit case count in September. This prompted the country to move away from its zero-Covid strategy to one of living with the disease as their prime minister announced that they must accept there is still a risk of getting infected after the vaccine and that closing down the country is bad for the economy.
It's becoming more clear each day that vaccinating everyone isn't the solution to the problem the world is facing right now, and it makes absolutely no sense that so many countries seem to think bullying people into getting even more vaccines and boosters is somehow going to make things better.
OffGridSurvival.com
IrishExaminer.com
Tagged Under: covid-19, covid-19 vaccines, health freedom, Ireland, lockdown, lockdowns, medical fascism, Medical Tyranny, obey, Tyranny, vaccine failure, vaccine wars, vaccines


text:
Tag Archives: Peter Fonda
Not So Easy Rider safety film
January 6, 2020 mcnews Leave a comment
This 1973 safety film starring Easy Rider star Peter Fonda and legendary stuntman Evel Knievel is not only hilarious, with some great period music, but also still surprisingly relevant today.
While the film doesn't endorse lane filtering or splitting, most of the information supplied is still as relevant today as it was in the 1970s when the film was produced.
That is not to say that you will agree wth everything they say; for example that you should wear a white helmet to be more visible.
However, it's an entertaining 17-minute video that features a segment with Evel.
We particularly love the reference to defensive motorcyclists treating all drivers as either "asleep, blind or drunk".
There is also some great LA motorcycle police synchronised riding. It's fascinating to watch, but it doesn't have much to do with the message about how police cops "riding by the book" are actually safer than police in patrol cars. They quote the statistic of 18 accidents per million miles on police bikes compared with 27 in patrol cars.
There is also a true/false quiz to test your motorcycle knowledge.
And it finishes with a cringe-worthy safety message from Mr Easy Rider himself: "Have a good trip and don't ride too easy."
Peter Fonda on Captain America in Easy Rider
Easy RiderEvel KnievelMotorbike newsmotorcyclesPeter Fondaroad safety
Peter 'Easy Rider' Fonda dies aged 79
August 16, 2019 mcnews Leave a comment
Peter Fonda, the actor who played Wyatt riding a Captain America Harley chopper in the 1969 movie Easy Rider, has died at the age of 79.
The hippy film recently celebrated the 50th anniversary of its first screening.
It was shot on a shoestring budget in a haze of pot smoke and with a plot that was made up along the way by Fonda and fellow actor/director Dennis Hopper who died in 2013, aged 77.
Fonda's screenplay was nominated for an Academy Award, the film was added to the USA's National Film Registry in 1998 and it is listed as one of the top 100 American movies by the American Film Institute.
The veteran actor died yesterday of respiratory failure due to lung cancer at his Los Angeles home surrounded by his family.
Iconic moment
He starred in many films including the cringe-worthy low-grade bikie movie, The Wild Angels in 1966.
It includes his line: "We want to be fee to ride our machines without being hassled by the man … and we want to get loaded."
Fonda also made a cameo appearance in the 2007 Wild Hogs that lampoons Easy Rider.
The opening scene of Easy Rider features Peter in an iconic gesture of throwing away his watch.
The choppers then fire up and roar into the desert to the accompaniment of Born to be Wild. Truly a classsic cinematic moment that has stirred the hearts of riders this past half century!
It has also started a fad with riders and other travellers to discard their watches and disregard the constraints of time.
A watch is a symbol of "the man", society and capitalism that constrain us.
Motorcycles are freedom machines that allow us to escape the rigours of timekeeping.
In a hilarious parody of the famous Easy Rider scene, John Travolta and his buddies throw away their mobile phones before a cross-country ride in Wild Hogs.
"You don't need a GPS to discover America; you need a bike and you need the road, ok? Freedom," says Travolta.
Fonda also rides into town to end the long fight scene.
His closing line is also a classic: "Oh, and guys… lose the watches."
What is your favourite scene from Easy Rider? Leave your comments below.
Easy RiderfilmMotorbike newsmotorcyclesmovieNewsobitPeter Fonda
Easy Rider celebrates its 50th anniversary
Today is the 50th anniversary of the first public screening of the cult 1969 movie Easy Rider.
In the USA, many theatres are showing the film again. Here in Australia, you can watch it on DVD and maybe a streaming service.
The hippy film was shot on a shoestring budget in a haze of pot smoke and with a plot that was made up along the way by actor/director Dennis Hopper.
Dennis died in 2013, aged 77.
His film was added to the USA's National Film Registry in 1998 and is listed as one of the top 100 American movies by the American Film Institute.
Although the 50-year-old film may seem anachronistic in these modern times, it still has its merits.
The opening scene where lead actor Peter Fonda famously throws away his watch is a highlight.
The choppers then fire up and roar into the desert to the accompaniment of Born to be Wild. Truly an iconic cinematic moment!
In a hilarious parody of the famous Easy Rider scene, John Travolta and his buddies throw away their mobile phones before a cross-country ride in the 2007 movie Wild Hogs.
There are no deadlines on the open road. Even sunset is no limit.
So there really is no need for a watch. Besides, you can't see it under your jacket sleeve and gloves when riding.
Besides, most bikes these days have clocks, although I have my bike's screen set to the trip meter, rather than the clock.
Dennis HopperEasy RiderMotorbike newsmotorcyclesmovieNewsPeter Fonda


text:
Q: ST_Intersects incorrectly returning false in PostGIS I have a shapefile created from ArcMap that contains about 400 geometry's. I've added this shapefile into PostGIS using the shp2pgsql tool. I am trying to use the ST_Intersects function to determine if a given point, using Lat and Long, is within one of the 400 geometry's.
I have a point that I know to be within one of the shapes, but ST_Intersects is returning false for this. The record where cocnum equals "MA-500" contains the point Lat: 42.3581, Long: -71.0636.
                    SELECT
                        cocname,
                        cocnum,
                        geom,
                        st_intersects(geom, point(-71.0636,42.3581)::geometry)
                    FROM
                        public.coc
                    WHERE cocnum like 'MA-500'

However, I get the following result:

When I create a KML of the geometry using st_asKml(geom) and then insert that into google maps, along with the point google.maps.LatLng(42.3581, -71.0636) I get the following result:

Any ideas on why ST_Intersects is returning false for this?

A: You need to project your point into your polygon's CRS.  You can use ST_Transform to do this.
                    SELECT
                        cocname,
                        cocnum,
                        geom,
                        st_intersects(geom,
                            ST_Transform(
                                  ST_GeomFromText('point(-71.0636 42.3581)',4326), 3857))
                    FROM
                        public.coc
                    WHERE cocnum like 'MA-500'

Specifically you're not intersecting because your polygons projection is in meters, so without re-projecting -71.06, 42.35 in meters is a point not far from the equator and prime meridian.

redpajama_set_name: RedPajamaStackExchange


Swing Science is the exclusive North American distributor for Epon Golf. If your Retail Operation focuses on "Ultra-Premium" golf equipment and you have interest in becoming an Authorized Epon Dealer, contact the Epon Program Manager Dustin Vaughn at dustin@swingscience.net for more information.
Manufactured in Yokohama, Japan, Nippon golf shafts set the industry standard for quality and are without peer.
A direct benefit for nXfit Studios is the availability of Tiered Pricing for program participants.
Enjoy the industry's most aggressive DEMO program and receive significant discounts on all DEMO shafts.
In addition to Nippon's full line-up of catalog models nXfit Studios will have access to a multitude of shaft designs and finishes which are only available through the Studio Network.
Contact a Swing Science representative today at 800-783-0196 and find out if your retail shop qualifies for the nXfit Studio Network. You can also contact the nXfit Program Director Caleb Smith at caleb@swingscience.net.
Swing Science is pleased to announce the re-launch of its Custom Fitting Center program which will give clubmakers direct access to an exclusive line of clubheads, shafts and grips designed to optimize the custom fitting process and give consumers an attractive price point for custom fit golf equipment.
With an emphasis on game improvement equipment, our FC-ONE Series of clubheads and shafts provides the clubmaker with fitting options for juniors, beginners and intermediate level players. Our new FC-ONE Wedge offered in a raw, nickel or black finish is designed for the intermediate to advanced player which includes a raw finish for custom grinding. What's more, the introduction of our new "Fitting Bag" makes custom fitting easier than ever with our color coded quick release fitting system.
Our goal for 2016 is to sign up 500 Swing Science Fitting Centers to represent our collection of custom golf club components. In addition to having exclusive access to many of our new designs, Fitting Centers will also receive the most competitive pricing on all products offered by Swing Science. We will also be featuring all of the "Fitting Centers" on the Swing Science corporate web site under the Dealer Locator so consumers can quickly find your business.
Contact your sales representative today at 800.783.0196 to find out how your retail shop can qualify for the program.
Swing Science is pleased to announce its role as the Official Launch Partner of the brand new C6 Wood Series by Mitsubishi Chemical. The C6 was introduced as an after-market only technology to give Retailers an exclusive option for fitting with a premium brand that offers competitive price points. Two separate profiles make up the C6 Series that will allow clubmakers to fit most golfers swing requirements, with an emphasis on fine-tuning.
Call Swing Science today at 800-783-0196 to find out how your Retail Shop may qualify to sell Mitsubishi Chemical / Graphite Shafts.
Clubmakers, Swing Science is pleased to announce its new partnership with UST Mamiya and its instrumental role as a Certified TSPX Service Center. What this means for existing TSPX accounts, is an additional point of contact for both technical support and order fulfillment. For instance, Swing Science has invested in an on-line ordering platform exclusively for TSPX dealers making it easier than ever to order your merchandise on your schedule. If your shop is not currently in the program, then call us today and ask how your business can become part of this unique network of custom fitters.


I've shared some of the best Lead Generation Tools and tactics I've come across for capturing and converting more leads. These are not necessarily silver bullets, however my hope is that regardless of where you are – 10 or 100 leads per month, these tools will get you to the next level.
Your form is what separates your leads from non-leads.
Because of this, small improvements to your lead capture form can have significant impacts on your overall conversion rate and marketing performance. At Venture Harbour, we've seen numerous 200%+ increases in leads from form optimization alone.
Leadformly is a tool built by our team at Venture Harbour that makes it easy to build high-converting lead generation forms.
The problem we found was that the forms provided by our email marketing services and CRMs were very basic and were negatively impacting our conversion rates. We looked into various form builder tools and plugins, but none of them offered a good solution for providing conversion-optimized forms.
So we built our own tool for building them.
Leadformly sweats the little things so that you don't have to. From displaying optimal progress bar indicators to using conditional logic to segment your leads, we've spent a lot of time experimenting with forms to identify what actually increases form conversions. In addition, Leadformly has built-in analytics and audience insights to help you understand your leads and how your forms are performing.
Intercom is probably the marketing tool that I'm most excited about right now.
An operator on your team can then speak directly with website visitors, or even jump on video chat directly from the live chat window. The potential for Intercom is incredibly powerful – from gathering product feedback and understanding objections to collecting leads who are searching around on your website.
It's difficult to do Intercom justice in words. I'd highly recommend checking them out even if only to understand the potential of what they offer.
There are many potential leads on your website, yet only a handful fill out your inquiry forms.
While you can significantly increase the percentage of visitors filling out your forms using a tool like LeadFormly, there will always be a few leads slipping through the cracks.
Their sales team could then go to LinkedIn, find the marketing director's name, and call the company asking to speak to this person. As you can imagine, this not only increased the number of targeted leads their business received, but it also had a great conversion rate as the leads were already familiar with the business.
Your ability to capture and convert leads is largely dependent on your email marketing and CRM solution. After all, if you can't properly segment and use rule-based follow-up with leads, you'll have a harder job qualifying and convert those leads.
Having tested many email marketing tools and small business CRM, ActiveCampaign is without a doubt the best solution I've come across.
As you can see, ActiveCampaign allows you track every interaction a lead has on your website – and then use these as triggers for your email marketing campaigns.
This means you can notify your sales team as soon as a lead visits a certain page on your website. You could also automatically follow up with cold leads every few months, or build email campaigns to nurture them back into warm leads.
If you're in B2B sales, LinkedIn's Sales Navigator is a great tool for capturing leads. Alongside receiving lead recommendations and seeing who's viewed your profile, the Sales Navigator enables you to save leads into your CRM directly from LinkedIn.
Datanyze is an outbound sales tool designed to help software and tech companies save time prospecting. The main benefit of Datanyze is that it shows you the technology used by your prospects – and even helps you find new prospects based on what technology they use.
About a week ago I received one of the best cold emails I've seen in a long time.
This email, I believe, was 100% automated and sent using Growbots. Growbots dubs itself as an 'AI for sales' and uses clever rules and a huge database of contacts to do clever outbound lead generation. While I haven't personally used their service, I've heard great things about Growbots from numerous friends in the SaaS community.
Quora has become a de-facto destination for asking and answering questions online. If you search on Quora for topics relating to your business you'll likely find tens or hundreds of people asking questions that you could provide well-informed answers to.
These answers can subtly convey your company's expertise, which may drive potential leads to contact you.
Hoovers pride themselves on being the 'largest single source of business information' anywhere. This means that if it is personalized leads that you require for your business, then Hoovers is a great place to look.
PadiAct allows you to tailor which website visitors are asked for their email address. This means that when they do sign up they are more likely to go to make a purchase. You can then follow how well your email subscription list is growing with the easy to understand tracker charts provided by PadiAct.
Exclusive Bonus: Download our Lead Gen Form Checklist for a step-by-step guide on how to boost your conversions with high-converting lead gen forms.
Turnstile is a simple feature offered by Wistia, who is considered to be one of the most respected video hosting companies.
Turnstile's main goal is to collect the names and email addresses of potential customers for you and your business after someone has finished watching a video. By offering an email collector at the beginning, middle or end of your video you can turn this engaged visitors into valuable leads.
Qualaroo is often thought of as a customer research tool. If you're unfamiliar with their product, they provide unobtrusive mini customer surveys that enable you to communicate with visitors on your website.
One underused tactic is to use Qualaroo for lead generation. In short, you can ask your visitors a series of questions such as 'What can we do for you today?' and by step 2/3 of the survey it may make sense to arrange a call or ask for an email.
When you get these two areas right, there's a high likelihood that Slideshare will feature your presentation on their homepage for a day or two, driving thousands of views. Following this, your slides should rank well when people search for the topic of your presentation on the platform – putting you in front of targeted leads.


The Greater Victoria Public Library (GVPL, "the Library") is committed to the protection of its users' personal information. All Library users have the right to privacy; and any personal information collected, used, or disclosed by the Library is in accordance with the BC Freedom of Information and Protection of Privacy Act (FIPPA). Preserving the trust of GVPL users by maintaining the integrity and security of their Personal Information is paramount.
Personal Information is not collected when you visit the GVPL website (www.gvpl.ca). Depersonalized data may be collected for statistical purposes, used to measure usage and improve content on the website. The site (www.gvpl.ca) contains links to other sites, while we try to link only to sites that share our high standards and respect for privacy, we are not responsible for the content or the privacy practices employed by other sites.
The materials may contain inaccuracies and typographical errors. GVPL does not warrant the accuracy or completeness of the materials or the reliability of any advice, opinion, statement or other information displayed or distributed through the site. GVPL reserves the right, in its sole discretion, to correct any errors or omissions in any portion of the site. GVPL may make any other changes to the site, the materials and services (if any) described in the site at any time without notice.
This site, the information, and materials on the site, are provided "as is" without any representation or warranty, express or implied, of any kind. GVPL will not be liable for any incidental, indirect, consequential or punitive damages or for loss of profit or opportunity, loss of use or other financial loss arising out of or relating to this Privacy Statement.


Abraham Maslow's hierarchy of needs explores the elements of need that a person has and explains, in detail how it effects us with or without those such needs. The steps in Maslow's hierarch are: Physical needs for survival, Safety and Protections, Belonging needs, Self esteem, and self actualization. From the most basic conversation to the most in depth, it is occurring based upon his theory that we are communicating on base that we need something.
The first and most basic step on the hierarchy is the physical needs for survival. As an infant child, we are dependent upon our parents to receive everything from food to shelter. Without these necessities, we are bound to parish. We cry as a form of communication in order to tell our parents that we are in "need" of something. As we grow older, we are learning to speak. It is important that we have food, water and even medical attention in order to meet our basic physical needs.
The next step on Maslow's hierarchy of needs is Safety and protection needs. Having a shelter helps a person to feel safe. Even though there are people living in areas that have been run with gangs, they usually find their home to be their safe haven. Creating a bond with the people closest is also a way to feel safe. While trust is an aspect of life that has to be earned, having trust allows a person's need for safety to be easily obtained with a particular person. Trust in other people also leads to new relationships that lead to new families.


text:
/**
 * Element classes for XEP-0045: Multi-User Chat.
 */
package org.jivesoftware.smackx.muc.packet;

redpajama_set_name: RedPajamaGithub


Join us for the Season 8 Premiere of Game of Thrones.
If you are uncomfortable being on camera, be aware this event will be LIVE STREAMED.
Wear your best Game of Thrones Costume and enter our costume contest for the chance to win some awesome prizes!
We will also have a raffle with even more prizes!
Watch out for the White Walkers roaming the street on horse back. Winter is Here!


text:
In person (14)
Center For Creative Leadership (283)
MIT Sloan School of Management (177)
Schulich School of Business (137)York University
Boston Business School (116)
IMD Business School (108)
INSEAD Business School (106)
Rotterdam School of Management (104)Erasmus University
Weatherhead School of Management (76)Case Western Reserve University
HEC Montreal (64)
School of Business Administration (60)University of Miami
Sobey School of Business (59)Saint Mary's University
Frankfurt School of Finance & Management (58)
Irish Management Institute (55)University College Cork
Queen's School of Business (53)Queen's University
The Australian Graduate School of Management at University of New South Wales Business School (53)
Harvard Kennedy School Executive Education (48)
University of Technology Sydney (45)
USB Executive Development (43)University of Stellenbosch
Florida Atlantic College of Business (43)Florida Atlantic University
Cranfield School of Management (42)Cranfield University
Opus College of Business (42)University of St. Thomas-Minnesota
McGill Executive Institute (39)McGill University
Texas Executive Education (38)University of Texas at Austin
Southern Maine College of Management and Human Service (38)University of Southern Maine
David Eccles School of Business (35)University of Utah
Geneva Centre for Security Policy (GCSP) (35)
Saïd Business School (34)University of Oxford
Macquarie Graduate School of Management (33)
Darden Executive Education (32)
Bryant School of Business (32)Bryant University
Henley Business School (32)University of Reading
Aalto University Executive Education (32)
European School of Management and Technology (31)
Harvard Business School Online (30)
NYU Stern School of Business (30)
Berkeley Executive Education (29)University of California Berkeley
Carey Business School (29)Johns Hopkins University
Indian Institute of Management Bangalore (29)
Eli Broad College of Business (27)Michigan State University
Indian Institute of Management Ahmedabad (27)
Brookings Institution (26)
UNPUBLISHED: McCombs School of Business (26)The University of Texas at Austin
IE Business School (25)
IESE Business School (24)
Wits Business School (24)University of the Witwatersrand
Amsterdam Institute of Finance (23)
Kenan-Flagler Business School (22)University of North Carolina at Chapel Hill
Smeal College of Business (22)The Pennsylvania State University
Dalhousie University (22)
Darla Moore School of Business (22)University of South Carolina
Marshall School of Business (22)University of Southern California
DeGroote School of Business (22)McMaster University
EuroFinance (21)
The London School of Economics and Political Science (21)
Harvard T.H. Chan School of Public Health (21)Harvard University
C. T. Bauer College of Business (21)University of Houston
Telfer School of Management (21)University of Ottawa
Rotman School of Management (21)University of Toronto
Human Dimensions of Organizations (19)University of Texas at Austin
Lehigh College of Business and Economics (19)Lehigh University
Program on Negotiation at Harvard Law School (18)
Boston College Center for Corporate Citizenship (18)
Ivey Business School (18)Western University
Alberta School of Business (18)University of Alberta
HEC Paris (17)
China Europe International Business School (17)
The Fuqua School of Business (15)Duke University
Singapore Management University (15)
Cass Business School (15)City, University of London
Maastricht School of Management (15)
Quinlan School of Business (15)Loyola University Chicago
NUS Business School (14)
Antwerp Management School (14)University of Antwerp
Lagos Business School (14)Pan-Atlantic University
Institute for Sustainability Leadership (14)University of Cambridge
Indian Institute of Management Calcutta (14)
Olin Business School (13)Washington University in St. Louis
Neeley School of Business (13)Texas Christian University
Cox School of Business (13)Southern Methodist University
Foster School of Business (13)University of Washington
McCourt School of Public Policy (12)Georgetown University
The University of Texas at San Antonio College of Business (12)
Henry W. Bloch School of Management (12)University of Missouri - Kansas City
Fisher College of Business (12)The Ohio State University
Indian School of Business (12)
Carlson School of Management (12)University of Minnesota
Tepper School of Business (12)Carnegie Mellon
DePaul University Continuing and Professional Education (11)DePaul University
Amsterdam Business School (11)University of Amsterdam
Imperial College Business School (11)Imperial College London
Florida International College of Business (11)Florida International University
Nyenrode Business University (11)
UCLA Anderson School of Management (10)University of California, Los Angeles
Vanderbilt Owen Graduate School of Management (10)Vanderbilt University
Goizueta Business School (10)Emory University
UWA Business School (10)University of Western Australia
Rutgers Center for Innovation Education (9)Rutgers University
Robinson College of Business (8)Georgia State University
Georgetown School of Continuing Studies (8)Georgetown University
ESCP Europe (7)
Daniels College of Business (7)University of Denver
John Molson School of Business (7)Concordia University
UCD Michael Smurfit Graduate Business School (7)University College Dublin
Terry College of Business (7)The University of Georgia
Mendoza College of Business (6)University of Notre Dame
Graduate School of Journalism Advanced Media Institute (6)University of California Berkeley
Peter B. Gustavson School of Business (5)University of Victoria
Bellarmine University (5)
Alliance Manchester Business School (5)The University of Manchester
Yale School of Management (5)Yale University
WU-Executive Academy (5)Vienna University of Economics and Business
Bentley University (5)
Paul Merage School of Business (5)University of California, Irvine
Solvay Brussels School of Economics and Management (5)
Cardiff Business School (5)Cardiff University
Haskayne School of Business (5)University of Calgary
EMLYON Business School (5)
ESADE Business School (4)Ramon Llull University
Kelley School of Business (4)Indiana University
Smith College Executive Education for Women (4)Smith College
CBS Executive (4)Copenhagen Business School
Anderson School of Management (4)The University of New Mexico
HEC Lausanne (4)
Cornell School of Hotel Administration (4)Cornell University
Colorado Law Executive Education (4)University of Colorado Boulder
Krannert School of Management (4)Purdue University
MCI - Management Center Innsbruck (3)
Berkeley Law (3)University of California Berkeley
E. J. Ourso College of Business (3)Louisiana State University
Cockrell School of Engineering (3)The University of Texas at Austin
TIAS School for Business and Society (3)
Department of Management (3)London School of Economics and Political Science
Buffalo School of Management (3)University at Buffalo, SUNY
Scheller Jr. College of Business (3)Georgia Institute of Technology
Robins School of Business (3)University of Richmond
Eller College of Management (3)The University of Arizona
Rutgers Business School (3)Rutgers - The State University of New Jersey
Belk College of Business (2)UNC Charlotte
University of Edinburgh Business School (2)University of Edinburgh
Villanova School of Business (2)Villanova University
University of Nebraska-Lincoln (2)
Fundação Dom Cabral (2)
Centre for Policy Writing (2)
Møller Institute (2)University of Cambridge Churchill College
Houston-Clear Lake School of Business (2)University of Houston-Clear Lake
Rady School of Management (2)University of California, San Diego
University of Bath School of Management (1)
Brown University School of Professional Studies (1)Brown University
Leicester Castle Business School (1)DeMontfort University
LSE Cities (1)London School of Economics and Political Science
Naveen Jindal School of Management (1)The University of Texas at Dallas
Thunderbird School of Global Management (1)
Berlin School of Creative Leadership (1)Steinbeis University
Department of Psychological and Behavioural Science (1)London School of Economics and Political Science
Dietrich College of Humanities and Social Sciences (1)Carnegie Mellon University
Graziadio School of Business and Management (1)Pepperdine University
CUHK Business School (1)The Chinese University of Hong Kong
Meinders School of Business (1)Oklahoma City University
Simmons School of Management (1)Simmons College
Executive School of Management, Technology and Law (1)University of St.Gallen
$1,001-$5,000 (14)
Less than 1 week (14)
Displaying 15 course results
1-10 of 15 courses
Leadership Communication: Present Yourself with Lasting Impact
City, University of London, Cass Business School
London March 24, 2020 1 day
Effective Negotiation Skills: Influencing with Impact
London October 15, 2020 1 day
Strategic Decision Making for Leaders
London March 18-19, 2020 2 days
Leading Digital Transformations
London January 29-30, 2020 2 days
London June 10-11, 2020 2 days
Becoming an Effective Leader: for Aspiring Leaders
London October 27-28, 2020 2 days
Developing your Core Consulting Skills
London September 22-24, 2020 3 days
School: Cass Business School


The perfect hoop gets a dose of texture on the Nebula Hoop. Wear this statement sized hoop with everything.
Textured, ball hoop that are 14k gold plated over brass. Hoop is 2 1/4" wide.
NBJ Tip: Pair with our Stellar ear cuff in gold.


text:
Climate Man-Made
Climate Change: We Fail To Limit Greenhouse Gases
by: Peter Sant May 26 2018
Suppose we do not reduce our emissions of greenhouse gases (and currently we are still there more and more instead of emitting less), than by 2084, the average temperature on our planet will have risen by four degrees compared to the pre-industrial era. Four degrees does not seem like much, but it is a disastrous prospect. In such a scenario, the major cities along the world's coasts have already become uninhabitable, which will result in hundreds of millions of climate refugees.
Recommended: Fossil Fuel Will Dominate Energy Use Through 2050
Climate Change: Greenhouse Gass Reduction Is Hard
The number of forest fires will increase dramatically, also in our regions, wherein such a scenario the climate will be very similar to the current one in Marrakech, for example. Heatwaves with temperatures of 45 degrees are all the new ones.
Until those four degrees in 2084, Chinese researchers will come in the journal Advances in Atmospheric Sciences. They rely on no fewer than 39 climate models from the Coupled Model Intercomparison Project (CMIP). This research project is aimed at the development and assessment of climate models and should eventually lead to the most accurate climate simulations possible.
The research shows that most models predict that the earth is already four degrees warmer before the end of this century than in pre-industrial times (assuming that we do not reduce our emissions). The models predict that the temperature rise of 4 degrees Celsius in 2084 is a fact.
Four degrees does not seem like much, but it is a disastrous prospect. In such a scenario, the major cities along the world's coasts have already become uninhabitable, which will result in hundreds of millions of climate refugees.
Climate Change Could Bring Hell On Earth
It is also a scenario in which all the ice that is still trapped in glaciers or on the poles begins to melt very quickly. That will ultimately increase the sea level by more than 50 meters. And it goes fast: count on a meter every 20 years. The number of forest fires will increase dramatically, also in our regions, wherein such a scenario the climate will be very similar to the current one in Marrakech, for example. Heatwaves with temperatures of 45 degrees are all the new ones.
It also means that an average summer day will be as warm as a day during the worst heat waves we now know. With four-degree warming, countries such as Spain and Italy become primarily uninhabitable, which will provide a new flow of refugees towards Scandinavia and the Baltic states, for example.
It is essential to realize that once climate warming has started, it will continue for centuries, whatever measures you take. It is also true that non-linear effects ensure that 4 ° heating is not merely twice as bad as 2 degrees of warming.
At four degrees, we also ended up in what is called a runaway climate scenario. The world's permafrost will pump more than 500 billion tons of CO2 into our atmosphere. That has happened in the past, and it has completely changed our planet.
The Lessons From 55 Million Years Ago
There will be no more ice at the poles, rain forests have been burned down and turned into desert, the Alps will look like the Atlas Mountains now. We end up in a situation that the earth already experienced 55 million years ago, during the Eocene.
The average temperature rose to 7 ° C at higher latitudes in barely 20,000 years, one of the fastest and largest climatic changes in geological history. The climate change caused a mass extinction - the name of it, the Grande Coupure, says everything.
The most accepted explanation of how this could be done is: as a result of the gradual warming during the Late Paleocene, the temperature of the seawater rose above a particular critical value, causing gas hydrates on the ocean floor to dissolve massively, releasing large amounts of methane into the atmosphere.
The new study of Chinese is very bad news, especially when you consider that politicians are currently still working on agreements that should lead to global warming to 2 and possibly even 1.5 degrees Celsius. Limited.
No Effective Plan That Leads To A Drastic Reduction Of Greenhouse Gas Emissions.
Methane is a powerful greenhouse gas (twenty times as effective as carbon dioxide), and that would suddenly have accelerated the warming of the climate. Here is another interesting fact: the gradual warming that led to this in the Late Paleocene went 30 times slower than what we are going through.
In most models for the current global warming, no account is taken of the release of gas hydrates as a reinforcing factor. But, one thing is sure: if it happens, the earth will become unviable for man.
Methane bubbles trapped in ice.
The new study of Chinese is very bad news, especially when you consider that politicians are currently still working on agreements that should lead to global warming to 2 and possibly even 1.5 degrees Celsius. Limited. Although almost all countries on earth - except the US - have decided to do so, there is no effective plan that leads to a drastic reduction of greenhouse gas emissions.
What this research shows is how much time is required. Because within a few decades - according to some models in 2064 already - we will have passed the goal of the Paris climate agreement.
Recommended: Climate Change: How Coffee Destroys The Earth
Climate Change Models Problems
Politicians, interest groups such as the fossil fuel sector, and climate negationists have used the uncertainty inherent in climate models to raise doubts about climate change or to argue against strong policy measures.
But climate models are vital tools for scientists who try to understand the impact of greenhouse gas emissions. They are built based on fundamental knowledge of the physics and climate of the world.
The climate system, however, is incredibly complex, and as a result, there is disagreement about how to best model the most important aspects of it. An additional challenge is that the climate changes faster than the models improve because events occur in the real world that the models did not predict. This is how Arctic sea ice melts more quickly than the models can explain.
The result of this study, which bundles 39 of the most advanced models, is therefore extra relevant.
Recommended: A Floating Airport Cutting Edge Madness Or Visionary?
Did you find this an interesting article, or do you have a question or remark? Leave a comment below. We try to respond the same day.
Like to write your article about climate change?
Education Matters: Climate Change For Kids
Climate Change: Groundwater An Out-Of-Sight Crisis
Climate Change Fought By The Kingdom of Bhutan
Posted by: Peter Sant May 26 2018 0 Comments Report Post Post Reported undo report
Being involved in sustainability activities has changed my view on this subject a lot. Climate change and pollution are borderless and thus solutions and information has to be shared globally. Rich, 'developed' countries have to start supporting countries that don't have the means and knowledge to improve their situation. Sustainability movement is as strong as its weakest link - whatsorb.com is a helpful platform to speed up the X-Change of Global Sustainability.
By Peter Sant
Suppose we do not reduce our emissions of greenhouse gases (and currently we are still there more and more instead of emitting less), than by 2084, the average temperature on our planet will have risen by four degrees compared to the pre-industrial era. Four degrees does not seem like much, but it is a disastrous prospect. In such a scenario, the major cities along the world's coasts have already become uninhabitable, which will result in hundreds of millions of climate refugees. Recommended:  Fossil Fuel Will Dominate Energy Use Through 2050 Climate Change: Greenhouse Gass Reduction Is Hard The number of forest fires will increase dramatically, also in our regions, wherein such a scenario the climate will be very similar to the current one in Marrakech, for example. Heatwaves with temperatures of 45 degrees are all the new ones. Until those four degrees in 2084, Chinese researchers will come in the journal Advances in Atmospheric Sciences. They rely on no fewer than 39 climate models from the Coupled Model Intercomparison Project (CMIP). This research project is aimed at the development and assessment of climate models and should eventually lead to the most accurate climate simulations possible. The research shows that most models predict that the earth is already four degrees warmer before the end of this century than in pre-industrial times (assuming that we do not reduce our emissions). The models predict that the temperature rise of 4 degrees Celsius in 2084 is a fact. Four degrees does not seem like much, but it is a disastrous prospect. In such a scenario, the major cities along the world's coasts have already become uninhabitable, which will result in hundreds of millions of climate refugees. Climate Change Could Bring Hell On Earth It is also a scenario in which all the ice that is still trapped in glaciers or on the poles begins to melt very quickly. That will ultimately increase the sea level by more than 50 meters. And it goes fast: count on a meter every 20 years. The number of forest fires will increase dramatically, also in our regions, wherein such a scenario the climate will be very similar to the current one in Marrakech, for example. Heatwaves with temperatures of 45 degrees are all the new ones. It also means that an average summer day will be as warm as a day during the worst heat waves we now know. With four-degree warming, countries such as Spain and Italy become primarily uninhabitable, which will provide a new flow of refugees towards Scandinavia and the Baltic states, for example. It is essential to realize that once climate warming has started, it will continue for centuries, whatever measures you take. It is also true that non-linear effects ensure that 4 ° heating is not merely twice as bad as 2 degrees of warming. At four degrees, we also ended up in what is called a runaway climate scenario. The world's permafrost will pump more than 500 billion tons of CO2 into our atmosphere. That has happened in the past, and it has completely changed our planet. The Lessons From 55 Million Years Ago There will be no more ice at the poles, rain forests have been burned down and turned into desert, the Alps will look like the Atlas Mountains now. We end up in a situation that the earth already experienced 55 million years ago, during the Eocene. The average temperature rose to 7 ° C at higher latitudes in barely 20,000 years, one of the fastest and largest climatic changes in geological history. The climate change caused a mass extinction - the name of it, the Grande Coupure, says everything. The most accepted explanation of how this could be done is: as a result of the gradual warming during the Late Paleocene, the temperature of the seawater rose above a particular critical value, causing gas hydrates on the ocean floor to dissolve massively, releasing large amounts of methane into the atmosphere. The new study of Chinese is very bad news, especially when you consider that politicians are currently still working on agreements that should lead to global warming to 2 and possibly even 1.5 degrees Celsius. Limited. No Effective Plan That Leads To A Drastic Reduction Of Greenhouse Gas Emissions. Methane is a powerful greenhouse gas (twenty times as effective as carbon dioxide), and that would suddenly have accelerated the warming of the climate. Here is another interesting fact: the gradual warming that led to this in the Late Paleocene went 30 times slower than what we are going through. In most models for the current global warming, no account is taken of the release of gas hydrates as a reinforcing factor. But, one thing is sure: if it happens, the earth will become unviable for man. Methane bubbles trapped in ice. The new study of Chinese is very bad news, especially when you consider that politicians are currently still working on agreements that should lead to global warming to 2 and possibly even 1.5 degrees Celsius. Limited. Although almost all countries on earth - except the US - have decided to do so, there is no effective plan that leads to a drastic reduction of greenhouse gas emissions. What this research shows is how much time is required. Because within a few decades - according to some models in 2064 already - we will have passed the goal of the Paris climate agreement. Recommended:  Climate Change: How Coffee Destroys The Earth Climate Change Models Problems Politicians, interest groups such as the fossil fuel sector, and climate negationists have used the uncertainty inherent in climate models to raise doubts about climate change or to argue against strong policy measures. But climate models are vital tools for scientists who try to understand the impact of greenhouse gas emissions. They are built based on fundamental knowledge of the physics and climate of the world. The climate system, however, is incredibly complex, and as a result, there is disagreement about how to best model the most important aspects of it. An additional challenge is that the climate changes faster than the models improve because events occur in the real world that the models did not predict. This is how Arctic sea ice melts more quickly than the models can explain. The result of this study, which bundles 39 of the most advanced models, is therefore extra relevant. Before you go! Recommended:  A Floating Airport Cutting Edge Madness Or Visionary? Did you find this an interesting article, or do you have a question or remark? Leave a comment below. We try to respond the same day. Like to write your article about climate change? Click on  'Register'  or push the button 'Write An Article' on the  'HomePage.'


text:
Tupi-Kawahíb (Kagwahiva, Kagwahiv, Kawaib), zbirno ime nizu manjih skupina Tupí Indijanaca nastanjenih u području brazilske države Rondônia, poglavito uz rijeku Machado. Tupi-Kawahib podrijetlo vuku od starog plemena Cabahyba koje se raspalo napadima drugog Tupian plemena, Mundurucu Indijanaca, pa su se podijelili na skupine Tupi-Kawahiba ili Cawahíb i Parintintin, smatra Levi-Strauss, ali moguće i na ostale grupe koje sebe nazivaju imenom Cavahiba, Cabaiba, Cabahiba, Kawahib, Kagwahív, koja u njihovom jeziku znači mi ili nas, to su: Amondawa (Amundáwa), Diahói (Jahói), Júma, Karipuna, Parintintin, Tukumanféd, Morerebi, Apiaká, Uru-Eu-Wau-Wau.  Unutar Tupi-Kawahiba (govore tenyarín, tenharim) nalazimo niz lokalnih skupina koje govore srodnim dijalektima, na žalost neke skupine su nestale prije nego što se uspjelo doći s njima u bliži kontakt, a takva je bila i skupina s Igarape de Itapici. Podatke što znanost ima o Tupi-Kawahibima, zahvaljuje francuskom znanstveniku Claude Lévi-Straussu, koji dolaze u kontakt s nekim skupinama, navodi njihova imena i piše o njihovom načinu života.

Kod pravih Tupi-Kawahiba nalazimo različite lokalne skupine koje sebe poglavito nazivaju različitim varijantama imenea Kawahib: Kagwahiva, Kagwahibm, Kagwahiv, Kawahip, Kavahiva, Kawaib, Kagwahiph.
Amundáwa,
Boca Negra (?)
Diahói
Ipotuát ili Ipotewát
Jabutiféd (Yabutiféd)
Júma,
Karipuna Jaci Paraná
Mialat (Mialát)
Morerebi (?)
Paranawat (Paranauat),
Parintintín, također porijeklom od starih kawahiba (Cabahiba)
Pawaté,
Takwatíb
Tukumanféd
Tenharim
Uru-Eu-Wau-Wau
Wiraféd (Uirafed),

Etnografija
Tupi-Kawahíbi su tipični stanovnici kišne šume podijeljeni na niz manjih skupina koje se bave lovom i sakupljanjem. Odjeća Tupi-Kawahiba je oskudna, kod muškaraca se sastoji od konične navlake za ud, jednostavnijim, nego što je dekorirani bá Orarimugudoge Indijanaca iz područja Pantanala. -Kod žena se javlja pamučna pregača i jako stegnute vrpce oko podlaktica i nožnih listova, ogrlice od zubi tapira ili pločice od srndaćevih kostiju. Obraze tetoviraju sokom od genipea, od ušne šupljine do spoja usnica, naglašena s četiri vodoravne linije, jedna iznad druge, svaka odozdo urešena resicom od malih lukova. Kosu žene uglavnom nose kratku, začešljanu gustim češljem od drvenih štapića, povezanih pamučnim koncem.

O kućama

Tupi-Kawahibe otkriva istraživač i geograf, Brazilac Cândido Mariano da Silva Rondon rođen (1865 - 1958) u Mato Grossu. Rondon pacifizira cijeli niz plemena, od kojih su najpoznatiji Boróro, Paranawát, Urumí, Arikén, Rama-Rama, Urubu, Parintintin, Xavante i drugi. Rondon na Igarape do Leitâo (potok prasećeg mlijeka), otkriva skupinu Takwatip ('one od bambusa'), čiji je poglavica bio Abaitara, i još nekoliko skupina. Ove skupine Kawahiba općenito žive u jednom selu i imaju granicama određena lovišta koja se ljubomorno čuvaju. Kuće su im u vrijeme dolaska Rondona već bile kvadratnog oblika, s visokim krovom na dva nagiba. U unutrašnjosti su jedini namještaj viseći ležaji (hamak), izrađeni od pamučne pređe. posuđe se sastoji od zemljanih lonaca i tikava, nadalje drvene stupe, strugače za manioku i zdjela za sušenje kukuruzne i maniokove jezgre, vretena, pletena sita.
Luk je dug otprilike 1,70 m., a strelica ima nekoliko tipova:
strelice za lov s kopljastim vršcima od bambusa; drugi tip je za rat, sa zupčastim vrškom poput pile i za ribolov s više vršaka.
Od glazbenih instrumenata Tupi-Kawahibi su poznavali (Lévi-Strauss) panovu frulu s trinaest cijevi i flažolete s četiri rupe.

O imenima -Indijanci Mialat i Takwatíp

Tupi-Kawahibi pokazuju svoje srodstvo sa starim Tupijima i u mnogim običajima, kao i u materijalnoj kulturi. Putnici koji su u 16. stoljeću susretali Tupije govore o običajima da ime nije tajno, kao što ga pred nepoznatima sakrivaju Nambikwara Indijanci. Stari Tupi su zato mijenjali svoje svaki puta kada bi ubili neprijatelja. Isto kod Tupi-Kawahiba nalazi i Lévi-Strauss, koji spominje izvjesnog Tupi-Kawahiba pod imenom Karamua, koji se zove i Janaku, razlog promijene imena je što je ubio neprijatelja. Ime se mijenja i kod prijelaza iz uzrasta u uzrast, tako iz djetinjeg doba u dječačko, paiz dječačkog u zrelo doba. Skupine Tupi-Kawahiba svoja imena, izvode iz jednog korijena, poželjno je da taj naziv može donesti sreću. Lévi-Strauss ovdje osobna imena izučava na Mialat Indijancima, 'onima od vepra', koji su se ženili s Paranawatima i Takwatipima, i pripadnicima još nekih drugih skupina. Kod Indijanaca Takwatip ime se izvodilo iz eponima: Takwame, Takwarume, Takwari, Walera i Karamua.
Žene svoja imena dobivaju po pticama, ribama i voću, ako je njezin muž ubio nekog protivnika, onda i ona zajedno s njime mora promijeniti svoje ime.

Mnogoženstvo

Tupi-Kawahibi su poligamni, a najviše prava na žene u skupini uzima si poglavica, koji ima po nekoliko žena.

Duhan i piće kaui

Svoje srodstvo sa starim Tupijima Tupi-Kawahibi pokazuju i u običaju izrade nekog pića što se proizvodi od chiche kukuruza, koje nastaje fermentacijom kukuruza kojeg žene žvaču i pljuju u posebne posude. Fermentaciju je izazivala slina žene. ovo piće Tupi su nazivali cahuin, a Tupi-Kawahibi ga nazivaju kaui. Kod starih Tupija, pišu putnici iz 16. stoljeća, posude za držanje cahuina bile su visoke poput čovjeka. Indijanci se koriste svakom prilikom da bi se počastili kauijem, a sanjom se ponudi i gost.

Duhan je u većini slučajeva kod Indijanaca jedna od najpoštovanijih kultura i svetih biljaka. Kod sjevernoameričkih Takelma iz Oregona, duhan je jedina biljka koju su uzgojili. kod Indijanaca Northern Arapaho, kaže John G. Carter,  Flat Pipe u religiji zauzima mjesto čak iznad Sunca. Ipak ima iznimaka i kod Indijanaca, Tupi-Kawahibi se veoma rasrde kada ugledaju pušače i otimaju im cigarete iz usta i gaze ih, nazivajući ga pogrdnim imenima (ianeapit). Oni i Parintintini, drugo pleme nastalo raspadom starih Cabahiba, duhan niti uzgajaju, niti ga troše. Naziv za njega imaju, a to je tabak, ista riječ koju su koristili Indijanci na Antilima, i koji je možda porijeklom iz karipskog jezika, i koji se očuvao u nekim indoeuropskim nazivima.

Nim

Kulturne veze sa starim Tupijima kod Tupi-Kawahiba nalazimo i u još jednoj napravi poznatoj kao nim.  Nim je naprava izrađena od zašiljenog bambusa zabijenog u zemlju i zamaskiranog listom, koje se postavljaju po skrivenim indijanskim stazama koje vode u selo, kako bi na njega nagazila noga neželjenog gosta, odnosno neprijatelja. Tod Tupi-Kawahiba, ova primitivna ali opasna indijanska 'mina', poznata je pod imenom nim. Imali su je i stari Tupi, ali je bila znatno veća.

Literatura
Claude Levi-Strauss, Tristes tropiques

Vanjske poveznice
Tristes Tropiques

Brazilski Indijanci
indijanska plemena

redpajama_set_name: RedPajamaWikipedia


text:
Q: How to solve the diffiusion eqauation when $D$ is not constant How to solve the diffusion equation when $D=D(x,t)\;?$
I have to solve this differential equation with $x\in[0,a]$:
$\dfrac{\partial \phi(x,t)}{\partial t}=\dfrac{\partial}{\partial x}\left(D(x,t)\dfrac{\partial \phi(x,t)}{\partial x}\right)
=\dfrac{\partial D(x,t)}{\partial x}\dfrac{\partial \phi(x,t)}{\partial x}+D(x,t)\dfrac{\partial^2 \phi(x,t)}{\partial x^2}$
IC: $\phi(x,0)=\phi_0$.
BC1: $D(x,t)\dfrac{\partial \phi(x,t)}{\partial x}=M_A\cdot \phi(x,t)$, for $x=a$, where $M_A$ is a constant.
BC2: $|\phi(0,t)|<\infty$.
I can solve this equation if I solve this other equation:
$$a_2(x)y''+a_1(x)y'(x)+a_0(x)y=0$$
where $a_i(x)>0$.


Dubai Cruise Terminal at Port Rashid is the main destination for cruise liners from where they either start their journey or use it as their port-of-call.
This terminal opened in Dubai in the year 2001 and is spread over an expansive area of 3,300 sq.mtr. It is able to handle two ships simultaneously with an added advantage of bringing in larger ships.
The Deep basin of the port, minimum bureaucracy, good infrastructure, top-notch cruises lining at the port and professional ground handling has made it increasingly popular among tourists.
Address: PO Box 17000. Dubai United Arab Emirates.


Given the already rising costs of long retirements, millennials will need to start saving as soon as possible to realize their goals.
Unemployment is still high among millennials, but that number is falling, and youth around the country are finding gainful employment in droves. What's more, many of them have lofty expectations for retirement, in spite of the crisis occurring among their parents' generation. An ongoing Gallup poll has shown that roughly a quarter of U.S. citizens between 18 and 29 still expect to retire by age 65, fifteen percent between 60 and 64 and 11 percent before 55.
Given the already rising costs of long retirements, millennials will need to start saving as soon as possible to realize these goals. Some younger Boomers are successfully playing catch-up on their retirement accounts, but that may not be possible for younger workers who expect to maintain comfortable lifestyles during decades-long retirements. For advisors, this group's need to save smart, save early and learn the ins and outs of comprehensive financial planning represents an enormous opportunity.
A lack of education is perhaps millennials' greatest roadblock in planning and investing for retirement. "Very few colleges even provide personal financial programs, and about 65 percent of students report misunderstanding their student loans," said Laura Forth, managing director of College CFO. In fact, millennials scored an average of just 69 percent on a financial literacy test put out by the Department of the Treasury and Department of Education. A Brookings Institute study even found that 14 percent of debt-holding students didn't know they had taken on debt, and that 48 percent didn't know how much they had paid for their first year of college.
For advisors, this knowledge gap is a great opportunity to educate and empower younger clients. "Personal financial literacy is a measure of success, and less financial stress makes you more productive," Forth said. Teaching millennials the basics of debt, credit and investing will help them to make the right choices for retirement, but it may also improve their long-term earnings potential and ability to save.
Conventional wisdom says to take more risk earlier in life and less close to retirement, but that advice doesn't always resonate with a generation that saw the effects of the 2008 crash firsthand. "We tend to be pretty conservative with millennials because it's often their first time investing," said Forth. "Without a lot of cash flow, even a little bit allocated to a 401(k) or IRA doesn't leave much to play with, and a high risk assessment doesn't usually sit well with them." A UBS Investor Watch report found that on average, millennials hold more than half of their assets in cash and less than a third in stocks. Despite being far closer to retirement, their Generation X and Boomer counterparts hold just 23 percent in cash and 46 percent in stocks.
Still, a lack of education may be what's really holding young investors back. "Millennials are hesitant on investments in general because they don't understand the basics," said Mary Beth Storjohann, Workable Wealth founder and CEO. "I don't think there's mistrust in terms of losing money, they just second-guess their decisions because they're not sure what they're doing. I don't have a lot of my clients in fixed income." In response to this uncertainty, Storjohann strives to educate younger clients and still recommend equities over bonds to provide the greatest potential for growth.
Where exactly should millennials put their money? "On the whole, the investment vehicles they use are going to be pretty similar to the ones Boomers use," said Alan Ness, CFP with Fieldstone Financial. "The allocation will simply vary based on time horizon and risk preference." Forth and Roberge both tend to recommend index funds within 401(k)s and in some cases IRAs. "I don't care how old you are, I think an index fund, broad-based, low cost and great for long-term investing, should be part of your portfolio," said Roberge.
These options are still available to the myriad millennials who are underemployed, working lower-paying jobs that have little or nothing to do with their college majors. While they don't have much to save, their current employers may still offer 401(k)s, and almost anyone can open an IRA on their own. "It never hurts to pay yourself first and learn the principles of cash management in the process," said Ness. Even double-digit monthly contributions will compound over time, and savers will already have good habits in place once they find better jobs.
Even if millennials can't count on Social Security or pensions – and even though their current attitudes towards the market are grim – the one thing they definitely have on their side is time. "With younger folks, their most valuable asset is their future earnings potential," said Ness. Combined with the right education and mindset, decades of planning and investment should allow them to avoid another retirement crisis and set themselves up for comfortable lives in old age.


Preheat oven to 325�. Grease a 13x9-inch baking pan.
Prepare cake mix according to directions. Stir in cinnamon and bananas.
Pour cake mixture into prepared baking pans. Top with walnuts.
Bake for 30 minutes or until wooden pick inserted in center comes out clean. Remove from oven, and drizzle top of cake with honey.


text:
Q: How to implement complex queries with a REST api? I'm building an EmberJS app using ember-data.
Some of the functionality in my app requires quite complex queries.
As an example, let's say I have three entities - students, teachers and classes. If I wanted to get a list of all the students born before 1993 that are taking classes taught by teacher X, how can I do that with a RESTful api? In plain SQL it's easy enough, but I'm unsure of the best practice for implementing this into my API.
Do I need to build a custom endpoint alongside my basic REST api?
So I'd still have:
GET /students (which returns all the students)
GET /students/{id} (which returns a specific student)
etc

But then implement the following for my 'custom' query:
GET /students/custom/born_before/{date}/taught_by/{teacher_id}

Or is there a more standardized way of doing this?

A: You can transform your
GET /students/custom/born_before/{date}/taught_by/{teacher_id}

into
GET /students/?born_before={date}&taught_by={teacher_id}

which is just a "query by example" option: you can populate a model instance with the provided fields and make a query using them. The less fields, the broader is the search and more results to show.
This is the way JIRA's API works, for example.

A: One option is to have a search endpoint on your students that you can post to.
So you might have:
POST /students/filter

The filter object that you'd POST would look something like:
{ BornBefore:1993, TaughtBy:123 }

I've also seen an option where instead of posting that, the API had a filter, and then used a query string.
I prefer the first one myself. Especially if it can be a long running process, because your POST could return an ID and/or a rel link to the API call the client should use to get status updates and get the results.
So then you'd POST /Students/filter and it would respond back with rel of /Students/Filter/123 and your client would do periodic GET's on /Students/Filter/123 until it got the result object. Of course, for simple, short queries, you could just instantly return the result. But if it was going to take more than a second or two you could go this route.
This book by O'Reilly has some good information on structuring ReSTful APIs.