text:
#pragma once

#include <chrono>
#include <thread>

#include <folly/experimental/fibers/Baton.h>
#include <folly/Optional.h>
#include <folly/futures/detail/Core.h>
#include <folly/futures/Timekeeper.h>

namespace folly {

class Timekeeper;

namespace detail {
  Timekeeper* getTimekeeperSingleton();
}

template <class T>
Future<T>::Future(Future<T>&& other) noexcept : core_(other.core_) {
  other.core_ = nullptr;
}

template <class T>
Future<T>& Future<T>::operator=(Future<T>&& other) noexcept {
  std::swap(core_, other.core_);
  return *this;
}

template <class T>
template <class T2, typename>
Future<T>::Future(T2&& val)
  : core_(new detail::Core<T>(Try<T>(std::forward<T2>(val)))) {}

template <class T>
template <typename, typename>
Future<T>::Future()
  : core_(new detail::Core<T>(Try<T>(T()))) {}

template <class T>
Future<T>::~Future() {
  detach();
}

template <class T>
void Future<T>::detach() {
  if (core_) {
    core_->detachFuture();
    core_ = nullptr;
  }
}

template <class T>
void Future<T>::throwIfInvalid() const {
  if (!core_)
    throw NoState();
}

template <class T>
template <class F>
void Future<T>::setCallback_(F&& func) {
  throwIfInvalid();
  core_->setCallback(std::move(func));
}

// unwrap

template <class T>
template <class F>
typename std::enable_if<isFuture<F>::value,
                        Future<typename isFuture<T>::Inner>>::type
Future<T>::unwrap() {
  return then([](Future<typename isFuture<T>::Inner> internal_future) {
      return internal_future;
  });
}

// then

// Variant: returns a value
// e.g. f.then([](Try<T>&& t){ return t.value(); });
template <class T>
template <typename F, typename R, bool isTry, typename... Args>
typename std::enable_if<!R::ReturnsFuture::value, typename R::Return>::type
Future<T>::thenImplementation(F func, detail::argResult<isTry, F, Args...>) {
  static_assert(sizeof...(Args) <= 1, "Then must take zero/one argument");
  typedef typename R::ReturnsFuture::Inner B;

  throwIfInvalid();

  // wrap these so we can move them into the lambda
  folly::MoveWrapper<Promise<B>> p;
  p->core_->setInterruptHandlerNoLock(core_->getInterruptHandler());
  folly::MoveWrapper<F> funcm(std::forward<F>(func));

  // grab the Future now before we lose our handle on the Promise
  auto f = p->getFuture();
  f.core_->setExecutorNoLock(getExecutor());

  /* This is a bit tricky.

     We can't just close over *this in case this Future gets moved. So we
     make a new dummy Future. We could figure out something more
     sophisticated that avoids making a new Future object when it can, as an
     optimization. But this is correct.

     core_ can't be moved, it is explicitly disallowed (as is copying). But
     if there's ever a reason to allow it, this is one place that makes that
     assumption and would need to be fixed. We use a standard shared pointer
     for core_ (by copying it in), which means in essence obj holds a shared
     pointer to itself.  But this shouldn't leak because Promise will not
     outlive the continuation, because Promise will setException() with a
     broken Promise if it is destructed before completed. We could use a
     weak pointer but it would have to be converted to a shared pointer when
     func is executed (because the Future returned by func may possibly
     persist beyond the callback, if it gets moved), and so it is an
     optimization to just make it shared from the get-go.

     We have to move in the Promise and func using the MoveWrapper
     hack. (func could be copied but it's a big drag on perf).

     Two subtle but important points about this design. detail::Core has no
     back pointers to Future or Promise, so if Future or Promise get moved
     (and they will be moved in performant code) we don't have to do
     anything fancy. And because we store the continuation in the
     detail::Core, not in the Future, we can execute the continuation even
     after the Future has gone out of scope. This is an intentional design
     decision. It is likely we will want to be able to cancel a continuation
     in some circumstances, but I think it should be explicit not implicit
     in the destruction of the Future used to create it.
     */
  setCallback_(
    [p, funcm](Try<T>&& t) mutable {
      if (!isTry && t.hasException()) {
        p->setException(std::move(t.exception()));
      } else {
        p->setWith([&]() {
          return (*funcm)(t.template get<isTry, Args>()...);
        });
      }
    });

  return f;
}

// Variant: returns a Future
// e.g. f.then([](T&& t){ return makeFuture<T>(t); });
template <class T>
template <typename F, typename R, bool isTry, typename... Args>
typename std::enable_if<R::ReturnsFuture::value, typename R::Return>::type
Future<T>::thenImplementation(F func, detail::argResult<isTry, F, Args...>) {
  static_assert(sizeof...(Args) <= 1, "Then must take zero/one argument");
  typedef typename R::ReturnsFuture::Inner B;

  throwIfInvalid();

  // wrap these so we can move them into the lambda
  folly::MoveWrapper<Promise<B>> p;
  p->core_->setInterruptHandlerNoLock(core_->getInterruptHandler());
  folly::MoveWrapper<F> funcm(std::forward<F>(func));

  // grab the Future now before we lose our handle on the Promise
  auto f = p->getFuture();
  f.core_->setExecutorNoLock(getExecutor());

  setCallback_(
    [p, funcm](Try<T>&& t) mutable {
      if (!isTry && t.hasException()) {
        p->setException(std::move(t.exception()));
      } else {
        try {
          auto f2 = (*funcm)(t.template get<isTry, Args>()...);
          // that didn't throw, now we can steal p
          f2.setCallback_([p](Try<B>&& b) mutable {
            p->setTry(std::move(b));
          });
        } catch (const std::exception& e) {
          p->setException(exception_wrapper(std::current_exception(), e));
        } catch (...) {
          p->setException(exception_wrapper(std::current_exception()));
        }
      }
    });

  return f;
}

template <typename T>
template <typename R, typename Caller, typename... Args>
  Future<typename isFuture<R>::Inner>
Future<T>::then(R(Caller::*func)(Args...), Caller *instance) {
  typedef typename std::remove_cv<
    typename std::remove_reference<
      typename detail::ArgType<Args...>::FirstArg>::type>::type FirstArg;
  return then([instance, func](Try<T>&& t){
    return (instance->*func)(t.template get<isTry<FirstArg>::value, Args>()...);
  });
}

template <class T>
template <class Executor, class Arg, class... Args>
auto Future<T>::then(Executor* x, Arg&& arg, Args&&... args)
  -> decltype(this->then(std::forward<Arg>(arg),
                         std::forward<Args>(args)...))
{
  auto oldX = getExecutor();
  setExecutor(x);
  return this->then(std::forward<Arg>(arg), std::forward<Args>(args)...).
               via(oldX);
}

template <class T>
Future<Unit> Future<T>::then() {
  return then([] () {});
}

// onError where the callback returns T
template <class T>
template <class F>
typename std::enable_if<
  !detail::callableWith<F, exception_wrapper>::value &&
  !detail::Extract<F>::ReturnsFuture::value,
  Future<T>>::type
Future<T>::onError(F&& func) {
  typedef typename detail::Extract<F>::FirstArg Exn;
  static_assert(
      std::is_same<typename detail::Extract<F>::RawReturn, T>::value,
      "Return type of onError callback must be T or Future<T>");

  Promise<T> p;
  auto f = p.getFuture();
  auto pm = folly::makeMoveWrapper(std::move(p));
  auto funcm = folly::makeMoveWrapper(std::move(func));
  setCallback_([pm, funcm](Try<T>&& t) mutable {
    if (!t.template withException<Exn>([&] (Exn& e) {
          pm->setWith([&]{
            return (*funcm)(e);
          });
        })) {
      pm->setTry(std::move(t));
    }
  });

  return f;
}

// onError where the callback returns Future<T>
template <class T>
template <class F>
typename std::enable_if<
  !detail::callableWith<F, exception_wrapper>::value &&
  detail::Extract<F>::ReturnsFuture::value,
  Future<T>>::type
Future<T>::onError(F&& func) {
  static_assert(
      std::is_same<typename detail::Extract<F>::Return, Future<T>>::value,
      "Return type of onError callback must be T or Future<T>");
  typedef typename detail::Extract<F>::FirstArg Exn;

  Promise<T> p;
  auto f = p.getFuture();
  auto pm = folly::makeMoveWrapper(std::move(p));
  auto funcm = folly::makeMoveWrapper(std::move(func));
  setCallback_([pm, funcm](Try<T>&& t) mutable {
    if (!t.template withException<Exn>([&] (Exn& e) {
          try {
            auto f2 = (*funcm)(e);
            f2.setCallback_([pm](Try<T>&& t2) mutable {
              pm->setTry(std::move(t2));
            });
          } catch (const std::exception& e2) {
            pm->setException(exception_wrapper(std::current_exception(), e2));
          } catch (...) {
            pm->setException(exception_wrapper(std::current_exception()));
          }
        })) {
      pm->setTry(std::move(t));
    }
  });

  return f;
}

template <class T>
template <class F>
Future<T> Future<T>::ensure(F func) {
  MoveWrapper<F> funcw(std::move(func));
  return this->then([funcw](Try<T>&& t) mutable {
    (*funcw)();
    return makeFuture(std::move(t));
  });
}

template <class T>
template <class F>
Future<T> Future<T>::onTimeout(Duration dur, F&& func, Timekeeper* tk) {
  auto funcw = folly::makeMoveWrapper(std::forward<F>(func));
  return within(dur, tk)
    .onError([funcw](TimedOut const&) { return (*funcw)(); });
}

template <class T>
template <class F>
typename std::enable_if<
  detail::callableWith<F, exception_wrapper>::value &&
  detail::Extract<F>::ReturnsFuture::value,
  Future<T>>::type
Future<T>::onError(F&& func) {
  static_assert(
      std::is_same<typename detail::Extract<F>::Return, Future<T>>::value,
      "Return type of onError callback must be T or Future<T>");

  Promise<T> p;
  auto f = p.getFuture();
  auto pm = folly::makeMoveWrapper(std::move(p));
  auto funcm = folly::makeMoveWrapper(std::move(func));
  setCallback_([pm, funcm](Try<T> t) mutable {
    if (t.hasException()) {
      try {
        auto f2 = (*funcm)(std::move(t.exception()));
        f2.setCallback_([pm](Try<T> t2) mutable {
          pm->setTry(std::move(t2));
        });
      } catch (const std::exception& e2) {
        pm->setException(exception_wrapper(std::current_exception(), e2));
      } catch (...) {
        pm->setException(exception_wrapper(std::current_exception()));
      }
    } else {
      pm->setTry(std::move(t));
    }
  });

  return f;
}

// onError(exception_wrapper) that returns T
template <class T>
template <class F>
typename std::enable_if<
  detail::callableWith<F, exception_wrapper>::value &&
  !detail::Extract<F>::ReturnsFuture::value,
  Future<T>>::type
Future<T>::onError(F&& func) {
  static_assert(
      std::is_same<typename detail::Extract<F>::Return, Future<T>>::value,
      "Return type of onError callback must be T or Future<T>");

  Promise<T> p;
  auto f = p.getFuture();
  auto pm = folly::makeMoveWrapper(std::move(p));
  auto funcm = folly::makeMoveWrapper(std::move(func));
  setCallback_([pm, funcm](Try<T> t) mutable {
    if (t.hasException()) {
      pm->setWith([&]{
        return (*funcm)(std::move(t.exception()));
      });
    } else {
      pm->setTry(std::move(t));
    }
  });

  return f;
}

template <class T>
typename std::add_lvalue_reference<T>::type Future<T>::value() {
  throwIfInvalid();

  return core_->getTry().value();
}

template <class T>
typename std::add_lvalue_reference<const T>::type Future<T>::value() const {
  throwIfInvalid();

  return core_->getTry().value();
}

template <class T>
Try<T>& Future<T>::getTry() {
  throwIfInvalid();

  return core_->getTry();
}

template <class T>
Optional<Try<T>> Future<T>::poll() {
  Optional<Try<T>> o;
  if (core_->ready()) {
    o = std::move(core_->getTry());
  }
  return o;
}

template <class T>
inline Future<T> Future<T>::via(Executor* executor, int8_t priority) && {
  throwIfInvalid();

  setExecutor(executor, priority);

  return std::move(*this);
}

template <class T>
inline Future<T> Future<T>::via(Executor* executor, int8_t priority) & {
  throwIfInvalid();

  MoveWrapper<Promise<T>> p;
  auto f = p->getFuture();
  then([p](Try<T>&& t) mutable { p->setTry(std::move(t)); });
  return std::move(f).via(executor, priority);
}

template <class Func>
auto via(Executor* x, Func func)
  -> Future<typename isFuture<decltype(func())>::Inner>
{
  // TODO make this actually more performant. :-P #7260175
  return via(x).then(func);
}

template <class T>
bool Future<T>::isReady() const {
  throwIfInvalid();
  return core_->ready();
}

template <class T>
bool Future<T>::hasValue() {
  return getTry().hasValue();
}

template <class T>
bool Future<T>::hasException() {
  return getTry().hasException();
}

template <class T>
void Future<T>::raise(exception_wrapper exception) {
  core_->raise(std::move(exception));
}

// makeFuture

template <class T>
Future<typename std::decay<T>::type> makeFuture(T&& t) {
  return makeFuture(Try<typename std::decay<T>::type>(std::forward<T>(t)));
}

inline // for multiple translation units
Future<Unit> makeFuture() {
  return makeFuture(Unit{});
}

template <class F>
auto makeFutureWith(F&& func)
    -> Future<typename Unit::Lift<decltype(func())>::type> {
  using LiftedResult = typename Unit::Lift<decltype(func())>::type;
  return makeFuture<LiftedResult>(makeTryWith([&func]() mutable {
    return func();
  }));
}

template <class T>
Future<T> makeFuture(std::exception_ptr const& e) {
  return makeFuture(Try<T>(e));
}

template <class T>
Future<T> makeFuture(exception_wrapper ew) {
  return makeFuture(Try<T>(std::move(ew)));
}

template <class T, class E>
typename std::enable_if<std::is_base_of<std::exception, E>::value,
                        Future<T>>::type
makeFuture(E const& e) {
  return makeFuture(Try<T>(make_exception_wrapper<E>(e)));
}

template <class T>
Future<T> makeFuture(Try<T>&& t) {
  return Future<T>(new detail::Core<T>(std::move(t)));
}

// via
Future<Unit> via(Executor* executor, int8_t priority) {
  return makeFuture().via(executor, priority);
}

// mapSetCallback calls func(i, Try<T>) when every future completes

template <class T, class InputIterator, class F>
void mapSetCallback(InputIterator first, InputIterator last, F func) {
  for (size_t i = 0; first != last; ++first, ++i) {
    first->setCallback_([func, i](Try<T>&& t) {
      func(i, std::move(t));
    });
  }
}

// collectAll (variadic)

template <typename... Fs>
typename detail::CollectAllVariadicContext<
  typename std::decay<Fs>::type::value_type...>::type
collectAll(Fs&&... fs) {
  auto ctx = std::make_shared<detail::CollectAllVariadicContext<
    typename std::decay<Fs>::type::value_type...>>();
  detail::collectVariadicHelper<detail::CollectAllVariadicContext>(
    ctx, std::forward<typename std::decay<Fs>::type>(fs)...);
  return ctx->p.getFuture();
}

// collectAll (iterator)

template <class InputIterator>
Future<
  std::vector<
  Try<typename std::iterator_traits<InputIterator>::value_type::value_type>>>
collectAll(InputIterator first, InputIterator last) {
  typedef
    typename std::iterator_traits<InputIterator>::value_type::value_type T;

  struct CollectAllContext {
    CollectAllContext(int n) : results(n) {}
    ~CollectAllContext() {
      p.setValue(std::move(results));
    }
    Promise<std::vector<Try<T>>> p;
    std::vector<Try<T>> results;
  };

  auto ctx = std::make_shared<CollectAllContext>(std::distance(first, last));
  mapSetCallback<T>(first, last, [ctx](size_t i, Try<T>&& t) {
    ctx->results[i] = std::move(t);
  });
  return ctx->p.getFuture();
}

// collect (iterator)

namespace detail {

template <typename T>
struct CollectContext {
  struct Nothing { explicit Nothing(int n) {} };

  using Result = typename std::conditional<
    std::is_void<T>::value,
    void,
    std::vector<T>>::type;

  using InternalResult = typename std::conditional<
    std::is_void<T>::value,
    Nothing,
    std::vector<Optional<T>>>::type;

  explicit CollectContext(int n) : result(n) {}
  ~CollectContext() {
    if (!threw.exchange(true)) {
      // map Optional<T> -> T
      std::vector<T> finalResult;
      finalResult.reserve(result.size());
      std::transform(result.begin(), result.end(),
                     std::back_inserter(finalResult),
                     [](Optional<T>& o) { return std::move(o.value()); });
      p.setValue(std::move(finalResult));
    }
  }
  inline void setPartialResult(size_t i, Try<T>& t) {
    result[i] = std::move(t.value());
  }
  Promise<Result> p;
  InternalResult result;
  std::atomic<bool> threw {false};
};

}

template <class InputIterator>
Future<typename detail::CollectContext<
  typename std::iterator_traits<InputIterator>::value_type::value_type>::Result>
collect(InputIterator first, InputIterator last) {
  typedef
    typename std::iterator_traits<InputIterator>::value_type::value_type T;

  auto ctx = std::make_shared<detail::CollectContext<T>>(
    std::distance(first, last));
  mapSetCallback<T>(first, last, [ctx](size_t i, Try<T>&& t) {
    if (t.hasException()) {
       if (!ctx->threw.exchange(true)) {
         ctx->p.setException(std::move(t.exception()));
       }
     } else if (!ctx->threw) {
       ctx->setPartialResult(i, t);
     }
  });
  return ctx->p.getFuture();
}

// collect (variadic)

template <typename... Fs>
typename detail::CollectVariadicContext<
  typename std::decay<Fs>::type::value_type...>::type
collect(Fs&&... fs) {
  auto ctx = std::make_shared<detail::CollectVariadicContext<
    typename std::decay<Fs>::type::value_type...>>();
  detail::collectVariadicHelper<detail::CollectVariadicContext>(
    ctx, std::forward<typename std::decay<Fs>::type>(fs)...);
  return ctx->p.getFuture();
}

// collectAny (iterator)

template <class InputIterator>
Future<
  std::pair<size_t,
            Try<
              typename
              std::iterator_traits<InputIterator>::value_type::value_type>>>
collectAny(InputIterator first, InputIterator last) {
  typedef
    typename std::iterator_traits<InputIterator>::value_type::value_type T;

  struct CollectAnyContext {
    CollectAnyContext() {};
    Promise<std::pair<size_t, Try<T>>> p;
    std::atomic<bool> done {false};
  };

  auto ctx = std::make_shared<CollectAnyContext>();
  mapSetCallback<T>(first, last, [ctx](size_t i, Try<T>&& t) {
    if (!ctx->done.exchange(true)) {
      ctx->p.setValue(std::make_pair(i, std::move(t)));
    }
  });
  return ctx->p.getFuture();
}

// collectN (iterator)

template <class InputIterator>
Future<std::vector<std::pair<size_t, Try<typename
  std::iterator_traits<InputIterator>::value_type::value_type>>>>
collectN(InputIterator first, InputIterator last, size_t n) {
  typedef typename
    std::iterator_traits<InputIterator>::value_type::value_type T;
  typedef std::vector<std::pair<size_t, Try<T>>> V;

  struct CollectNContext {
    V v;
    std::atomic<size_t> completed = {0};
    Promise<V> p;
  };
  auto ctx = std::make_shared<CollectNContext>();

  if (size_t(std::distance(first, last)) < n) {
    ctx->p.setException(std::runtime_error("Not enough futures"));
  } else {
    // for each completed Future, increase count and add to vector, until we
    // have n completed futures at which point we fulfil our Promise with the
    // vector
    mapSetCallback<T>(first, last, [ctx, n](size_t i, Try<T>&& t) {
      auto c = ++ctx->completed;
      if (c <= n) {
        assert(ctx->v.size() < n);
        ctx->v.emplace_back(i, std::move(t));
        if (c == n) {
          ctx->p.setTry(Try<V>(std::move(ctx->v)));
        }
      }
    });
  }

  return ctx->p.getFuture();
}

// reduce (iterator)

template <class It, class T, class F>
Future<T> reduce(It first, It last, T&& initial, F&& func) {
  if (first == last) {
    return makeFuture(std::move(initial));
  }

  typedef typename std::iterator_traits<It>::value_type::value_type ItT;
  typedef typename std::conditional<
    detail::callableWith<F, T&&, Try<ItT>&&>::value, Try<ItT>, ItT>::type Arg;
  typedef isTry<Arg> IsTry;

  folly::MoveWrapper<T> minitial(std::move(initial));
  auto sfunc = std::make_shared<F>(std::move(func));

  auto f = first->then([minitial, sfunc](Try<ItT>& head) mutable {
    return (*sfunc)(std::move(*minitial),
                head.template get<IsTry::value, Arg&&>());
  });

  for (++first; first != last; ++first) {
    f = collectAll(f, *first).then([sfunc](std::tuple<Try<T>, Try<ItT>>& t) {
      return (*sfunc)(std::move(std::get<0>(t).value()),
                  // Either return a ItT&& or a Try<ItT>&& depending
                  // on the type of the argument of func.
                  std::get<1>(t).template get<IsTry::value, Arg&&>());
    });
  }

  return f;
}

// window (collection)

template <class Collection, class F, class ItT, class Result>
std::vector<Future<Result>>
window(Collection input, F func, size_t n) {
  struct WindowContext {
    WindowContext(Collection&& i, F&& fn)
        : input_(std::move(i)), promises_(input_.size()),
          func_(std::move(fn))
      {}
    std::atomic<size_t> i_ {0};
    Collection input_;
    std::vector<Promise<Result>> promises_;
    F func_;

    static inline void spawn(const std::shared_ptr<WindowContext>& ctx) {
      size_t i = ctx->i_++;
      if (i < ctx->input_.size()) {
        // Using setCallback_ directly since we don't need the Future
        ctx->func_(std::move(ctx->input_[i])).setCallback_(
          // ctx is captured by value
          [ctx, i](Try<Result>&& t) {
            ctx->promises_[i].setTry(std::move(t));
            // Chain another future onto this one
            spawn(std::move(ctx));
          });
      }
    }
  };

  auto max = std::min(n, input.size());

  auto ctx = std::make_shared<WindowContext>(
    std::move(input), std::move(func));

  for (size_t i = 0; i < max; ++i) {
    // Start the first n Futures
    WindowContext::spawn(ctx);
  }

  std::vector<Future<Result>> futures;
  futures.reserve(ctx->promises_.size());
  for (auto& promise : ctx->promises_) {
    futures.emplace_back(promise.getFuture());
  }

  return futures;
}

// reduce

template <class T>
template <class I, class F>
Future<I> Future<T>::reduce(I&& initial, F&& func) {
  folly::MoveWrapper<I> minitial(std::move(initial));
  folly::MoveWrapper<F> mfunc(std::move(func));
  return then([minitial, mfunc](T& vals) mutable {
    auto ret = std::move(*minitial);
    for (auto& val : vals) {
      ret = (*mfunc)(std::move(ret), std::move(val));
    }
    return ret;
  });
}

// unorderedReduce (iterator)

template <class It, class T, class F, class ItT, class Arg>
Future<T> unorderedReduce(It first, It last, T initial, F func) {
  if (first == last) {
    return makeFuture(std::move(initial));
  }

  typedef isTry<Arg> IsTry;

  struct UnorderedReduceContext {
    UnorderedReduceContext(T&& memo, F&& fn, size_t n)
        : lock_(), memo_(makeFuture<T>(std::move(memo))),
          func_(std::move(fn)), numThens_(0), numFutures_(n), promise_()
      {};
    folly::MicroSpinLock lock_; // protects memo_ and numThens_
    Future<T> memo_;
    F func_;
    size_t numThens_; // how many Futures completed and called .then()
    size_t numFutures_; // how many Futures in total
    Promise<T> promise_;
  };

  auto ctx = std::make_shared<UnorderedReduceContext>(
    std::move(initial), std::move(func), std::distance(first, last));

  mapSetCallback<ItT>(first, last, [ctx](size_t i, Try<ItT>&& t) {
    folly::MoveWrapper<Try<ItT>> mt(std::move(t));
    // Futures can be completed in any order, simultaneously.
    // To make this non-blocking, we create a new Future chain in
    // the order of completion to reduce the values.
    // The spinlock just protects chaining a new Future, not actually
    // executing the reduce, which should be really fast.
    folly::MSLGuard lock(ctx->lock_);
    ctx->memo_ = ctx->memo_.then([ctx, mt](T&& v) mutable {
      // Either return a ItT&& or a Try<ItT>&& depending
      // on the type of the argument of func.
      return ctx->func_(std::move(v), mt->template get<IsTry::value, Arg&&>());
    });
    if (++ctx->numThens_ == ctx->numFutures_) {
      // After reducing the value of the last Future, fulfill the Promise
      ctx->memo_.setCallback_([ctx](Try<T>&& t2) {
        ctx->promise_.setValue(std::move(t2));
      });
    }
  });

  return ctx->promise_.getFuture();
}

// within

template <class T>
Future<T> Future<T>::within(Duration dur, Timekeeper* tk) {
  return within(dur, TimedOut(), tk);
}

template <class T>
template <class E>
Future<T> Future<T>::within(Duration dur, E e, Timekeeper* tk) {

  struct Context {
    Context(E ex) : exception(std::move(ex)), promise() {}
    E exception;
    Future<Unit> thisFuture;
    Promise<T> promise;
    std::atomic<bool> token {false};
  };

  if (!tk) {
    tk = folly::detail::getTimekeeperSingleton();
  }

  auto ctx = std::make_shared<Context>(std::move(e));

  ctx->thisFuture = this->then([ctx](Try<T>&& t) mutable {
    // TODO: "this" completed first, cancel "after"
    if (ctx->token.exchange(true) == false) {
      ctx->promise.setTry(std::move(t));
    }
  });

  tk->after(dur).then([ctx](Try<Unit> const& t) mutable {
    // "after" completed first, cancel "this"
    ctx->thisFuture.raise(TimedOut());
    if (ctx->token.exchange(true) == false) {
      if (t.hasException()) {
        ctx->promise.setException(std::move(t.exception()));
      } else {
        ctx->promise.setException(std::move(ctx->exception));
      }
    }
  });

  return ctx->promise.getFuture().via(getExecutor());
}

// delayed

template <class T>
Future<T> Future<T>::delayed(Duration dur, Timekeeper* tk) {
  return collectAll(*this, futures::sleep(dur, tk))
    .then([](std::tuple<Try<T>, Try<Unit>> tup) {
      Try<T>& t = std::get<0>(tup);
      return makeFuture<T>(std::move(t));
    });
}

namespace detail {

template <class T>
void waitImpl(Future<T>& f) {
  // short-circuit if there's nothing to do
  if (f.isReady()) return;

  folly::fibers::Baton baton;
  f = f.then([&](Try<T> t) {
    baton.post();
    return makeFuture(std::move(t));
  });
  baton.wait();

  // There's a race here between the return here and the actual finishing of
  // the future. f is completed, but the setup may not have finished on done
  // after the baton has posted.
  while (!f.isReady()) {
    std::this_thread::yield();
  }
}

template <class T>
void waitImpl(Future<T>& f, Duration dur) {
  // short-circuit if there's nothing to do
  if (f.isReady()) return;

  auto baton = std::make_shared<folly::fibers::Baton>();
  f = f.then([baton](Try<T> t) {
    baton->post();
    return makeFuture(std::move(t));
  });

  // Let's preserve the invariant that if we did not timeout (timed_wait returns
  // true), then the returned Future is complete when it is returned to the
  // caller. We need to wait out the race for that Future to complete.
  if (baton->timed_wait(dur)) {
    while (!f.isReady()) {
      std::this_thread::yield();
    }
  }
}

template <class T>
void waitViaImpl(Future<T>& f, DrivableExecutor* e) {
  while (!f.isReady()) {
    e->drive();
  }
}

} // detail

template <class T>
Future<T>& Future<T>::wait() & {
  detail::waitImpl(*this);
  return *this;
}

template <class T>
Future<T>&& Future<T>::wait() && {
  detail::waitImpl(*this);
  return std::move(*this);
}

template <class T>
Future<T>& Future<T>::wait(Duration dur) & {
  detail::waitImpl(*this, dur);
  return *this;
}

template <class T>
Future<T>&& Future<T>::wait(Duration dur) && {
  detail::waitImpl(*this, dur);
  return std::move(*this);
}

template <class T>
Future<T>& Future<T>::waitVia(DrivableExecutor* e) & {
  detail::waitViaImpl(*this, e);
  return *this;
}

template <class T>
Future<T>&& Future<T>::waitVia(DrivableExecutor* e) && {
  detail::waitViaImpl(*this, e);
  return std::move(*this);
}

template <class T>
T Future<T>::get() {
  return std::move(wait().value());
}

template <class T>
T Future<T>::get(Duration dur) {
  wait(dur);
  if (isReady()) {
    return std::move(value());
  } else {
    throw TimedOut();
  }
}

template <class T>
T Future<T>::getVia(DrivableExecutor* e) {
  return std::move(waitVia(e).value());
}

namespace detail {
  template <class T>
  struct TryEquals {
    static bool equals(const Try<T>& t1, const Try<T>& t2) {
      return t1.value() == t2.value();
    }
  };
}

template <class T>
Future<bool> Future<T>::willEqual(Future<T>& f) {
  return collectAll(*this, f).then([](const std::tuple<Try<T>, Try<T>>& t) {
    if (std::get<0>(t).hasValue() && std::get<1>(t).hasValue()) {
      return detail::TryEquals<T>::equals(std::get<0>(t), std::get<1>(t));
    } else {
      return false;
      }
  });
}

template <class T>
template <class F>
Future<T> Future<T>::filter(F predicate) {
  auto p = folly::makeMoveWrapper(std::move(predicate));
  return this->then([p](T val) {
    T const& valConstRef = val;
    if (!(*p)(valConstRef)) {
      throw PredicateDoesNotObtain();
    }
    return val;
  });
}

template <class T>
template <class Callback>
auto Future<T>::thenMulti(Callback&& fn)
    -> decltype(this->then(std::forward<Callback>(fn))) {
  // thenMulti with one callback is just a then
  return then(std::forward<Callback>(fn));
}

template <class T>
template <class Callback, class... Callbacks>
auto Future<T>::thenMulti(Callback&& fn, Callbacks&&... fns)
    -> decltype(this->then(std::forward<Callback>(fn)).
                      thenMulti(std::forward<Callbacks>(fns)...)) {
  // thenMulti with two callbacks is just then(a).thenMulti(b, ...)
  return then(std::forward<Callback>(fn)).
         thenMulti(std::forward<Callbacks>(fns)...);
}

template <class T>
template <class Callback, class... Callbacks>
auto Future<T>::thenMultiWithExecutor(Executor* x, Callback&& fn,
                                      Callbacks&&... fns)
    -> decltype(this->then(std::forward<Callback>(fn)).
                      thenMulti(std::forward<Callbacks>(fns)...)) {
  // thenMultiExecutor with two callbacks is
  // via(x).then(a).thenMulti(b, ...).via(oldX)
  auto oldX = getExecutor();
  setExecutor(x);
  return then(std::forward<Callback>(fn)).
         thenMulti(std::forward<Callbacks>(fns)...).via(oldX);
}

template <class T>
template <class Callback>
auto Future<T>::thenMultiWithExecutor(Executor* x, Callback&& fn)
    -> decltype(this->then(std::forward<Callback>(fn))) {
  // thenMulti with one callback is just a then with an executor
  return then(x, std::forward<Callback>(fn));
}

namespace futures {
  template <class It, class F, class ItT, class Result>
  std::vector<Future<Result>> map(It first, It last, F func) {
    std::vector<Future<Result>> results;
    for (auto it = first; it != last; it++) {
      results.push_back(it->then(func));
    }
    return results;
  }
}

// Instantiate the most common Future types to save compile time
extern template class Future<Unit>;
extern template class Future<bool>;
extern template class Future<int>;
extern template class Future<int64_t>;
extern template class Future<std::string>;
extern template class Future<double>;

} // namespace folly

redpajama_set_name: RedPajamaGithub


In this video, you'll see how to prep four days' worth of meals in under an hour. Its recommended to only prep for four days at a time, so that your food stays fresh and keeps all of its flavors. Fresh food? Yes, please. Each day includes three main meals along with a couple snacks. And you can easily add or subtract meals and snacks based on your calorie goal, but use this as a starting point. Each of the main meals includes a lean protein, a complex carbohydrate, some healthy fats, and ample vegetables.
And there's good news! When it comes to meal prep, there's no one way to go about it. Thanks to Bodybuilding.com, we've shared some tips to get you started, but it really comes down to what works best for you! Switch up your carbs, proteins, and snacks, to satisfy your inner foodie. And remember, the best meal plan is the meal plan that works for you!
You may also like: Stella Fit | 4 Easy Breakfast Ideas, THE SUITE | Hello Again..., or Stella Fit | 3 Healthy Lunch Ideas on the Go.


text:
Stories from Sunday, September 14, 2014
Endless potential to achieve (Column ~ 09/14/14)
Look, up in the sky! Last week I wrote about Batman and how we each adopt symbols--such as Mr. Wayne's bats--that represent our convictions. This led me to thinking about super-heroes in general--In particular, the most super of super-heroes, Superman. What exactly does Superman represent?...
Heed the signs of a heart problem (Column ~ 09/14/14)
My friend had quite a scare this week. She was sitting at her home computer just playing a game and her left arm and shoulder started hurting really bad. At first she tried to ignore it, like most people do, thinking it would go away. But, it only got worse...
Coming up: Banned Book Week (Column ~ 09/14/14)
Sponsored by the American Library Association, Banned Book Week, Sept. 21-27, celebrates the freedom to read and highlights free and open access to information. Librarians, booksellers, publishers, journalists, teachers and readers of all types join together to support free expression of ideas, even the ones that are unorthodox and unpopular...
Relishing the flavors of fall (Column ~ 09/14/14)
Fall -- ahh -- a breath of fresh, cool, dry air. A welcome relief after the heat of summer. The gardens are winding down from the summer crops and cool season vegetables are taking over while the fall fruits ripen. It is the perfect time for relishes...
Sunday Conversation: Strayhorn advocates for the children (Features ~ 09/14/14)
Wanda Strayhorn is the new executive director of CASA Works Inc. The non-profit organization advocates for abused and neglected children in Bedford, Coffee and Franklin counties. If you would like to nominate someone for Sunday Conversation contact editor Sadie Fowler at sfowler@t-g.com...
Sensational salsas (Features ~ 09/14/14)
So, here's the thing. I love to cook, and as part of that I love making fresh salsa, of which my co-workers usually seem to approve. But I've never, ever canned anything. So when the University of Tennessee Extension advertised a salsa canning class, I decided to check it out...
Hello World: Madisyn Reese Lester (Births ~ 09/14/14)
Kelly Lee Green and Michael Travis Lester, both of Shelbyville, announce the birth of a daughter, Madisyn Reese Lester, on Aug. 29 at Harton Regional Medical Center in Tullahoma. The baby girl weighed 4 pounds, 9 ounces. She is the granddaughter of Lavenia Green of Shelbyville and the late James (Jim) Green, Mike Lester of Belleville, Tennessee and the late Audrey Lester, and Pam and Lewis Phelps of Shelbyville...
Smith, Anderson to be wed (Engagement ~ 09/14/14)
Wayne and Fredda Smith of Oneida announce the engagement of their daughter, Kerstin Elizabeth Smith, to Channing Nathaniel Anderson, son of Jeffrey and Elizabeth Anderson of Lynchburg. Smith is a graduate of King University in Bristol, where she earned a bachelor's degree in psychology. She is employed at SunTrust Bank in Nashville...
Bullying is So Not Okay (Column ~ 09/14/14)
Bullying is So Not Okay. That's the title of a book, "So Not Okay! Mean Girl Makeover," by best-selling author Nancy Rue. The first of three Mean Girl Trilogy books by Thomas Nelson Publishers in the story line is available in stores. Rue is more than an author. ...
Letter to the editor, Sept. 14, 2014 (Letter to the Editor ~ 09/14/14)
Dear Editor, Do you know how you get the clothes you wear, food you eat, or medicine you take? All of these items, and basically everything we use in our daily lives, are delivered by a professional truck driver. Most Americans don't recognize the vital role the trucking industry plays in our everyday lives, but when you see a truck on the highway today, realize that a professional truck driver is delivering the goods that keep America moving. ...
CSX must inform Wartrace of crossing blockages (Editorial ~ 09/14/14)
"What we have here, is failure to communicate." That classic line from the film "Cool Hand Luke" certainly applies to what Wartrace was subjected to this past week. The Tennessee Department of Transportation (TDOT) notified the Times-Gazette last week, by way of a routine news release, that the rail crossing on Highway 64 in Wartrace was to be closed so that CSX could replace ties and surface track...
Charges racked up on dropped debit card (Local News ~ 09/14/14)
A thief used a debit card accidentally dropped Tuesday at Discount Food Mart, North Cannon Boulevard, to purchase more than $100 worth of items at that store and Walmart later in the day, Shelbyville police were told. The following were arrested since Wednesday by the Bedford County Sheriff's Department, Shelbyville Police Department, Tennessee Highway Patrol or 17th Judicial District Drug Task Force. They are only charged; guilt or innocence will be determined by the courts...
T-G News Quiz for Sept. 14, 2014 (Local News ~ 09/14/14)
Here's our weekly look back at the past seven days in local news. Choose the best answer for each question. 1) Shelbyville is competing with Arlington, Carthage, Ducktown, Etowah and Jamestown in the fourth round of participants in what state program?...
School board attends district meeting (Local News ~ 09/14/14)
The 2014 Tennessee School Boards Association South Central Fall District Meeting was held Thursday. Bedford County Board of Education board members attended, as did Superintendent Don Embry and board secretary Suzanne Alexander. Local boards of education learned about the changing landscape of education advocacy, heard updates on education legislation, and were provided with an update on student First Amendment issues and Limited Public Forums at the meeting at Marshall County High School in Marshall County. ...
Smith leads Eagles to win over Webb (High School Sports ~ 09/14/14)
Shelbyville Central claimed a win over Webb School in a golf match at River Bend Country Club on Friday. The Eagles carded a team score of 163 with the Feet posting a 205. Elliott Smith was medalist with a 38. Webb School was led by Eli Freeman's 43...
Champs survive determined Vikings (High School Sports ~ 09/14/14)
Anytime Cascade and Community meet--no matter the sport--fans are sure to get their money's worth. Friday night's rivalry game was no exception. The Community Vikings (0-4) were able to strike quick and build a sizable lead, but in the end, couldn't hold off a furious rally by the Champions (2-2) and fell, 42-28...
New business connections, with a touch of barbecue (Local News ~ 09/14/14)
Networking was the word on Friday during a free barbecue luncheon in Shelbyville. Middle Tennessee Business Network (MTBN) hosted the Business to Business Lunch at The Fly Cultural Arts Center. The lunch was an opportunity for business owners and managers who want to grow their business through networking, said Tom Waynick, who manages the organization with wife Nakai...
Departing Liberty SRO will miss students (Local News ~ 09/14/14)
"I'm speechless." There wasn't much more that departing Liberty School student resource officer Bob Filer could say as the students and staff held a surprise farewell party Thursday. "What can I say, you're my family," Filer said. "I'm going to miss all of you."...
A career filled with change for Smith (Local News ~ 09/14/14)
Thomas Smith sits relaxing in his back yard in Shelbyville, and after working full time for 58 years, many would say he's earned it. He's currently enjoying his retirement after two careers -- 28 years as Bedford County's Circuit Court Clerk, and his first job right out of high school that lasted 30 years -- a route salesman for a local milk company...

redpajama_set_name: RedPajamaCommonCrawl


text:
Career, CISO, Cybersecurity, cybersecurity careers, Infosec
Laid Off by Big Tech? Cybersecurity is a Smart Career Move
Big technology companies are laying off staff as market conditions change.
The move follows a hiring blitz initially triggered by the uptick in pandemic-powered remote work — according to Bloomberg, businesses are now cutting jobs at a rate approaching that of early 2020. For example, in November 2022 alone, companies laid off more than 52,000 workers. Companies like Amazon and Meta also plan to let more than 10,000 staff members go over the next few years.
As noted by Stanford Graduate School of Business Professor Jeffrey Pfeffer, part of this push to cut positions stems from a bursting bubble of business valuations. Pfeffer makes it clear, however, that in many cases, the cause here is imitative behavior. When one company starts laying off staff, others follow in what he calls a "social contagion".
Regardless of the underlying reason, many skilled IT professionals now find themselves out of a job. But it's not all digital doom and gloom. There's one tech sector that's still struggling to find talented staff: Cybersecurity.
Here's why making the move to infosec may be a smart career move for former big tech staff.
The Growing Need for Infosec Experts
According to data from Cyber Seek, more than a million IT professionals are currently part of the cybersecurity workforce. This number has been steadily growing over the past few years. Despite the uptick, however, there are still more than 750,000 open cybersecurity positions across the country. In states such as Florida, Texas and California, there are anywhere between 25,000 and 83,000 job openings available.
The reason for this growing gap is simple: Cybersecurity threats are on the rise, and there aren't enough skilled professionals to meet increasing demand. From the ongoing risks of ransomware to emerging attack vectors created by work-from-home policies and the adoption of anywhere, anytime resource access, companies now face a myriad of old and new threats that can quickly derail business operations.
Oppositional Opportunities: The Benefit of Bad Guys
For IT professionals recently laid off from big tech jobs, the move to cybersecurity can feel like a strange shift. Consider a software engineer or application developer out of a job and looking for new opportunities. They may bypass infosec openings simply because they're not sure security would be a good fit.
They're not wrong. While cybersecurity is on the same spectrum as other IT opportunities, it comes with a different approach. Conflict rather than consistency is at the heart of these protective positions. Despite its significant departure from other roles, it offers a unique opportunity for growth.
Put simply? Having an adversary fuels innovation. Instead of working on projects with a consistent path between point A and point B, cybersecurity staff must be ready to respond at a moment's notice. Even as they're busy implementing strategies and solutions to detect attackers earlier and mitigate malware impacts, they're also the first line of defense against attacks in progress.
As a result, these roles aren't for everyone but offer a compelling career choice for those looking to challenge themselves.
Skills to Pay the Bills
Cybersecurity-specific certifications and training can help staff stand out to recruiters and make the transition to new roles easier. But existing qualifications also play a role in helping IT professionals make the transition.
Consider a software engineer with two decades worth of experience who was recently laid off from their job. While their skill in coding, testing and revision may not seem immediately applicable to cybersecurity, they bring a unique set of benefits to the table.
Take the common example of a ransomware attack. Cybersecurity teams prepare for these attacks using a combination of threat intelligence solutions and incident detection tools that help shorten the time between attack and discovery. Over time, however, attackers learn — and grow. The existence of Ransomware-as-a-Service (RaaS) marketplaces showcases the commitment of malicious actors to collaborate when it benefits their ability to break down business defenses.
In practice, this means that existing controls may slowly begin to fail as attackers enhance their approach. Our laid-off software engineer, however, can compile new code in-house to boost existing solutions and frustrate attacker efforts.
Making the Move to Cybersecurity
Of course, it's one thing to consider a move to cybersecurity. It's another to take the plunge and start putting out applications.
One way to help streamline the shift is with certification-based training. Consider that of the more than one million currently employed cybersecurity professionals, 213,000 hold the CompTIA Security+ certification, and 94,000 have completed the Certified Information Systems Security Professional (CISSP) course. What's more, 140,000 of the currently unfilled security positions are asking for CISSP, while 100,000 want CompTIA Security+ completion.
Not only do courses such as Security+ offer a great introduction to cybersecurity processes and priorities, but they also pave the way for advancement within new organizations. What's more, many of these certification options are now available as online, self-paced courses that let IT professionals decide how and when they learn best.
Another option for laid-off tech staff is applying for positions that include paid training to get them up to speed. A quick query of the job search site Simply Hired turns up more than 600 positions that don't require previous cybersecurity experience and provide paid training.
Tech to Cybersecurity: From Strength to Strength
Undoubtedly layoffs will stabilize and IT hiring will eventually begin again in earnest. However, this is cold comfort for technology professionals who find themselves facing the unpleasant reality of possible unemployment.
As one digital door closes, however, another opens. And strangely enough, it's one that sees technology experts finding ways to keep network doors shut tight against potential attackers. Although the move to cybersecurity isn't for everyone, the skills acquired in previous positions combined with the compelling task of adapting to an adversary's movements make this lateral shift a great way for IT pros to capitalize on current strengths and build new skill sets that set them up for ongoing career stability.
The post Laid Off by Big Tech? Cybersecurity is a Smart Career Move appeared first on Security Intelligence.
This post appeared first on Security Intelligence
Author: Doug Bonderud
How to keep symmetric and asymmetric cryptography straight | Cyber Work Hacks
3 Reasons to Make EDR Part of Your Incident Response Plan


text:
Gerrit Henri Victor Lodewijk Faulhaber (22 de setembro de 1912 - 1951) foi um futebolista indonésio.

Carreira
Gerrit Faulhaber fez parte do elenco da histórica Seleção das Índias Orientais Holandesas que disputou a Copa do Mundo de 1938.

Ligações Externas
Perfil em Ogol.com

Futebolistas da Indonésia
Jogadores da Seleção Indonésia de Futebol
Jogadores da Copa do Mundo FIFA de 1938

redpajama_set_name: RedPajamaWikipedia


text:
Site: 5N 95W
Showing data from 12/9/2022 (11:00:00 Z) to 12/8/2022 (00:01:00 Z)
Start Time: 2020 2021 2022 2023 June July August September October November December January February March April May 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 : 00 10 20 30 40 50
End Time: 2023 2022 2021 2020 February January December November October September August July June May April March 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 : 00 10 20 30 40 50
12/9/2022 02:00 to 1:10 99.84 99.88 99.90 100.01 99.96 99.78


I'd love to chat with you about the kind of home you're looking for, so please don't hesitate to call me at (651) 503-4158 or email me at ryand@mnrealestateteam.com.
Whether you're upsizing or downsizing, it's your first or your fifth real estate purchase, buying a home can be intimidating!
If you want to make the best decision possible, it's important to research the market and consider your best options. Let's start with a free, no obligation first meeting, to get a clear understanding of where you want to go. My #1 goal is for you to feel comfortable and confident throughout the entire home buying process moving forward. Coffee is on me!
Tell me a little more about what you're looking for!


Department of Internal Medicine ensures preventive examinations and treatment of aviation personnel. In addition internal diseases examination and treatment of patients from all over Czech Republic are carried out. A short term observation and applying infusion therapy through day care can be used.


text:
<?php
$this->breadcrumbs=array(
	'Crawler Models'=>array('index'),
	$model->crawler_id,
);

$this->menu=array(
array('label'=>'List Crawler_model','url'=>array('index')),
array('label'=>'Create Crawler_model','url'=>array('create')),
array('label'=>'Update Crawler_model','url'=>array('update','id'=>$model->crawler_id)),
array('label'=>'Delete Crawler_model','url'=>'#','linkOptions'=>array('submit'=>array('delete','id'=>$model->crawler_id),'confirm'=>'Are you sure you want to delete this item?')),
array('label'=>'Manage Crawler_model','url'=>array('admin')),
);
?>

View Crawler_model #<?php echo $model->crawler_id; ?>

<?php $this->widget('bootstrap.widgets.TbDetailView',array(
'data'=>$model,
'attributes'=>array(
		'crawler_id',
		'waktu_mulai',
		'waktu_berhenti',
		'nama_akun_twitter',
		'create_time',
),
)); ?>


Digital communication tools to increase employee engagement.
Why you should be thinking about implementing communication tools in your digital workplace?
In their quest for an effective workplace, enterprises are confronted with a lot of digital workplace solutions and the accompanying communications tools. Making the right choices is not as easy as it looks. Each tool has its own advantages and disadvantages. The primary goal should be selecting and providing the right tool that has a positive impact on the employees' work environment. The right communication tool needs to support the way people do their daily job and the way they collaborate and interact with external people.
Since 2010 enterprises started to introduce specific tools internally as part of a (team) collaboration strategy. The goal of using communication tools was to improve internal communication and employee satisfaction. The trend of social communication like Facebook or Whatsapp is continued in the digital workplace. People grow up with it and for them it is part of their daily interaction with others, in their private lives as well as within a professional context. Communication tools should cover all generations within your company that are using the digital workplace.
Live chat, employees can do live chats about topics they are working on at that point in time.
News, news about things that happen within the company can be shared in an easy way.
Communication tools should be a part of the roadmap during the selection of the digital workplace. Companies are conversationally driven. Good communication is a key to success. It improves productivity and collaboration while decreasing e-mail flows and misunderstanding.
Content sharing like for example powerpoints for presentations.
In the ideal scenario communication tools should be integrated into other tools in your digital workplace. For example; you had a chat about an offer that has to be send out to a customer. The customer data should be in the CRM, linked to the document that is stored on the document management system. The conversation on that matter should be included in the document with the possibility to search through it.
When having a look at the different vendors, keep in mind the criteria that are important for your particular organisation and employees.
The conversations within a company can be confidential. Pay attention to security during your search for the right tool. This to be ahead of hacking and ransomware attacks. There should be a list of minimum security standards to consider when selecting the right tool.
Need some guidance in the search and implementation of the right communication tool? Don't hesitate to contact us.


We are an IT company founded in Switzerland in 2004 that opened a new branch office in Ekaterinburg on April 1, 2016. During the past 12 years we have been succesfully developing high quality software products and selling them around the world.
To expand our growing team we are looking for talented individuals passionate about IT technology with close to native English or Japanese language skills who are ready to meet new challenges in a demanding yet exciting IT environment.


I've ranted about Banking in Ireland, I think its only fair that I rant a bit about banking in South Africa.
Now that they've introduced this new tax act, or whatever, things have become really painful.
I used to be able to transfer money into my South African account fairly easily. If it was less than R50000 (which it always was… alot less), then you didn't have to fill in any paperwork and the South African Tax man was more than happy to let that slip under the radar.
Now, you have to fill in miles of paperwork for everything. Even a R1 transfer needs paperwork.
Then you have to call your bank, and let them know that all is good, and that they can go ahead and clear it.
After the first few months of calling my branch, being put on hold, being promised return calls, sending faxes, shouting at useless people (Tony, I mean you, you useless little half-wit), I eventually got the contact details of Robyn. She was great. I'd just pop off an email to her with the forms all filled in, and within minutes the funds would pop into my account, all good to go.
Now I find out that dear Robyn no longer works in the Forex department, so I've had to try find out who will help me.
Its been the most frustrating day so far.
The FNB email server blocks Excel attachments, so I cant even send my forms to anyone there.
Their Fax machine "must be broken, because we haven't got any faxes all day".
Their phones don't even ring, just straight to Busy.
Turns out, they've been doing "load shedding" on the power grid in Bedfordview for a few days.
That means, 2 hours on, 2 hours off.
Which explains why I can only get through for a while, and then the phone goes dead.


LunaPic Photo Editor Help - If one area of pic is way too bright, can just that area be fixed?
HDR lighting filter will adapt to areas that are too bright or too dark.
If that doesn't work for you, you could also try Adaptive Equalize to adjust the photo. No selecting an area is needed for either of those!


So Exchange Service Pack 2 released yesterday! You should start planning accordingly to get this service pack on your Small Business Server 2003 box! As Susan says, you might not want to Install it over a lunch hour, but definately plan for it.
Just so you're aware, we've been running Exchange Service Pack 2 on the SBS Catfood server for about a week and a half now, and there have been no issues. Of course the OWA logon page now reads DOMAIN\USER, but you can still log on with just username.
One of the big things to note is the new mobility features with Windows Mobile 5.0!


If you're looking to discover somewhere new, look no further than Jellum. Whether you're planning to stay for a night or for the week, the area around Jellum has accommodations to fit every need. Search for hotels in Jellum with Hotels.com by checking our online map. Our map displays the areas and neighborhoods around all Jellum hotels so you can see how close you are from landmarks and attractions, and then refine your search within the larger area. The best Jellum hotel deals are here with our lowest price guarantee.


Saree is something which is regarded as the global symbol of India and this is the reason why you can see many Indian celebrities making appearance in international events, draped in this amazing garment. Not only this, saree has reached heights of popularity on a global scale too. Sarees look graceful and elegant on every Indian woman and also on women around the world. Sarees look perfect for festive occasions and wedding, but they have been replaced by other garments, which are now being used for office wear and daily wear purposes. With the passage of time, several other fancy handloom dress materials have made a place in the wardrobe of young Indian girls, in addition to sarees.
A dress common to the states of Punjab, Haryana and Himachal Pradesh, salwar kameez is becoming a hot favorite all over the country. It comprises of a tunic at top along with a loose trouser, which are complimented with a matching stole or dupatta. The garment scores full marks on the comfort aspect and also looks good and decent. It comes in several designs and materials, including fancy handloom dress material.
Kurtis make a great choice for working women as they are convenient to wear and also make a style statement. Kurtis come in varying lengths and are worn with trousers, jeans or tights. Indian women mostly prefer cotton kurtis as they offer them casual style and comfort.
Churidar kurta is another popular dress among young Indian women. It combines the comfort of salwar kameez with the grace of kurti. It features a long tunic with a tight trouser, which is pleated at the calf area.
Lehnga Choli, the traditional dress of Gujarati and Rajasthani women, comes next on the list. The basic components of the dress are a tight choli top along with a pleated skirt at the bottom. The garment features vibrant colors and exquisite embroidery.
Another popular dress worn by young women instead of sarees is the anarkali suit, which is a stylish adaptation of salwar kameez. In this dress, the kameez or the tunic gets the classic umbrella cut and is worn along with a churidar trouser. This dress is perfect for formal occasions and comes in heavy embroidery and embellished designs.
Langa Voni is the South Indian replica of the lehnga choli. The three piece apparel with a long flowing skirt is popular in the states of Andhra Pradesh and Tamil Nadu.
Another traditional South Indian garment loved by young women is Reshme Langa, which is also called Pattu Pavadai. Girls wear this graceful silk dress before their marriage.
Women in Assam wear Mekhela Sador as a traditional dress, instead of saree. Comprising of three pieces, the dress has Mekhela, the sarong like lower part, the Sador or the top and the Riha, which is worn beneath the Sador.
The new craze among young girls and women in India is the garment called dhoti pants, which look the best when worn with fitted tops.
Long skirts worn with short kurtis also look graceful on young Indian girls and can be worn casually as well as on formal occasions.
Indian women today have a lot of options besides sarees, which they can carry on all kinds of occasions.


Does this sound like a scientist: "Frankly I could care less if he gets the CO2 and aerosol part wrong..."?
Best answer: Many of JimZ's answers are heavily weighed toward the political side of things. There needs to be a clear boundary between science and politics for the purpose of analysis. If it was me, I'd correct the record and enjoy the boost in credibility, but he may answer as he pleases within community guidelines. Frankly, if he concentrated on those who make extreme CAGW arguments, he'd have more valid questions and answers, and if he wanted to cross that hard science boundary, I'm sure some of us would be glad to help.
Daro is wrong. The roll of CO2 (and aerosols) is important with regard to understanding the trend in net forcing moving into the future, but I remain certain that extremists are attacking fossil fuels for political reasons; fossil fuels must not be phased out irrationally.
The time magazine mistake is silly. I should have checked.
Is Dirac the fired Penn State physics professor in the article below? Did Dirac get fired by trying to date his student?
Best answer: Don't know if it's him or not, but there is some interesting psychology. Take a guy who has worked one job his entire career. Maybe 45 years. He puts himself into that job. He puts everything into it. He even becomes the job.
Now take a guy who gets fired from his only job he's ever had. You've taken away what has validated him his entire adult life. He then puts up a defense mechanism. He needs to reassure himself. The psychology goes haywire.
He has to prove himself worthy. He has to be vindicated. He has to prove HR wrong, except he can no longer do it on the job because he got terminated. He displays his credentials to anyone and everyone for validation. It's a desperate plea to tell the world, "I'm still worthy. My career wasn't for nothing." That's what I see in Dirac.
Global warming is manmade ?
Best answer: Of course it is.
But Trump says there is no such thing and his followers believe him.
What do you make of this Time Magazine cover?
Best answer: Something for revisionists to rail on. "It did not happen!"
Best answer: Dirac is a paid troll who got fired from Penn State U.
Voce consegue ver Deus? Responda.?


Stop by our dealership and discover our great offers at Experience Hyundai. Check out this amazing new Hyundai Accent 2019 near Charlottetown. This White model has logged 25 km. You can buy this Hyundai Accent 2019 at a great price of $19404. It's a N/A with N/A doors, N/A transmission and Front wheel drive. This Hyundai Accent 2019 is powered by a 1600cc 1.6L 4cyl engine that runs on Unleaded fuel. If you'd like to learn more about this new Hyundai Accent 2019 for sale in Charlottetown, don't hesitate to contact us by phone at 902 569-2277.


Loretta LaRoche, author, speaker and corporate stress management consultant, was the winner of the 2007 National Humor Treasure award. Her seven books reflect the lighter side of her life philosophy. This month, Lighten Up! joins her title hit parade that includes Life is Not a Stress Rehearsal and Life Is Short – Wear Your Party Pants.
Q. Why does your message, "Life is not a stress rehearsal," resonate with audiences?
I have found that, in the last 30 years, Americans' paradigm for living has become busyness and stress. We live as if every minute is stressful and define our lives that way. Some stress is essential to life; it excites us and moves us forward, signaling when to pay attention to that which gives us passion and happiness. It also helps us discern when we are in danger. What incapacitates many people is catastrophising and awfulizing, which leads to feeling they have no choices.
Discovering how to find the "bless in the mess," and living in appreciation encourages a more peaceful, rich and juicy life.
Q. Your books and talks blend humor, common sense and values, like living in the moment and optimism, as a sure-fire antidote to stress. How does this work?
situation for what it is.
who listen and help us add to them. We anticipate problems and practice misery.
We've all experienced difficult times in our lives, and for the most part we survive them and go on. It's these bumps in the road that give us that can-do feeling.
Q. Why do you believe that it's never too late to have a happy childhood?
Children are masters of living in the moment; but for most adults it takes some work. If we integrate some of what kids do we can approach each day with awe and look at everything with new eyes. We let go of a "been there, done that" attitude and really look around us. That creature on the floor is not just another bug, it's a BUG!
When we are truly involved in the natural flow of our life, time and space disappear; we now live in the moment, we are at our best and feel oh, so good. Allow your children or grandchildren to lead you down the slippery slope to a place where you can act silly and be a child again. There, you will rediscover the simple pleasures that bring you happiness, joy and a pure sense of awe.
Q. What advice do you have for families to create a home filled with joy rather than anxiety?
Role modeling joyful, optimistic behavior ourselves is one of the best ways to create a happy family. Often, we have no clue how powerful our everyday conversations and body language are in influencing children's behavior.
I suggest doing simple things together, like eating dinner. Let everyone in the family have unstructured play time. And don't waste your day worrying; instead pat yourself on the back for what you have done right.
Don't reserve fun for weekends, birthdays and holidays; pick a day and celebrate for no reason at all. Live life as if you only have a few moments left. Just break out the champagne and party pants and celebrate!
Q. How can people maintain their joy during difficult times?
humane. Let's all have amazing lives, where you become the fun you are seeking—your own entertainment center. That way, wherever you go will be joyful, if you just show up.
For more stress-busting fun, visit Loretta-Laroche.com.
Connect with freelance writer Gail Condrick of Sarasota, FL, at niavisions.com.


Interesting that you received no comments on this, even four days later, given that you often do get comments, sometimes very negative ones.
I think that silence is exactly the silence you speak of — part of the problem. That silence comes from the evangelical community, and it's deafening. It's coupled with the whataboutism that seeks to equate persons fighting for justice and equality with those marching in the streets with "torches" shouting "Jews will not replace us!" The current President is responsible for all of this, as he praises them with faint damning and false equivalencies.
Yes, yes, yes and yes! Thank you for speaking up! The sad thing is many of the people you are speaking about have already decided you are not in God's will, so your words are "deceived" or you are "demonized" or you are simply being dramatic. I left the church after having been all in – grew up in missions, did Bible school, seminary, was a Christian therapist etc. I began to see as a clinician the very real result of this mindset in my own life and the lives of others, the narcissism, the trauma/PTSD, the abuse (especially as a female) the lack of adult development on so many levels. Eventually I wrote for Child Friendly Faith Project, which seeks to educate churches on both child-development and safety issues in a religious context. Much of the Evangelical mindset is generationally based on fear, judgement and narcissism that comes directly from the both the culture and the theology, which is never to be really questioned, as you well know based on your own past. In this way, generation after generation passes down the fearful and judgmental system without change. Those of us who have walked away to literally gain our own souls and hearts back are often punished, ostracized and misunderstood. Many of us have lost so much. So much. But cannot go back so will take the intense loneliness over anything church related (even though there are good people and differing theologies out there). I consider many of the good, white, Christian people to be the most dangerous for the marginalized because they (Evangelical Christians as a whole) are insidious in forwarding systems of oppression by their wholly unexamined personal , corporate and spiritual narcissism, and silence. After all, if they can send literally everyone to hell in the blink of an eye, why would true human empathy be really developed?
Christy, such a brilliant comment that will impact me for some time. Thank you for reading and commenting!
Your observations are to some extent reasonable, but it appears you are mixing up some things. It'd be a lot better to differentiate between white supremacy and orthodoxy. Which one do you frown at?


June 28, 2018 in Mandate Radio, Podcasts.
May 24, 2017 in Mandate Radio, Podcasts.
Mandate Radio: Ep. 188 (05/03/2017) Pete is alone.
May 3, 2017 in Mandate Radio, Podcasts.
April 19, 2017 in Mandate Radio, Podcasts.
May 20, 2015 in Mandate Radio, Podcasts.
March 25, 2015 in Article, Mandate Radio, Podcasts.
February 25, 2015 in Mandate Radio, Podcasts.


There are 20 spots available on this ride and bookings close on Wednesday 12 June 2019.
Below is some general information about our 2 Day Hills 'n Flow Tours, please note that these rides are not for beginners, so an intermediate level of off-road riding experience is essential. Also, you will need to hold a current motorbike licence for your enduro bike (or learners permit for your class) and your bike must be 'A' class road registered, silenced, in good mechanical condition with either new or good off-road tyres fitted. Your bike will need a fuel range of 80kms.
This tour will take in the magic trails and awesome views of the Hills 'n Thrills terrain and mix it up with the best bits of the Forest Flow trails – aimed at the Intermediate level rider who likes a good a steady trail pace, with lots of different terrain to keep you on your toes, nothing too hard & nothing too easy, just a good weekend of riding.


"This handstand is lovely on my dresser. I put some of my mother's pearls, antique rings and pins on it. It's a great way to honor her memory." -Indiana.
Soft on glasses and jewelry.
This hand stand is an exquisite work of art, where form and function unite brilliantly. I adore the Asian crane print of the fabric. If I did nothing but display this hand, it would be a treasure and add an element of beauty to any space. Better still, the hand is perfect for holding rings on the slender fingers and for draping bracelets between the fingers or over the thumb, adding sparkle and shimmer to the already lovely piece. The fact that my most regularly worn jewelry is now easily accessible and elegantly displayed is an immense bonus.
This handstand is lovely on my dresser. I put some of my mother's old jewelry on it; pearls, antique rings and pins. It's a great way to honor her memory. Thanks so much!


text:
Neoconservatism: America's Tradition
One way to look at this year's election, ideologically, is to frame the battle between the Democratic and Republican nominees in ideological terms, between the forces of postmodern radicalism and neoconservatism.
Barack Obama is not Marxist, but his leftist positions on race and religion, government spending, and off-shore drilling, for example, place him on the extreme left of the political spectrum, essentially electoral radicalism.
John McCain, on the other hand, represents the great traditions in American history of peace through strength and moral certainty. His commitment to defending the nation in a time of terror, and his proven leadership on the Iraq war, put him closer in values to the neoconservative perspective.
Folks can quibble with the definitional categories, which are loose approximations, although the utility of this framework is demonstrated empirically, in terms of the identified political coalitions that have lined up behind each of the candidates (particularly on the left).
The left radicals, for example, are intent to demonize neoconservatism in their rush for power and recrimination. While traditional conservatives, many of whom rejected McCain early this year, have come to see his campaign as a bulwark against the coming to power of far-left relativism and retreat.
Politics is ultimately a battle of ideas and values, and while neoconservatism is generally reviled by the left as a warmonger's cult, neoconservative ideology can be seen as the essential firmament guiding America's relations with the world for over 200 years, as Robert Kagan notes in his piece, "Neocon Nation: Neoconservatism, c. 1776."
I'd like to just post the whole thing, Kagan's piece is so good! But I'll just add a couple of bits of flavor, from the introduction:
"The Iraq War will always be linked with the term 'neoconservative,'" George Packer wrote in his book on the war, and he is probably right. The conventional wisdom today, likely to be the approved version in the history books, is that a small group of neoconservatives seized the occasion of the terrorist attacks on September 11, 2001, to steer the nation into a war that would never have been fought had not this group of ideologues managed somehow to gain control of national policy.
This version of events implicitly rejects another and arguably simpler interpretation: that after September 11, 2001, American fears were elevated, America's tolerance for potential threats lowered, and Saddam Hussein naturally became a potential target, based on a long history of armed aggression, the production and use of chemical weapons, proven efforts to produce nuclear and biological weapons, and a murky relationship with terrorists. The United States had gone to war with him twice before, in 1991 and then again at the end of 1998, and the fate of Saddam Hussein had remained an unresolved question at the end of the Clinton administration. It was not so unusual for the United States to go to war a third time, therefore, and the Bush administration's decision can be understood without reference to a neoconservative doctrine. After September 11, the Bush administration weighed the risks of leaving Saddam Hussein in power against the risks of fighting a war to remove him and chose the latter, its calculus shaped by the terrorist attacks and by widely shared suppositions about Iraq's weapons programs that ultimately proved mistaken.
If one chose to believe this simpler version, then the decision to invade Iraq might have been correct or mistaken, but the lessons to be learned from the war would concern matters of judgment, tactics, and execution—don't go to war based on faulty intelligence; don't topple a foreign government without a plan to bring order and peace to the country afterwards; don't be so quick on the trigger; exhaust all possibilities before going to war; be more prudent. But they would not raise broader issues of foreign policy doctrine and grand strategy. After all, prudence is not a foreign policy. It is possible to be prudent or imprudent, capable or clumsy, wise or foolish, hurried or cautious in pursuit of any doctrine. The intervention in Vietnam was the direct product of the Cold War strategy of containment, but many people who think the Vietnam War was a mistake nevertheless do not condemn containment. They believe the war was the misapplication and poor execution of an otherwise sound strategy. One could argue the same was true of Iraq.
One could, but very few critics of the war do. The heated debate in the United States over the past few years has not been so much about bad intelligence, faulty execution, or imprudence in Iraq. In his book The Assassins' Gate, Packer claims that he is unable to explain why the United States went to war without recourse to the larger doctrine behind it. "The story of the Iraq war," he writes, "is a story of ideas about the role of the United States in the world." And the ideas he has in mind are "neoconservative" ideas. His premise, and that of most critics, is that neoconservatism was uniquely responsible for the United States going to war in Iraq and that, had it not been for the influence of neoconservative ideas, the war never would have occurred.
To examine this premise requires first understanding what people mean by "neoconservative," for the term conjures very different images. For some, it is synonymous with "hawk," to others, it is an ethnic description, and to still others, it is a term to describe anything evil—I once heard a Cornell professor earnestly define neoconservatism as an ideological commitment to torture and political oppression. But when employed fairly neutrally to describe a foreign policy worldview, as Packer does, neoconservatism usually has a recognizable meaning. It connotes a potent moralism and idealism in world affairs, a belief in America's exceptional role as a promoter of the principles of liberty and democracy, a belief in the preservation of American primacy and in the exercise of power, including military power, as a tool for defending and advancing moralistic and idealistic causes, as well as a suspicion of international institutions and a tendency toward unilateralism. In the hands of more hostile critics, the neocons are not merely idealistic but absurdly and dangerously hubristic about the unlimited capacity of American power to effect positive change; not merely expansive but imperialistic, seeking not only American pre-eminence but ruthless global dominance; not merely willing to use force, but preferring it to peaceful methods; and not merely tending toward unilateralism but actively spurning alliances in favor of solitary action. Even these deliberately polemical caricatures point to something recognizable, a foreign policy that combines an idealist's moralism, and even messianism, with a realist's belief in the importance of power.
I think that's key, at the end: the combination of moralism and power.
Via GSGF, note Douglas Murray, who explains the background for his book, Neoconservatism: Why We Need It:
... I try to demonstrate why the neoconservative impulse is vital at this moment in history ... But the drive of the book is really an attempt to put down a marker. Having observed the allegedly 'anti-war' left sink into what became in large part a pro-war, but pro-the-other-side-winning stance it seemed to me that a philosophical and practical explanation had to be attempted which identified not only the jihadist enemy, but also the disastrous relativistic bent of our time which has given that enemy some of its oxygen. Relativism has deeply damaged my own generation and greatly hindered our chances of defeating this or any future enemy.
That's an interesting concept, that the left's not so much "antiwar" but anti-American, and that many on the left will readily back the other side in the West's great defense of right in the world (for more on that, see "The Politics of Peace: What's Behind the Anti-War Movement?")
I'll have more. In the meantime, check out "The Return of the Neocons: Bush Hawks Aggressively Working to Rewrite Accepted Iraq War History."
Posted by AmPowerBlog at 6:05 AM
Labels: Election 2008, Ideology, Neoconservatism, Postmodernism
No Aberration: Neoconservatism and U.S. Foreign Po...
Revolutionary Roster: 1968 Radicals for Obama
Obama to Speak on Patriotism
Israel Prisoner Swap Extracts Emotional Toll
Democrats Challenge McCain's Presidential Qualific...
Poll: Democrats Favored for House Majority in Nove...
Think Progress Lies About McCain - Again!
Barack Obama, the Netroots, and the "Vital Center"...
Cindy McCain Taxes in Spotlight
You'll See My Smile Looks Out of Place...
Raise High the Nation? Obama's Speech at the Democ...
Regime Change Zimbabwe?
The Power of 41: GOP Senate Minority Frustrates De...
Israel's Not Bluffing on Iran Nuclear Strikes
Max Boot and the Neocon Blog Wars
Grim Legacy: Obama's Housing Crisis
McCain Reaches Out to Social Conservatives
Nobama! Democratic Unity May Prove Elusive
Barack Obama is No Michael Dukakis!
Stand Aside: Greenwald and Olbermann Battle
Venezuela's Anti-Semitic Problem
Blogopticon: A Guide to the Blogosphere
Calls for War Crimes Indictments are Misguided
Bush Administration's Korea Diplomacy Defies Critics
Will Conservatives Be Roused Into Action?
Dark Moment of American Conservatism?
Neocon Blog Wars! An Update
Barack Obama and Progressive Netroots Rage
The Thugs Win? The Liberal Backlash Begins
Supreme Court Favors Gun Owners, Obama Waffles
Taggers Shoot Business Owner in Hollywood
Neocon Blog Wars!
Obama Throws Maoist Hardliner Under the Bus
Differing Concepts of Patriotism in Campaign '08
Obama's Egocentrism
Congratulations Fresno State!
Beijing's Olympic Nightmare
The Crisis in Zimbabwe
Obama 12-Point Lead, in L.A. Times Poll, Draws Con...
Supreme Court Spares Child Rapists From Execution
Obama Takes Issue With Nader Comments
Ideas, Clarity, and American Power
Should Revolutionaries Feel Good About Obama?
Israel: Front Line of Western Civilization
Cranky Rednecks and Leftist Bigots
Revolutionary Communists for Obama
What is it About Today's Press?
Obama and Change: Unlocking the Puzzle
"Clean Hands" and the Triumph of Evil?
Mapping the Political Blogosphere
Good Thing to Be American? Yeah, Since Barack Got ...
Iraq Sees Decline in Roadside Bombings, Left Goes ...
Fine Line: Obama Risks Offending Muslim Base
I Fought the Law...
The Powerful Legacy of George W. Bush
Foreign Policy Remains Center Stage in Presidentia...
Poll Shows Presidential Prefences Stable
Yglesias Pulling for "Massive" Abuses Under Obama ...
Obama Can't Transcend Race?
Antiwar Columnist Wants More "Dead Americans Soldi...
Obama's Rise Creates White Supremist Backlash
Daily Kos Anti-Semitism: An Update
Obama Calls Out Republicans for "Campaign They'll ...
Poster Girl for the Antiwar Left
The Obama Seal
Barack Obama's Soft Underbelly: The Muslim Smear
Funeral March for Centrist Democrats
How Bad Would Obama Be for Israel?
Americans Support Drilling
The American Public and the Jewish State
Obama Community Blogs: "A STORM IS COMING!!!"
Congress Gets Lowest Institutional Rating Ever, Po...
Lieberman: "Forever is a Long Time"
New Obama Ad: Straight From the Heartland?
Obama and the Muslim Women
Skateboarding Launches Into Educational Curriculum
Ultimate News Hotties
Fall Preview: Obama on Detainees and Afghanistan
Smearing the GOP: The Obama "White House" Button C...
Obama's Community Blogs: Moderated After All...
Keith Olbermann: Another Update on Moral Relativism
Matthew Yglesias Annointed as "Foreign Policy God"
Illegally Dumped Debris Plagues Los Angeles
Straight to Hell? Now That's Some Change!
Where Have You Gone, Mr. Charlie?
MoveOn's Latest Attack on McCain
Every Time I Tried to Tell You...
Ranking Political Science: Thoughts on a "Top Pape...
No Conservatives Daily Kos? Thank Goodness!
Texas Fred and the Banality of Racism
Father Hunger: The Tragedy of America's Missing Dads
World War II: The War Worth Fighting
Democrats Defecting to McCain Banner!
Obama Grew Up Muslim, Half-Brother Confirms
The Science of Political Smear
Texas Fred's No Holds Barred Anti-Immigrant Racism
Argentina Reconsiders Che Guevara's Murderous Legacy
Tim Russert, 1950-2008
Has Affirmative Action Run its Course?


text:
Edmond North tops Booker T. Washington in 6A
Edmond North 78, Tulsa Washington 53
Updated: 11:22 AM CDT Mar 12, 2017
basketball on court
Marques Wilson scored 23 points to help Edmond North defeat Tulsa Booker T. Washington 78-53 for the Class 6A boys title Saturday at the Mabee Center. Marvin Johnson had 12 points and 10 rebounds and Jakaree Holmes scored 12 points for Edmond North, which won its first state title. The Huskies shot 50 percent from the field. Aaron Lucas led Washington with 23 points. R.J. Fuqua scored 12 points and Seth Hurd added 10 points and 14 rebounds for the Hornets, who shot just 25 percent from the field. Edmond North led 33-24 at halftime, then outscored Washington 18-11 in the third quarter to take control. Washington had defeated Tulsa Union on Friday to end its unbeaten season. The Hornets were seeking a record 16th state title.
TULSA, Okla. (AP) —
Marques Wilson scored 23 points to help Edmond North defeat Tulsa Booker T. Washington 78-53 for the Class 6A boys title Saturday at the Mabee Center.
Marvin Johnson had 12 points and 10 rebounds and Jakaree Holmes scored 12 points for Edmond North, which won its first state title. The Huskies shot 50 percent from the field.
Aaron Lucas led Washington with 23 points. R.J. Fuqua scored 12 points and Seth Hurd added 10 points and 14 rebounds for the Hornets, who shot just 25 percent from the field.
Edmond North led 33-24 at halftime, then outscored Washington 18-11 in the third quarter to take control.
Washington had defeated Tulsa Union on Friday to end its unbeaten season. The Hornets were seeking a record 16th state title.


text:
Phu Tho to reduce rate of poor households to 5 percent in 2020
Sunday, October 01, 2017 19:35
The northern midland province of Phu Tho is striving to reduce the percentage of poor households to 5 percent by 2020, as part of its efforts to achieve sustainable poverty reduction and improve living conditions of local people.
Illustrative photo
According to the provincial Department of Labour, Invalids and Social Affairs, the province now has about 41,000 poor families and over 31,000 near-poor households, accounting for 10.51 percent and 8 percent of the total number, respectively.
Of these households, 33 percent are from ethnic minority groups and 23 percent have at least one welfare beneficiary.
Phu Tho plans to invest more than 1 trillion VND (44 million USD), including 925 billion VND sourced from the state budget and 76 billion VND from the provincial funds, to carry out poverty reduction projects.
The money will be spent on developing local infrastructure, supporting production, diversifying rural livelihoods, and scaling up successful models of poverty reduction in disadvantaged communes.
To effectively implement the national target programme on sustainable poverty alleviation, the department has worked with State agencies and district administrations to update the status of the poor and underprivileged areas in order to better support them, said Director of the Department of Labour, Invalids and Social Affairs Bui Duc Nhan.
It has worked to raise people's awareness of poverty reduction and encourage them to be more independent and overcome difficulties, Nhan said, adding that it has also called on local organisations, businesses and individuals to join the efforts
Vietnamnews
Phu Tho reduce rate of poor households 2020
Border guards make efforts to prevent illegal immigration for Covid-19 fight
Three boys, aged 11-14, cycle more than 400 km in five days to meet parents
Young man sets up fundraising project with small change to build school, bridge
Man spends billions keeping countryside soul
Companies fail to manage, Central Highlands forests suffer
Central forests destroyed to fuel ornamental tree craze
Forests cut down for agricultural purpose in Central Highlands, Central region
Woman dedicates her life to stray dogs
Two siblings start business by growing grape in Mekong Delta
Field hospital gets meals from local soldiers during Covid-19
Around 5,000 HIV-infected people in community not detected in HCMC
Deputy Director of the Department of Health in Ho Chi Minh City Dr. Nguyen Huu Hung said that around 5,000 HIV-infected people in the community in the city have not been discovered.
HCMC enhances health quarantine procedure
Over 143,000 vehicles in HCMC not change license plates to yellow