text:
//===-- Path.cpp - Implement OS Path Concept ------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
//  This file implements the operating system Path API.
//
//===----------------------------------------------------------------------===//

#include "llvm/Support/COFF.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/Errc.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Process.h"
#include <cctype>
#include <cstring>

#if !defined(_MSC_VER) && !defined(__MINGW32__)
#include <unistd.h>
#else
#include <io.h>
#endif

using namespace llvm;
using namespace llvm::support::endian;

namespace {
  using llvm::StringRef;
  using llvm::sys::path::is_separator;

#ifdef LLVM_ON_WIN32
  const char *separators = "\\/";
  const char preferred_separator = '\\';
#else
  const char  separators = '/';
  const char preferred_separator = '/';
#endif

  StringRef find_first_component(StringRef path) {
    // Look for this first component in the following order.
    // * empty (in this case we return an empty string)
    // * either C: or {//,\\}net.
    // * {/,\}
    // * {file,directory}name

    if (path.empty())
      return path;

#ifdef LLVM_ON_WIN32
    // C:
    if (path.size() >= 2 && std::isalpha(static_cast<unsigned char>(path[0])) &&
        path[1] == ':')
      return path.substr(0, 2);
#endif

    // //net
    if ((path.size() > 2) &&
        is_separator(path[0]) &&
        path[0] == path[1] &&
        !is_separator(path[2])) {
      // Find the next directory separator.
      size_t end = path.find_first_of(separators, 2);
      return path.substr(0, end);
    }

    // {/,\}
    if (is_separator(path[0]))
      return path.substr(0, 1);

    // * {file,directory}name
    size_t end = path.find_first_of(separators);
    return path.substr(0, end);
  }

  size_t filename_pos(StringRef str) {
    if (str.size() == 2 &&
        is_separator(str[0]) &&
        str[0] == str[1])
      return 0;

    if (str.size() > 0 && is_separator(str[str.size() - 1]))
      return str.size() - 1;

    size_t pos = str.find_last_of(separators, str.size() - 1);

#ifdef LLVM_ON_WIN32
    if (pos == StringRef::npos)
      pos = str.find_last_of(':', str.size() - 2);
#endif

    if (pos == StringRef::npos ||
        (pos == 1 && is_separator(str[0])))
      return 0;

    return pos + 1;
  }

  size_t root_dir_start(StringRef str) {
    // case "c:/"
#ifdef LLVM_ON_WIN32
    if (str.size() > 2 &&
        str[1] == ':' &&
        is_separator(str[2]))
      return 2;
#endif

    // case "//"
    if (str.size() == 2 &&
        is_separator(str[0]) &&
        str[0] == str[1])
      return StringRef::npos;

    // case "//net"
    if (str.size() > 3 &&
        is_separator(str[0]) &&
        str[0] == str[1] &&
        !is_separator(str[2])) {
      return str.find_first_of(separators, 2);
    }

    // case "/"
    if (str.size() > 0 && is_separator(str[0]))
      return 0;

    return StringRef::npos;
  }

  size_t parent_path_end(StringRef path) {
    size_t end_pos = filename_pos(path);

    bool filename_was_sep = path.size() > 0 && is_separator(path[end_pos]);

    // Skip separators except for root dir.
    size_t root_dir_pos = root_dir_start(path.substr(0, end_pos));

    while(end_pos > 0 &&
          (end_pos - 1) != root_dir_pos &&
          is_separator(path[end_pos - 1]))
      --end_pos;

    if (end_pos == 1 && root_dir_pos == 0 && filename_was_sep)
      return StringRef::npos;

    return end_pos;
  }
} // end unnamed namespace

enum FSEntity {
  FS_Dir,
  FS_File,
  FS_Name
};

static std::error_code createUniqueEntity(const Twine &Model, int &ResultFD,
                                          SmallVectorImpl<char> &ResultPath,
                                          bool MakeAbsolute, unsigned Mode,
                                          FSEntity Type) {
  SmallString<128> ModelStorage;
  Model.toVector(ModelStorage);

  if (MakeAbsolute) {
    // Make model absolute by prepending a temp directory if it's not already.
    if (!sys::path::is_absolute(Twine(ModelStorage))) {
      SmallString<128> TDir;
      sys::path::system_temp_directory(true, TDir);
      sys::path::append(TDir, Twine(ModelStorage));
      ModelStorage.swap(TDir);
    }
  }

  // From here on, DO NOT modify model. It may be needed if the randomly chosen
  // path already exists.
  ResultPath = ModelStorage;
  // Null terminate.
  ResultPath.push_back(0);
  ResultPath.pop_back();

retry_random_path:
  // Replace '%' with random chars.
  for (unsigned i = 0, e = ModelStorage.size(); i != e; ++i) {
    if (ModelStorage[i] == '%')
      ResultPath[i] = "0123456789abcdef"[sys::Process::GetRandomNumber() & 15];
  }

  // Try to open + create the file.
  switch (Type) {
  case FS_File: {
    if (std::error_code EC =
            sys::fs::openFileForWrite(Twine(ResultPath.begin()), ResultFD,
                                      sys::fs::F_RW | sys::fs::F_Excl, Mode)) {
      if (EC == errc::file_exists)
        goto retry_random_path;
      return EC;
    }

    return std::error_code();
  }

  case FS_Name: {
    std::error_code EC =
        sys::fs::access(ResultPath.begin(), sys::fs::AccessMode::Exist);
    if (EC == errc::no_such_file_or_directory)
      return std::error_code();
    if (EC)
      return EC;
    goto retry_random_path;
  }

  case FS_Dir: {
    if (std::error_code EC =
            sys::fs::create_directory(ResultPath.begin(), false)) {
      if (EC == errc::file_exists)
        goto retry_random_path;
      return EC;
    }
    return std::error_code();
  }
  }
  llvm_unreachable("Invalid Type");
}

namespace llvm {
namespace sys  {
namespace path {

const_iterator begin(StringRef path) {
  const_iterator i;
  i.Path      = path;
  i.Component = find_first_component(path);
  i.Position  = 0;
  return i;
}

const_iterator end(StringRef path) {
  const_iterator i;
  i.Path      = path;
  i.Position  = path.size();
  return i;
}

const_iterator &const_iterator::operator++() {
  assert(Position < Path.size() && "Tried to increment past end!");

  // Increment Position to past the current component
  Position += Component.size();

  // Check for end.
  if (Position == Path.size()) {
    Component = StringRef();
    return *this;
  }

  // Both POSIX and Windows treat paths that begin with exactly two separators
  // specially.
  bool was_net = Component.size() > 2 &&
    is_separator(Component[0]) &&
    Component[1] == Component[0] &&
    !is_separator(Component[2]);

  // Handle separators.
  if (is_separator(Path[Position])) {
    // Root dir.
    if (was_net
#ifdef LLVM_ON_WIN32
        // c:/
        || Component.endswith(":")
#endif
        ) {
      Component = Path.substr(Position, 1);
      return *this;
    }

    // Skip extra separators.
    while (Position != Path.size() &&
           is_separator(Path[Position])) {
      ++Position;
    }

    // Treat trailing '/' as a '.'.
    if (Position == Path.size()) {
      --Position;
      Component = ".";
      return *this;
    }
  }

  // Find next component.
  size_t end_pos = Path.find_first_of(separators, Position);
  Component = Path.slice(Position, end_pos);

  return *this;
}

bool const_iterator::operator==(const const_iterator &RHS) const {
  return Path.begin() == RHS.Path.begin() && Position == RHS.Position;
}

ptrdiff_t const_iterator::operator-(const const_iterator &RHS) const {
  return Position - RHS.Position;
}

reverse_iterator rbegin(StringRef Path) {
  reverse_iterator I;
  I.Path = Path;
  I.Position = Path.size();
  return ++I;
}

reverse_iterator rend(StringRef Path) {
  reverse_iterator I;
  I.Path = Path;
  I.Component = Path.substr(0, 0);
  I.Position = 0;
  return I;
}

reverse_iterator &reverse_iterator::operator++() {
  // If we're at the end and the previous char was a '/', return '.' unless
  // we are the root path.
  size_t root_dir_pos = root_dir_start(Path);
  if (Position == Path.size() &&
      Path.size() > root_dir_pos + 1 &&
      is_separator(Path[Position - 1])) {
    --Position;
    Component = ".";
    return *this;
  }

  // Skip separators unless it's the root directory.
  size_t end_pos = Position;

  while(end_pos > 0 &&
        (end_pos - 1) != root_dir_pos &&
        is_separator(Path[end_pos - 1]))
    --end_pos;

  // Find next separator.
  size_t start_pos = filename_pos(Path.substr(0, end_pos));
  Component = Path.slice(start_pos, end_pos);
  Position = start_pos;
  return *this;
}

bool reverse_iterator::operator==(const reverse_iterator &RHS) const {
  return Path.begin() == RHS.Path.begin() && Component == RHS.Component &&
         Position == RHS.Position;
}

StringRef root_path(StringRef path) {
  const_iterator b = begin(path),
                 pos = b,
                 e = end(path);
  if (b != e) {
    bool has_net = b->size() > 2 && is_separator((*b)[0]) && (*b)[1] == (*b)[0];
    bool has_drive =
#ifdef LLVM_ON_WIN32
      b->endswith(":");
#else
      false;
#endif

    if (has_net || has_drive) {
      if ((++pos != e) && is_separator((*pos)[0])) {
        // {C:/,//net/}, so get the first two components.
        return path.substr(0, b->size() + pos->size());
      } else {
        // just {C:,//net}, return the first component.
        return *b;
      }
    }

    // POSIX style root directory.
    if (is_separator((*b)[0])) {
      return *b;
    }
  }

  return StringRef();
}

StringRef root_name(StringRef path) {
  const_iterator b = begin(path),
                 e = end(path);
  if (b != e) {
    bool has_net = b->size() > 2 && is_separator((*b)[0]) && (*b)[1] == (*b)[0];
    bool has_drive =
#ifdef LLVM_ON_WIN32
      b->endswith(":");
#else
      false;
#endif

    if (has_net || has_drive) {
      // just {C:,//net}, return the first component.
      return *b;
    }
  }

  // No path or no name.
  return StringRef();
}

StringRef root_directory(StringRef path) {
  const_iterator b = begin(path),
                 pos = b,
                 e = end(path);
  if (b != e) {
    bool has_net = b->size() > 2 && is_separator((*b)[0]) && (*b)[1] == (*b)[0];
    bool has_drive =
#ifdef LLVM_ON_WIN32
      b->endswith(":");
#else
      false;
#endif

    if ((has_net || has_drive) &&
        // {C:,//net}, skip to the next component.
        (++pos != e) && is_separator((*pos)[0])) {
      return *pos;
    }

    // POSIX style root directory.
    if (!has_net && is_separator((*b)[0])) {
      return *b;
    }
  }

  // No path or no root.
  return StringRef();
}

StringRef relative_path(StringRef path) {
  StringRef root = root_path(path);
  return path.substr(root.size());
}

void append(SmallVectorImpl<char> &path, const Twine &a,
                                         const Twine &b,
                                         const Twine &c,
                                         const Twine &d) {
  SmallString<32> a_storage;
  SmallString<32> b_storage;
  SmallString<32> c_storage;
  SmallString<32> d_storage;

  SmallVector<StringRef, 4> components;
  if (!a.isTriviallyEmpty()) components.push_back(a.toStringRef(a_storage));
  if (!b.isTriviallyEmpty()) components.push_back(b.toStringRef(b_storage));
  if (!c.isTriviallyEmpty()) components.push_back(c.toStringRef(c_storage));
  if (!d.isTriviallyEmpty()) components.push_back(d.toStringRef(d_storage));

  for (SmallVectorImpl<StringRef>::const_iterator i = components.begin(),
                                                  e = components.end();
                                                  i != e; ++i) {
    bool path_has_sep = !path.empty() && is_separator(path[path.size() - 1]);
    bool component_has_sep = !i->empty() && is_separator((*i)[0]);
    bool is_root_name = has_root_name(*i);

    if (path_has_sep) {
      // Strip separators from beginning of component.
      size_t loc = i->find_first_not_of(separators);
      StringRef c = i->substr(loc);

      // Append it.
      path.append(c.begin(), c.end());
      continue;
    }

    if (!component_has_sep && !(path.empty() || is_root_name)) {
      // Add a separator.
      path.push_back(preferred_separator);
    }

    path.append(i->begin(), i->end());
  }
}

void append(SmallVectorImpl<char> &path,
            const_iterator begin, const_iterator end) {
  for (; begin != end; ++begin)
    path::append(path, *begin);
}

StringRef parent_path(StringRef path) {
  size_t end_pos = parent_path_end(path);
  if (end_pos == StringRef::npos)
    return StringRef();
  else
    return path.substr(0, end_pos);
}

void remove_filename(SmallVectorImpl<char> &path) {
  size_t end_pos = parent_path_end(StringRef(path.begin(), path.size()));
  if (end_pos != StringRef::npos)
    path.set_size(end_pos);
}

void replace_extension(SmallVectorImpl<char> &path, const Twine &extension) {
  StringRef p(path.begin(), path.size());
  SmallString<32> ext_storage;
  StringRef ext = extension.toStringRef(ext_storage);

  // Erase existing extension.
  size_t pos = p.find_last_of('.');
  if (pos != StringRef::npos && pos >= filename_pos(p))
    path.set_size(pos);

  // Append '.' if needed.
  if (ext.size() > 0 && ext[0] != '.')
    path.push_back('.');

  // Append extension.
  path.append(ext.begin(), ext.end());
}

void native(const Twine &path, SmallVectorImpl<char> &result) {
  assert((!path.isSingleStringRef() ||
          path.getSingleStringRef().data() != result.data()) &&
         "path and result are not allowed to overlap!");
  // Clear result.
  result.clear();
  path.toVector(result);
  native(result);
}

void native(SmallVectorImpl<char> &Path) {
#ifdef LLVM_ON_WIN32
  std::replace(Path.begin(), Path.end(), '/', '\\');
#else
  for (auto PI = Path.begin(), PE = Path.end(); PI < PE; ++PI) {
    if (*PI == '\\') {
      auto PN = PI + 1;
      if (PN < PE && *PN == '\\')
        ++PI; // increment once, the for loop will move over the escaped slash
      else
        *PI = '/';
    }
  }
#endif
}

StringRef filename(StringRef path) {
  return *rbegin(path);
}

StringRef stem(StringRef path) {
  StringRef fname = filename(path);
  size_t pos = fname.find_last_of('.');
  if (pos == StringRef::npos)
    return fname;
  else
    if ((fname.size() == 1 && fname == ".") ||
        (fname.size() == 2 && fname == ".."))
      return fname;
    else
      return fname.substr(0, pos);
}

StringRef extension(StringRef path) {
  StringRef fname = filename(path);
  size_t pos = fname.find_last_of('.');
  if (pos == StringRef::npos)
    return StringRef();
  else
    if ((fname.size() == 1 && fname == ".") ||
        (fname.size() == 2 && fname == ".."))
      return StringRef();
    else
      return fname.substr(pos);
}

bool is_separator(char value) {
  switch(value) {
#ifdef LLVM_ON_WIN32
    case '\\': // fall through
#endif
    case '/': return true;
    default: return false;
  }
}

static const char preferred_separator_string[] = { preferred_separator, '\0' };

StringRef get_separator() {
  return preferred_separator_string;
}

bool has_root_name(const Twine &path) {
  SmallString<128> path_storage;
  StringRef p = path.toStringRef(path_storage);

  return !root_name(p).empty();
}

bool has_root_directory(const Twine &path) {
  SmallString<128> path_storage;
  StringRef p = path.toStringRef(path_storage);

  return !root_directory(p).empty();
}

bool has_root_path(const Twine &path) {
  SmallString<128> path_storage;
  StringRef p = path.toStringRef(path_storage);

  return !root_path(p).empty();
}

bool has_relative_path(const Twine &path) {
  SmallString<128> path_storage;
  StringRef p = path.toStringRef(path_storage);

  return !relative_path(p).empty();
}

bool has_filename(const Twine &path) {
  SmallString<128> path_storage;
  StringRef p = path.toStringRef(path_storage);

  return !filename(p).empty();
}

bool has_parent_path(const Twine &path) {
  SmallString<128> path_storage;
  StringRef p = path.toStringRef(path_storage);

  return !parent_path(p).empty();
}

bool has_stem(const Twine &path) {
  SmallString<128> path_storage;
  StringRef p = path.toStringRef(path_storage);

  return !stem(p).empty();
}

bool has_extension(const Twine &path) {
  SmallString<128> path_storage;
  StringRef p = path.toStringRef(path_storage);

  return !extension(p).empty();
}

bool is_absolute(const Twine &path) {
  SmallString<128> path_storage;
  StringRef p = path.toStringRef(path_storage);

  bool rootDir = has_root_directory(p),
#ifdef LLVM_ON_WIN32
       rootName = has_root_name(p);
#else
       rootName = true;
#endif

  return rootDir && rootName;
}

bool is_relative(const Twine &path) {
  return !is_absolute(path);
}

} // end namespace path

namespace fs {

std::error_code getUniqueID(const Twine Path, UniqueID &Result) {
  file_status Status;
  std::error_code EC = status(Path, Status);
  if (EC)
    return EC;
  Result = Status.getUniqueID();
  return std::error_code();
}

std::error_code createUniqueFile(const Twine &Model, int &ResultFd,
                                 SmallVectorImpl<char> &ResultPath,
                                 unsigned Mode) {
  return createUniqueEntity(Model, ResultFd, ResultPath, false, Mode, FS_File);
}

std::error_code createUniqueFile(const Twine &Model,
                                 SmallVectorImpl<char> &ResultPath) {
  int Dummy;
  return createUniqueEntity(Model, Dummy, ResultPath, false, 0, FS_Name);
}

static std::error_code
createTemporaryFile(const Twine &Model, int &ResultFD,
                    llvm::SmallVectorImpl<char> &ResultPath, FSEntity Type) {
  SmallString<128> Storage;
  StringRef P = Model.toNullTerminatedStringRef(Storage);
  assert(P.find_first_of(separators) == StringRef::npos &&
         "Model must be a simple filename.");
  // Use P.begin() so that createUniqueEntity doesn't need to recreate Storage.
  return createUniqueEntity(P.begin(), ResultFD, ResultPath,
                            true, owner_read | owner_write, Type);
}

static std::error_code
createTemporaryFile(const Twine &Prefix, StringRef Suffix, int &ResultFD,
                    llvm::SmallVectorImpl<char> &ResultPath, FSEntity Type) {
  const char *Middle = Suffix.empty() ? "-%%%%%%" : "-%%%%%%.";
  return createTemporaryFile(Prefix + Middle + Suffix, ResultFD, ResultPath,
                             Type);
}

std::error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix,
                                    int &ResultFD,
                                    SmallVectorImpl<char> &ResultPath) {
  return createTemporaryFile(Prefix, Suffix, ResultFD, ResultPath, FS_File);
}

std::error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix,
                                    SmallVectorImpl<char> &ResultPath) {
  int Dummy;
  return createTemporaryFile(Prefix, Suffix, Dummy, ResultPath, FS_Name);
}

// This is a mkdtemp with a different pattern. We use createUniqueEntity mostly
// for consistency. We should try using mkdtemp.
std::error_code createUniqueDirectory(const Twine &Prefix,
                                      SmallVectorImpl<char> &ResultPath) {
  int Dummy;
  return createUniqueEntity(Prefix + "-%%%%%%", Dummy, ResultPath,
                            true, 0, FS_Dir);
}

std::error_code make_absolute(SmallVectorImpl<char> &path) {
  StringRef p(path.data(), path.size());

  bool rootDirectory = path::has_root_directory(p),
#ifdef LLVM_ON_WIN32
       rootName = path::has_root_name(p);
#else
       rootName = true;
#endif

  // Already absolute.
  if (rootName && rootDirectory)
    return std::error_code();

  // All of the following conditions will need the current directory.
  SmallString<128> current_dir;
  if (std::error_code ec = current_path(current_dir))
    return ec;

  // Relative path. Prepend the current directory.
  if (!rootName && !rootDirectory) {
    // Append path to the current directory.
    path::append(current_dir, p);
    // Set path to the result.
    path.swap(current_dir);
    return std::error_code();
  }

  if (!rootName && rootDirectory) {
    StringRef cdrn = path::root_name(current_dir);
    SmallString<128> curDirRootName(cdrn.begin(), cdrn.end());
    path::append(curDirRootName, p);
    // Set path to the result.
    path.swap(curDirRootName);
    return std::error_code();
  }

  if (rootName && !rootDirectory) {
    StringRef pRootName      = path::root_name(p);
    StringRef bRootDirectory = path::root_directory(current_dir);
    StringRef bRelativePath  = path::relative_path(current_dir);
    StringRef pRelativePath  = path::relative_path(p);

    SmallString<128> res;
    path::append(res, pRootName, bRootDirectory, bRelativePath, pRelativePath);
    path.swap(res);
    return std::error_code();
  }

  llvm_unreachable("All rootName and rootDirectory combinations should have "
                   "occurred above!");
}

std::error_code create_directories(const Twine &Path, bool IgnoreExisting) {
  SmallString<128> PathStorage;
  StringRef P = Path.toStringRef(PathStorage);

  // Be optimistic and try to create the directory
  std::error_code EC = create_directory(P, IgnoreExisting);
  // If we succeeded, or had any error other than the parent not existing, just
  // return it.
  if (EC != errc::no_such_file_or_directory)
    return EC;

  // We failed because of a no_such_file_or_directory, try to create the
  // parent.
  StringRef Parent = path::parent_path(P);
  if (Parent.empty())
    return EC;

  if ((EC = create_directories(Parent)))
      return EC;

  return create_directory(P, IgnoreExisting);
}

std::error_code copy_file(const Twine &From, const Twine &To) {
  int ReadFD, WriteFD;
  if (std::error_code EC = openFileForRead(From, ReadFD))
    return EC;
  if (std::error_code EC = openFileForWrite(To, WriteFD, F_None)) {
    close(ReadFD);
    return EC;
  }

  const size_t BufSize = 4096;
  char *Buf = new char[BufSize];
  int BytesRead = 0, BytesWritten = 0;
  for (;;) {
    BytesRead = read(ReadFD, Buf, BufSize);
    if (BytesRead <= 0)
      break;
    while (BytesRead) {
      BytesWritten = write(WriteFD, Buf, BytesRead);
      if (BytesWritten < 0)
        break;
      BytesRead -= BytesWritten;
    }
    if (BytesWritten < 0)
      break;
  }
  close(ReadFD);
  close(WriteFD);
  delete[] Buf;

  if (BytesRead < 0 || BytesWritten < 0)
    return std::error_code(errno, std::generic_category());
  return std::error_code();
}

bool exists(file_status status) {
  return status_known(status) && status.type() != file_type::file_not_found;
}

bool status_known(file_status s) {
  return s.type() != file_type::status_error;
}

bool is_directory(file_status status) {
  return status.type() == file_type::directory_file;
}

std::error_code is_directory(const Twine &path, bool &result) {
  file_status st;
  if (std::error_code ec = status(path, st))
    return ec;
  result = is_directory(st);
  return std::error_code();
}

bool is_regular_file(file_status status) {
  return status.type() == file_type::regular_file;
}

std::error_code is_regular_file(const Twine &path, bool &result) {
  file_status st;
  if (std::error_code ec = status(path, st))
    return ec;
  result = is_regular_file(st);
  return std::error_code();
}

bool is_other(file_status status) {
  return exists(status) &&
         !is_regular_file(status) &&
         !is_directory(status);
}

std::error_code is_other(const Twine &Path, bool &Result) {
  file_status FileStatus;
  if (std::error_code EC = status(Path, FileStatus))
    return EC;
  Result = is_other(FileStatus);
  return std::error_code();
}

void directory_entry::replace_filename(const Twine &filename, file_status st) {
  SmallString<128> path(Path.begin(), Path.end());
  path::remove_filename(path);
  path::append(path, filename);
  Path = path.str();
  Status = st;
}

/// @brief Identify the magic in magic.
file_magic identify_magic(StringRef Magic) {
  if (Magic.size() < 4)
    return file_magic::unknown;
  switch ((unsigned char)Magic[0]) {
    case 0x00: {
      // COFF bigobj or short import library file
      if (Magic[1] == (char)0x00 && Magic[2] == (char)0xff &&
          Magic[3] == (char)0xff) {
        size_t MinSize = offsetof(COFF::BigObjHeader, UUID) + sizeof(COFF::BigObjMagic);
        if (Magic.size() < MinSize)
          return file_magic::coff_import_library;

        int BigObjVersion = read16le(
            Magic.data() + offsetof(COFF::BigObjHeader, Version));
        if (BigObjVersion < COFF::BigObjHeader::MinBigObjectVersion)
          return file_magic::coff_import_library;

        const char *Start = Magic.data() + offsetof(COFF::BigObjHeader, UUID);
        if (memcmp(Start, COFF::BigObjMagic, sizeof(COFF::BigObjMagic)) != 0)
          return file_magic::coff_import_library;
        return file_magic::coff_object;
      }
      // Windows resource file
      const char Expected[] = { 0, 0, 0, 0, '\x20', 0, 0, 0, '\xff' };
      if (Magic.size() >= sizeof(Expected) &&
          memcmp(Magic.data(), Expected, sizeof(Expected)) == 0)
        return file_magic::windows_resource;
      // 0x0000 = COFF unknown machine type
      if (Magic[1] == 0)
        return file_magic::coff_object;
      break;
    }
    case 0xDE:  // 0x0B17C0DE = BC wraper
      if (Magic[1] == (char)0xC0 && Magic[2] == (char)0x17 &&
          Magic[3] == (char)0x0B)
        return file_magic::bitcode;
      break;
    case 'B':
      if (Magic[1] == 'C' && Magic[2] == (char)0xC0 && Magic[3] == (char)0xDE)
        return file_magic::bitcode;
      break;
    case '!':
      if (Magic.size() >= 8)
        if (memcmp(Magic.data(),"!<arch>\n",8) == 0)
          return file_magic::archive;
      break;

    case '\177':
      if (Magic.size() >= 18 && Magic[1] == 'E' && Magic[2] == 'L' &&
          Magic[3] == 'F') {
        bool Data2MSB = Magic[5] == 2;
        unsigned high = Data2MSB ? 16 : 17;
        unsigned low  = Data2MSB ? 17 : 16;
        if (Magic[high] == 0)
          switch (Magic[low]) {
            default: return file_magic::elf;
            case 1: return file_magic::elf_relocatable;
            case 2: return file_magic::elf_executable;
            case 3: return file_magic::elf_shared_object;
            case 4: return file_magic::elf_core;
          }
        else
          // It's still some type of ELF file.
          return file_magic::elf;
      }
      break;

    case 0xCA:
      if (Magic[1] == char(0xFE) && Magic[2] == char(0xBA) &&
          Magic[3] == char(0xBE)) {
        // This is complicated by an overlap with Java class files.
        // See the Mach-O section in /usr/share/file/magic for details.
        if (Magic.size() >= 8 && Magic[7] < 43)
          return file_magic::macho_universal_binary;
      }
      break;

      // The two magic numbers for mach-o are:
      // 0xfeedface - 32-bit mach-o
      // 0xfeedfacf - 64-bit mach-o
    case 0xFE:
    case 0xCE:
    case 0xCF: {
      uint16_t type = 0;
      if (Magic[0] == char(0xFE) && Magic[1] == char(0xED) &&
          Magic[2] == char(0xFA) &&
          (Magic[3] == char(0xCE) || Magic[3] == char(0xCF))) {
        /* Native endian */
        if (Magic.size() >= 16) type = Magic[14] << 8 | Magic[15];
      } else if ((Magic[0] == char(0xCE) || Magic[0] == char(0xCF)) &&
                 Magic[1] == char(0xFA) && Magic[2] == char(0xED) &&
                 Magic[3] == char(0xFE)) {
        /* Reverse endian */
        if (Magic.size() >= 14) type = Magic[13] << 8 | Magic[12];
      }
      switch (type) {
        default: break;
        case 1: return file_magic::macho_object;
        case 2: return file_magic::macho_executable;
        case 3: return file_magic::macho_fixed_virtual_memory_shared_lib;
        case 4: return file_magic::macho_core;
        case 5: return file_magic::macho_preload_executable;
        case 6: return file_magic::macho_dynamically_linked_shared_lib;
        case 7: return file_magic::macho_dynamic_linker;
        case 8: return file_magic::macho_bundle;
        case 9: return file_magic::macho_dynamically_linked_shared_lib_stub;
        case 10: return file_magic::macho_dsym_companion;
        case 11: return file_magic::macho_kext_bundle;
      }
      break;
    }
    case 0xF0: // PowerPC Windows
    case 0x83: // Alpha 32-bit
    case 0x84: // Alpha 64-bit
    case 0x66: // MPS R4000 Windows
    case 0x50: // mc68K
    case 0x4c: // 80386 Windows
    case 0xc4: // ARMNT Windows
      if (Magic[1] == 0x01)
        return file_magic::coff_object;

    case 0x90: // PA-RISC Windows
    case 0x68: // mc68K Windows
      if (Magic[1] == 0x02)
        return file_magic::coff_object;
      break;

    case 'M': // Possible MS-DOS stub on Windows PE file
      if (Magic[1] == 'Z') {
        uint32_t off = read32le(Magic.data() + 0x3c);
        // PE/COFF file, either EXE or DLL.
        if (off < Magic.size() &&
            memcmp(Magic.data()+off, COFF::PEMagic, sizeof(COFF::PEMagic)) == 0)
          return file_magic::pecoff_executable;
      }
      break;

    case 0x64: // x86-64 Windows.
      if (Magic[1] == char(0x86))
        return file_magic::coff_object;
      break;

    default:
      break;
  }
  return file_magic::unknown;
}

std::error_code identify_magic(const Twine &Path, file_magic &Result) {
  int FD;
  if (std::error_code EC = openFileForRead(Path, FD))
    return EC;

  char Buffer[32];
  int Length = read(FD, Buffer, sizeof(Buffer));
  if (close(FD) != 0 || Length < 0)
    return std::error_code(errno, std::generic_category());

  Result = identify_magic(StringRef(Buffer, Length));
  return std::error_code();
}

std::error_code directory_entry::status(file_status &result) const {
  return fs::status(Path, result);
}

} // end namespace fs
} // end namespace sys
} // end namespace llvm

// Include the truly platform-specific parts.
#if defined(LLVM_ON_UNIX)
#include "Unix/Path.inc"
#endif
#if defined(LLVM_ON_WIN32)
#include "Windows/Path.inc"
#endif


TurningPoint Accounting is a solution best suited for companies who outgrow QuickBooks and other systems meant for smaller businesses, but aren't yet ready for a more sophisticated system.
This solution is designed primarily to serve businesses in the distribution, manufacturing, and service-providing industries with around $25 million in sales volume.
TurningPoint fills the needs of companies outgrowing their core applications by integrating accounting, inventory management, purchase and sales orders, and reporting functionality in one complete system.
The system provides an easily accessible cross-section called the Financial Snapshot Report. This function depicts cash balances, AP, and AR in an intuitive, integrated display. It can support multiple locations of warehouses, utilize multiple different kinds of measurement and store multiple different prices for goods and services.
Users who have specific preferences can even customize their own reminders, field labels, and other parts of the user interface. The interfact is modeled after Microsoft Explorer to leverage user familiarity.
TurningPoint has the ability to launch Microsoft Office applications within the system, ensuring unified Crystal Reports is used by TurningPoint to create standardized, recognizable reports.
Lisa from Dowers Roofing Inc.
I would recommend Red Wing software without any hesitation, thanks to the software support team.
I converted from Red Wing DOS to TurningPoint through the Internet with RW transferring data. I had read info I got off RW website so I was alittle familiar with the new look of AR, AP & GL, but of course it was still like sitting down to a new job! But I took it day by day, and with RW support I was surprised at how fast I became used to the new programs.
I guess the biggest problem was switching to new programs after 18 years of doing it all without thinking! But it can be done, even though there were times that I was frustrated that all I had was support by phone. Looking back, I am extremely glad I made the change. And I still find easier ways to do my work even a year and a half from my conversion.


text:
In a Split Second, Clothes Make the Man More Competent in the Eyes of Others
People perceive a person's competence partly based on subtle economic cues emanating from the person's clothing, according to a study published in…
New Modeling Will Shed Light On Ways Policy Decisions Affect Human Migration From Sea Level Rise
A new modeling approach can help researchers, policymakers, and the public better understand how policy decisions will influence human migration as…
Solar and Wind Energy Preserve Groundwater for Drought, Agriculture
Solar and wind farms are popping up around the country to lower carbon emissions, and these renewables also have another important effect: keeping…
Study Helps Pinpoint What Makes Species Vulnerable to Environmental Change
Pesticide Companies Leverage Regulations for Financial Gains
Pesticides are present in many food products and play a central role in the production of traded agriculture, giving them global and economic…
More Farmers, More Problems: How Smallholder Agriculture is Threatening the Western Amazon
Politics & Polls #144: The Origins of the Internet Featuring David Kushner
The internet continues to expand and grow in complexity, yet many people are unaware of its origins. Understanding the internet's roots could be…
Facebook Data Transparency Advisory Group Releases Final Report
On May 23, 2019, Facebook's Data Transparency Advisory Group (DTAG) released its independent report, which assesses Facebook's methods of measuring…
Researchers Reveal Ways to Better Predict Future Sea Level Rise
Future sea level rise poses serious threats to the viability of coastal communities but is challenging to project using deterministic modeling…
Reducing Carbon Emissions While Improving Health is Economically Attractive, Study Shows
It's a classic policy dispute: How much should the current generation invest in reducing carbon emissions for the benefit of future generations?
Racial Bias Associated with Disparities in Disciplinary Action Across U.S. Schools
Studies have shown that black students are subjected to higher disciplinary rates than whites, resulting in a number of negative life outcomes,…
Reports of Corruption Increase in Nigeria After Film and Text Campaign
Delays in Banning Wildlife Trade Put Hundreds of Species at Risk
Two-thirds of species endangered by wildlife trade wait close to or more than two decades to be protected.
Fake News Shared by Very Few, But Those Over 65 More Likely to Pass on Such Stories, New Study Finds
A small percentage of Americans, less than 9 percent, shared links to so-called "fake news" sites on Facebook during the 2016 presidential election…
No Laboratory Needed: The Person Project Mines Social Science Data with Secure Online Quizzes
Understanding the human psyche is complex, for ordinary people and scientists alike. Now, researchers at Princeton University have created a new tool…
Forest Soundscapes Monitor Conservation Efforts Inexpensively, Effectively
Recordings of the sounds in tropical forests could unlock secrets about biodiversity and aid conservation efforts around the world, according to a…
Climate Policy Simulator Forces Users to Confront Ethics and Science Behind Policy Choices
Responding to the challenges of climate change depends both on scientific assessment as well as value judgments by citizens, academics and…

redpajama_set_name: RedPajamaCommonCrawl


Nissan NV 3500 HD 12 Passenger Van "Sophie"
This beauty is loaded with options to make the miles fly by on your next tour. Your driver and front passenger will have heated seats for that cold week in Chicago and Sirius Satellite Radio for those long roads in Texas. Navigation will come in handy while trying to locate that hard to find venue. Plenty of charging ports to keep your phones charged and Bluetooth so you can play that song over and over so it's ready to go by showtime. The NV's leather seating is very flexible to allow for gear to be carried with maximum comfort for your band. With a sleek and classy black exterior with chrome wheels you'll fit right in with the line of Prevost's behind the stage and the backup camera will help you squeeze in like the pro you are. For the Road Warriors who deserve the best, rent "Sophie" our Nissan NV 3500 HD today!
Ford E350 Super Duty 15 Passenger Van "Great White"
How many times have you passed the line of tour buses headed back to Nashville and seen the White Ford E350 bringing up the rear with the support band? There is a reason for that. The Ford E350 15 passenger van has been a standard for economical travel for years. Known for it's reliability, the E350 is your choice when trying to cover the miles on a budget. With seating for up to 15, you don't have to make your horn section drive separate. We can remove one or two rows of seats to fit (in most cases) your backline and merch or opt for a trailer so your crew can stretch out on all 4 rows of seats. Multiple charging ports and an aux cord give you the flexibility to listen to your music and keep your devices charged. So if you're praying your t-shirt sales bring you home with enough money to show a profit, reserve "Great White" our Ford E350 today!
Chevy Express 3500 15 Passenger Van "Ruby", "Cash", "Katie"
For years the Express Van has been one of the most used vans on the road for economically moving people. With it's reliability and comfort it's not hard to see why. Seats can be removed to carry gear or hitch up a trailer and let everyone stretch out. With four full benches they can serve as bunks for your band as you cover the long miles that lie ahead. Your crew will arrive as fresh as they can possibly be with you having had that 5AM bus call. The 6.0L V8 is strong enough to tackle those steep grades you encounter on the road and you'll still see up to 16mpg while loaded down. With Sirius Satellite Radio you'll stay tuned into your favorite music or catch your favorite sports game on that long ride back to Nashville. Carry your sports team, church group, or your chess team with style in this economical people mover. All of our Chevy vans come with free Wi-Fi. They also all have backup sensors to help you back into tight spaces and Ruby and Katie have cameras.
Had a last last night at @sidewindersaloon Great crowd! Thanks to all who joined us. You rock!
This Saturday I'll be performing in Roanoke, VA @sidewindersaloon Come party with us!


text:
WARWORK NEWS NO 38 [Main Title]
© IWM S15 38
Use this film under fair dealing.
All Rights Reserved except for Fair Dealing exceptions otherwise permitted under the Copyright, Designs and Patents Act 1988, as amended and revised.
II. "8th in Ortona, 5th go forward." In spite of Nazi threats to victimise the families of Italians who fight against the Germans, Italian soldiers are seen manning artillery on the 5th Army front. Fate of Italian civil population is suggested by view of woman retrieving her belongings from a ruined house. But rural life continues as before (man with oxen and plough) and Italian soldiers sit smiling and prepared in an Allied truck marked "Rome or Death."
I. "Duce rescued from captivity." Captured German film of the escape of Mussolini and his arrival at the Führer's HQ, where he is met by Hitler, Ribbentrop and his son Bruno.
III. "In 1944 your health is the first front." Urges workers to keep up their effort and maintain their health "for almost the only thing that could stop victory this year is a slowdown on the factory floor." Dramatised sequence shows malingering worker suffering from bad conscience as radio relays Harris' request for one last spurt of effort. Factories have their own health clinics which workers are urged to use. Workers must also wear suitable clothing to avoid injury.
Second World War (content)
Ministry of Supply (Production sponsor)
British Paramount News (Production company)
whole: 1
Meet The Squander Bug
This unpleasant-looking character is called the Squander Bug, and it was created during the Second World War by artist Phillip Boydell, an employee of the National Savings Committee. The cartoon bug appeared in press adverts and poster campaigns as a menace who encouraged shoppers to waste money rather than buy war savings certificates.
American troops and locals at the Dove Inn, Burton Bradstock, in Dorset, 1944.
Tips For American Servicemen In Britain During The Second World War
In 1942, the first of over 1.5 million American servicemen arrived on British shores in preparation for the Allied offensives against Germany during the Second World War. That year, the United States' War Department published Instructions for American Servicemen in Britain to help soldiers, sailors and airmen – many of whom had never travelled abroad before – adjust to life in a new country.
What Happened To RAF 617 Squadron After The Dambusters Raid


Hotsy provides high quality used & refurbished equipment at an affordable price. Hotsy is Iowa's premier dealership with locations in Hiawatha and Urbandale. With our large inventory of used pressure washers, we are positive that we have the perfect washer for whatever needs you need fulfilled. Whether you are looking for a cold water pressure washer or a hot water pressure washer, Hotsy carries it. We also are stocked with a variety of accessories, parts and detergent to accommodate your pressure washer.
If you're looking to trade in your used pressure washer, use our Trade in Estimator tool today to estimate the worth of your trade in. We guarantee to give you a fair and honest price for the value of your pressure washer. If you have questions about our trade in policy or would like to speak to a Hotsy representative, contact us today to learn more.


text:
Seabrook Island est une île barrière et une ville américaine située dans le comté de Charleston et dans l'État de Caroline du Sud. Elle fait partie de la région métropolitaine de Charleston.

Démographie

Traduction

Notes et références

Ville en Caroline du Sud
Localité dans le comté de Charleston
Île barrière aux États-Unis
Île dans le comté de Charleston

redpajama_set_name: RedPajamaWikipedia


Agiloft to do, it can do.
Agiloft provides Agile Business Software. We are using the word "agile" in its original meaning of "quick, adaptable, and resourceful," rather than referring to a particular software development methodology. In fact, one of the ways the Agiloft platform enables IT to become agile is by removing the need to write software at all.
The unparalleled adaptability of our no-code technology platform allows deep customization across the entire system using just the admin browser. So no one has to write custom code.
Enki needed a robust and integrated system for Support, Contract Management and CRM. They spent 6 man-months and several calendar years customizing NetSuite with over 50,000 lines of code to meet their needs before accepting that it was just not up to the challenge. Less than 10 days later, they had reproduced all of their required customizations and more within Agiloft – without writing a single line of code.
Agiloft is the only company in the industry with the confidence to provide an unconditional satisfaction guarantee that covers both software and services. And we've got the track record to back it up.
The reductions in implementation time and cost flow naturally from our agile platform. It is simply much faster to configure a system using drag-and-drop technology within a browser than it is through hand-coding, and no custom code means no custom bugs or security holes.
What users say they want is often not what they actually need, but this only becomes clear when they can see and use a live system. Rewriting custom code to meet these adjusted requirements is very time-consuming and expensive. With Agiloft, the system can be quickly modified on the fly to meet users' evolving needs with no coding required.
Our ability to make rapid changes in response to user feedback is one of the reasons that we can provide the industry's only unconditional satisfaction guarantee. Agiloft's speed and flexibility, coupled with over a decade of experience, make our risk negligible. For more information, read this white paper on "How to Ensure the Success of IT Projects."
It's always great to be in a meeting discussing new features and functions that people would like to see and have them implemented within hours of the discussion.
Philip LeMaster, IT Manager at CSF International, Inc.
Our goal is not just to provide agile software - it is to help your organization become agile. Free Agiloft administrator training and webinars are aimed at making your company self-sufficient, and the system is specifically designed to be easy to extend and maintain.
Microsoft CRM couldn't meet our unique needs, but Agiloft did so easily.
Everyone had some flexibility, but definitely not even in the same ballpark as Agiloft.


"Christmas in Vietnam," written by John Wilson and John Wessler, recorded by them as "Johnny & Jon," and released on Stan Lewis's Jewel Records in 1966, during the Vietnam Conflict.
"Christmas in Vietnam," written by John Wilson and John Wessler, recorded by them as "Johnny & Jon," and released on Stan Lewis's Jewel Records in 1966.
They came from Russia Outer Space, perhaps. Silently, in the dead of night, thousands of heavily armed masked men appeared on the streets of Sevastopol, Simferopol, and Yalta. Their green uniforms bear no markings, and they're not talking. Observers speculate that the Federation of Planets sent them as poll watchers, to ensure a free and fair vote in today's Crimean referendum.
The Defence Cyber Operations Group (DCOG) is under the MoD Joint Forces Command (recruitment info here). The UK is thought to lag far behind the USA, Israel, and China in militarizing the digital domain.
The last convoy of United States troops left Iraq today, entering Kuwait and ending almost nine years of official military presence. Operation Iraqi Freedom lasted eight years, eight months and 25 days. 1.5 million troops served, 4,500 died, and 32,000 were wounded. Cost in Iraqi lives? Pick a number over 100,000.
American troops already withdrawn from Iraq are glad to be home for the holidays, though many will be re-deployed to Afghanistan. But at least Iraq is secure, right?


UNIONDALE, N.Y. — The Blue Jackets squandered a two-goal lead on the road for the second time in two weeks and again surrendered a third-period, game-winning goal on a coverage breakdown in front of their net.
But seeing a repeat performance from the Nov. 19 loss in Toronto was not nearly as concerning as the sight of Ryan Murray walking out of the visitors locker room Saturday night with a protective boot on his left foot. The defenseman blocked a Johnny Boychuk shot with 11:53 remaining in a 3-2 setback to the Islanders and did not skate another shift on Nassau Coliseum ice.
Coach John Tortorella didn't provide an immediate update on Murray's condition. The oft-injured veteran is enjoying one of the best starts to his career, and losing him for significant time would be a big blow to the Blue Jackets.


text:
{#
    basic/search.html
    ~~~~~~~~~~~~~~~~~

    Template for the search page.

    :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
#}
{%- extends "layout.html" %}
{% set title = _('Search') %}
{% set script_files = script_files + ['_static/searchtools.js'] %}
{% block extrahead %}
{# Hide extra navigation on search result page #}
  <link rel="stylesheet" href="{{ pathto('_static/hide-nav.css', 1) }}" type="text/css" />

  {# this is used when loading the search index using $.ajax fails,
     such as on Chrome for documents on localhost #}

  {{ super() }}
{% endblock %}
{% block body %}

{{ _('Search') }}

    {% trans %}Please activate JavaScript to enable the search
    functionality.{% endtrans %}

  From here you can search the documentation.

  To perform a Quick Search, enter your search word(s) into the box below and
  click "Search":

  <form name="searchQ" action="" method="get">
    <input maxlength="256" size="40" type="text" name="q" value="" />
    <input type="submit" value="{{ _('search') }}" />

  </form>

  Quick Search is a local keyword search; not as comprehensive as an external
  search engine, but fast and often sufficiently accurate. Note that the Search function
  will automatically search for all of the words. Pages containing fewer words won't
  appear in the result list. Don't use any special characters (such as hyphens or periods)
  in your words, as the search will then not work.

{% endblock %}

redpajama_set_name: RedPajamaGithub


text:
Collaborators & Partner Orgs
Participate/Submit Artwork
Call for Entries (77)
Exhibition Reviews (61)
8 Nights 8 Windows: Public Hanukkah Art In Boston
Piece of History's Inventive Objects
Brooklyn Jewish Art Gallery Seeks Submissions For "Passover and the Consequences of Freedom"
Ken Goldman's "Some Body Jewish" at The Philadelphia Museum of Jewish Art
Video: "Sjnoder, Anatomy of Tzedakah" by Billha Zussman
Jewish Art Now
NYC (144) Painting (87) Israel (55) Jewish Artist Groups (54) Art as Midrash (52) Film (46) Videos (34) Photography (34) Illustration (32) Ritual Objects (30) Holidays (29) LA (27) Museums (23) Europe (23) Sculpture (22) Graphic Design (19) Midwest US (18) Installation (18) Hebrew (17) Digital Art (17) Jewish Galleries (17) Philadelphia (16) Industrial Design (15) Art History (15) Jewish Art Education (15) Video Art (14) Graphic Novels (14) Feminist Art (13) Brooklyn (12) New Media (11) Mixed Media (11) textile (11) California (11) Animation (9) Graffiti (8) Fiber Art (8) Book Arts (8) Canada (8) Architecture (8) Music (7) Calligraphy (7) Typography (6) Asia (6) Marketing (5) Live Art (5) Miami (4) Street Art (4) San Francisco (4) New England (4) Fashion (3) Jewelry (3) Australia (3) Yiddish (2) Baltimore (2) Galleries (2) Papercut (2) Boston (2) London (2) Interactive Art (2) South America (2) Washington D.C. (2) Printmaking (2) Public Art (2) Jewish Art (2) Kabbalah (1) Drawing (1) Hassidic (1) France (1) Festival (1) Metalwork (1) Prayer (1) Intergroup Art (1) Jewish History (1) Africa (1) Social Action (1) Electronic Art (1) Educational Opportunities (1) South West US (1) 3-D Printing (1) Brazil (1) Indian (1) Artist (1) New Haven (1) Ritual (1) Ceramics (1) Aramaic (1) DC (1) Diversity (1) Queer Art (1) Russian (1) Passover (1) Haggadah (1) Conney Conference (1) Identity (1) Diverse (1) Jewish Art Now (1) Conney Conference 2015 (1) Jewish Art Salon (1) Exhibit (1) Jerusalem Biennale 2015 (1) Indiegogo Campaign (1) Lecture (1) Body Art (1)
Jewish Artist Collectives
Jewish Artist Work & Study Programs
Jewish Art History Education & Archives
Jewish Art Galleries & Museums
Art Marketing Resources
Call for Interns
Saul Sudin is a writer and filmmaker advocating a new voice for Judaism in the movies. Recently he co-produced the documentary Punk Jews and directed Names, Not Numbers, which has been inducted into the National Library of Israel and the Yeshiva University Museum. He has been profiled in The New Yorker, The Huffington Post, and Haaretz and his films have been featured at the Museum of Fine Art – Boston and the Museum of Jewish Heritage in New York, among others. Saul received his BFA in Film from the Pratt Institute with a minor in Art History and was the recipient of the Outstanding Merit Award in Media Arts & Film. www.saulsudin.com
Elke Reva Sudin is a visual artist who draws inspiration from urban culture and her Jewish heritage. She received critical acclaim for her "Hipsters and Hassids" painting series and has been featured in The New York Times, The New Yorker, New York Press, Haaretz, EL PAÍS, The WG News, The Hartford Courant, World Net Daily, The Jewish Week, and Tablet Magazine.
Sudin received a BFA in Illustration from Pratt Institute in New York. In 2011, Sudin was named one of the Jewish Week's "36 Under 36" young Jewish innovators. Recently she has premiered her new series "We Are Patriarchs" at the Hadas Gallery in Clinton Hill, Brooklyn. www.elkerevasudin.com
Yehudis Barmatz-Harris is a sculptor, painter, and art therapist with a BFA in sculpture from Pratt Institute and a degree in art therapy from Seminar Hakibbutzim in Tel Aviv. Ever since arriving in Israel in 2009, Yehudis has researched, written and interviewed artists in her quest to discover her place amongst the quietly developing contemporary mystical art movement in Israel. Yehudis's art work and art bio can be viewed here.
Patrícia Eszter Margit is an author, journalist, sociologist and community organizer originally from Hungary. Her writings have appeared in the Jewish Telegraphic Agency, Jerusalem Report, Nepszabadsag (the largest Hungarian daily), Szombat (Hungarian Jewish cultural magazine), and Marie Claire magazine. She is the author of The Jewish Bride, a bestseller published in Hungary in 2009. The world traveling writer, who lived in France, Netherlands and Israel for her studies decided to move to New York when she became a Jewish bride herself.
Marcy Rivka Nehorai is a painter and writer of Jewish art based in New York. After receiving a B.A. in painting from Rutgers University and the Univeristy of Illinois Urbana Champaign, she worked for the Jewish Student Union, connecting Jewish public high school teens to their roots through participation in the Jewish art world. Her artwork can be viewed at naftaliart.com.
Yasmin Spiegel is a grant writer for the arts, a teacher of Judaic and creative studies, and a ballroom dancer. She weaves movement with textual study, and visual arts with natural and world histories in her courses and in her consulting strategy. Most recently Yasmin has worked with Yin Mei, of Yin Mei Dance, a multimedia dance-theater company based in NYC. Yasmin received a B.A. from the University of Connecticut and an M.L.S. from Queens College of the City University of New York.
Dena Schupper received her B.A. in English Literature from Boston University in 2004. After attempting to answer the question, "What will you do with a degree in English?" Dena moved to New York and promptly began her career as a medical copy editor at a large pharmaceutical advertising agency. Dena lives in Brooklyn with her husband, Yehuda, and their 2 daughters.
Interested in becoming a contributor? Find out more here.
Copyright 2013 Jewish Art Now - Log in


Both leucine and CLA can be helpful if you're trying to lose weight, while glutathione boosts your overall health by protecting your cells and mitochondria from oxidative and peroxidative damage.
While many recommend whey protein as a way of boosting your protein intake, I'd be wary of following a high-protein diet for weight loss.
It's true that protein helps decrease hunger by making you feel fuller longer, and by affecting certain hormones (increasing certain appetite-reducing hormones while reducing the hunger hormone ghrelin).
Protein can also give your metabolism a boost, and a number of studies suggest high-protein diets produce greater weight loss. But there's also compelling evidence suggesting too much protein may promote cancer growth by activating the mammalian target of rapamycin (mTOR) mechanism.
I'll discuss protein requirements below, but suffice to say for now, that while your body does need protein, and whey protein is an ideal workout supplement to boost muscle growth and repair, it's important to track your protein intake from all sources, and don't overdo it.
Thirty percent protein is three times the amount your body needs for optimal health. So whether it's weight loss or general health and longevity you're after, avoid high-protein diets and focus on increasing healthy fats and cutting out net (non-fiber) carbs instead, while maintaining a balanced, moderate protein intake calculated according to your body composition, which I'll explain below.
Let's take a look at those three ingredients that make whey protein such an attractive addition to your diet and fitness regimen, starting with leucine. While serving many functions in your body, leucine signals the mTOR mechanism to increase protein synthesis, thereby boosting muscle growth.
Whey protein is ideal because it contains FAR more leucine than other foods. Just 3 ounces (oz.) of high-quality whey contains about 8 grams of leucine. To get that from other foods, you'd have to eat 1.5 lbs. of chicken, more than 1 lb. of almonds (over 3,000 calories!) or 16 raw eggs.
Whey protein is also an excellent source of the precursors of glutathione, which is your body's most powerful antioxidant. This "master antioxidant" is a tripeptide found inside every single cell in your body. As you probably know, antioxidants are crucial for eliminating damaging free radicals from your body.
Synthesis of glutathione is dependent on adenosine triphosphate (ATP), so when your ATP is low, you'll also have lower glutathione levels. This is another reason why exercise is so beneficial for your health — among other things, it boosts your ATP and glutathione levels. And by enhancing internal glutathione production, you'll also strengthen your immune system.
Most oral glutathione supplements have been shown to be poorly absorbed. What's worse, glutathione supplements may actually interfere with your body's own glutathione production. Your body is programmed to self-produce glutathione, and when taking a synthetic supplement your body decreases its own production, leaving you dependent on an outside source.
However, opinions vary when it comes to how much protein you need on a daily basis. With advancing age, getting adequate amounts of high-quality protein is especially important. Your ability to process protein declines with age while your level of age-related muscle loss (sarcopenia) increases, thereby raising your protein requirement. That said, you'd be wise to monitor your intake to make sure you're not overdoing it.
Making matters worse, the vast majority of this meat comes from animals raised in concentrated animal feeding operations (CAFOs), the quality of which is significantly inferior to organically raised, pastured, or grass-fed and grass-finished meats. Considering the fact that the majority of Americans are overweight or obese, I prefer using a formula that calculates an individual's protein requirement based on lean bodyweight (i.e. muscle weight) only.
To determine your lean body mass, subtract your percent body fat from 100. For example, if you have 30 percent body fat, then you have 70 percent lean body mass. Then multiply that percentage by your current weight to get your lean body mass in pounds or kilos. Next, multiply your lean body weight by 0.5 grams if you're calculating in pounds, or 1 gram if you're calculating in kilos.
To use myself as an example, I weigh 173 lbs. and have 10 percent body fat, which means my lean body weight is just under 156 lbs. Using the above formula, my protein requirement is about 77 grams a day, although I typically don't go over 70 grams as for most of us, it is better to actually have less than more protein. I use a nutrition calculator to enter everything I eat and carefully calculate my protein requirement to the gram. I think it's that important.


360o Salon & Day Spa is a full service hair salon & spa, offering a full compliment of Hair, Nail and Day Spa services.
Save 20% on all retail products during your birthday month!
We are located at 1410 Prairie Street on the corners of Main and Prairie in Essexville, Michigan.
Gift certificates are wonderful any time of the year and can be used towards services or products at 360° Salon. Available in any denomination, certificates can be purchased in the salon or by calling us.


text:
NIS and the EU
NIS worldwide
Performance higlights
REACH and SDS
Compressed gas
Bottled Gas
Jazak Water
Quality of Products
Together for the Community
Energy of Knowledge
Applying for candidates database
Responsibility to Employees
About procurement for suppliers
Open tenders
Mobile app – mTenderi
Sale and lease of property
HSE Questionnaire
NIS in Media
Corporate Press
NIS is one of the largest vertically integrated energy companies in Southeast Europe.
Fundamental principles which support our progress
NIS is a company with the highest market capitalization on the Belgrade Stock Exchange.
The information for shareholders and expert community
NIS offers a wide range of products and services
Sustainable development is not only NIS' strategic objective, it is a fundamental practice we keep perfecting seeking to upgrade the quality of life in the community, where we operate, develop human resources and preserve the natural ones.
Program of support to local communities
NIS is a company with an up-to-date approach in business, with special focus on employees, the main factor of success and the gained status of the most respectable company in the Balkans. A policy has been defined to attract, gain, develop, keep and reward the right people, contributing to achieving the company's targets.
Information on open tendering and bidding procedures.
See the current tenders
All information on NIS in one place
Stay up to date with our latest activities
NIS Press Center
?> Articles ?> Boljšoj festival ?> Interviews ?> News ?> NIS in Media ?> Press kit
NIS > Press > Interviews > Interview of NIS CEO Kirill Tyurdenev for Energy Intelligence
Interview of NIS CEO Kirill Tyurdenev for Energy Intelligence
Serbian oil and gas company Naftna Industrija Srbije (NIS) this year marks the 10th anniversary since
Russia's Gazprom Neft became its largest shareholder in 2009. NIS CEO Kirill Tyurdenev tells Energy
Intelligence in an interview how the Serbian company has changed over the past decade and what the future
holds.
How would you evaluate the company's transformation over the past 10 years? What are the successes
NIS achieved and how has NIS changed over the period?
Over the past 10 years, NIS has changed dramatically, and the dynamics of the company's financial performance are the best evidence of our success. Before Gazprom Neft joined as a shareholder, NIS incurred a loss of about $100 million to its shareholders. The total debt stood at some $1 billion. In 2018, the company's net profit exceeded $250 million, while earnings before interest, tax, depreciation and amortization reached more than $500 million. The company's debt dropped to $657 million. Today we consciously keep net debt at this level, because it is economically profitable for us to raise the money in such a volume and under such conditions that the market provides now. In terms of operational performance, I can say that when Gazprom Neft entered the share capital of NIS, the company's production amounted to roughly 1 million metric tons per year (20,000 barrels per day) and was gradually decreasing. Last year, we produced about 1.3 million tons of oil equivalent. Refining volumes at the end of 2018 reached record levels, exceeding 3.8 million tons. One of the key projects of the last 10 years is the modernization of the Pancevo refinery, which Gazprom Neft started after the acquisition of NIS in 2009. This made it possible to bring Euro5 standard fuel to the Serbian market, expand the products basket, and increase the efficiency of products output. Thanks to Gazprom Neft's investments, NIS received the status of the largest domestic supplier in the fuel market and began to export oil products to the markets of the Balkan region.
We have also increased our share in the retail market. In Serbia, we are approaching a 44% share in retail and 70% in wholesale. In addition, the company went outside Serbia to Romania, Bulgaria and Bosnia and Herzegovina. We have 315 fuel retail stations in Serbia and about 90 stations outside the country, under the brands NIS Petrol and Gazprom. If we talk about foreign expansion, then we are now working outside the country in exploration and production. We are conducting exploration in Romania and Bosnia and Herzegovina. In addition, the company is diversifying its business. In partnership with Gazprom Energoholding, we are building a combinedcycle power plant, that is, a power plant with a gas and steam turbine. Also, together with our Hungarian partners, the MET group, we are implementing a wind farm construction project. In addition, at our own facilities, we built several plants for electric power generation and thermal energy at eight oil and gas fields with a nameplate capacity of 14 megawatts. On gas fields in Romania, the construction of a unit for the generation of electricity with a capacity of 7.5 MW is under way.
This year, NIS is prepared to update until 2025 its development strategy, which was adopted in 2017. What are the main goals you plan to achieve?
It's too early to outline the parameters of the updated strategy, we are working on them now. In the autumn we will submit the strategy for the shareholders' approval.
You already mentioned that in 2018 NIS produced 1.3 million tons of oil equivalent. What is the production plan for 2019? Are you planning any actions to stabilize declining production, or to increase it?
Indeed, the company's production is declining because in Serbia we are working at mature fields, and if nothing is done, production will be declining by 20%-25% annually. We managed to keep this decline rate at 3%-4% thanks to the implementation of modern technologies and measures to improve efficiency. The longterm goal is to find an opportunity to keep production at 1.2 million toe/yr. We can do this through technological development and implementation of NIS projects outside Serbia will help.
So what is the production forecast for 2019?
It should be flat on 2018.
Are there any interesting assets in Serbia?
In Serbia, most of the areas have already been studied, captured by various types of seismic. I don't think there might be any surprises here. However, we are constantly taking measures to increase oil recovery rates and we managed to achieve some success as we were on time to invest the money in the development of NIS' scientific and technical center and to boost the efficiency of our investments in exploration and production segments.
Are you planning any field acquisitions?
We look at various possibilities.
Are you still considering opportunities outside Serbia?
We consider various options. If you look at other oil companies in the region including Mol, OMV or INA most
of them grew because they produced oil in various regions in Africa, the Middle East, Northern Europe, and not only onshore, but also offshore. But this is a complicated business connected with country risks. In our company we consider such projects only in the medium term and with a partner with whom we can share the risks. In the short term, we plan to develop our own existing assets, where the successful implementation of the production program will allow us to talk about the possibility of expanding the horizons of our presence.
This year, you plan to complete the construction of a delayed coking unit at the Pancevo plant. What
are the project parameters? How much will the depth and volume of processing increase?
Yes, indeed, this year we will complete the construction of the deep processing complex with delayed coking technology. This is the largest investment project of the secondstage Pancevo refinery modernization and one of the largest investments in the country's economy in recent years: the project costs exceed €300 million ($332 million). The launch of the complex will put our refinery on a par with the world's best refineries with a refining depth of more than 99%. This will allow us to produce more gasoline and diesel and stop output of high-sulfur fuel oil. As you know, in 2020 new Marpol rules come into force that would complicate production and sale of fuel oil. The cessation of fuel oil production will not only improve environmental performance, but also ensure that Serbia fulfills its international obligations to limit the use of high-sulfur fuel. At the same time, we will start producing coke, which is used in metallurgy and in the construction industry. This product is currently imported into Serbia, but our production will cover the needs of the domestic market and allow us to export something.
Are you planning new projects in refining?
We are considering a number of investment projects at the Pancevo plant, which will allow us to optimize our product portfolio. Now I won't name them, because for this you first need to conduct a feasibility study and understand the economics.
You have already mentioned projects in alternative energy. At what stage is the construction of the wind farm in Plandiste?
Work on the implementation of the project is in the active stage, we are holding tenders and selecting contractors to make the final investment decision. The construction itself, after the conclusion of all contracts, may take 12-14 months.
What is the investment program for 2019 compared to 2018?
Over the past 10 years after Gazprom Neft acquired a controlling stake in NIS, more than €3 billion has been invested in the development of the Serbian asset. Our longterm development strategy assumes a further investment of €2 billion between 2017 and 2025. If we consider the current period remaining until 2025, this is €1.4 billion. Last year, we invested 41 billion dinars, that is, €347 million, which represents an increase of 55% compared to 2017. We continued the growth trend of investments this year: NIS investments in strategic projects in the first half of this year amounted to 18.4 billion dinars or €156 million, an increase of 7% compared to last year. If we talk about the distribution of investments, then out of €2 billion of total investments, about €1.1 billion is for exploration and production. However, life makes its own adjustments, and in the updated strategy we will refine the investment plan.
Does NIS plan to attract loans in 2019? Does the company have difficulty raising funds because of sanctions restrictions? In general, how relevant is the issue of sanctions of any kind to you?
We have no problems with borrowing. We have an average borrowing rate below 2%. If we talk about financial constraints, then it is more difficult for us to take longterm loans, but in general there are no problems.
How does the ban on the import of Iranian oil affect you?
There is enough oil in the world. Current restrictions do not affect us.
NIS is actively searching for an optimal import crude oil basket. You tested different crude grades. Are there any plans to add new crudes to the basket, and from which regions?
NIS is a company that has a constant interest in optimizing the process of purchasing crude oil, since it is a strategic raw material that involves the allocation of significant funds and whose effects have an impact on numerous business segments. In the past, we conducted a number of analyses of different crudes from various markets Europe, Asia, Africa and, for the purchase of a specific crude, we are guided, first of all, by economic indicators. Today we are actively buying oil which Gazprom Neft produces at the Novy Port field. Novy Port is a light oil, and when mixed with other crudes, it produces a good product mix with good yields. Today, oil is transported by the Croatian Janaf pipeline, which transports this oil from the port of Omisalj to the Sotin measuring station. From there, the crude is being shipped by pipeline to the Pancevo refinery.
Gazprom Neft is actively engaged in digitalization, digital transformation, and the introduction of new technologies. How does this affect NIS?
We are already living in digital transformation. We have a number of projects that are being actively implemented both in exploration and production, as well as in processing and marketing. At the beginning of the year, the CDO [chief digital officer] position was created and the CDO office was created, which acts as the consolidator and methodologist of all digital projects in the company. The difficulty concerns the need to change processes within the company. However, all companies that have somehow decided to move in the direction of digital transformation go this way.
Call Center (0-24), 08 0000 8888
Unless otherwise noted, material / content on the site is available under the terms of the Creative Commons Attribution 3.0 License of Serbia
This site uses cookies. By continuing to use this site, you agree to our use of cookies. If you need more information and / or do not want to have cookies when using the site, visit the About Cookies section.


text:
ETHNIC CLEANSING OF KASHMIRI PANDITS: Article on Holocaust Day
ETHNIC CLEANSING OF KASHMIRI PANDITS
PUNISHING PERPETRATORS, NOT ABANDONMENT OF MINORITY HINDUS OF J&K WILL SOLVE THE PROBLEM
Driving out the Hindus from the Kashmir Valley was a key component of Pakistani plan given in "Operation Topaz" and published in one of the
issues of the India Defence Review in 1988. This plan was completely in tune with the objective of communal mobilization set in motion in Kashmir since 1931, which succeeded in capturing state apparatus in 1947. Indian policy makers knew it even before the onset of terrorist violence. But the situation was allowed to go out of control for petty political interests.
The mass extirpation of Kashmiri Hindus in 1989-90 is a tragic event of the history of post–independence India. Kashmiri Pandits had not experienced a cataclysm of this magnitude in the past. The tragedy is poignant because it happened in a secular and democratic India; Kashmiri Pundits became its victims because they identified themselves with the secular ethos and pluralistic character of the Indian state and complimented re-building and re-shaping of progressive and outward-looking Kashmir.
The exodus of minority Hindu community was not a chance happening. It was the result of a deep and calculated conspiracy initiated, sponsored, aided, abetted and mentored by the State of Pakistan in collaborations with some global players. This instrumented religious terrorism created a mass uprising in the length and breadth of Kashmir Valley.
A good chunk of population of Valley's majority community collaborated with religious extremists-terrorists with obvious motive of disrupting peaceful coexistence Kashmir. Expansion of extremists and religious fundamentalists resulted directly in squeezing the pluralist secular space. Minority Hindu community was progressively purged from the economic, political, social and lastly from the territorial life of Kashmir. This elimination process continues even after the displacement by a process that attempts to erase the imprints of their civilisational ethos from the geo-cultural history of the land.
The plan to eliminate Minority Hindus was executed more or less carefully. While almost full-dress rehearsal was conducted in 1986. After selective targeted killings in most sadistic manner, it was 19th January 1990 that proved to be proverbial last nail in the coffin of secularism in Kashmir valley. It was the day when almost entire Muslim Population of Kashmir was on roads raising highly objectionable anti-Hindu slogans. Mosques through public address system were declaring a war against minorities. Pundits were asked to leave within 24 hours.
The situation was allowed to take such a serious turn and the government continued to handle situation ineffectively without realizing the damage it caused to the country, the miseries it bought to the people and the long term implication for the nation as a whole.
The National Human Rights Commission (NHRC) in a ruling on 11 June 1999 stated that "Against the stern definition of the Genocide Convention, the Commission is constrained to observe that while acts akin to genocide have occurred with respect to Kashmiri Pandits and that, indeed, in the minds and utterances of some of the militants a genocide-type design may exist, the crimes against the Kashmiri Pandits are near-Genocide and not Genocide."
The NHRC has clearly noted down in its ruling that it was due to the stern definition of the Genocide Convention that the Commission is constrained to observe that acts akin to genocide have occurred with respect to Kashmiri Pandits.
The formal definition of the Genocide came in the 1948 Convention for the Prevention and the Punishment of the Crime of Genocide. It was declared to be a crime under international law–either in times of war or peace. Decades after the legal definition was drafted; scholars remain unable to forge an agreement upon what genocide is and what it consists of. "Ethnic cleansing" has also been used to describe a group of people of similar nationality, race, or religion who are experiencing any kind of action which they consider objectionable. Whatever way the debate settles, the fact remains that both "genocide" and "ethnic cleansing"–as words and concepts—means any of the following acts committed with intent to destroy, in whole or in part, a national, ethnical, racial or religious group, as such:
(a) Killing members of the group;
(b) Causing serious bodily or mental harm to members of the group;
(c) Deliberately inflicting on the group conditions of life calculated to bring about its physical destruction in whole or in part;
(d) Imposing measures intended to prevent births within the group;
(e) Forcibly transferring children of the group to another group.
When we take into consideration what the Hindu Minority of Kashmir had to face; we realize that the community is facing total elimination. It satisfies definitions of both Genocide as well as the ethnic cleansing.
Hindus in the state were targeted selectively and brutally killed individually and also massacred collectively. After targeting prominent members of the State's Hindu minority for assassination and intimidation in the first phase of jihadi violence, terrorists began executing large-scale killings, 13 Hindus were massacred at Sarthal in Doda. 16 Hindus were again executed in the Doda village of Barshalla. Similarly Sangrampora Killings, 22 March 1997, Udhampore Killings, June 1997, Wandhama Killings, January 1998 , Prankot Killings, April 1998, Chattisinghpora Killings, March 2000, Nadimarg Massacre, 24 March, 2003 took place at regular intervals.
From 1998, communal massacres gathered momentum and in scale. In 1998, 132 civilians died in six massacres conducted across the State and in adjoining Himachal Pradesh. In 2001, 108 people were killed in 11 major incidents, while 83 people were killed in five incidents in 2002. Most of these killings targeted desperately poor communities in the State's more remote mountain regions.
In two hamlets in Budhal's Rajouri area, while women in the village were ordered to prepare food for the terrorists, 11 Hindu men aged between 18 and 57 had their throats slit one by one. Such brutally inhuman was the Method of killings that medieval barbarism will pale into insignificance.
Over Two decades have passed by since that day, and three hundred thousand "migrants", ethnically cleansed from their millennia-old habitats in the Valley of Kashmir are still eking out a miserable existence in refugee camps and rented rooms in Jammu, Delhi and other cities.
Their properties have been encroached upon by individuals and also organized groups. Even the government has found the minority property to be soft target for acquisition. Under distress they have sold their left-behind properties at a throw away price because they need to make both ends meet. That is the story of a small religious minority made refugees in its own country— a secular democratic country of which Kashmir was "the symbol of secularism" in the eyes of Indian political stalwarts.
It is very essential for all those who take pride in secular democracy of India to come forward and raise their voice in support of the victims. It is equally important to book perpetrators for the crimes they have committed and bring them to justice. Abandoning the victimized community will only encourage the divisive force.
The return and rehabilitation of the community back in the place of its origin would mean a total reversal of this process. The essential components of any return policy will contain:
a) A comprehensive analysis of the circumstances that led to the ethnic cleansing of the entire Kashmiri Pandit Religious Minority Community from the valley.
b) Enforcement of the rule of law on the ground, measurable and verifiable that ensures effective working of all the institutions of the modern state without fear and favour.
c) Affirmative action on the part of the state to encourage and ensure meaningful participation in every activity of the modern life.
d) Constitution a Commission of Enquiry headed by a sitting Judge of the Supreme Court of India to probe circumstances and fix responsibility of ethnic cleansing of the entire Kashmiri Pandit Religious Minority Community from the valley in early 1990.
e) Develop a twin city as a Satellite City of Srinagar for the entire community. The City should be self-sufficient in terms of overall infrastructure, economic avenues, adequate land, decent accommodation, educational institutions, medical care, recreation centers, commercial infrastructures etc. etc.
f) Politically Empower the by community by affirmative action like adequate reservations both in the assembly, the Parliament and local bodies.
g) Initiate necessary steps to grant minority status to the displaced KPs.
h) Take urgent steps to protect and preserve the age-old heritage of the community handed down in the shape of temples, shrines, worshiping places and pilgrimage sites etc. The draft bill pending in the Legislative Assembly should be passed without any further delay.
Are you Human? Enter the value below * × 3 = 27
Dr Ramachandra Bhat Kotemane will be new VC of S-VYASA University
Bangalore January 19: Noted scholar Dr Ramachandra Bhat Kotemane will be the new Vice-Chancellor of reputed SVYASA Univerity near Prashanti Kuteeram, Jigani Bangalore. Dr HR Nagendra, who earlier serving as Vice-Chancellor of SVYAYA univerity, now promoted as Chancellor of the University replacing noted academician, thinker and spiritual leader Dr Pranav […]
रामनवमी ही क्यों?: -मा. गो. वैद्य
Ram Madhav writes: DEAL WITH OUR OWN VERSIONS OF FAI STERNLY:
ಗೋಹತ್ಯೆ ನಿಷೇಧ ಒಳ್ಳೆಯದೇ – ಆದರೆ ಮುಂದೇನು?
ಪಾಕಿಸ್ತಾನದ ದ್ವೇಷದ ಕೂಸು ಎಲ್-ಇ-ಟಿ
Egypt: Past imperfect, future unknown
WHISTLE-BLOWERS MUST BE HAILED, NOT JAILED: Advani


Have You Seen Tesla's New Semi, Here's A Glimpse.
Photo Released At Musk's TED Conference.
A photo which has recently popped up on Reddit shows the first real glimpse of Tesla's yet-to-be unveiled semi truck has surfaced on Reddit.


text:
Q: How to setup Azure Data sync for On-Premise database? I want to sync all my on-premise database data to SQL Azure database and recently came across SQL Azure Data sync in the Azure management portal.
I have followed the steps on the site http://www.windowsazure.com/en-us/documentation/articles/sql-database-get-started-sql-data-sync/

*

*I installed SQL server 2012 and SQL server agent on my on-premise server.

*Created Database in both On-premise server and Azure management portal.

*Created an agent in management portal then I copied the agent key and pasted in my Data Sync agent Window at On-premise server.

*Added my on-premise database in Data Sync Agent client.

*Created Sync group for cloud database and On-premise database (agent client).

*This what I am seeing, even though I enabled the sync group for every five minutes.
What am I missing here?
Thanks

A: Use DAC BACPAC to migrate a database to windows azure sql:

*

*http://msdn.microsoft.com/en-us/library/windowsazure/jj156148.aspx

*http://social.technet.microsoft.com/wiki/contents/articles/2639.how-to-use-data-tier-application-import-and-export-with-a-windows-azure-sql-database.aspx
In short:

*

*Install Data-tier Application Framework (http://www.microsoft.com/en-us/download/details.aspx?id=39976)

*Using SQL Server Management Studio (ssms) connect to your source database and export it to .bacpac file

*Using SSMS connect to your destination db and import it from .bacpac file

redpajama_set_name: RedPajamaStackExchange


Google Lighthouse, a free tool, can identify ways to improve a site's load time. Lighthouse is available in Chrome, in the "Developer Tools" menu.
Site speed is tricky for search engine optimization practitioners. It's a ranking signal for Google and a key factor in the customer's experience. Studies by Walmart and Amazon found that even a small fractional improvement matters; each company attributes a 100-millisecond improvement in page load speed to a 1 percent increase in revenue.
Moreover, Think with Google found that slower site speeds can significantly reduce conversions and increase bounces — up to a 20-percent decrease in conversion rates for a single second's delay.
That puts SEO pros in an awkward position. We know that it's important, but few among us have the development chops to solve the thorny technical issues that underpin fast site speed times.
So now what? One option is to use Google's Lighthouse, a free site auditing tool, in Chrome's "Developer Tools" menu, at View > Developer > Developer Tools > Audits.
Lighthouse provides detailed suggestions for improving the technical quality and speed of a site. Best of all, each Lighthouse recommendation comes with a list of specific files to optimize and a "Learn more" link to understand the basics before you approach your developers.
In my experience, Lighthouse most frequently cites the following four areas to improve site speed.
Critical CSS can be inlined, too, to eliminate a time-consuming trip to the server for a second request. CSS files can also be parsed by device via the media query string. In this strategy, each stylesheet link in the HTML should then have its own media attribute so that the browser only executes what's needed for that user's device.
Minification is the art of shrinking the number of code characters without changing how the browser processes it. Minification examples include removing comments, carriage returns, formatting, and unnecessary strings.
Compression reduces the size of a file — similar to a zipping tool. Compression services such as Brotli or Gzip squish text files into smaller packages without changing what's inside or how they work.
Optimize images. Optimization is not about reducing image quality. Formats such as JPEG 2000, JPEG XR, and WebP provide quality visuals at higher compression rates, which means that they'll load more quickly.
Also, consider responsive images, which specify the image size for each page load. It means generating several sizes of each image and serving the smallest one needed for each page. It can shave seconds off the load time for an image-heavy site.
A content delivery network that optimizes images can make this process a lot easier — if you have the budget.
Extend browser caching. Your visitor's browser can temporarily store a file. This is handy for repeat visits to a page, and also for files that are used across the site. The browser accesses its local, stored copy every time it needs to load that file until the cache period for that file expires. Then the browser requests a new version and caches it again.
This doesn't do a thing for those first-time visitors. But it helps those who make it past the first click, as well as those who return to your site.
What happens when you need to push a critical update to your site? Your development team can invalidate the old cache to update the file so that the browser receives the new image, text, CSS file, or whatever the resource may be.
Saving Lighthouse Reports You can't print your Lighthouse reports from the console. But you can download the results. The download, unfortunately, is not in a digestible text format. But GitHub has a viewing solution. Open this page on GitHub. Drag the downloaded Lighthouse file from your file manager to the GitHub page in your browser. The page renders the report, complete with clickable help links and the usual printing and saving options from your browser.


text:
Susan Jane (Sue) Pedersen (Sacramento (Californië), 16 oktober 1953) is een Amerikaanse zwemster.

Biografie
Pedersen won tijdens de Olympische Zomerspelen van 1968 vier medailles. Zij won zilver op de 100m vrije slag en de 200m wisselslag. Pedersen won de gouden medaille op de beiden estafettenummers in een wereldrecord.

Internationale toernooien

Amerikaans zwemmer
Amerikaans olympisch kampioen


The 34th CSUN Assistive Technology Conference was held from March 13th to 15th, 2019 in Anaheim, California, USA. As an innovative brand in the assistive devices for visually impaired people, Zoomax has participated in the exhibition for the ninth times in 2019.
The highlight of Zoomax booth were new Snow 12, the latest member of Snow family video magnifiers with 12-inch large-screen and OCR, and Acesight, one of the most popular wearable visual aids featuring excellent image quality especially when the electronic glasses were used to watch TV.
The electronic glasses Acesight kept drawing attention after it launched in 2018. At this exhibition, Acesight not only featured the comfortable wearing and great image, but also got recommended by professionals and optometrists who already tried Acesight on the people with low vision.
The new Snow 12 video magnifier was infused with a new design concept to the original Zoomax product, breaking the difficulty that the traditional hand-held video magnifiers had on handwriting. The configuration of the foldable stand allowed the users to obtain both the lightness of the hand-held video magnifier and the adequate space of desktop. A full page OCR text-to-speech, inherited from the Snow family units, was the highlight of Snow 12 too. After exhibited at CSUN, the Snow 12 video magnifier will be available soon on the market.
As one of the largest exhibitions globally in the assistive technology (AT) for the visually impaired people, the CSUN conference included more than 300 educational sessions and 122 exhibiting booths, attracting more than 5,000 visitors around the world. Lots of companies that involved in AT were displaying the cutting-edge assistive technology and products, including Amazon, Google, Microsoft and the enterprises whose main business is AT for the people with visual impairment and severe low vision.
About Zoomax's previous performance on CSUN shows, please check 2018, 2017, 2016, 2015, 2014 and 2013.


text:
(-) Central African Republic
(-) Housing Policy
(-) Mitigation
(-) Right to Food
The Elephant in the Room - Environmental Racism in Germany
The term "environmental racism" emerged in the 1980s in the USA and articulates the racist effects of unequal distribution of environmental goods and risks. In light of the climate crisis, a new generation of people experiencing racism is asking whether and how climate change impacts reinforce the efficacy of environmental racism.
IPCC Special Report on 1.5: Limiting global warming without temperature "overshoot"
The IPCC Special Report on 1.5 opts for a rigorous interpretation of the 1.5 limit on global warming. It has good reasons to do so: "Overshooting" that target risks irreversible impacts and damage for societies and ecosystems, and increases reliance on unproven, high-risk geoengineering technologies.
Protests, boycotts and resistance
In many countries, people are resisting agrarian and trade policies that boost the power of the multinationals. Individual companies also come in for criticism.
The risks of large-scale biosequestration in the context of Carbon Dioxide Removal
The Paris Agreement's target of limiting global temperature rise to 1.5 degrees is largely dependent on Carbon Dioxide Removal (CDR) approaches and climate finance institutions are already supporting such afforestation schemes. The report describes existing trends in the field of large-scale biosequestration and examines the social and ecological impacts of such projects.
Food discrimination against women in Afghanistan
Afghanistan has been described as the world's most dangerous country for women. Violence against women (VAW) takes many forms, and has complex and deep roots in the patriarchal culture of the Afghan society. One form of VAW is denying them access to food.
Housing and the city: Local public action in Barcelona
In the city of Barcelona, one can observe the joint power of civil movements and a progressive, accountable government to implement the social right to decent housing.
Interview with Shivani Chaudhry: "There is a global housing crisis"
India has the largest number of homeless and landless persons in the world, as well as the greatest number of urban and rural poor. Shivani Chaudhry, the Executive Director of Housing and Land Rights Network (HLRN), argues that the New Urban Agenda must pay more attention to the human right to adequate housing. Interview with Shivani Chaudhry.
Introducing the Right to Food in University Curricula
While it is broadly recognised that hunger is a function of entitlements and not of food availability as such, there is still a vacuum in research and development education with regard to introducing a human rights and governance lens to teaching. This paper showes how this can be done.
"Teaching Ecofair Trade" was a joint EU project together with Caritas Czech, MISEREOR, Mendel University Brno and Heinrich-Böll-Foundation to develop multilevel teaching modules which enable European Universities to integrate the perspective of the human right to food as a key turning point for teaching agricultural trade and investment policy. This dossier provides a selection of activities and studies that were realized as part of the project.
Right to Food: Series of Lectures & Discussions at European Universities
During the autumn semester 2015 expert lecturers from Tanzania, Netherlands, Germany and South Africa join a series of discussions about the right to food with students at partner universities within the scope of the project EcoFairTrade.


text:
L'ottava stagione di Spirit: Avventure in libertà è stata pubblicata negli USA il 5 aprile 2018 su Netflix.

In Italia, è andata in onda su DeaKids dal 12 aprile 2019.