text:
// Copyright 2005 Google Inc. All Rights Reserved.
//
// 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.
//

// Author: ericv@google.com (Eric Veach)

#include "s2/s2cell_id.h"

#include <algorithm>
#include <cfloat>
#include <cmath>
#include <cstring>
#include <iosfwd>
#include <mutex>
#include <vector>

#include "absl/base/call_once.h"
#include "absl/base/casts.h"
#include "absl/strings/str_cat.h"

#include "s2/base/integral_types.h"
#include "s2/base/logging.h"
#include "s2/util/bits/bits.h"
#include "s2/r1interval.h"
#include "s2/s2coords.h"
#include "s2/s2latlng.h"

using absl::StrCat;
using S2::internal::kSwapMask;
using S2::internal::kInvertMask;
using S2::internal::kPosToIJ;
using S2::internal::kPosToOrientation;
using std::fabs;
using std::max;
using std::min;
using std::string;
using std::vector;

// The following lookup tables are used to convert efficiently between an
// (i,j) cell index and the corresponding position along the Hilbert curve.
// "lookup_pos" maps 4 bits of "i", 4 bits of "j", and 2 bits representing the
// orientation of the current cell into 8 bits representing the order in which
// that subcell is visited by the Hilbert curve, plus 2 bits indicating the
// new orientation of the Hilbert curve within that subcell.  (Cell
// orientations are represented as combination of kSwapMask and kInvertMask.)
//
// "lookup_ij" is an inverted table used for mapping in the opposite
// direction.
//
// We also experimented with looking up 16 bits at a time (14 bits of position
// plus 2 of orientation) but found that smaller lookup tables gave better
// performance.  (2KB fits easily in the primary cache.)

// Values for these constants are *declared* in the *.h file. Even though
// the declaration specifies a value for the constant, that declaration
// is not a *definition* of storage for the value. Because the values are
// supplied in the declaration, we don't need the values here. Failing to
// define storage causes link errors for any code that tries to take the
// address of one of these values.
const int S2CellId::kFaceBits;
const int S2CellId::kNumFaces;
const int S2CellId::kMaxLevel;
const int S2CellId::kPosBits;
const int S2CellId::kMaxSize;

static const int kLookupBits = 4;
static uint16 lookup_pos[1 << (2 * kLookupBits + 2)];
static uint16 lookup_ij[1 << (2 * kLookupBits + 2)];

static void InitLookupCell(int level, int i, int j, int orig_orientation,
                           int pos, int orientation) {
  if (level == kLookupBits) {
    int ij = (i << kLookupBits) + j;
    lookup_pos[(ij << 2) + orig_orientation] = (pos << 2) + orientation;
    lookup_ij[(pos << 2) + orig_orientation] = (ij << 2) + orientation;
  } else {
    level++;
    i <<= 1;
    j <<= 1;
    pos <<= 2;
    const int* r = kPosToIJ[orientation];
    InitLookupCell(level, i + (r[0] >> 1), j + (r[0] & 1), orig_orientation,
                   pos, orientation ^ kPosToOrientation[0]);
    InitLookupCell(level, i + (r[1] >> 1), j + (r[1] & 1), orig_orientation,
                   pos + 1, orientation ^ kPosToOrientation[1]);
    InitLookupCell(level, i + (r[2] >> 1), j + (r[2] & 1), orig_orientation,
                   pos + 2, orientation ^ kPosToOrientation[2]);
    InitLookupCell(level, i + (r[3] >> 1), j + (r[3] & 1), orig_orientation,
                   pos + 3, orientation ^ kPosToOrientation[3]);
  }
}

static absl::once_flag flag;
inline static void MaybeInit() {
  absl::call_once(flag, []{
    InitLookupCell(0, 0, 0, 0, 0, 0);
    InitLookupCell(0, 0, 0, kSwapMask, 0, kSwapMask);
    InitLookupCell(0, 0, 0, kInvertMask, 0, kInvertMask);
    InitLookupCell(0, 0, 0, kSwapMask|kInvertMask, 0, kSwapMask|kInvertMask);
  });
}

S2CellId S2CellId::advance(int64 steps) const {
  if (steps == 0) return *this;

  // We clamp the number of steps if necessary to ensure that we do not
  // advance past the End() or before the Begin() of this level.  Note that
  // min_steps and max_steps always fit in a signed 64-bit integer.

  int step_shift = 2 * (kMaxLevel - level()) + 1;
  if (steps < 0) {
    int64 min_steps = -static_cast<int64>(id_ >> step_shift);
    if (steps < min_steps) steps = min_steps;
  } else {
    int64 max_steps = (kWrapOffset + lsb() - id_) >> step_shift;
    if (steps > max_steps) steps = max_steps;
  }
  // If steps is negative, then shifting it left has undefined behavior.
  // Cast to uint64 for a 2's complement answer.
  return S2CellId(id_ + (static_cast<uint64>(steps) << step_shift));
}

int64 S2CellId::distance_from_begin() const {
  const int step_shift = 2 * (kMaxLevel - level()) + 1;
  return id_ >> step_shift;
}

S2CellId S2CellId::advance_wrap(int64 steps) const {
  S2_DCHECK(is_valid());
  if (steps == 0) return *this;

  int step_shift = 2 * (kMaxLevel - level()) + 1;
  if (steps < 0) {
    int64 min_steps = -static_cast<int64>(id_ >> step_shift);
    if (steps < min_steps) {
      int64 step_wrap = kWrapOffset >> step_shift;
      steps %= step_wrap;
      if (steps < min_steps) steps += step_wrap;
    }
  } else {
    // Unlike advance(), we don't want to return End(level).
    int64 max_steps = (kWrapOffset - id_) >> step_shift;
    if (steps > max_steps) {
      int64 step_wrap = kWrapOffset >> step_shift;
      steps %= step_wrap;
      if (steps > max_steps) steps -= step_wrap;
    }
  }
  return S2CellId(id_ + (static_cast<uint64>(steps) << step_shift));
}

S2CellId S2CellId::maximum_tile(const S2CellId limit) const {
  S2CellId id = *this;
  S2CellId start = id.range_min();
  if (start >= limit.range_min()) return limit;

  if (id.range_max() >= limit) {
    // The cell is too large.  Shrink it.  Note that when generating coverings
    // of S2CellId ranges, this loop usually executes only once.  Also because
    // id.range_min() < limit.range_min(), we will always exit the loop by the
    // time we reach a leaf cell.
    do { id = id.child(0); } while (id.range_max() >= limit);
    return id;
  }
  // The cell may be too small.  Grow it if necessary.  Note that generally
  // this loop only iterates once.
  while (!id.is_face()) {
    S2CellId parent = id.parent();
    if (parent.range_min() != start || parent.range_max() >= limit) break;
    id = parent;
  }
  return id;
}

int S2CellId::GetCommonAncestorLevel(S2CellId other) const {
  // Basically we find the first bit position at which the two S2CellIds
  // differ and convert that to a level.  The max() below is necessary for the
  // case where one S2CellId is a descendant of the other.
  uint64 bits = max(id() ^ other.id(), max(lsb(), other.lsb()));
  S2_DCHECK_NE(bits, 0);  // Because lsb() is non-zero.

  // Compute the position of the most significant bit, and then map the bit
  // position as follows:
  // {0} -> 30, {1,2} -> 29, {3,4} -> 28, ... , {59,60} -> 0, {61,62,63} -> -1.
  return max(60 - Bits::FindMSBSetNonZero64(bits), -1) >> 1;
}

// Print the num_digits low order hex digits.
static string HexFormatString(uint64 val, size_t num_digits) {
  string result(num_digits, ' ');
  for (; num_digits--; val >>= 4)
    result[num_digits] = "0123456789abcdef"[val & 0xF];
  return result;
}

string S2CellId::ToToken() const {
  // Simple implementation: print the id in hex without trailing zeros.
  // Using hex has the advantage that the tokens are case-insensitive, all
  // characters are alphanumeric, no characters require any special escaping
  // in queries for most indexing systems, and it's easy to compare cell
  // tokens against the feature ids of the corresponding features.
  //
  // Using base 64 would produce slightly shorter tokens, but for typical cell
  // sizes used during indexing (up to level 15 or so) the average savings
  // would be less than 2 bytes per cell which doesn't seem worth it.

  // "0" with trailing 0s stripped is the empty string, which is not a
  // reasonable token.  Encode as "X".
  if (id_ == 0) return "X";
  const size_t num_zero_digits = Bits::FindLSBSetNonZero64(id_) / 4;
  return HexFormatString(id_ >> (4 * num_zero_digits), 16 - num_zero_digits);
}

S2CellId S2CellId::FromToken(const absl::string_view token) {
  if (token.length() > 16) return S2CellId::None();
  uint64 id = 0;
  for (int i = 0, pos = 60; i < token.length(); ++i, pos -= 4) {
    uint64 d;
    if ('0' <= token[i] && token[i] <= '9') {
      d = token[i] - '0';
    } else if ('a' <= token[i] && token[i] <= 'f') {
      d = token[i] - 'a' + 10;
    } else if ('A' <= token[i] && token[i] <= 'F') {
      d = token[i] - 'A' + 10;
    } else {
      return S2CellId::None();
    }
    id |= d << pos;
  }
  return S2CellId(id);
}

void S2CellId::Encode(Encoder* const encoder) const {
  encoder->Ensure(sizeof(uint64));  // A single uint64.
  encoder->put64(id_);
}

bool S2CellId::Decode(Decoder* const decoder) {
  if (decoder->avail() < sizeof(uint64)) return false;
  id_ = decoder->get64();
  return true;
}

S2CellId S2CellId::FromFaceIJ(int face, int i, int j) {
  // Initialization if not done yet
  MaybeInit();

  // Optimization notes:
  //  - Non-overlapping bit fields can be combined with either "+" or "|".
  //    Generally "+" seems to produce better code, but not always.

  // Note that this value gets shifted one bit to the left at the end
  // of the function.
  uint64 n = absl::implicit_cast<uint64>(face) << (kPosBits - 1);

  // Alternating faces have opposite Hilbert curve orientations; this
  // is necessary in order for all faces to have a right-handed
  // coordinate system.
  uint64 bits = (face & kSwapMask);

  // Each iteration maps 4 bits of "i" and "j" into 8 bits of the Hilbert
  // curve position.  The lookup table transforms a 10-bit key of the form
  // "iiiijjjjoo" to a 10-bit value of the form "ppppppppoo", where the
  // letters [ijpo] denote bits of "i", "j", Hilbert curve position, and
  // Hilbert curve orientation respectively.
#define GET_BITS(k) do { \
    const int mask = (1 << kLookupBits) - 1; \
    bits += ((i >> (k * kLookupBits)) & mask) << (kLookupBits + 2); \
    bits += ((j >> (k * kLookupBits)) & mask) << 2; \
    bits = lookup_pos[bits]; \
    n |= (bits >> 2) << (k * 2 * kLookupBits); \
    bits &= (kSwapMask | kInvertMask); \
  } while (0)

  GET_BITS(7);
  GET_BITS(6);
  GET_BITS(5);
  GET_BITS(4);
  GET_BITS(3);
  GET_BITS(2);
  GET_BITS(1);
  GET_BITS(0);
#undef GET_BITS

  return S2CellId(n * 2 + 1);
}

S2CellId::S2CellId(const S2Point& p) {
  double u, v;
  int face = S2::XYZtoFaceUV(p, &u, &v);
  int i = S2::STtoIJ(S2::UVtoST(u));
  int j = S2::STtoIJ(S2::UVtoST(v));
  id_ = FromFaceIJ(face, i, j).id();
}

S2CellId::S2CellId(const S2LatLng& ll)
  : S2CellId(ll.ToPoint()) {
}

int S2CellId::ToFaceIJOrientation(int* pi, int* pj, int* orientation) const {
  // Initialization if not done yet
  MaybeInit();

  int i = 0, j = 0;
  int face = this->face();
  int bits = (face & kSwapMask);

  // Each iteration maps 8 bits of the Hilbert curve position into
  // 4 bits of "i" and "j".  The lookup table transforms a key of the
  // form "ppppppppoo" to a value of the form "iiiijjjjoo", where the
  // letters [ijpo] represents bits of "i", "j", the Hilbert curve
  // position, and the Hilbert curve orientation respectively.
  //
  // On the first iteration we need to be careful to clear out the bits
  // representing the cube face.
#define GET_BITS(k) do { \
    const int nbits = (k == 7) ? (kMaxLevel - 7 * kLookupBits) : kLookupBits; \
    bits += (static_cast<int>(id_ >> (k * 2 * kLookupBits + 1)) \
             & ((1 << (2 * nbits)) - 1)) << 2; \
    bits = lookup_ij[bits]; \
    i += (bits >> (kLookupBits + 2)) << (k * kLookupBits); \
    j += ((bits >> 2) & ((1 << kLookupBits) - 1)) << (k * kLookupBits); \
    bits &= (kSwapMask | kInvertMask); \
  } while (0)

  GET_BITS(7);
  GET_BITS(6);
  GET_BITS(5);
  GET_BITS(4);
  GET_BITS(3);
  GET_BITS(2);
  GET_BITS(1);
  GET_BITS(0);
#undef GET_BITS

  *pi = i;
  *pj = j;

  if (orientation != nullptr) {
    // The position of a non-leaf cell at level "n" consists of a prefix of
    // 2*n bits that identifies the cell, followed by a suffix of
    // 2*(kMaxLevel-n)+1 bits of the form 10*.  If n==kMaxLevel, the suffix is
    // just "1" and has no effect.  Otherwise, it consists of "10", followed
    // by (kMaxLevel-n-1) repetitions of "00", followed by "0".  The "10" has
    // no effect, while each occurrence of "00" has the effect of reversing
    // the kSwapMask bit.
    S2_DCHECK_EQ(0, kPosToOrientation[2]);
    S2_DCHECK_EQ(kSwapMask, kPosToOrientation[0]);
    if (lsb() & 0x1111111111111110ULL) {
      bits ^= kSwapMask;
    }
    *orientation = bits;
  }
  return face;
}

S2Point S2CellId::ToPointRaw() const {
  int si, ti;
  int face = GetCenterSiTi(&si, &ti);
  return S2::FaceSiTitoXYZ(face, si, ti);
}

S2LatLng S2CellId::ToLatLng() const {
  return S2LatLng(ToPointRaw());
}

R2Point S2CellId::GetCenterST() const {
  int si, ti;
  GetCenterSiTi(&si, &ti);
  return R2Point(S2::SiTitoST(si), S2::SiTitoST(ti));
}

R2Point S2CellId::GetCenterUV() const {
  int si, ti;
  GetCenterSiTi(&si, &ti);
  return R2Point(S2::STtoUV(S2::SiTitoST(si)),
                 S2::STtoUV(S2::SiTitoST(ti)));
}

R2Rect S2CellId::IJLevelToBoundUV(int ij[2], int level) {
  R2Rect bound;
  int cell_size = GetSizeIJ(level);
  for (int d = 0; d < 2; ++d) {
    int ij_lo = ij[d] & -cell_size;
    int ij_hi = ij_lo + cell_size;
    bound[d][0] = S2::STtoUV(S2::IJtoSTMin(ij_lo));
    bound[d][1] = S2::STtoUV(S2::IJtoSTMin(ij_hi));
  }
  return bound;
}

R2Rect S2CellId::GetBoundST() const {
  double size = GetSizeST();
  return R2Rect::FromCenterSize(GetCenterST(), R2Point(size, size));
}

R2Rect S2CellId::GetBoundUV() const {
  int ij[2];
  ToFaceIJOrientation(&ij[0], &ij[1], nullptr);
  return IJLevelToBoundUV(ij, level());
}

// This is a helper function for ExpandedByDistanceUV().
//
// Given an edge of the form (u,v0)-(u,v1), let max_v = max(abs(v0), abs(v1)).
// This method returns a new u-coordinate u' such that the distance from the
// line u=u' to the given edge (u,v0)-(u,v1) is exactly the given distance
// (which is specified as the sine of the angle corresponding to the distance).
static double ExpandEndpoint(double u, double max_v, double sin_dist) {
  // This is based on solving a spherical right triangle, similar to the
  // calculation in S2Cap::GetRectBound.
  double sin_u_shift = sin_dist * sqrt((1 + u * u + max_v * max_v) /
                                       (1 + u * u));
  double cos_u_shift = sqrt(1 - sin_u_shift * sin_u_shift);
  // The following is an expansion of tan(atan(u) + asin(sin_u_shift)).
  return (cos_u_shift * u + sin_u_shift) / (cos_u_shift - sin_u_shift * u);
}

/* static */
R2Rect S2CellId::ExpandedByDistanceUV(const R2Rect& uv, S1Angle distance) {
  // Expand each of the four sides of the rectangle just enough to include all
  // points within the given distance of that side.  (The rectangle may be
  // expanded by a different amount in (u,v)-space on each side.)
  double u0 = uv[0][0], u1 = uv[0][1], v0 = uv[1][0], v1 = uv[1][1];
  double max_u = max(fabs(u0), fabs(u1));
  double max_v = max(fabs(v0), fabs(v1));
  double sin_dist = sin(distance);
  return R2Rect(R1Interval(ExpandEndpoint(u0, max_v, -sin_dist),
                           ExpandEndpoint(u1, max_v, sin_dist)),
                R1Interval(ExpandEndpoint(v0, max_u, -sin_dist),
                           ExpandEndpoint(v1, max_u, sin_dist)));
}

S2CellId S2CellId::FromFaceIJWrap(int face, int i, int j) {
  // Convert i and j to the coordinates of a leaf cell just beyond the
  // boundary of this face.  This prevents 32-bit overflow in the case
  // of finding the neighbors of a face cell.
  i = max(-1, min(kMaxSize, i));
  j = max(-1, min(kMaxSize, j));

  // We want to wrap these coordinates onto the appropriate adjacent face.
  // The easiest way to do this is to convert the (i,j) coordinates to (x,y,z)
  // (which yields a point outside the normal face boundary), and then call
  // S2::XYZtoFaceUV() to project back onto the correct face.
  //
  // The code below converts (i,j) to (si,ti), and then (si,ti) to (u,v) using
  // the linear projection (u=2*s-1 and v=2*t-1).  (The code further below
  // converts back using the inverse projection, s=0.5*(u+1) and t=0.5*(v+1).
  // Any projection would work here, so we use the simplest.)  We also clamp
  // the (u,v) coordinates so that the point is barely outside the
  // [-1,1]x[-1,1] face rectangle, since otherwise the reprojection step
  // (which divides by the new z coordinate) might change the other
  // coordinates enough so that we end up in the wrong leaf cell.
  static const double kScale = 1.0 / kMaxSize;
  static const double kLimit = 1.0 + DBL_EPSILON;
  // The arithmetic below is designed to avoid 32-bit integer overflows.
  S2_DCHECK_EQ(0, kMaxSize % 2);
  double u = max(-kLimit, min(kLimit, kScale * (2 * (i - kMaxSize / 2) + 1)));
  double v = max(-kLimit, min(kLimit, kScale * (2 * (j - kMaxSize / 2) + 1)));

  // Find the leaf cell coordinates on the adjacent face, and convert
  // them to a cell id at the appropriate level.
  face = S2::XYZtoFaceUV(S2::FaceUVtoXYZ(face, u, v), &u, &v);
  return FromFaceIJ(face, S2::STtoIJ(0.5*(u+1)), S2::STtoIJ(0.5*(v+1)));
}

inline S2CellId S2CellId::FromFaceIJSame(int face, int i, int j,
                                         bool same_face) {
  if (same_face)
    return S2CellId::FromFaceIJ(face, i, j);
  else
    return S2CellId::FromFaceIJWrap(face, i, j);
}

void S2CellId::GetEdgeNeighbors(S2CellId neighbors[4]) const {
  int i, j;
  int level = this->level();
  int size = GetSizeIJ(level);
  int face = ToFaceIJOrientation(&i, &j, nullptr);

  // Edges 0, 1, 2, 3 are in the down, right, up, left directions.
  neighbors[0] = FromFaceIJSame(face, i, j - size, j - size >= 0)
                 .parent(level);
  neighbors[1] = FromFaceIJSame(face, i + size, j, i + size < kMaxSize)
                 .parent(level);
  neighbors[2] = FromFaceIJSame(face, i, j + size, j + size < kMaxSize)
                 .parent(level);
  neighbors[3] = FromFaceIJSame(face, i - size, j, i - size >= 0)
                 .parent(level);
}

void S2CellId::AppendVertexNeighbors(int level,
                                     vector<S2CellId>* output) const {
  // "level" must be strictly less than this cell's level so that we can
  // determine which vertex this cell is closest to.
  S2_DCHECK_LT(level, this->level());
  int i, j;
  int face = ToFaceIJOrientation(&i, &j, nullptr);

  // Determine the i- and j-offsets to the closest neighboring cell in each
  // direction.  This involves looking at the next bit of "i" and "j" to
  // determine which quadrant of this->parent(level) this cell lies in.
  int halfsize = GetSizeIJ(level + 1);
  int size = halfsize << 1;
  bool isame, jsame;
  int ioffset, joffset;
  if (i & halfsize) {
    ioffset = size;
    isame = (i + size) < kMaxSize;
  } else {
    ioffset = -size;
    isame = (i - size) >= 0;
  }
  if (j & halfsize) {
    joffset = size;
    jsame = (j + size) < kMaxSize;
  } else {
    joffset = -size;
    jsame = (j - size) >= 0;
  }

  output->push_back(parent(level));
  output->push_back(FromFaceIJSame(face, i + ioffset, j, isame).parent(level));
  output->push_back(FromFaceIJSame(face, i, j + joffset, jsame).parent(level));
  // If i- and j- edge neighbors are *both* on a different face, then this
  // vertex only has three neighbors (it is one of the 8 cube vertices).
  if (isame || jsame) {
    output->push_back(FromFaceIJSame(face, i + ioffset, j + joffset,
                                     isame && jsame).parent(level));
  }
}

void S2CellId::AppendAllNeighbors(int nbr_level,
                                  vector<S2CellId>* output) const {
  S2_DCHECK_GE(nbr_level, level());
  int i, j;
  int face = ToFaceIJOrientation(&i, &j, nullptr);

  // Find the coordinates of the lower left-hand leaf cell.  We need to
  // normalize (i,j) to a known position within the cell because nbr_level
  // may be larger than this cell's level.
  int size = GetSizeIJ();
  i &= -size;
  j &= -size;

  int nbr_size = GetSizeIJ(nbr_level);
  S2_DCHECK_LE(nbr_size, size);

  // We compute the top-bottom, left-right, and diagonal neighbors in one
  // pass.  The loop test is at the end of the loop to avoid 32-bit overflow.
  for (int k = -nbr_size; ; k += nbr_size) {
    bool same_face;
    if (k < 0) {
      same_face = (j + k >= 0);
    } else if (k >= size) {
      same_face = (j + k < kMaxSize);
    } else {
      same_face = true;
      // Top and bottom neighbors.
      output->push_back(FromFaceIJSame(face, i + k, j - nbr_size,
                                       j - size >= 0).parent(nbr_level));
      output->push_back(FromFaceIJSame(face, i + k, j + size,
                                       j + size < kMaxSize).parent(nbr_level));
    }
    // Left, right, and diagonal neighbors.
    output->push_back(FromFaceIJSame(face, i - nbr_size, j + k,
                                     same_face && i - size >= 0)
                      .parent(nbr_level));
    output->push_back(FromFaceIJSame(face, i + size, j + k,
                                     same_face && i + size < kMaxSize)
                      .parent(nbr_level));
    if (k >= size) break;
  }
}

string S2CellId::ToString() const {
  if (!is_valid()) {
    return StrCat("Invalid: ", absl::Hex(id(), absl::kZeroPad16));
  }
  string out = StrCat(face(), "/");
  for (int current_level = 1; current_level <= level(); ++current_level) {
    // Avoid dependencies of SimpleItoA, and slowness of StrAppend &
    // std::to_string.
    out += "0123"[child_position(current_level)];
  }
  return out;
}

std::ostream& operator<<(std::ostream& os, S2CellId id) {
  return os << id.ToString();
}

S2CellId S2CellId::FromDebugString(absl::string_view str) {
  // This function is reasonably efficient, but is only intended for use in
  // tests.
  int level = static_cast<int>(str.size() - 2);
  if (level < 0 || level > S2CellId::kMaxLevel) return S2CellId::None();
  int face = str[0] - '0';
  if (face < 0 || face > 5 || str[1] != '/') return S2CellId::None();
  S2CellId id = S2CellId::FromFace(face);
  for (int i = 2; i < str.size(); ++i) {
    int child_pos = str[i] - '0';
    if (child_pos < 0 || child_pos > 3) return S2CellId::None();
    id = id.child(child_pos);
  }
  return id;
}

redpajama_set_name: RedPajamaGithub


I've always believed that, what matters most is not what happens to you, but the person you become because of it. Lately though, this thought just slipped away. When you're in the middle of a mess you tend to forget everything. You have reasons but you don't know what they are. You just hide behind the busyness and chaos of a stress-induced lifestyle. You lose yourself and those who matter most to you. You simply forget.
I remember how, one day —with my meager strength all sapped away— I woke up to a throbbing pain in my chest. I even had to catch my breath for simply trying to get up out of my bed. I could've stayed there. Instead, I took to work. And then.
I barely survived that day, my weakness unnoticed. For it was more a weakness from within. My heart lagged behind, willing for a break. (I have this congenital heart condition, an atrial septal defect. A corrective surgery could not yet be done due to financial difficulties.) But, about three months ago, I tried to run away from my present job. I'd felt a dead-end coming by then. Well, I've been running away from a lot of things. I know. I've tried to run away from religion, relationships, commitment. Anything that threatened to "possess" me. Anyway, I digressed. So, it was only after spending another day and a half confined in a hospital room —completely shut off from the chaos— that I took a sharp turn from my self-destructive habits.
I just let go. And it was not an easy feat.
When you take on your personal "giants", unarmed, most of the time you fail. And you don't just fail at the end, you actually fail long before the end. From what I've been through, that hurts the most. I had personal goals. I wanted them so much, it hurt so bad. I was losing my little battles. And I knew I had to win them first. Yet, it was a lot easier to hold on.
Alone, I stood back up. I've chosen to take on the impossible odds. Why not? It worked.
You can view the stresses of life as a gruesome burden, one that pulls you out of every sinecure comfort and hiding you can find, or you can embrace it as a chance to stretch. And to spread your wings. To take on a new horizon. To stop surviving and start living. Truly.


Growing populations and improving economies worldwide, especially in the developing world, are projected to lead to huge increases in global demand for space cooling, dehumidification, and refrigeration. This will make reaching global energy and climate goals extremely challenging. In order to address this, what actions can the global HVAC&R community take to reduce the impact of this demand growth?
consumption increases. The main technology focus areas are traditional vapor compression, alternative vapor compression approaches, and non-traditional cycle approaches for AC and/or refrigeration applications. The Annex scope is broad, but the challenge is also huge; it is not likely that there will be only one, or a few, "right" solutions.


manufacturers of portable small scale iron ore smelter . small scale iron ore smelting. . future of sponge iron in india and plant design data . - . buy Small Induction Smelter - WeiKu . Small Induction Smelter trade offers directory and Small Induction Smelter business offers list.
· iron ore smelter manufacturer in china - Crusher South Africamanufacturers of portable small scale iron ore smelter … manufacturers of portable small scale iron ore smelter.
There are 328 iron ore smelting machine suppliers, mainly located in Asia. The top supplying country is China (Mainland), which supply of iron ore smelting machine respectively. Iron ore smelting machine products are most popular in Mid East, Domestic Market, and Africa.
China Iron Ore - Select 2018 Iron Ore products from verified China Iron Ore manufacturers, suppliers on Made-in-China.com.
Pulp and paper industry - Wikipedia. The pulp and paper industry comprises companies that use wood as raw material and produce pulp, paper, paperboard and other cellulose-based products..
Iron ore smelter International sales of iron ore exports by country amounted to US$94.9 billion in 2017, down by a third (-33.6%) from 2013 when iron ore shipments were valued at $143 billion. In contrast, globally exported iron ore gained 30.8% from 2016 to 2017.
Manufacturer of brown fused alumina, Silicon carbide price; Established in 2010; Employees Total: 101 - 500 smelting furnace, since a large stove, furnace temperature is high, refined smelting technology, product quality to the domestic first-class level.
ore smelting ore smelting manufacturers - skw-baueu. iron smelting manufacturer/supplier,, Smelting Chromium Suppliers and,Smelting Chromium,, chrome smelting chrome smelting manufacturers suppliers . More. chrome smelting plant equipment and machinery.
industry and typically involves smelting to convert iron ore into pig-iron (in South Africa primarily via the blast furnace route) and then refining (eg using a basic oxygen furnace) ... • manufacturers/end users that consume both standard steel products and intermediate products from converters.


text:
Get the latest on our spring planning.
News Store MySJC
Information ForExpand
Alumni Donors Friends Parents Current Students Prospective Students Teachers and Counselors Employers
Give Visit Apply
About St. John's
Board of Visitors & Governors
Careers After St. John's
Graduate Institute
Online High School Seminars
Statement of the Program
Off Campus Experience
The Mitchell Gallery
Off-Campus Experience
Personal & Professional Development
January Freshman Program
Meow Wolf: A Growing Artistic Enterprise
May 5, 2017 | By Samantha Ardoin (SF16)
Maggie Thornton (SF15) continues to brainstorm new ideas at Meow Wolf. (Photo by Brandon Soder)
Maggie Thornton found her way to Meow Wolf almost incidentally.
The St. John's College alumna (SF15) befriended some artists and sought them out when she needed a break from her schoolwork.
In 2015, months before graduation, Thornton was invited to collaborate on the Techno Room—a House of Eternal Return environment, covered in fuzzy material, that blasts techno music continually—after mentioning her interest in curating electronic music.
Balancing her senior year and a massive Meow Wolf architectural and curatorial project was intense.
"If it sounds insane, it's because it was insane," she says.
Thornton was stretched in new directions and, after graduation, joined the tech team full time. Several months later, the House of Eternal Return opened to massive crowds and rave reviews.
Thornton continues to brainstorm new projects, and the St. John's Program continues to inspire her work.
At Meow Wolf and at St. John's, Thornton has seen a confluence of electricity, chemistry and history. Her current work on casting and molding research has allowed her to draw upon her knowledge of chemistry and physics. She has also been working on virtual-reality research and development, as well as prefabrication, which includes delving into woodworking, digital fabrication using the laser cutter, and other methods of 3-D printing.
"I'm only 23, and this is my first job, but I've used every ounce of information from St. John's," she says. "Rest assured, Johnnies, you need all that."
In October, Thornton collaborated with another alumna, Amelia Stickney (SF14), on a Halloween performance. The project melded dance and improvisation, and patrons experienced it firsthand in the House of Eternal Return. But for Stickney—the daughter of Santa Fe tutors Cary and Susan—this wasn't her first involvement with Meow Wolf.
Amelia Stickney (SF14) has been involved with Meow Wolf for years. (Photo by Brandon Soder)
Her first involvement was years before, with the play The Moon is to Live On, when the company was a young arts collective. The play featured giant handmade puppets and sculpture, and Stickney acted and choreographed dance. Years later, she was invited to join the more established Meow Wolf and she jumped.
Officially, Stickney is the company's executive assistant, and her duties include the exciting and the mundane: from networking in Denver and Los Angeles to cleaning the office and coordinating catering for meetings.
Stickney is thrilled about the growth of the company and its unbounded creativity.
"There were so many people working on the House of Eternal Return for very little money, and it brought such a tremendous success that now we're able to employ more than 100 people," she says.
Meow Wolf is now looking to expand its immersive art experiences in major cities around the country. Denver and Austin are first on their list, and team members are examining spaces in both cities that are up to 100,000 square feet—much bigger than the current House of Eternal Return. The company is also working on some traveling exhibitions and festival installations around the country.
In addition, Meow Wolf's members recently started Creative Studios, which will serve as a parent company that allows member artists to develop new projects, such as installations with narratives in other cities.
Sean Di Ianni, the co-founder and chief operating officer, became involved as an artist during Meow Wolf's 2008 founding, and he oversaw the project management for the House of Eternal Return. This included coordinating the architecture, construction, budgeting and scheduling for the renovation of the bowling alley.
The kitchen is shown in House of Eternal Return. (Photo by Brandon Soder)
He also contributed to the overall design and concept for the project, as well as the business model. Now he works on creating organizational systems and developing major projects for Creative Studios, the full-time parent production company, and continues to make art.
Di Ianni's educational background married art school at Rhode Island School of Design with graduate school at St. John's—where he was finally able to engage with the great books and further his practice of collaborative learning. Di Ianni realized that everything he loved about collaborative critique at RISD, and about collaborative creation at Meow Wolf, was also alive in seminar.
"We learn a lot from each other at Meow Wolf," Di Ianni says, "and we're always looking for ways to empower people to explore new ideas."
His time at St. John's was similar.
"It helped me refine and expand my capacity for working on collective inquiry, and also for engaging with my own individual artistic concerns," he says. "St. John's reinforced the idea that our greatest assets are each other, and one of the best ways for us to grow is by asking hard questions of each other and listening well. We do that everyday at Meow Wolf."
Catch up on Part 1 of the series: Meow Wolf: Johnnies and the Art of Collaborative Inquiry.
60 College Avenue
1160 Camino de Cruz Blanca
To send gifts to the college via mail:
St. John's College, PO Box 75905, Baltimore, MD 21275-5905
Contact Annapolis
Subscribe to Annapolis Emails
Annapolis Hotels and B&Bs
Contact Santa Fe
Subscribe to Santa Fe Emails
Santa Fe Hotels
Facebook Twitter Youtube All Social Media
Privacy Statement Title IX HEOA Disclosures A to Z Index Website Feedback
Alumni Donors Parents Current Students Prospective Students Friends Teachers and Counselors Employers
Freeing Minds
A Campaign for St. John's College
© 2021 St. John's College
Site Navigation Mobile
About St. John's
Give Visit Apply News Store MySJC
Alumni Donors Current Students Prospective Students Friends Parents Teachers and Counselors Employers

redpajama_set_name: RedPajamaCommonCrawl


text:
Home/News/Insights/AskWaves/Has the U.S. now reached a level of energy independence?
AskWavesEnergyFuelInsightsNews
Is the US now energy independent?
President Donald Trump earlier in January made the following statement: "Over the last three years under my leadership, our economy is stronger than ever before and America has achieved energy independence." Is this true?
We will concede that since the first energy crisis in the 1970s, the discussion of whether the U.S. is energy independent has generally focused on oil. "Energy" could mean other things. The U.S. is a net exporter of coal. With the explosion of LNG exports in recent years, it has become a net exporter of natural gas as well.
What has led some declarations of U.S. energy independence is the fact that for the last two months, the U.S. Energy Information Administration's monthly statistical report has had a negative number under the category of net petroleum imports. It means that when you add in every barrel of petroleum shipped out of the U.S. — crude, products, natural gas liquids like propane and butane — there was more petroleum exported than imported. Hence, the U.S. is "energy independent" in the sense that it ships out more barrels of everything petroleum than it imports.
Is it that simple?
Far from it. Let's look at some basic numbers from the October 2019 report, the most recent of the EIA:
• U.S. field production of crude oil was 12.6 million b/d. Inputs of crude into refineries were 16.1 million b/d. But that October number was significantly below the norm because of heavy refinery maintenance. In July, for example, throughput was 17.84 million b/d. Whether it was October or August, the U.S. needed to bring in crude oil to fill that gap.
• Total U.S. consumption of all petroleum and biofuels is generally between 20 million and 21 million b/d. Total production of all U.S. petroleum, natural gas liquids (like propane, which are considered petroleum) and biofuels is about 18.7 million b/d. So right there, an imbalance exists.
• It's a big country. The U.S. produces lots of oil in Texas, North Dakota, Louisiana and Oklahoma (to cite the leading producers east of the Rockies.) It also produces a significant amount in California. But California's production and shipments down from Alaska are nowhere near big enough to serve the needs of that state or the rest of the West Coast. So in October, the West Coast area known as PADD 5 brought in about 1.7 million b/d of crude imports. The amount of oil it brought in from other areas of the country, presumably all by rail, worked out to less than 1,000 b/d. It's simply far easier to import its crude requirement rather than bring it from over the Rocky Mountains or the Cascades into the Puget Sound refineries. (It would need to be by rail. There are no pipelines.)
Are there other considerations with crude imports and exports that mean we'll always be a petroleum importer even though on net we're an exporter?
Yes, and quality is a key factor in answering that question. The U.S. has seen its crude production soar from about 5 million b/d in 2008 to almost 13 million b/d now. That's the result of the shale revolution in places like North Dakota, the Eagle Ford in south Texas and the Permian basin in Texas and New Mexico. But a lot of that oil is "light," with a high number for what is known as API gravity. Where there's a problem with the U.S. refining system is that for years that system invested to refine what it expected would be an increasingly heavy barrel that would be imported from Venezuela, Mexico and the Canadian oil sands, among other sources. But Mexican and Venezuela output plummeted and the U.S. began pumping out light crude.
The refining system then had three pathways: It could massively invest to make these refineries more suited to light crudes, but given the always precarious financial position of refining, that probably would have killed some refineries; it could run light crudes through heavy refineries, a highly inefficient process; or it could keep processing heavy oil — much of it imported — through the highly developed refineries of the U.S., considered some of the world's most complex. And it could take the light stuff and ship it out, which it is doing to the tune of more than 3 million b/d and at times topping 4 million b/d. The latter approach is clearly the most economically efficient, and that's what has mostly happened.
When you look at the net export figure, are there numbers that go into it that most people won't think about?
There are two big ones. The shale revolution in the U.S. has unleashed a gigantic surge in the output of natural gas liquids: propane, different types of butane, ethane. The production far exceeds the U.S. ability to consume it so exports are necessary. In October, the U.S. exported 1.17 million b/d of propane. Ten years ago, it exported 20,000 b/d. Ethane is a product that had been problematic to export because it needed costly refrigeration and liquefaction. But the economics on it became so strong that the U.S. in October exported 314,000 b/d of ethane. Ten years ago, nobody even kept records of ethane exports because they didn't exist.
The second category is petroleum coke. We mentioned earlier the high level of complexity in the U.S. refining system. That includes a significant amount of a process known as coking, which can take heavier intermediate petroleum products and squeeze more diesel and gasoline out of them. But the process leaves behind a product called petroleum coke, which can be used in various industrial processes, like aluminum smelting. The U.S. exports anywhere between 500,000 to 600,000 b/d of petroleum coke. That's in that figure for net exports.
The oil supply chain is complex and there's often a mismatch — geographically or quality — between what's coming out of the ground or refineries and what the nation needs. Imports and exports allow "free passage" through those mismatches.
The focus on Mideast oil dependence is usually tied up with crude. What is the situation regarding the key transportation products like diesel and gasoline?
As we've noted, the U.S. doesn't produce anywhere near enough crude to feed its refineries, much less its roughly 20 million to 21 million b/d in petroleum consumption. So clearly, the position of U.S. net exporter isn't coming from crude. Even as the U.S. is also importing lots of products, it's exporting lots of products too.
Why doesn't it just make sense to keep everything here?
As mentioned before, there are mismatches. U.S. refineries are tremendously complex and are considered some of the most sophisticated in the world. But they can't make the precise right amount of products to match consumption. Some of the better refineries are in one location, while the less complex might be in another. Given that the capacity to move products around the country is robust but still not perfect, it makes sense in many cases to export some products and import that same product into another part of the country. Also, the economics of the West Coast for imports and exports are likely to be completely different than the Gulf Coast or East Coast. So for example in October, the U.S. exported about 5.5 million b/d of distillates, including diesel. It also imported 1.2 million b/d of distillates. The split on gasoline was 3.5 million b/d of imports and 843,000 b/d of exports. But that's an aggregate number; those ratios don't hold in each of the country's major refining regions. There are hundreds of individual transactions going into each of those barrels and the economics of each of them differ. That's why the U.S. is a big importer and exporter at the same time.
So is the U.S. energy independent?
If your definition is we export more than import, then yes, then we have reached U.S. energy independence. But as you can see here, it's far more complex than that.
John Kingston
John has an almost 40-year career covering commodities, most of the time at S&P Global Platts. He created the Dated Brent benchmark, now the world's most important crude oil marker. He was Director of Oil, Director of News, the editor in chief of Platts Oilgram News and the "talking head" for Platts on numerous media outlets, including CNBC, Fox Business and Canada's BNN. He covered metals before joining Platts and then spent a year running Platts' metals business as well. He was awarded the International Association of Energy Economics Award for Excellence in Written Journalism in 2015. In 2010, he won two Corporate Achievement Awards from McGraw-Hill, an extremely rare accomplishment, one for steering coverage of the BP Deepwater Horizon disaster and the other for the launch of a public affairs television show, Platts Energy Week.
The FreightWaves oil report: Mexico steps in with a new chunk of low sulfur diesel demand


How can one understand the failures of the constitutional revision announced by François Hollande in the aftermath of the November 2015 terrorist attacks ? The article proposes to re-examine this episode by offering a historian's reading presented according to different temporalities. By doing so, it raises the issue of the dialogue between history and power, around the confrontation between past and present initiated by this event.


The Tiger volleyball season is down to one match following a 3-0 loss to No. 2 University of Texas-Brownsville. The Scorpions topped Doane 25-21, 25-19 and 25-19.
The Doane attack struggled against UTB, committing 27 attack errors in the match while picking up 33 kills. Ashley Axmann led the Tigers with 11 kills and Terra Andreasen added seven kills. Emily Max led the Tigers with four total blocks.
Heather Davison dished out 21 set assists for the Tigers with Amy Kreikemeier having the lone ace serve. Nicole Skolnick posted a team-high 15 digs.
Doane will face St. Ambrose on Thursday evening in the last match of the season. Both teams are 0-2 in pool play and looking to finish the season on a positive note. It will mark the final match for seniors Davison and Skolnick. The game can be heard on the Tiger Sports Network.


text:
WhatsApp: We Should Discuss What Our Data Is Used For, Not Who Has It
Oct 29, 2020, 02:19pm EDT
Three Things You'll Need Before Starting A New Business
How Do Employee Needs Vary From Generation To Generation?
Where Is There Still Room For Growth When It Comes To Content Creation?
Here Is Some Good Advice For Leaders Of Remote Teams
How Can Tech Companies Become More Human Focused?
What Impact Is Technology Having On Today's Workforce?
How Is Blackness Represented In Digital Domains?
Oct 3, 2020, 05:15pm EDT
Why Should Leaders Stop Obsessing About Platforms And Ecosystems?
Sep 30, 2020, 12:05pm EDT
Why Is The Future Of Business About Creating A Shared Value For Everyone?
Nov 21, 2016, 08:57am EST |
CIOs' Top Three Concerns for 2017: Alignment, Security, Skill Shortages
Peter HighContributor
The Society for Information Management (SIM) recently released their 2017 trends analysis. They reflect the continuing evolution of business trends being information technology trends. Moreover, IT has increasingly become a priority for most businesses. SIM notes that IT budgets have increased this year by an average of 4.15%, short of last year's increase of 4.6%, but positive nevertheless.
The report also notes that IT professionals' salaries have risen by 3.5%, and IT staff hiring has also increased. The shift of budgets to cloud computing from hardware and software continues, and are likely to increase again in the year ahead.
IT executives highlight three top concerns:
Business alignment
This has been the top priority for four years running. It was listed as the top priority for IT leaders among 41.7% of those executives polled.
36% of IT leaders noted security as their top concern. Remarkably, just four years ago, security was listed as the ninth area of concern. Higher profile security breaches and increased emphasis on the topic by the executive teams and boards of companies will mean that this concern is likely to remain high for IT executives.
IT skill shortages
24% of IT leaders indicated that skills shortages were the top concern. The concern center around technical skills like analytics, software development, cybersecurity and cloud-centric skill, but increasingly, there is concern regarding the paucity of soft skills.
IT leaders are increasingly taking on more strategic responsibilities. This is aided by the fact that 46.3% of CIOs now report to the CEO, according to the SIM report. This is compared to 28.6% who report to CFOs and 16.8% who report to COOs. CIOs now meet with various members of the C-suite on a weekly basis. This represents great progress for the function.
SIM concludes that other than the CEO, the CIO has the most complex, broad, and diverse set of responsibilities. This is demonstrated by the need to think to the future in aiding the strategies of every division of the company. CIOs must also help drive the innovation agenda for the company while also focusing on risk mitigation associated with security investments. The simultaneous focus on risk taking (a necessity with innovation activities) and risk mitigation is but one demonstration of the complexity of the role. The progress made in the function suggests that more CIOs are up to the challenge.
Peter High is President of Metis Strategy, a business and IT advisory firm. His latest book is Implementing World Class IT Strategy. He is also the author of World Class IT: Why Businesses Succeed When IT Triumphs. Peter moderates the Forum on World Class IT podcast series. He speaks at conferences around the world. Follow him on Twitter @PeterAHigh.
Peter High
I am the president of Metis Strategy, a business and IT strategy firm that I founded in 2001. I have advised many of the best chief information officers at multi-billion
I am the president of Metis Strategy, a business and IT strategy firm that I founded in 2001. I have advised many of the best chief information officers at multi-billion dollar corporations in the United States and abroad. I've written for the Wall Street Journal, CIO Magazine, CIO Insight, Information Week and several other periodicals. I am also the author of Implementing World Class IT Strategy: How IT Can Drive Organizational Innovation (Wiley Press, September 2014) and of World Class IT: Why Businesses Succeed When IT Triumphs (Wiley Press, December 2009), a book on leading IT practices that has sold over 16,000 copies around the world. Since 2008, I have moderated a widely listened to podcast entitled "Technovation with Peter High," which features a wide array of IT thought-leaders, and is available at www.forumonworldclassit.com on a weekly basis. I have been the keynote speaker at a host of corporate conferences and universities in the US, Canada, Mexico, the United Kingdom, the Republic of Ireland, the Czech Republic, Spain, China, India, Australia, and Saudi Arabia. You can reach me at peter.high [at] metisstrategy.com or on Twitter @PeterAHigh


It's been a little while since I've added to The Last Official Release series – nearly a month, actually (when I covered the Nokia N-Gage) – so, hold onto your Dreamcast branded hats as I get back into the swing of things. For the uninitiated, The Last Official Release explores the last official games released for your favourite consoles. If the Atari Lynx does not happen to be your favourite, fear not. This is the 18th console I've covered so far. A full list of previous entries can be found below.
There were many handhelds of the eighties and nineties that could not compete with the powerful wrath of the Nintendo Game Boy, and the Lynx was sadly a victim. Released only 2-months after the beforementioned, the Lynx was at least no slouch in the specifications department. It was the first handheld to include a backlit colour LCD to show its 16-bit visuals after all and also had the distinction of being able to be played in either portrait or landscape modes thanks to its ambidextrous layout.
Additionally, it was capable of advanced graphics on such a kit for the time. It was competent in the scaling and zooming of sprites on a hardware level, handy for pseudo-3D graphics, as well as a 4096-colour palette and a 160×102 pixel resolution. It also featured pretty decent networking capabilities thanks to the Comlynx cable. Theoretically, up to 16-units could be connected for multiplayer, although most games only utilised up to eight.
So, what went wrong? Everything was fine on paper. The answer is Atari. Atari happened. You see, the Lynx was actually developed by Epyx, who went to Atari for help once they realised they didn't have the resources to produce such a handheld. They struck a deal where Epyx focused on development, while Atari handled promotional and manufacturing responsibilities. To cut a long story short, Atari didn't quite fulfil their obligations, even after Epyx went bankrupt ensuring they were essentially in charge of the entirety of the project.
Even though it had the specifications and even a decent line-up of games, it ultimately couldn't compete with the affordability and the even larger range of games that the Game Boy offered. Let alone the marketing campaigns. It eventually even lost out to the Sega Game Gear (which its self was in distant second place to the Game Boy) and was discontinued in 1996 after selling 3-million units. For comparisons sake, the Game Boy sold over 118-million units while even the Game Gear sold just under 11-million.
Only 73 games were ever released for the Lynx officially, with most seeing the light of day in the first few years of the nineties. Even though it was discontinued in 1996, the last ever game was actually from the year previous. Super Asteroids & Missile Command was released in North America and Europe only in 1995, and as you can probably guess, features both the arcade classics Asteroids and Missile Command on the same cartridge.
There really isn't a whole bunch to say about it really. Obviously, it features enhanced visuals and sound over the arcade originals and was both developed and published by Atari themselves, with programming responsibilities falling to Steve Marschner, who also programmed Ishido: The Way of Stones on the system in 1991.
Interestingly, a very similar compilation was released on the Game Boy in 1995 too. Part of the Arcade Classics series, Arcade Classic 1: Asteroids + Missile Command was developed by The Code Monkeys and published by Nintendo. It's completely unrelated to its Lynx counterpart bar the licencing, but it's interesting it came out the same year. The only reason it clicked with me that they both exist is because I happen to own the Game Boy version myself.
Regardless, if you want to own Super Asteroids & Missile Command for yourself, be prepared to hunt. Atari Age gives it a "scarce" rating and as of writing, I can only find two listings on eBay. The prices seem to vary widely too, even if it is a small sample size. Both listings are for 'new' condition copies (whatever that means anymore) with one selling for $50 while the other is over $250. Search well if you're interested.


text:
Skip to main content Skip to primary navigation Skip to secondary navigation Skip to footer navigation
Current: Horowhenua local joins Provincial Growth Fund's Manawatū-Whanganui team
Manawatū/Whanganui
Catriona McKay, Principal Regional Advisor for Manawatū-Whanganui
Based in Levin, Ms McKay is passionate about the diversity of the region she lives in and the leadership displayed by District Councils, Economic Development Agencies and iwi.
She has a background in commercial law and spent more than 10 years in the public sector in senior roles, and had a particular focus on digital innovation.
"I see strong potential for what the PGF can build on in Manawatū-Whanganui," says Ms McKay.
"My role is about connecting people with opportunities, whether that's projects that create jobs, provide education for young people not in employment, education or training (NEETs), maximise our tourism assets or big-picture collaboration with partner agencies," says Ms McKay.
"As a region, we are progressing well with our Economic Action Plans, which gives the PGF a clear pathway to growth that investment can help accelerate."
"We know there are pockets of Manawatū-Whanganui that face challenges like heavily seasonal employment and high NEET rates. Working closely with people in the community is essential to make sure the right projects are funded in the right communities," says Ms McKay.
"Iwi lead a diverse number of projects and initiatives in the region which makes collaboration with partner agencies and our Whenua Māori team vital," she says.
"It's great to be working with Di Grennell, PGF Senior Regional Official, with her dual role as Deputy Chief Executive for Regional Partnerships at Te Puni Kōkiri," says Ms McKay.
With more than $80 million of funding announced for projects in the region, the PGF has made strong investments across a number of sectors that will help grow Manawatū-Whanganui's economy.
Ms McKay is clear that the PGF is a significant opportunity for groups looking for a step-change in support from Government.
"It really opens your eyes to what's possible, particularly when funding is driven by the region and the people who know our area the best. There's an opportunity for us to build on a legacy that will in turn create impacts that will be felt long after the life of the PGF. Real progress happens when people feel like part of the fabric, not just on the side lines of change."
The Provincial Growth Fund
Sector Workforce Engagement Programme
Governance and decision-making
Data, statistics, and public information


In trying to eliminate that bit of troublesome abdominal and lower back fat, I revisited Martin's Leangains article on the topic. He recommends Yohimbe, which I tried, in conjunction with caffeine, which I have not tried (seemed excessive). Has anyone else tried this (or variations on this)? It's working for me--perhaps too well. (Lost four pounds after a long plateau.) Are there pitfalls to this (other than having to buy new pants)?
I just read the link below (and a few others). Im thinking Im going to cut this stuff out. Haven't seen enough results to justify the risks. Thanks, Stephen.
Sounds like me when I used to take Redline. That shiz was lethal!
I would sweat like it was 150drg, stomach flip, heart racing 800mph for hours, miserable, then crash to sleep. You can read about the negatives all over the place.
We'll I'd say if you got through your plateau, you could take a break from it if it concerns you.
How could you tell it was affecting your adrenals / kidneys? Any glaring symptoms?
I'm taking a very low dose of the stuff; that said, I'm liking it less and less from what I've read so far.
can you link to the leangains article?
Hrm, I always thought Yohimbe was pecker stuff. Looks like it is really a stimulant. Some of the side-effects look nasty for overdoses, so be careful with that (more is not faster).
Other than that, from what you're saying, it really strikes me as another EC/ECA stack. Ephedrine/Caffeine/Aspirin. A very effective combo for short term weight loss (albeit with a few high profile deaths from people overdosing or using in the wrong situation). I've got more experience with EC (none with Yohimbe). Sounds like the effect is similar, so info probably applies to both.
The EC stack is a stimulant combo that ramps up your metabolism (so you burn fat faster). It will stress your body, reduce your appetite, etc. So if you aren't careful, you'll have insomnia, jitters, etc. The appetite comes back after a couple weeks as you get used to it. I usually took it in the morning, never in the evening. It also dehydrates you, so you need to drink more water.
If I knew I would be in a stressful situation, I didn't take it (stress upon stress is bad for you). One of the guys that died was a guy trying to join a football team. He was trying to cut weight + do all the strenuous football camp stuff at the same time. So tons of exercise + dehydrated = mondo stress on the body and for him, death.
For the EC stack, the recommendation is around 4 weeks on, 2-3 weeks off. It's not a permanent thing to take. Your body gets used to the stimulant, and the effectiveness drops off. You don't want to take higher doses because then you end up overdosing and end up suffering the nastier side-effects.
Once you stop, you start gaining weight back unless your diet is in gear. So good to get you over a plateau, but not necessarily something to take for long periods of time, and you'll lose all your hard work if you slack off on the food front.
As with any stimulant, when you stop, you will probably suffer withdrawal symptoms, so expect and plan for that. You may need to taper down instead of stopping cold turkey (especially with caffeine). I would stop on a Saturday so I could deal with the headaches, etc. away from work.
http://www.personalhealthzone.com/yohimbe.html It sounds sort of dangerous.
When training for a figure competition a little over a year ago, during the final stage of prep my trainer put me on a Yohimbine HCL (a stable, pharmaceutical grade version of Yohimbe) + Caffeine stack, which had to be taken on an empty stomach 3 times per week prior to my fasted AM cardio sessions.
I felt like total crap on this stuff... shaky, heart fluttery. I have no idea if it gave me any extra edge for peeling off my remaining stubborn fat, or if the fasted cardio alone would've been sufficient. Wouldn't take it again though.


text:
Visby/Roma HK is a Swedish hockey club located in Visby on Gotland. The club currently plays in group East of Hockeyettan, the third tier of Swedish ice hockey, as of the 2014–15 season. The club plays its home games in Visby ishall, which has a capacity of 2000 spectators.

References

External links
Official website
Club profile on Eliteprospects.com

Ice hockey teams in Sweden
Ice hockey teams in Gotland County

redpajama_set_name: RedPajamaWikipedia


text:
Facts About the Tegu You Can't Afford to Miss
Tegus are large lizards, mainly found in South America. They can be as much as 1.23 m in length and weigh up to 15 lb. PetPonder brings you some fascinating facts about these reptiles.
Leena Palande
The tegu uses its tongue to pick up chemicals in the air. The Jacobson's organ (an auxiliary olfactory sense organ located on the roof of its mouth) tastes them. Both these organs help detect chemical signals. They help the tegu to learn about its surroundings, for example, the direction of the prey or other lizards.
Lizards belonging to the family Teiidae are known as tegus. They belong to five different genera. Some varieties of tegus are particularly kind, affectionate, and easy to care for. With a nutritious diet and proper care, they can live for about 20 years. So, tegus make good pets. Although they can't be trained and tamed as dogs and cats, they seem to be quite intelligent. Just like a cat, a tegu will always take care of its own needs first. It will show interest in human beings, but will eat whatever is in the bowl, without caring about who is feeding it. With early socialization and frequent handling, a tegu can learn to walk on a harness.
➺ A full-grown tegu can be about one meter (3.3 feet or about 39 inches) long. Adult males are larger than females.
➺ The Argentine tegu can reach a weight from 2.5 to 7 kg. It can be about 4 - 4.5 feet long. An adult female can be about 3 feet long.
The Argentine Black and White Tegu
Red Tegu
Blue Tegu
Golden Tegu
➺ Though tegus resemble monitor lizards, they are completely different. Monitor lizards comprise the genus Varanus.
➺ Tegus have streamlined strong bodies, long tails, and powerful legs. They are very fast. When threatened, they will use their tail as a whip. They have sharp teeth, and strong claws and jaws. They have very short necks and forked tongues.
➺ Two species of tegus belonging to the genus Callopistes are dwarf tegus, while seven species of tegus that belong to the genus Tupinambis are giant tegus.
➺ The species Tupinambis teguixin, also known as golden tegu, common tegu, black tegu, and Colombian tegu, comes with a glossy body. The black and gold stripes that spread all over its body are eye-catching. But it does not make a good pet.
➺ Tupinambis spp, a relatively smaller lizard, is called blue tegu because of its light blue coloration.
➺ The species which belongs to the genus Crocodilurus is called crocodile tegu, while the three species belonging to the genus Dicrodon are known as desert tegu. The remaining two species that belong to the genus Dracaena are called caiman tegus.
➺ Salvator merianae, also known as the black and white tegu, or Argentine black and white tegu, or Argentine giant tegu is the largest species of tegus. It is native to South America, specifically to Brazil, Paraguay, Uruguay, and Argentina.
➺ In the wild, the average lifespan of an Argentine tegu is 15 to 20 years. In captivity, with proper diet and care, they can live even longer.
➺ Omnivorous tegus are voracious eaters. They eat insects, spiders, small mammals, birds, amphibians, fruits, and seeds. They are an important part of the ecology as they disperse seeds through their droppings.
➺ Tegus enjoy digging in dirt and soaking in warm baths. They are active during the day and will burrow or hide overnight.
➺ These lizards are found in a wide variety of habitats like the rainforests, meadows, savannas, and deciduous semiarid thorn forests.
➺ Tegus are considered a delicacy in some parts of South America. Their meat is used as food for dogs as well. Tegu fat is used in medicine. They are becoming popular in the pet industry and commercial pet trade.
➺ Birds of prey, pumas, and snakes are some of the main predators of tegus. Human beings hunt them for meat and leather.
➺ They become sexually mature at 3 years of age.
➺ In the wild, they typically hibernate during the colder months. A month-long breeding season begins a few weeks after awakening from hibernation. Females lay 12 - 30 eggs.
➺ Young tegus are green with black marks. The adult color develops usually after the second year.
➺ Argentine tegus make wonderful pets, as they develop a strong bond with their hosts. Adult tegus are quite docile, calm, and mellow. These highly intellectual lizards can even be potty trained! They can come on command.
➺ However, if they are not handled regularly, they are likely to become aggressive. They won't feel comfortable with the handler then.
➺ Tegus are good swimmers. The black and white tegu can stay under water for long periods of time.
➺ These lizards keep their ecosystems well-balanced. They clean the carcasses of dead animals and thus, prevent the spread of diseases to other animals.
➺ If a predator grasps a tegu by the tail, the lizard can release it at what's called a fracture plane. While the predator is left with a wiggling tail, the tegu has a chance to escape. The tail can regrow, but it won't generally be as long as it was before.
➺ Within their native range, tegus are often thought of as pests, as they feed on chicken eggs and fowls.
➺ They are predators of birds that nest on ground. They steal eggs from the nests of alligators and turtles. They eat crocodile eggs too. For example, in some areas, 80% of 'Spectacled Caiman' (a crocodilian reptile) nests are destroyed by tegus.
➺ In Southern Florida, tegus are considered as invasive species. Tegus came from South America through the pet trade. Some of the escaped tegus (or tegus which were set free by the owners who no longer wanted them) are responsible for the uncontrollable growth of the species. The Florida Fish and Wildlife Conservation Commission (FWC) is currently working with other agencies and organizations to assess the threat of this species.
Targeted trapping and removal of tegus can help minimize their impact on native wildlife and natural areas. The number of tegus trapped around Florida City has gone up to 400 a year, from just 13 in 2009 and 21 in 2010.
As tegus have a larger potential habitat range (they can tolerate cold, and so they can extend their territory to other regions, instead of keeping themselves restricted to South Florida's tropical climate), and as they are voracious eaters, they are the most dangerous of all the invaders.
Though tegus are believed to be the best pet lizards, their care and maintenance is not easy.
How to Care for Your Pet Tegu
Chameleon Facts
Anole Lizard Facts
Armadillo Lizard Facts
Iguana Facts
Lizards As Pets
Leopard Gecko: Care and Life Span


Have you ever thought about what it's like to get hacked? Investigative journalist Adam Penenberg has, so he hired a group of ethical hackers to find out how vulnerable his privacy is. The rules disallowed the hackers to do anything unlawful, for example breaking into Adam's house, and they also had to leave his kids out of it. Besides these two conditions, the hackers, led by SpiderLabs founder Nicholas J. Percoco, were allowed all techniques to breach Penenberg's privacy as much as possible.
"It's my first class of the semester at New York University. I'm discussing the evils of plagiarism and falsifying sources with 11 graduate journalism students when, without warning, my computer freezes. I fruitlessly tap on the keyboard as my laptop takes on a life of its own and reboots. Seconds later the screen flashes a message. To receive the four-digit code I need to unlock it I'll have to dial a number with a 312 area code. Then my iPhone, set on vibrate and sitting idly on the table, beeps madly.
I'm being hacked — and only have myself to blame." – extract from Adam L. Penenberg's article.
Percoco and his team spent a few weeks trying to hack Penenberg and despite some difficulties in the early stages, their efforts eventually paid off. Within a relatively short time period, the hackers gained all the information, including passwords, usernames, credit card details, etc. that could ruin someone's life for good.
Twitter account, Facebook profile, Amazon account, online banking, you name it. The hackers gained access to all of them. They even did a bit of shopping on Amazon and ordered 100 plastic spiders to Penenberg's house, as a reminder of SpiderLabs.
At the end of the experiment Percoco gave a report to Penenberg, which listed their plans, as well as a log book of their progresses. To see the chilling results, read the full article.


text:
Minor League Roundup: Good Games for Gerrit Cole, Jameson Taillon and Justin Wilson
By WTM Jul 3, 2012, 12:00am EDT
Share All sharing options for: Minor League Roundup: Good Games for Gerrit Cole, Jameson Taillon and Justin Wilson
Everybody was in action on Monday:
-P- Indianapolis outlasted Louisville, winning in fourteen innings, 6-4. Justin Wilson started and pitched six shutout innings, allowing just one hit and one walk, and fanning four. He only threw 89 pitches before being lifted for a pinch hitter. Bryan Morris followed and allowed three runs on three hits, two of them HRs, in one inning. He fanned two. Evan Meek threw a scoreless inning and a third, and Duke Welker threw two scoreless innings. Starling Marte went 3-6 with a double, giving him eight straight multi-hit games. Matt Hague went 2-4 with four RBIs, including a two-run single to put Indianapolis ahead to stay. Chase d'Arnaud was 2-5 with two doubles and two walks. Tony Sanchez hit his first HR of the year at any level, his only hit in seven ABs. Jeff Larish went 0-7 with four whiffs and seven LOB, and is now hitting .194.
-P- Altoona stayed hot behind a good outing from Gerrit Cole, beating Binghamton, 6-2. Cole went five and two-thirds, allowing two runs, one earned, on six hits and one walk. He fanned five and threw 63 of 87 pitches for strikes. Brock Holt went 2-5 with his 2nd HR and Matt Curry went 3-5. They're now hitting .326 and .308, respectively. Ramon Cabrera went 2-5 with a double and Stefan Welch 2-3 with a walk.
-P- Jameson Taillon also had a strong start as Bradenton beat Charlotte, 6-3. Taillon threw seven shutout innings, but gave up a hit and a walk to start the 8th. Quinton Miller relieved and allowed both runners to score, along with one of his own, to tie the game 3-3. Alex Dickerson got the three runs back with his 7th HR in the bottom half of the inning, leading to the win. Dickerson also had a sacrifice fly for four RBIs. Mel Rojas, Jr., went 2-3 with a walk. The hits were both triples, giving him ten on the year. In his seven innings Taillon allowed just three hits and two walks. He fanned two.
-P- West Virginia lost to Delmarva, 4-2. Robby Rowland started and pitched well through five innings, but got knocked out in the 6th. He went five and a third, allowing three runs on six hits and three walks. He struck out four. Taylor Lewis, Willy Garcia and Chris Lashmet each had two hits for the Power.
-P- State College dropped a 5-3 game to Batavia as Clay Holmes struggled for the first time in three pro starts. He went 3.2 IP, allowing four runs, three earned, on six hits and two walks, with three Ks. Dalton Friend had another interesting game in relief, allowing a run in two innings while fanning four. Friend has eight strikeouts in 4.2 IP, but his ERA is 15.43. The State College offense was limited to five singles, as the weak-hitting Spikes remain homerless after 15 games.
-P- The GCL Pirates got blown out by the Tigers, 10-1. Tyler Glasnow had a rough start, failing to retire a batter in the 2nd and allowing six runs, two earned, in one inning. He gave up only two hits, but walked four and threw three wild pitches. He was also hampered by defensive issues, as the Tigers stole five bases in five tries in his brief time in the game. With Wyatt Mathisen not catching yet, the team's main catcher has been Jin-De Jhang, who has a good bat but appears to have a long ways to go defensively. In eight games behind the plate he has six passed balls. He did go 2-4 with a double in this game, raising his average to .346. Martires Cadet pitched well in relief, allowing no hits or walks in three innings while fanning two.
-P- The DSL Pirates1 stomped the Yankees2, 15-6. Several players who are at least potential prospects had good games. Right fielder Adrian De Aza went 3-5, first baseman Daniel Arribas went 2-2 with two walks and four RBIs, and shortstop Carlos Ozuna went 2-5 with a double. Adrian Grullon started and lasted 4.1 IP, allowing four runs, three earned, on five hits and two walks, and fanning four.
-P- The DSL Pirates2 also won big, 10-2 over the joint D'backs/Reds squad. Eighteen-year-old lefty Luis Rico started, but went only one inning, allowing the two runs. Luis Santos threw five shutout innings, allowing only two hits and no walks, and fanning five. Nineteen-year-old lefty Jesus Paredes fanned five over three hitless innings. Infielder Rodney Polonia, whose father Luis trained the Pirates' latest high-profile Dominican signee, Julio de la Cruz, went 2-4. Eighteen-year-old infielder Pablo Reyes also went 2-4 and is hitting .324. The opposing starter walked six and threw seven wild pitches in 3.2 IP.


text:
When there is no justice: gendered violence and harm in post-conflict Sri Lanka
Davies, Sara E
True, Jacqui
Davies, Sara E.
Reparative measures for conflict-related sexual and gender-based violence (SGBV) attend to the practical needs of victims while also addressing the long-term structural conditions that led to the violence and often endure after conflict. Over the last decade, transitional justice has sought to address high levels of impunity for SGBV, while also addressing the long-term structural conditions causing and exacerbating it. In this article we study the case of Sri Lanka, where crimes have been committed during and after the civil war (1983–2009) but a transitional justice mechanism to redress them is unlikely to be established. ...
View more >Reparative measures for conflict-related sexual and gender-based violence (SGBV) attend to the practical needs of victims while also addressing the long-term structural conditions that led to the violence and often endure after conflict. Over the last decade, transitional justice has sought to address high levels of impunity for SGBV, while also addressing the long-term structural conditions causing and exacerbating it. In this article we study the case of Sri Lanka, where crimes have been committed during and after the civil war (1983–2009) but a transitional justice mechanism to redress them is unlikely to be established. The article considers whether in such a situation of impunity gender-sensitive approaches to SGBV prevention can still be promoted to ensure its non-recurrence. We closely examine post-conflict Sri Lanka and women's ongoing experiences of multiple forms of insecurity and violence to highlight the relationship between enduring structural gender inequalities and reparative justice. Bridging human rights and political economy approaches, we argue that addressing gender inequalities in access to resources and public space is essential to prevent further gender-based violence and structural harms in conflict-affected countries like Sri Lanka.
International Journal of Human Rights


The Kyoto Guide (Ebook only). Enjoy Kyoto with your baby and kids with the least stress and the most fun! Includes over 60 locations in the Top 5 sightseeing areas in Kyoto!
The Tokyo Guide (Ebook only). Travel stress-free with this essential guide for Tokyo, designed especially for parents with babies, toddlers, and young children!


At Auto Loan Kelowna, we're an industry leader in providing auto loans to people who have bad credit. Your credit score can be damaged by unpaid bills, a bankruptcy, or high debt. You'll also have a low credit score if you've never had credit or loans before and you haven't established a credit record.
Up to 25% of Canadians have a hard time getting a car loan because traditional lenders like banks don't like to lend money to people with bad credit. That's where we come in. We've developed an outstanding reputation and an excellent working relationship with several of the area's leading lenders and we're able to secure a car loan for just about everyone.
All you need to qualify for a loan is proof of employment, a minimum monthly income, and a valid driver's license. If you have a job, a permanent address, and a driver's license, you should be able to get a loan through Auto Loan Kelowna.
Will the interest rates be outrageous?
You're probably wondering what kind of interest rate you'll have to pay when you arrange for a loan through Auto Loan Kelowna. Well, interest rates are low across the board right now and we can pass those low rates on to you. Your exact interest rate will depend on your credit score. The higher your credit score, the lower your interest rate. We'll be able to give you the specifics once you've filled out our secure credit application.
The process is very simple. All we need is your employment information, address, and driver's license number – that's it. You can call us directly to book an appointment or you can submit your application online on the Auto Loan Kelowna website. In most cases, once we have the necessary information you can be driving your new car the next day.
Once your loan has been approved, we'll be able to tell you how much you have to spend on a vehicle. The lender will consider your income level and credit history when they're deciding how much they will lend you. We'll work with them to ensure that it's an amount that's manageable for you. You can use the payment calculator on our website to choose a term and see how much your monthly payments will be.
Do I have to buy a car from Auto Loan Kelowna?
Auto Loan Kelowna is part of Kelowna Infiniti Nissan. You can choose a vehicle from our huge selection of new and used vehicles or you can buy your vehicle from another dealership. You can even use your loan to buy a vehicle from a private seller. You're free to make your own decisions.
At Auto Loan Kelowna we know that not everyone has perfect credit but that shouldn't stop you from driving a good, reliable car. If you need a vehicle but are afraid that you can't get a loan, contact us today. You might be surprised by how easy it is to get a loan, and by how competitive your interest rate can be.


There is a fierce competition in every field in today's time. Therefore, it is essential to give your best to get hired. You need to build your competitive skills employers want to see which will provide you an edge over other applicants. You need to have enough patience which will help you to land the best job you were always aiming. Here is the list of top 5 competitive skills which will help you to win you, employers, attention and help you land a job. If you are a fresher or had many unsuccessful attempts, then you can implement these tips and improve your chances of getting hired.
In the 21st century, resources are always readily available to almost every person with the access to the internet. Therefore, there is a fierce competition among candidates in every single field. You can only stand apart from the crowd if you are creative enough. This does not mean that you will just run behind every single resource available to improve the creative skills. You need to focus on one resource and get the best out of it.
If you are creative enough, then you can present a single task in many different and surprising ways. Employers are looking for something new and fresh. You can fill the gap with your creativity. If you want to be creative in the best way then you need to learn to be yourself. Value your talents and carve them in the best form. You can then see that employers are inclined enough to hire you for your company.
Success comes when you understand the value of working in a team. Teamwork is one of the essential factors behind the success of every project. Therefore, employers always prefer candidates who can work smoothly with other team members. You need to have keen patience so that you can understand the present requirements in the team.
Employers want to get their work done fast. So, you need to be successful in providing the best work in the shortest possible time. You need to respect your teammates and work with them. Always understand that if you respect them then you will also be respected. You can opt for some strategies and share your team members. Also, make it a point to listen to their opinions. Never try to dictate anyone. It will help you to create a good mark for yourself for the long term. Employers can sense whether you are capable or not for working peacefully in a team. So, stay genuine and inculcate teamwork quality in yourself.
Every day a company faces lots of challenges and problems. Therefore, employers want to hire someone who can keep his temper in control when the company faces problems whether minor or major. I would like to share with you that every person wants to surround himself with easy going individuals. So, your future employer is not expecting anything new, right?
Keep things easy. Go smooth. Stress less. Be in the present. Find the cause of the problem and solve it. It's that simple. You just have to be mature enough to implement the solutions in the best way. Your interviewer will inevitably ask you tricky questions to check your abilities in this section. You just need to stay calm and follow the above easy to implement points.
RELATED: Did you know these 4 steps for an instant career boost?
Positivity spreads like a plague. No one wants to have an adverse speaking individual around them. Employers always want to have a happy atmosphere at their company. So, make sure that you see and speak positively. I am not saying that you neglect negative parts of everything. Just try to solve it out and turn into a positive aspect.
Positivity leads to real miracles. So believe that all good will happen. And see the change.
Once an employer hires you, you will be an asset to the company. Therefore, you need to stay positive and prove yourself as a confident person. Make sure that you are genuinely confident. Please don't fake it or else you will get caught. Your future employer is much more experienced in knowing the real side of every candidate. So, stay what you are. You will soon see getting selected in every interview you attend.
Yes, this is one of my favorites! Communication is an asset for every type of job. It has got many phases. You need to perform well at every phase. Learn to communicate. Don't hesitate. Lack of communication leads to several misunderstandings. So, make sure you have your voice. Value your opinions. Then only people around you will value you. If you don't speak, no one is going to come to you to ask if you want something. No, never! I know it's harsh, but a fact.
Employers want their employees to speak their own opinions and contribute to the success of the company. You don't have to oppose every other person's ideas. But you need to keep your points in front of others at the right time. So, try building this skill. You can start it from your personal life. Then carry forward in a better way in your working lives. Communicate, and you can see how every particular matter takes it's own deserved place without creating chaos or confusion.
So, these are the top 5 competitive skills which employers want to see in you as a potential employee at their workplace. Go easy. Don't stress over silly things. Learn and implement these skills one at a time. Just keep an aim to achieve that job you always dreamed to opt. You will soon see that you have secured the best job you had ever dreamed.


Alright sports fans, here is the latest Crossroads Sports Bracketology update for January 28th.
The big result in West Lafayette on Sunday has a lasting impact on today's updated bracket. The Spartans have fallen from the 1 line, replaced by in-state rival Michigan who was only on the 2 line for a very brief period of time. Additionally, Purdue now climbs all the way up to a 4 seed. Many might think this is overrating a 6-loss team, but I contend that the Boilermakers have played one of, if not THE toughest schedules in the country. Not all schedules are constructed the same way. Sometimes a deeper dive is needed to analyze these teams and where they fit on a national scale. Show me a team seeded 5 or worse that has a more impressive resume than the Boilers. You can't. While the latest Boiler victory is the crown jewel, their resume also boasts wins over Wisconsin (in Madison), Maryland, Ohio State (in Columbus), Iowa, Indiana, and Davidson. Expect some more notches on this impressive resume as we move through February and into March.
Virginia Tech – best wins: Purdue (neutral), Washington (neutral), Syracuse (home), combined with a bad loss to Penn State (road). This is the most overvalued team in the country. 4 of their 5 conference wins are against Notre Dame, BC, Georgia Tech, and Wake Forest – all ACC bottom dwellers. The Hokies still have a lot to prove.
LSU – best wins: Mississippi (road), Arkansas (road), St. Mary's (neutral), combined with a bad loss to Oklahoma State (neutral). They've won a lot of games, but the schedule is just not that impressive. If the Tigers have played Purdue's schedule, guarantee they'd have at least 7 or 8 losses.
Again, not all schedules are constructed the same.
Do any bubble teams actually want to make the field of 68?? Every week, the teams that are seeded in the 9-12 area (bubbly resumes) seem to be losing, and then losing some more. Year after year, the bubble is always referred to as weak, but I'm not sure I've seen a year where these teams continue to make their case for a spot in the NIT. It's as though they don't even want to make the tourney (see Clemson in their epic collapse against NC State, or Indiana's entire month of January). Some of these teams are going to back into the dance and really shouldn't. Hopefully, this bodes well for some of the smaller schools on Selection Sunday, but I'm not holding my breath.
With that said, please enjoy today's rendition of Crossroads Sports Tourney Predictor.


text:
Skills and Post-16 Education Bill [HL]: Progress of the Bill
Published Tuesday, 04 January, 2022
Work and incomes
Joe Lewis
Susan Hubble
This briefing analyses the progress of the Skills and Post-16 Education Bill [HL] following its second reading and committee stage in the House of Commons.
Skills and Post-16 Education Bill [HL]: Progress of the Bill (267 KB , PDF)
Download full report Download 'Skills and Post-16 Education Bill [HL]: Progress of the Bill' report (267 KB , PDF)
The Skills and Post-16 Education Bill [HL] was introduced in the House of Lords on 18 May 2021. It received its first reading in the House of Commons on 26 October 2021 and has since passed its second reading and committee stage. A date for report stage and third reading is yet to be announced.
The Bill aims to improve how the skills and post-16 education system functions in England. It supports the Lifetime Skills Guarantee, announced by the Prime Minister in September 2020.
The Bill would implement reforms set out in the Department for Education (DfE) White Paper, Skills for Jobs: Lifelong Learning for Opportunity and Growth (January 2021). These included giving employers a greater say in skills development, new measures to improve teacher training, and a Lifelong Loan Entitlement.
The Bill also includes measures to address some of the recommendations of the Independent Panel Report to the Review of Post-18 Education and Funding (the Augar report), published in May 2019, particularly around increasing opportunities for flexible, lifetime learning.
What the Bill does
The Bill would allow Local Skills Improvement Plans (LSIPs) to be created by Employer Representative Bodies (ERBs). LSIPs would take account of local skills needs to help shape what courses further education providers offer.
The Bill would increase the role of the Institute for Apprenticeships and Technical Education when it comes to approving and regulating qualifications. It would also give the Secretary of State for Education powers to introduce a Lifelong Loan Entitlement, which would provide students with four years of funding for post-18 education.
Other provisions seek to improve further education teacher training and to criminalise services that help post-16 students in England cheat on assessments.
The Bill currently has four parts and 36 substantive clauses.
Second reading debate
MPs passed the Bill at its second reading on 15 November without a vote. During the debate, the Secretary of State for Education, Nadhim Zahawi, announced policy changes and proposed amendments to address concerns raised in the House of Lords. These included:
committing to amend the Bill to include combined authorities in the development of LSIPs;
delaying the defunding of some BTEC qualifications by a year;
removing the requirement to get a level 2 English and maths qualification as part of a T level (new, two-year technical courses equivalent to three A Levels);
committing to consult on proposals to reform level 2 qualifications (a GCSE pass or equivalent).
Labour said the Bill had been improved by the Lords and would not oppose it. However, it raised concerns about the timetable for introducing the Lifelong Loan Entitlement, the exclusion of level 2 qualifications from the Bill, and the effect of funding restrictions for students wanting to take an equivalent or lower-level qualification to the ones they hold.
Committee stage debate
The Bill's committee stage comprised six sessions of line-by-line scrutiny between 30 November and 7 December 2021. In addition to the promised amendment to include the views of combined authorities in creating LSIPs, the Government removed amendments and new clauses added at report stage in the House of Lords. Among other things, the Government reversed changes that would have:
required LSIPs to be developed by a "partnership" between ERBs, local authorities, and further education providers;
given learners a legal right to take BTECs and other applied general qualifications, rather than simply the opportunity where they are offered;
allowed students to keep their Universal Credit entitlement while studying.
No Opposition amendments were accepted, but in response to several issues they raised, the Minister for Skills said relevant details would be set out in statutory guidance.
Background to the Bill, commentary on its provisions, and responses from the further education and skills sector can be found in the Commons Library briefing Skills and Post-16 Education Bill.
Role of early years educators
There will be a Westminster Hall debate on the 'role of early years educators' at 2:30pm on Tuesday 25 January 2022. Steve Brine MP will open the debate.
E-petition on prohibiting employers from requiring staff to be vaccinated against Covid-19
A Westminster Hall debate on an e-petition calling on the Government to prohibit employers from requiring staff to be vaccinated against Covid-19 is scheduled for 24 January 2022 between 6-7.30pm . The subject for this debate was determined by the Petitions Committee and Martyn Day MP will open the debate.
Rising cost of living in the UK
This briefing provides statistics and commentary on the rising cost of living in the UK, as well as other pressures on household budgets.
Economic situation


Volcano Classic vapor quality 10/10. When it comes to vapor quality, there is basically no difference between the Classic and the Digital. Clean, smooth and full of flavor—what more can you ask for?... If your volcano vaporizer's performance has been compromised lately, maybe it is because the device needs to be cleaned. Cleaning the whole product with a piece of cloth is not enough to regain its glory and efficient working.
The Volcano was the first really good herb vaporizer I ever used going back almost 9 years now. For years it has dominated the market and is considered by those who use it to be the best marijuana vaporizer ever made. how to add bibliography in an essay Volcano Vaporizer Guide. Vaporization, it is the process of discharging aromatic compounds from oils, herbs, as well as spices without burning the herb to generate smoke.
What are your Volcano hacks: things you do to make it a better or difference experience or make anything easier (cleaning, maintenance, etc.) (self.VolcanoVaporizer) submitted 4 years ago by [deleted] how to clean pink mildew from shower curtain In this blog we will instruct you on how to clean the battery base and skillet contacts. There is a contact on the top side the battery base and one on the underside of the skillet heater. From the users viewpoint these contacts look like a flat silver metal circle.
Keeping your Tobacco Vaporizer clean – a few simple steps There are many schools of thought on the subject of cleaning a Tobacco Vaporizer. Depending on the type of device that you own, there are various methods that can be employed to keep your vaporizer clean and in top working condition.
In this blog we will instruct you on how to clean the battery base and skillet contacts. There is a contact on the top side the battery base and one on the underside of the skillet heater. From the users viewpoint these contacts look like a flat silver metal circle.
The Volcano was the first really good herb vaporizer I ever used going back almost 9 years now. For years it has dominated the market and is considered by those who use it to be the best marijuana vaporizer ever made.
Cleaning brush – this comes with the Pax 3 vaporizer The Most Important Pieces While there are a lot of very important pieces in the Pax 3 vaporizer there are in fact only a few pieces of special significance.


Is it coincidence or just ironic that winter is often personified by an old man blowing storms from the clouds? When you consider that the cloud is one of the safest places to backup your data in the event of a winter disaster, the presence of that old blowhard up there might raise an eyebrow. Is your business prepared for a visit from Old Man Winter?
If you haven't reviewed your disaster recovery strategy in a while, now might be a good time. Maybe you're still trucking tape backups to a bomb shelter. Whatever your approach has been in the past, it may be worth considering Disaster Recovery as a Service (DRaaS) as a viable solution moving forward.
Though IBM is noted for large enterprise expertise, their huge network of Business Partners bring similar solutions to SMBs who may lack the necessary expertise to provision, configure and test an effective disaster recovery plan. Using DRaaS also means the organization doesn't have to invest in -- and maintain -- their own off-site DR environment.
Forrester goes on to predict that DRaaS services will continue to evolve and become more automated, scalable, and interoperable between public, private, and hybrid clouds. As RTO (Recovery Time Objective) and RPO (Recovery Point Objective) points continue to shrink, data replication technologies for disaster recovery and business resilience solutions will become more prevalent. With Watson's cognitive and analytics capabilities providing an intelligent layer of information, organizations can aggregate internal and external information to predict failures and outages before they occur.
Before Old Man Winter starts knocking the power out with blizzards, floods, ice storms, tempests and other nasty winter hijinks, be sure to bring your disaster recovery plan up to date with the help of IBM Business Partners. Click here to find one in your locale.


Ask a question about 5719 Title Row Dr, or schedule a tour.
This single family home located at 5719 Title Row Dr, Bradenton, FL 34210 is currently listed for sale by Michael Saunders & Company, with an asking price of $469,000. The property was built in 2016 and has 3 bedrooms and 2 ½ baths with 2,592 sq. ft. Title Row Drive is located in the Legends Bay neighborhood of the IMG Academy area. Search all IMG Academy real estate on MichaelSaunders.com today.
This beautiful Turnkey Furnished Bedford model (built in 2016) features 3 bedrooms and 2.5 bathrooms in the Gated community of Legends Bay. Great floor plan with a Master Suite downstairs, and two additional bedrooms upstairs. A bonus ... more.loft is located on the 2nd floor for additional gathering space for family and friends. Large laundry room with added cabinets, 2 car garage, and covered lanai on the 1st floor adds plenty of space. Luxury finishes such as wood stairs and iron railing, decorative ceiling fans and light fixtures, granite and stainless steel in kitchen, custom closets in bedrooms, plantation shutters, wood crown moulding throughout, granite in Master bathroom, etc. Backyard has surround fence for dog and added landscaping. Other nice adds are gutters, wine storage rack, walk in food pantry, and pull outs in kitchen cabinets. Close proximity to IMG Academy, IMG Golf Club, and short drive to Beaches and Shopping.


text:
Q: Favicon not showing in masterpage I am trying tp put favicon in masterpage but its not showing on browser, VS shows no error
Master page code
     <head runat="server">
            <title>My Test Application</title>
            <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
            <link id="Link1" runat="server" rel="shortcut icon" href="~/favicon.ico" type="image/x-icon" />
            <link id="Link2" runat="server" rel="icon" href="~/favicon.ico" type="image/ico" />
            <asp:ContentPlaceHolder ID="HeadContent" runat="server">
            </asp:ContentPlaceHolder>
    </head>

A: Replace this:
<link id="Link1" runat="server" rel="shortcut icon" href="~/favicon.ico" type="image/x-icon" />
<link id="Link2" runat="server" rel="icon" href="~/favicon.ico" type="image/ico" />

With
<link rel="shortcut icon" type="image/x-icon" href="~/favicon.ico" />

You can download standard icon here.
http://www.iconarchive.com

A: Just copy your favicon.ico to root older while deploying. And clear all your browser cookies before testing. It will surely show up.

A: You could try this
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />

redpajama_set_name: RedPajamaStackExchange