text:
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_ImageData_API;
using ppapi::TrackedCallback;

namespace webkit {
namespace ppapi {

namespace {

// Converts a rect inside an image of the given dimensions. The rect may be
// NULL to indicate it should be the entire image. If the rect is outside of
// the image, this will do nothing and return false.
bool ValidateAndConvertRect(const PP_Rect* rect,
                            int image_width, int image_height,
                            gfx::Rect* dest) {
  if (!rect) {
    // Use the entire image area.
    *dest = gfx::Rect(0, 0, image_width, image_height);
  } else {
    // Validate the passed-in area.
    if (rect->point.x < 0 || rect->point.y < 0 ||
        rect->size.width <= 0 || rect->size.height <= 0)
      return false;

    // Check the max bounds, being careful of overflow.
    if (static_cast<int64>(rect->point.x) +
        static_cast<int64>(rect->size.width) >
        static_cast<int64>(image_width))
      return false;
    if (static_cast<int64>(rect->point.y) +
        static_cast<int64>(rect->size.height) >
        static_cast<int64>(image_height))
      return false;

    *dest = gfx::Rect(rect->point.x, rect->point.y,
                      rect->size.width, rect->size.height);
  }
  return true;
}

// Converts BGRA <-> RGBA.
void ConvertBetweenBGRAandRGBA(const uint32_t* input,
                               int pixel_length,
                               uint32_t* output) {
  for (int i = 0; i < pixel_length; i++) {
    const unsigned char* pixel_in =
        reinterpret_cast<const unsigned char*>(&input[i]);
    unsigned char* pixel_out = reinterpret_cast<unsigned char*>(&output[i]);
    pixel_out[0] = pixel_in[2];
    pixel_out[1] = pixel_in[1];
    pixel_out[2] = pixel_in[0];
    pixel_out[3] = pixel_in[3];
  }
}

// Converts ImageData from PP_IMAGEDATAFORMAT_BGRA_PREMUL to
// PP_IMAGEDATAFORMAT_RGBA_PREMUL, or reverse. It's assumed that the
// destination image is always mapped (so will have non-NULL data).
void ConvertImageData(PPB_ImageData_Impl* src_image, const SkIRect& src_rect,
                      PPB_ImageData_Impl* dest_image, const SkRect& dest_rect) {
  ImageDataAutoMapper auto_mapper(src_image);

  DCHECK(src_image->format() != dest_image->format());
  DCHECK(PPB_ImageData_Impl::IsImageDataFormatSupported(src_image->format()));
  DCHECK(PPB_ImageData_Impl::IsImageDataFormatSupported(dest_image->format()));

  const SkBitmap* src_bitmap = src_image->GetMappedBitmap();
  const SkBitmap* dest_bitmap = dest_image->GetMappedBitmap();
  if (src_rect.width() == src_image->width() &&
      dest_rect.width() == dest_image->width()) {
    // Fast path if the full line needs to be converted.
    ConvertBetweenBGRAandRGBA(
        src_bitmap->getAddr32(static_cast<int>(src_rect.fLeft),
                              static_cast<int>(src_rect.fTop)),
        src_rect.width() * src_rect.height(),
        dest_bitmap->getAddr32(static_cast<int>(dest_rect.fLeft),
                               static_cast<int>(dest_rect.fTop)));
  } else {
    // Slow path where we convert line by line.
    for (int y = 0; y < src_rect.height(); y++) {
      ConvertBetweenBGRAandRGBA(
          src_bitmap->getAddr32(static_cast<int>(src_rect.fLeft),
                                static_cast<int>(src_rect.fTop + y)),
          src_rect.width(),
          dest_bitmap->getAddr32(static_cast<int>(dest_rect.fLeft),
                                 static_cast<int>(dest_rect.fTop + y)));
    }
  }
}

}  // namespace

struct PPB_Graphics2D_Impl::QueuedOperation {
  enum Type {
    PAINT,
    SCROLL,
    REPLACE
  };

  QueuedOperation(Type t)
      : type(t),
        paint_x(0),
        paint_y(0),
        scroll_dx(0),
        scroll_dy(0) {
  }

  Type type;

  // Valid when type == PAINT.
  scoped_refptr<PPB_ImageData_Impl> paint_image;
  int paint_x, paint_y;
  gfx::Rect paint_src_rect;

  // Valid when type == SCROLL.
  gfx::Rect scroll_clip_rect;
  int scroll_dx, scroll_dy;

  // Valid when type == REPLACE.
  scoped_refptr<PPB_ImageData_Impl> replace_image;
};

PPB_Graphics2D_Impl::PPB_Graphics2D_Impl(PP_Instance instance)
    : Resource(::ppapi::OBJECT_IS_IMPL, instance),
      bound_instance_(NULL),
      offscreen_flush_pending_(false),
      is_always_opaque_(false),
      weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
}

PPB_Graphics2D_Impl::~PPB_Graphics2D_Impl() {
  // LastPluginRefWasDeleted should have aborted all pending callbacks.
  DCHECK(painted_flush_callback_.is_null());
  DCHECK(unpainted_flush_callback_.is_null());
}

// static
PP_Resource PPB_Graphics2D_Impl::Create(PP_Instance instance,
                                        const PP_Size& size,
                                        PP_Bool is_always_opaque) {
  scoped_refptr<PPB_Graphics2D_Impl> graphics_2d(
      new PPB_Graphics2D_Impl(instance));
  if (!graphics_2d->Init(size.width, size.height,
                         PPBoolToBool(is_always_opaque))) {
    return 0;
  }
  return graphics_2d->GetReference();
}

bool PPB_Graphics2D_Impl::Init(int width, int height, bool is_always_opaque) {
  // The underlying PPB_ImageData_Impl will validate the dimensions.
  image_data_ = new PPB_ImageData_Impl(pp_instance());
  if (!image_data_->Init(PPB_ImageData_Impl::GetNativeImageDataFormat(),
                         width, height, true) ||
      !image_data_->Map()) {
    image_data_ = NULL;
    return false;
  }
  is_always_opaque_ = is_always_opaque;
  return true;
}

::ppapi::thunk::PPB_Graphics2D_API*
PPB_Graphics2D_Impl::AsPPB_Graphics2D_API() {
  return this;
}

void PPB_Graphics2D_Impl::LastPluginRefWasDeleted() {
  Resource::LastPluginRefWasDeleted();

  // Abort any pending callbacks.
  unpainted_flush_callback_.PostAbort();
  painted_flush_callback_.PostAbort();
}

PP_Bool PPB_Graphics2D_Impl::Describe(PP_Size* size,
                                      PP_Bool* is_always_opaque) {
  size->width = image_data_->width();
  size->height = image_data_->height();
  *is_always_opaque = PP_FromBool(is_always_opaque_);
  return PP_TRUE;
}

void PPB_Graphics2D_Impl::PaintImageData(PP_Resource image_data,
                                         const PP_Point* top_left,
                                         const PP_Rect* src_rect) {
  if (!top_left)
    return;

  EnterResourceNoLock<PPB_ImageData_API> enter(image_data, true);
  if (enter.failed()) {
    Log(PP_LOGLEVEL_ERROR,
        "PPB_Graphics2D.PaintImageData: Bad image resource.");
    return;
  }
  PPB_ImageData_Impl* image_resource =
      static_cast<PPB_ImageData_Impl*>(enter.object());

  QueuedOperation operation(QueuedOperation::PAINT);
  operation.paint_image = image_resource;
  if (!ValidateAndConvertRect(src_rect, image_resource->width(),
                              image_resource->height(),
                              &operation.paint_src_rect)) {
    Log(PP_LOGLEVEL_ERROR,
        "PPB_Graphics2D.PaintImageData: Rectangle is outside bounds.");
    return;
  }

  // Validate the bitmap position using the previously-validated rect, there
  // should be no painted area outside of the image.
  int64 x64 = static_cast<int64>(top_left->x);
  int64 y64 = static_cast<int64>(top_left->y);
  if (x64 + static_cast<int64>(operation.paint_src_rect.x()) < 0 ||
      x64 + static_cast<int64>(operation.paint_src_rect.right()) >
      image_data_->width())
    return;
  if (y64 + static_cast<int64>(operation.paint_src_rect.y()) < 0 ||
      y64 + static_cast<int64>(operation.paint_src_rect.bottom()) >
      image_data_->height())
    return;
  operation.paint_x = top_left->x;
  operation.paint_y = top_left->y;

  queued_operations_.push_back(operation);
}

void PPB_Graphics2D_Impl::Scroll(const PP_Rect* clip_rect,
                                 const PP_Point* amount) {
  QueuedOperation operation(QueuedOperation::SCROLL);
  if (!ValidateAndConvertRect(clip_rect,
                              image_data_->width(),
                              image_data_->height(),
                              &operation.scroll_clip_rect)) {
    Log(PP_LOGLEVEL_ERROR,
        "PPB_Graphics2D.Scroll: Rectangle is outside bounds.");
    return;
  }

  // If we're being asked to scroll by more than the clip rect size, just
  // ignore this scroll command and say it worked.
  int32 dx = amount->x;
  int32 dy = amount->y;
  if (dx <= -image_data_->width() || dx >= image_data_->width() ||
      dy <= -image_data_->height() || dy >= image_data_->height()) {
    Log(PP_LOGLEVEL_ERROR,
        "PPB_Graphics2D.Scroll: Scroll amount is larger than image size.");
    return;
  }

  operation.scroll_dx = dx;
  operation.scroll_dy = dy;

  queued_operations_.push_back(operation);
}

void PPB_Graphics2D_Impl::ReplaceContents(PP_Resource image_data) {
  EnterResourceNoLock<PPB_ImageData_API> enter(image_data, true);
  if (enter.failed())
    return;
  PPB_ImageData_Impl* image_resource =
      static_cast<PPB_ImageData_Impl*>(enter.object());

  if (!PPB_ImageData_Impl::IsImageDataFormatSupported(
          image_resource->format())) {
    Log(PP_LOGLEVEL_ERROR,
        "PPB_Graphics2D.ReplaceContents: Image data format is not supported.");
    return;
  }

  if (image_resource->width() != image_data_->width() ||
      image_resource->height() != image_data_->height()) {
    Log(PP_LOGLEVEL_ERROR,
        "PPB_Graphics2D.ReplaceContents: Image size doesn't match "
        "Graphics2D size.");
    return;
  }

  QueuedOperation operation(QueuedOperation::REPLACE);
  operation.replace_image = image_resource;
  queued_operations_.push_back(operation);
}

int32_t PPB_Graphics2D_Impl::Flush(PP_CompletionCallback callback) {
  TRACE_EVENT0("pepper", "PPB_Graphics2D_Impl::Flush");
  if (!callback.func)
    return PP_ERROR_BLOCKS_MAIN_THREAD;

  // Don't allow more than one pending flush at a time.
  if (HasPendingFlush())
    return PP_ERROR_INPROGRESS;

  bool nothing_visible = true;
  for (size_t i = 0; i < queued_operations_.size(); i++) {
    QueuedOperation& operation = queued_operations_[i];
    gfx::Rect op_rect;
    switch (operation.type) {
      case QueuedOperation::PAINT:
        ExecutePaintImageData(operation.paint_image,
                              operation.paint_x, operation.paint_y,
                              operation.paint_src_rect,
                              &op_rect);
        break;
      case QueuedOperation::SCROLL:
        ExecuteScroll(operation.scroll_clip_rect,
                      operation.scroll_dx, operation.scroll_dy,
                      &op_rect);
        break;
      case QueuedOperation::REPLACE:
        ExecuteReplaceContents(operation.replace_image, &op_rect);
        break;
    }

    // For correctness with accelerated compositing, we must issue an invalidate
    // on the full op_rect even if it is partially or completely off-screen.
    // However, if we issue an invalidate for a clipped-out region, WebKit will
    // do nothing and we won't get any ViewWillInitiatePaint/ViewFlushedPaint
    // calls, leaving our callback stranded. So we still need to check whether
    // the repainted area is visible to determine how to deal with the callback.
    if (bound_instance_ && !op_rect.IsEmpty()) {

      // Set |nothing_visible| to false if the change overlaps the visible area.
      gfx::Rect visible_changed_rect =
          PP_ToGfxRect(bound_instance_->view_data().clip_rect).
          Intersect(op_rect);
      if (!visible_changed_rect.IsEmpty())
        nothing_visible = false;

      // Notify the plugin of the entire change (op_rect), even if it is
      // partially or completely off-screen.
      if (operation.type == QueuedOperation::SCROLL) {
        bound_instance_->ScrollRect(operation.scroll_dx, operation.scroll_dy,
                                    op_rect);
      } else {
        bound_instance_->InvalidateRect(op_rect);
      }
    }
  }
  queued_operations_.clear();

  if (nothing_visible) {
    // There's nothing visible to invalidate so just schedule the callback to
    // execute in the next round of the message loop.
    ScheduleOffscreenCallback(FlushCallbackData(
        scoped_refptr<TrackedCallback>(new TrackedCallback(this, callback))));
  } else {
    unpainted_flush_callback_.Set(
        scoped_refptr<TrackedCallback>(new TrackedCallback(this, callback)));
  }
  return PP_OK_COMPLETIONPENDING;
}

bool PPB_Graphics2D_Impl::ReadImageData(PP_Resource image,
                                        const PP_Point* top_left) {
  // Get and validate the image object to paint into.
  EnterResourceNoLock<PPB_ImageData_API> enter(image, true);
  if (enter.failed())
    return false;
  PPB_ImageData_Impl* image_resource =
      static_cast<PPB_ImageData_Impl*>(enter.object());
  if (!PPB_ImageData_Impl::IsImageDataFormatSupported(
          image_resource->format()))
    return false;  // Must be in the right format.

  // Validate the bitmap position.
  int x = top_left->x;
  if (x < 0 ||
      static_cast<int64>(x) + static_cast<int64>(image_resource->width()) >
      image_data_->width())
    return false;
  int y = top_left->y;
  if (y < 0 ||
      static_cast<int64>(y) + static_cast<int64>(image_resource->height()) >
      image_data_->height())
    return false;

  ImageDataAutoMapper auto_mapper(image_resource);
  if (!auto_mapper.is_valid())
    return false;

  SkIRect src_irect = { x, y,
                        x + image_resource->width(),
                        y + image_resource->height() };
  SkRect dest_rect = { SkIntToScalar(0),
                       SkIntToScalar(0),
                       SkIntToScalar(image_resource->width()),
                       SkIntToScalar(image_resource->height()) };

  if (image_resource->format() != image_data_->format()) {
    // Convert the image data if the format does not match.
    ConvertImageData(image_data_, src_irect, image_resource, dest_rect);
  } else {
    skia::PlatformCanvas* dest_canvas = image_resource->GetPlatformCanvas();

    // We want to replace the contents of the bitmap rather than blend.
    SkPaint paint;
    paint.setXfermodeMode(SkXfermode::kSrc_Mode);
    dest_canvas->drawBitmapRect(*image_data_->GetMappedBitmap(),
                                &src_irect, dest_rect, &paint);
  }
  return true;
}

bool PPB_Graphics2D_Impl::BindToInstance(PluginInstance* new_instance) {
  if (bound_instance_ == new_instance)
    return true;  // Rebinding the same device, nothing to do.
  if (bound_instance_ && new_instance)
    return false;  // Can't change a bound device.

  if (!new_instance) {
    // When the device is detached, we'll not get any more paint callbacks so
    // we need to clear the list, but we still want to issue any pending
    // callbacks to the plugin.
    if (!unpainted_flush_callback_.is_null()) {
      FlushCallbackData callback;
      std::swap(callback, unpainted_flush_callback_);
      ScheduleOffscreenCallback(callback);
    }
    if (!painted_flush_callback_.is_null()) {
      FlushCallbackData callback;
      std::swap(callback, painted_flush_callback_);
      ScheduleOffscreenCallback(callback);
    }
  } else {
    // Devices being replaced, redraw the plugin.
    new_instance->InvalidateRect(gfx::Rect());
  }

  bound_instance_ = new_instance;
  return true;
}

// The |backing_bitmap| must be clipped to the |plugin_rect| to avoid painting
// outside the plugin area. This can happen if the plugin has been resized since
// PaintImageData verified the image is within the plugin size.
void PPB_Graphics2D_Impl::Paint(WebKit::WebCanvas* canvas,
                                const gfx::Rect& plugin_rect,
                                const gfx::Rect& paint_rect) {
  TRACE_EVENT0("pepper", "PPB_Graphics2D_Impl::Paint");
  ImageDataAutoMapper auto_mapper(image_data_);
  const SkBitmap& backing_bitmap = *image_data_->GetMappedBitmap();

#if defined(OS_MACOSX) && !defined(USE_SKIA)
  SkAutoLockPixels lock(backing_bitmap);

  base::mac::ScopedCFTypeRef<CGDataProviderRef> data_provider(
      CGDataProviderCreateWithData(
          NULL, backing_bitmap.getAddr32(0, 0),
          backing_bitmap.rowBytes() * backing_bitmap.height(), NULL));
  base::mac::ScopedCFTypeRef<CGImageRef> image(
      CGImageCreate(
          backing_bitmap.width(), backing_bitmap.height(),
          8, 32, backing_bitmap.rowBytes(),
          base::mac::GetSystemColorSpace(),
          kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host,
          data_provider, NULL, false, kCGRenderingIntentDefault));

  // Flip the transform
  CGContextSaveGState(canvas);
  float window_height = static_cast<float>(CGBitmapContextGetHeight(canvas));
  CGContextTranslateCTM(canvas, 0, window_height);
  CGContextScaleCTM(canvas, 1.0, -1.0);

  // To avoid painting outside the plugin boundaries and clip instead of
  // scaling, CGContextDrawImage() must draw the full image using |bitmap_rect|
  // but the context must be clipped to the plugin using |bounds|.

  CGRect bitmap_rect;
  bitmap_rect.origin.x = plugin_rect.origin().x();
  bitmap_rect.origin.y = window_height - plugin_rect.origin().y() -
      backing_bitmap.height();
  bitmap_rect.size.width = backing_bitmap.width();
  bitmap_rect.size.height = backing_bitmap.height();

  CGRect bounds;
  bounds.origin.x = plugin_rect.origin().x();
  bounds.origin.y = window_height - plugin_rect.origin().y() -
      plugin_rect.height();
  bounds.size.width = plugin_rect.width();
  bounds.size.height = plugin_rect.height();

  CGContextClipToRect(canvas, bounds);

  // TODO(brettw) bug 56673: do a direct memcpy instead of going through CG
  // if the is_always_opaque_ flag is set. Must ensure bitmap is still clipped.

  CGContextDrawImage(canvas, bitmap_rect, image);
  CGContextRestoreGState(canvas);
#else
  SkRect sk_plugin_rect = SkRect::MakeXYWH(
      SkIntToScalar(plugin_rect.origin().x()),
      SkIntToScalar(plugin_rect.origin().y()),
      SkIntToScalar(plugin_rect.width()),
      SkIntToScalar(plugin_rect.height()));
  canvas->save();
  canvas->clipRect(sk_plugin_rect);

  PluginInstance* plugin_instance = ResourceHelper::GetPluginInstance(this);
  if (!plugin_instance)
    return;
  if (plugin_instance->IsFullPagePlugin()) {
    // When we're resizing a window with a full-frame plugin, the plugin may
    // not yet have bound a new device, which will leave parts of the
    // background exposed if the window is getting larger. We want this to
    // show white (typically less jarring) rather than black or uninitialized.
    // We don't do this for non-full-frame plugins since we specifically want
    // the page background to show through.
    canvas->save();
    SkRect image_data_rect = SkRect::MakeXYWH(
        SkIntToScalar(plugin_rect.origin().x()),
        SkIntToScalar(plugin_rect.origin().y()),
        SkIntToScalar(image_data_->width()),
        SkIntToScalar(image_data_->height()));
    canvas->clipRect(image_data_rect, SkRegion::kDifference_Op);

    SkPaint paint;
    paint.setXfermodeMode(SkXfermode::kSrc_Mode);
    paint.setColor(SK_ColorWHITE);
    canvas->drawRect(sk_plugin_rect, paint);
    canvas->restore();
  }

  SkBitmap image;
  // Copy to device independent bitmap when target canvas doesn't support
  // platform paint.
  if (!skia::SupportsPlatformPaint(canvas))
    backing_bitmap.copyTo(&image, SkBitmap::kARGB_8888_Config);
  else
    image = backing_bitmap;

  SkPaint paint;
  if (is_always_opaque_) {
    // When we know the device is opaque, we can disable blending for slightly
    // more optimized painting.
    paint.setXfermodeMode(SkXfermode::kSrc_Mode);
  }
  canvas->drawBitmap(image,
                     SkIntToScalar(plugin_rect.x()),
                     SkIntToScalar(plugin_rect.y()),
                     &paint);
  canvas->restore();
#endif
}

void PPB_Graphics2D_Impl::ViewWillInitiatePaint() {
  // Move any "unpainted" callback to the painted state. See
  // |unpainted_flush_callback_| in the header for more.
  if (!unpainted_flush_callback_.is_null()) {
    DCHECK(painted_flush_callback_.is_null());
    std::swap(painted_flush_callback_, unpainted_flush_callback_);
  }
}

void PPB_Graphics2D_Impl::ViewInitiatedPaint() {
}

void PPB_Graphics2D_Impl::ViewFlushedPaint() {
  TRACE_EVENT0("pepper", "PPB_Graphics2D_Impl::ViewFlushedPaint");
  // Notify any "painted" callback. See |unpainted_flush_callback_| in the
  // header for more.
  if (!painted_flush_callback_.is_null())
    painted_flush_callback_.Execute(PP_OK);
}

void PPB_Graphics2D_Impl::ExecutePaintImageData(PPB_ImageData_Impl* image,
                                                int x, int y,
                                                const gfx::Rect& src_rect,
                                                gfx::Rect* invalidated_rect) {
  // Ensure the source image is mapped to read from it.
  ImageDataAutoMapper auto_mapper(image);
  if (!auto_mapper.is_valid())
    return;

  // Portion within the source image to cut out.
  SkIRect src_irect = { src_rect.x(), src_rect.y(),
                        src_rect.right(), src_rect.bottom() };

  // Location within the backing store to copy to.
  *invalidated_rect = src_rect;
  invalidated_rect->Offset(x, y);
  SkRect dest_rect = { SkIntToScalar(invalidated_rect->x()),
                       SkIntToScalar(invalidated_rect->y()),
                       SkIntToScalar(invalidated_rect->right()),
                       SkIntToScalar(invalidated_rect->bottom()) };

  if (image->format() != image_data_->format()) {
    // Convert the image data if the format does not match.
    ConvertImageData(image, src_irect, image_data_, dest_rect);
  } else {
    // We're guaranteed to have a mapped canvas since we mapped it in Init().
    skia::PlatformCanvas* backing_canvas = image_data_->GetPlatformCanvas();

    // We want to replace the contents of the bitmap rather than blend.
    SkPaint paint;
    paint.setXfermodeMode(SkXfermode::kSrc_Mode);
    backing_canvas->drawBitmapRect(*image->GetMappedBitmap(),
                                   &src_irect, dest_rect, &paint);
  }
}

void PPB_Graphics2D_Impl::ExecuteScroll(const gfx::Rect& clip,
                                        int dx, int dy,
                                        gfx::Rect* invalidated_rect) {
  gfx::ScrollCanvas(image_data_->GetPlatformCanvas(),
                    clip, gfx::Point(dx, dy));
  *invalidated_rect = clip;
}

void PPB_Graphics2D_Impl::ExecuteReplaceContents(PPB_ImageData_Impl* image,
                                                 gfx::Rect* invalidated_rect) {
  if (image->format() != image_data_->format()) {
    DCHECK(image->width() == image_data_->width() &&
           image->height() == image_data_->height());
    // Convert the image data if the format does not match.
    SkIRect src_irect = { 0, 0, image->width(), image->height() };
    SkRect dest_rect = { SkIntToScalar(0),
                         SkIntToScalar(0),
                         SkIntToScalar(image_data_->width()),
                         SkIntToScalar(image_data_->height()) };
    ConvertImageData(image, src_irect, image_data_, dest_rect);
  } else {
    // The passed-in image may not be mapped in our process, and we need to
    // guarantee that the current backing store is always mapped.
    if (!image->Map())
      return;
    image_data_->Unmap();
    image_data_->Swap(image);
  }
  *invalidated_rect = gfx::Rect(0, 0,
                                image_data_->width(), image_data_->height());
}

void PPB_Graphics2D_Impl::ScheduleOffscreenCallback(
    const FlushCallbackData& callback) {
  DCHECK(!HasPendingFlush());
  offscreen_flush_pending_ = true;
  MessageLoop::current()->PostTask(
      FROM_HERE,
      base::Bind(&PPB_Graphics2D_Impl::ExecuteOffscreenCallback,
                 weak_ptr_factory_.GetWeakPtr(),
                 callback));
}

void PPB_Graphics2D_Impl::ExecuteOffscreenCallback(FlushCallbackData data) {
  DCHECK(offscreen_flush_pending_);

  // We must clear this flag before issuing the callback. It will be
  // common for the plugin to issue another invalidate in response to a flush
  // callback, and we don't want to think that a callback is already pending.
  offscreen_flush_pending_ = false;
  data.Execute(PP_OK);
}

bool PPB_Graphics2D_Impl::HasPendingFlush() const {
  return !unpainted_flush_callback_.is_null() ||
         !painted_flush_callback_.is_null() ||
         offscreen_flush_pending_;
}

}  // namespace ppapi
}  // namespace webkit


text:
The rate of fitness-valley crossing in sexual populations
Weissman D, Feldman M, Fisher D. 2010. The rate of fitness-valley crossing in sexual populations. Genetics. 186(4), 1389–1410.
10.1534/genetics.110.123240
Weissman, DanielISTA; Feldman, Marcus; Fisher, Daniel
Barton Group
Limits to selection in biology and in evolutionary computation
Biological traits result in part from interactions between different genetic loci. This can lead to sign epistasis, in which a beneficial adaptation involves a combination of individually deleterious or neutral mutations; in this case, a population must cross a "fitness valley" to adapt. Recombination can assist this process by combining mutations from different individuals or retard it by breaking up the adaptive combination. Here, we analyze the simplest fitness valley, in which an adaptation requires one mutation at each of two loci to provide a fitness benefit. We present a theoretical analysis of the effect of recombination on the valley-crossing process across the full spectrum of possible parameter regimes. We find that low recombination rates can speed up valley crossing relative to the asexual case, while higher recombination rates slow down valley crossing, with the transition between the two regimes occurring when the recombination rate between the loci is approximately equal to the selective advantage provided by the adaptation. In large populations, if the recombination rate is high and selection against single mutants is substantial, the time to cross the valley grows exponentially with population size, effectively meaning that the population cannot acquire the adaptation. Recombination at the optimal (low) rate can reduce the valley-crossing time by up to several orders of magnitude relative to that in an asexual population.
This work was supported in part by a Robert N. Noyce Stanford Graduate Fellowship and European Research Council grant 250152 (to D.B.W.) and by National Institutes of Health grant GM 28016 (to M.W.F.). We thank Michael Desai for many ideas and discussions and are grateful to Joanna Masel and an anonymous reviewer for their helpful suggestions.
Weissman D, Feldman M, Fisher D. The rate of fitness-valley crossing in sexual populations. Genetics. 2010;186(4):1389-1410. doi:10.1534/genetics.110.123240
Weissman, D., Feldman, M., & Fisher, D. (2010). The rate of fitness-valley crossing in sexual populations. Genetics. Genetics Society of America. https://doi.org/10.1534/genetics.110.123240
Weissman, Daniel, Marcus Feldman, and Daniel Fisher. "The Rate of Fitness-Valley Crossing in Sexual Populations." Genetics. Genetics Society of America, 2010. https://doi.org/10.1534/genetics.110.123240.
D. Weissman, M. Feldman, and D. Fisher, "The rate of fitness-valley crossing in sexual populations," Genetics, vol. 186, no. 4. Genetics Society of America, pp. 1389–1410, 2010.
Weissman, Daniel, et al. "The Rate of Fitness-Valley Crossing in Sexual Populations." Genetics, vol. 186, no. 4, Genetics Society of America, 2010, pp. 1389–410, doi:10.1534/genetics.110.123240.

redpajama_set_name: RedPajamaCommonCrawl


Always wanted to learn how to swing dance? Lindy KL organises this swing dance class for free. Put on your dancing shoes, bring along a partner (or not) and you can stand a chance to win Zalora vouchers. There will also be a performance by Douche Manouche.


text:
Nancy Pelosi Says Impeachment Could Be Too "Divisive"
"He's just not worth it."
Congress Can Use Taxpayer Money in Sexual Harassment Settlements — But That Could Change
They're allowed to do WHAT?
Alexandria Ocasio-Cortez Showed Support for Activists Protesting Her Boss, Nancy Pelosi
"It's not just about confrontation but about real meaningful unity behind our goals."
Women Won in Record-Breaking Numbers in the 2018 Midterms
"This isn't a moment, it is a movement for justice, equality and what is right for this country."
Alaska's Alyse Galvin Will Take on the Longest-Sitting U.S. Representative
Galvin will face off with Don Young, who has represented Alaska since 1973.
Meet Cathy Myers, the Former Teacher Who Wants to Clean Up Paul Ryan's Mess
She's running for Ryan's seat in the House of Representatives.
A Republican Congressman Is Fighting His Party for a Carbon Tax
Florida's Carlos Curbelo is a vocal minority in his party.
House Democrats Want Parkland Survivors to Intern for Them
They hope other student activists working on gun violence will also apply.
Do NOT Let Maxine Waters Hear You Talk About Making America Great
Auntie Maxine shut down a GOP Congressman who thought he could educate her on discrimination.
Paul Ryan Has Announced His Retirement
Ryan's office confirmed reports that he will not seek reelection.


We write to you in your capacity as President of the BBFC concerning that organisations role as the Age Verification regulator and applying the law in Part 3 of the Digital Economy Act 2017.
Including of text as material covered by the Age Verification provisions would seem to be something where you are extending your powers beyond those authorised by Parliament and the law.
Depending on which criteria is applied could mean a site either does or doesn't need to comply with the Age Verification legislation.
Site owners who want to ensure they are in compliance with the law need to have clarity on this.


Well, in my entrepreneurial days, I worked a lot with a fantastic sales man. He sold pen based computers and was enormously successful in his endeavors. He was probably the first salesperson I encountered that I admired. He certainly embraced much of the other characteristics that I will or have blogged about here and I took a lot of lessons from him.
I'm sure he, and every other successful sales person would love to see lower tax bills and are championing candidates that will help us keep more of our money – but in the mean-time, when we pay that enormous tax bill, it's because we are being successful!
Categorized under: Compensation, Random Thought.


text:
Dentro de la etnografía de Ruanda podemos abarcar 6 grupos étnicos principales: Batwa, Hutu, Hema, Hima, Suajili y Tutsi.

Batwa (Twa)

Pueblos vecinos
Hutu
Tutsi

Historia
Los pequeños grupos de pigmeos Batwa están considerados como los descendientes de los primeros pobladores de las tierras en que hoy se encuentran diseminados.

La falta de un censo, las dificultades para el mismo, los avatares por los que han pasado estos países, hacen dudosas todas las estimaciones sobre el número de la actual población Twa. Aunque se habla de que constituyen el 1 % de la población de Ruanda y Burundi, algunas fuentes, incluido portavoz Twa, bajan este porcentaje hasta el 0.4 %. Esta falta de datos fiables y la información contradictoria sobre ellos ha hecho que no se les haya considerado como una Minoría en Riesgo (100.000 o uno por ciento de la población).

A partir de la creación del primer parque nacional de África, el parque nacional Virunga en la República Democrática del Congo, en 1925, los Batwa comenzaron a ser expulsados de las tierras donde vivían, perdiendo sus recursos tradicionales para su subsistencia (caza, recolección de frutos, etc.). Este proceso continuó a lo largo del  : expulsión de las tierras del Parque nacional Kahuzi-Biega (R.D.C), en 1970; expulsión de las tierras de los parques de Bwindi y Mgahinga (Uganda); expulsión de las tierras ganadas a los bosques para ser destinadas a nuevos cultivos (Ruanda y Burundi), etc. Las poblaciones expulsadas, desprovistas de sus medios económicos de subsistencia tradicionales se vieron abocadas a llevar una vida de absoluta dependencia de las poblaciones bantús del entorno, dándose innumerables situaciones de acabar viviendo de la mendicidad.

En abril de 1994 se encontraron a varios centenares Twa viviendo en una área arbolada en las afueras de Goma, Rep.Dem.del Congo, profundamente traumatizados por las persecuciones y matanzas a las que habían estado expuestos. Todas las informaciones sobre su situación en el momento del genocidio de 1994 son contradictorias. Mientras unas informaciones dan cuenta de grupos Twa exterminados por escuadras Hutu, otras acusan a grupos Twa de haber estado al lado de los Hutu contra los Tutsi formando parte del ejército y milicias, y que habían huido junto a los Hutu tras la derrota de estos. Más tarde, un portavoz Twa recorriendo las capitales Occidentales en busca de apoyo para el pueblo Twa, explicaba que las dos terceras partes de los 30.000 Twa de Ruanda habían muerto en la guerra civil y genocidio, y exponía que según sus datos ningún Twa había participado en ninguno de los bandos enfrentados. Otro "líder pigmeo" en un campamento de refugiados manifestaba ante la prensa internacional su testimonio sobre la matanza de 1.500 Twa cometida por bandas Tutsi.

Aunque los Twa comparten estructuras sociales e idioma con los Hutu y Tutsi, siempre han sido considerados como ciudadanos de segunda clase, no teniendo acceso a la educación ni a los servicios del gobierno, siendo su participación política insignificante. Bajo Habyarimana, Ruanda tenía un sistema de cuotas étnicas pero no se hizo ninguna provisión para el pueblo Twa. Los Twa son el grupo más pobre de la sociedad ruandesa, carecen de acceso a la educación formal, vivienda y atención médica. Muy pocos de ellos tienen conocimientos sobre las técnicas para cultivar, y la mayoría vive de la alfarería, trabajos ocasionales y de la mendicidad.

Durante los últimos años, la creación de ONGs y asociaciones batwa que han comenzado a organizarse para exigir el reconocimientos de sus derechos como el resto de los ciudadanos de los países donde habitan, acceso a la propiedad de tierras, derecho a la educación, a la sanidad pública, a la representación en la administración, etc. está suponiendo algunos cambios positivos para los Batwa. Sin embargo, todavía no hay ningún caso en el que las comunidades batwa hayan recibido ningún tipo de compensación por la pérdida de sus tierras y de los recursos económicos de los que antes disponían.

Hutu

Pueblos vecinos
Tutsi
Batwa

Historia
Entre los siglos XVII y XX formaron parte de varios reinos muy estratificados. Tanto en Uganda como en Ruanda y Burundi los hutu constituyeron la clase baja, esclavos o siervos, según las épocas, de unos reinos gobernados por la etnia Tutsi sobre los Hutu "campesinos" y cazadores Twa. Casi hasta el presente mantuvieron estructuras semi-feudales.

El poder de estos reinos estaba basado, además de en una jerarquía y funcionariado muy disciplinado, en el mantenimiento de unas milicias fuertes y fieles a la autoridad real. Estas milicias formadas por personas Tutsi serían más tarde incorporadas a los ejércitos regulares de los estados modernos. Estas milicias ofrecieron un sentido corporativo fuerte y vinieron a jugar papeles económicos y sociales importantes además de sus deberes militares. Además, las milicias tenían una vida cultural muy activa.

El paso del tiempo ha permitido comprender mejor las nefastas consecuencias que las ideas implantadas por las administraciones coloniales dejaron para el futuro de estas gentes. Llegaron a África con convicciones firmemente sostenidas sobre la jerarquía de las diferentes razas. Llegaron como "blancos" que se consideraban superiores a los pueblos conquistados. Los alemanes y los belgas se sintieron impresionados por aquella nobleza de estos reinos que tenían rasgos europeos. Alemanes y belgas consideraron que los Tutsi habían nacido para gobernar, y decidieron utilizar para la administración de estos países las estructuras de poder que encontraron en el lugar. Así, las autoridades coloniales (sobre todo los belgas) con sus prácticas colaboraron en la intensificación de las diferenciaciones étnicas. Los europeos gobernaron primero a través de Tutsis, y entonces después de la Segunda Guerra Mundial los revolucionarios belgas (marxistas que pensaron en términos de lucha de la clase) animaron a los Hutus a intensificar su oposición contra sus opresores Tutsi.

Queriendo fortalecer la jerarquía Tutsi y hacerla más rígida y controlable, en 1926 los belgas decidieron que la población debía ser clasificada como Tutsi o Hutu (calificando como Tutsi, a todos aquellos que poseyeran 10 cabezas de ganado o más). Se impusieron tarjetas de identificación que incluían el origen étnico. Esto sucedía en tiempos en que ya hacía mucho tiempo que los matrimonios mixtos entre ambas etnias habían dado lugar a un porcentaje grande de la población difícilmente discernible físicamente por su etnia. Además, los europeos quisieron acabar con los territorios que hasta entonces habían mantenido una gran autonomía respecto a los poderes reales y que a partir de entonces serían gobernados por autoridades administrativas calificadas como Tutsi e impuesta sobre las autoridades tradicionales de dichos territorios.

Al contrario de otros poderes coloniales, los belgas no se ocuparon de la educación de sus súbditos africanos. Lo mismo puede decirse de la Iglesia católica que dedicó sus esfuerzos educativos en la formación exclusivamente de las clases dirigentes, la minoría Tutsi.

De esta manera se llega a la independencia en los años '60 con unos países en que la minoría étnica detenta los principales resortes culturales, políticos y militares de los nuevos estados. Sin embargo, el sistema de una persona, un voto, acabaría de la noche a la mañana con parte de esta superioridad, la política.

A partir de aquí la balanza no ha dejado de inclinarse a un lado o a otro, unas veces a favor de la poderosa minoría Tutsi y otras a favor de la mayoría Hutu, pero siempre con violentas represiones de las respectivas poblaciones étnicas.

Economía
Con una industria pequeña, sin ferrocarril y pocos recursos naturales se han visto obligados a depender en gran medida de la ayuda extranjera. Sin embargo, muchas veces esta ayuda extranjera ha servido poco para el desarrollo del país y más bien los recursos han ido a parar a las élites dependientes del poder, ayudando a mantener regímenes represores de la población, y sólo interesados en su lucro personal y de las personas cercanas al mismo.

Su economía se basa casi completamente en la agricultura, con sólo un ocho por ciento de población urbana. El 93 % de la población trabajan en la agricultura, 3 % en la industria y el 4% en el sector servicios. Son los países de mayor densidad de población por kilómetro cuadrado de toda África y los países que con 3,5 % de crecimiento anual de la población mantiene la tasa más alta de África. La familia media tiene ocho hijos. Más de la mitad de la población es menor de 15 años de edad, con una esperanza de vida de 49 para los varones y 52 para las mujeres. Además, estando la mayor parte de los hospitales en manos de la Iglesia católica, la planificación familiar es un problema difícil de encarar.

Religión
Más del 65 % son católicos, un 30 % mantiene sus creencias tradicionales y un 5 % ha adoptado el Islam recientemente.

Hema

Hima

Suajili

Pueblos vecinos
Mijikenda
Kwere
Zaramo
Makonde

Nombre
El nombre suajili deriva de la palabra árabe sawāḥil, plural de sāḥil, "costa" Por otra parte, algunos musulmanes africanos de la costa keniana son conocidos por pueblos vecinos o por sí mismos como suajilis, aunque tienen como lengua materna idiomas diferentes al suajili. El origen del término es tan variado como los orígenes de la lengua. Así, la pequeña comunidad de los Shirazi, se consideran descendientes del antiguo Imperio Pérsico antiguo. En Mombasa se consideran desdendientes de árabes mezclados con algunos bantúes y yemeníes. La mayoría de los árabes de Kenia habla suajili como lengua materna. En Tanzanía el término suajili suele emplearse para designar a todos los africanos costeros que hablan suajili como lengua materna. A veces se emplea el término Shirazi para nombrar a las personas con ascendencia genética árabe.

Idioma
Más de 10 millones de personas tienen el idioma suajili como lengua materna y más de 50 millones lo utilizan como segunda lengua. En Tanzania, para el 7% de la población es su lengua materna, pero lo utilizan como 1.º o 2.º idioma más del 70%. Algo similar sucede en Kenia. En la República Democrática del Congo hay más de 10 millones de personas que lo utilizan.

No todos los dialectos son mutuamente inteligibles. El idioma Ngwana (Wangwana), hablado en la R.D.C es considerado por algunos como una mezcla de suajili e idiomas bantúes de la zona (contando con muchas influencias además, francesas, portuguesas y alemanas), más que como un dialecto suajili.

Historia
Los habitantes de las zonas costeras de Kenia, Tanzanía, y Mozambique comparten historia, idioma y tradiciones culturales que algunos estudiosos del suajili consideran anteriores al , fecha en la que se data el relato que un viajero griego anónimo, autor de El Periplo por el Mar de Eritrea, en el que se escribe sobre un lugar en África oriental que los árabes frecuentaban para comerciar.

Hacia el , grupos de comerciantes árabes se establecen de forma permanente en determinados puntos de la costa africana del Océano Índico, mezclándose con la población bantú autóctona, aunque se cree que había alguna de estas comunidades anteriores a la llegada del Islam. Vivían en ciudades-estados dependientes del sultán de Omán, y más tarde, del sultán independiente de Zanzíbar. Entre los IX a XII los Benaadir navegan cerca de la costa de Somalia y llegan a crear en la zona del Río Jubba uno de los centros más importantes de la cultura suajili. Muchos pueblos allí todavía mantienen su idioma suajili aunque muy influido por siglos de relación con los somalíes.

En cuanto al origen de los Wangwana de la actual R.D.C., éste se remonta a los comienzos del . Estas personas que hablan el dialecto suajili llamado Kingwana descienden de los miembros que allí se establecieron procedentes de las caravanas comerciales que llegaban de la costa.

A pesar de la historia e idioma compartidos por zonas tan dispersas de la costa índica es difícil hablar de una cultura suajili uniforme.

Economía
La economía suajili hoy, como en el pasado, está unida íntinmamente al Océano Índico. Durante aproximadamente 2.000 años, los comerciantes suajili han actuado como intermediarios entre África oriental y central y el resto del mundo. Ellos jugaron un papel importante en el comercio de marfil y en el comercio de esclavos durante siglos. En los tiempos modernos, los comerciantes suajilis trajeron productos desde el interior de la actual Rep.Dem.del Congo hasta las costas de Tanzania donde las vendían a los comerciantes árabes, indios y portugueses. Fueron muchos los esclavos vendidos en Zanzíbar a los portugueses con destino a Brasil, entonces, colonia portuguesa . Pescadores suajilis todavía confían en el océano para obtener su fuente principal de ingresos. El pescado es vendido a sus vecinos del interior a cambio de los productos de esas tierras.

Religión
El Islam es la religión practicada por la casi totalidad. Sin embargo, en íntima relación con su fe islámica mantienen determinadas prácticas y creencias que se consideran ajenas al islam. Creen en los espíritus (djinns) que tienen un carácter animista. La mayoría de los hombres usan amuletos proteccionistas alrededor de sus cuellos que contienen versos del Corán. La adivinación se practica a través de las lecturas coránicas. A menudo el adivino incorpora escrituras del Corán en los tratamientos de las enfermedades, de forma similar a como los cristianos rezan a su dios para que intervenga en la curación de los enfermos. En ocasiones, pide a un paciente que empape un pedazo de papel que contiene versos del Corán en agua. Con esta tinta difuminada por el papel el paciente lavará su cuerpo o lo beberá para curarse de su enfermedad. Solo los profetas y maestros del Islam son autorizados para hacerse curanderos entre los suajili.

Tutsi

Pueblos vecinos
Hutu
Twa

Idioma
Su idioma, el mismo que hablan los hutu, es el descendiente del idioma hablado por los habitantes Bantús (hutu) antes de la invasión Cushita (tutsi). Estos asumieron el idioma de las tierras conquistadas y perdieron el suyo propio.

Historia
Hace 400 años, los Tutsi (Batutsi en plural), procedentes, probablemente, de Etiopía, emigraron con sus manadas de ganado a los alrededores del Lago Kivu. Aquí establecieron sus reinos feudales, gobernados por un mwami (rey) de origen divino, con las poblaciones conquistadas (hutu) como siervos. A lo largo de estos siglos, la convivencia, las mismas creencias religiosas, los casamientos mixtos y las leyes que favorecían un criterio económico para la distinción entre tutsi y hutu, es difícil hablar de los tutsi como pueblo y sería más correcto tal vez considerarlos como una clase social.

Aunque de procedencias muy diferentes, observando la población de estos países se aprecia que hay algunas personas que son claramente discernible como Tutsi; hay otras personas que son claramente discernible como Hutu, y hay la gran masa que no es inmediatamente discernible como uno u otro. Solo los que conocen la historia personal de una familia son capaces en la mayoría de los casos de hacer tal distinción.

Así como las características físicas no son una guía para identificar a los individuos como Hutu o Tutsi, tampoco lo es la geografía. No existe una región particular que puede describirse como históricamente Hutu o Tutsi, aunque por supuesto hay zonas en las que un grupo es más prominente. En Ruanda, por ejemplo, aproximadamente el 45 por ciento de los Tutsi habitan una región en el centro del país alrededor de Nyabisindu que fue anteriormente la sede de la monarquía Tutsi.

Otro aspecto de su historia que debe destacarse es la tradición de una milicia fuerte. Al principio, las milicias jugaron un papel vital en las guerras de conquista y defensa nacional. Estas milicias, con la independencia fueron incorporadas a las fuerzas de los ejércitos regulares del estado. Estas milicias, que tenían nombres tan llamativos como "el infatigable" o "los que no pueden ser golpeados", tenían un sentido corporativo fuerte y jugaban un papel económico y social importantes además de sus deberes militares. Además, las milicias tenían una vida cultural intensa, con poesía, música, y bailes. Estas milicias eran mixtas de tutsi y hutu y no era raro que un Hutu estuviera al mando. A finales del  estos reinos eran estados militares agresivos y temidos por sus vecinos.

Esta es la historia compartida por los Tutsi de Ruanda y Burundi. No es la misma situación en lo que respecta a los Tutsi de la Rep.Dem.del Congo.

Con la llegada de los belgas, éstos dividieron parte del reino de Ruanda, y un trozo pasó a formar parte del Congo. Los habitantes de esta parte, llamados Banyarwanda eran Hutu y Tutsi. Más tarde, los belgas trajeron a otras zonas de Kivu más ruandeses para trabajar los campos. Todos estos, junto a los refugiados Ruandeses que huyeron de las matanzas de 1959 constituyen la población Banyarwanda de la Rep. Dem. del Congo. Con el tiempo, los Banyarwanda de ascendencia Tutsi llegaron a dominar importantes sectores del comercio, la hostelería y la agricultura de Kivu por lo que finalmente los Banyarwanda han llegado a identificarse exclusivamente con los Tutsi.

A pesar de que gran parte de los Tutsi ha vivido en el Congo desde antes de que se establecieran las fronteras coloniales en 1890, nunca los Banyarwandans fueron considerados ciudadanos del país, y siempre fueron considerados como extranjeros tanto por el Estado como por sus vecinos pertenecientes a otros grupos étnicos: los Hunde (Nyanga, Lega, Tembo, Nande) y Nande que se consideran a sí mismos como los habitantes autóctonos de la provincia de Kivu.

Religión

Mitología Tutsi
Imana, el Creador, creó a Kazikamuntu, el primer ser humano de la mitología Tutsi, especialmente difundida entre los Banyarwandan. Kazikamuntu tuvo muchos hijos y llegó un tiempo en que surgieron los enfrentamientos entre ellos separándose unos de otros y siendo el origen del nacimiento de los diferentes subgrupos étnicos del Pueblo Tutsi.

En los días antiguos, cuando Dios todavía vivía entre los hombres, la Muerte no vivía entre los hombres. Muerte era una bestia salvaje que a veces pasaba por la tierra, pero Imana les prometió a los hombres que él se ocuparía de darle caza con sus perros cuando Muerte viniera por la tierra. Pero les puso una condición: que cuando Imana fuera de caza y persiguiera a Muerte todos los demás seres vivos debían ocultarse. Un día durante una de estas cacerías una mujer anciana salió al huerto para recoger comida. Entonces, Muerte que huía corriendo de Imana, vio a la mujer y le prometió que si ella le escondía él ayudaría a ella y su familia. La mujer abrió su boca y Muerte saltó dentro. Cuando Imana vio a la mujer y le preguntó que si ella había visto a Muerte, ella lo negó. Pero Imana se dio cuenta de lo que la mujer había hecho abandonó a los hombres, dejó la tierra y dejó que los humanos se encargaran de la bestia Muerte. Desde entonces Muerte vive entre los seres vivos de la tierra.

Otro mito Tutsi explica que la primera pareja humana vivía en una tierra maravillosa pero el hombre y la mujer eran estériles y no tenían hijos. Pidieron a dios que les ayudara y éste mezcló tierra con saliva, formó una figura humana pequeña y pidió a la mujer que guardara esa figura dentro de una vasija durante nueve meses. Además, cada día la mujer tenía que echar leche en la vasija, por la mañana y por la tarde. Solo debería sacar la figura de la vasija cuando le hubieran crecido brazos y piernas. Ella siguió estas instrucciones y a los nueve meses vio que la figura de barro se había convertido en un ser humano. Dios continuó creando seres humanos mediante este mismo sistema y después éstos comenzaron a reproducirse y así se fue poblando la tierra.

Ruanda

redpajama_set_name: RedPajamaWikipedia


HP Coated Paper 90gsm – Basic Host-based – Host-based drivers use the computer's host's resources to process print commands when the computer is connected to the printer via USB cable. With many small businesses moving to Windows 7 64 bit, those with this large format plotter will find themselves let down by HP as there is no official 64 bit driver for the device. Designjet Z 24" A1 Photo Printer. It is ridiculous that printer manufacturers do not add drivers for their expensive products C Plotter. Ciao… ho lo stesso problema di stamap con il plotter HP DJ c. Printer description The HP Designjet c printer is a color large format Inkjet printer that provides ease of use through features like improved media handling and a new front panel.
October 11, at 5: The link you left It seems to be wrong, just appears the main page of mediafire but no longer solution at all. For more information and support, go to Issues with Apps in Windows Compatibility requirements Desktop and Laptop.
Select an operating dindows and version to see available software for this product. The list of all available drivers for your product is shown above. For devices with Windows 10 in S mode, you can only get drivers through Windows Update. Right-click the device and then select Update driver or Update driver software.
Tech support scams windoes an industry-wide issue where scammers attempt to trick you into paying for unnecessary technical support services. Europe, Middle East, Africa.
July 23, at 1: I will try the USB to parallel approach and let you know how it turns out …. Installed the driver on windows c716a. Designjet CA 36″ A0 Printer. Please make a different selection, or visit the product homepage.
Click here to purchase parts and accessories from the HP Parts store at http: May 9, at Similar to the Basic Host-based option, this driver is available only from www. September 23, at 6: Finally my PC wibdows up to speed! March 27, at Frequently asked questions FAQs about software and drivers Review this list of frequently asked questions about drivers and software.
If your operating system is not listed, HP might not currently have software or driver downloads available for your product for that operating system, or the downloads are not available in the language you c47116a chosen. If Windows cannot fully recognize the name of the device, Windows lists the device as an Other device in Device Manager. Fax capability is available for select printers only.
January 1, at 6: However, I did eventually find a solution thanks to user jdm13 on the HP forums. This document is for Qindows and Compaq computers.


This postcard shows the mountains of Kintail, known as 'The Five Sisters', from Carr Brae in Ross-shire. Legend relates that two Irish Princes, washed ashore during a storm, fell in love with two of the seven daughters of the King of Kintail. Having promised to send their five brothers for the remaining sisters, the Princes married the two youngest Princesses and returned to Ireland. The five sisters waited in vain, and eventually asked the Grey Magician of Coire Dhunnaid to extend their vigil beyond life itself, whereupon he turned them into mountains.


If you look really closely, you can see that it isn't really 3D (some of objects and transparency are layered in the wrong order) but my goal was to make it use existing plot.network and compute.animation commands as much as possible so that arguments can be reused across the plot techniques.
A feature I'm excited about developing further is the transmissionTimeline plot to illustrate a spreading tree from a source vertex in a network (also based on a conversation with Sam). This works to plot the forward-reachable tPath found by the tsna package (or other tree-like edgelists), and will soon be an optional display for exploring infection trees in EpiModel. The idea is to show the who-infected-whom tree of relationships by positioning vertices according their infection time (on the horizontal axis) and their transmission generation (on the vertical). This puts the source vertex at the origin (lower left) and all of the infection chains as trails arcing out to the right.
Obviously I've chosen an example that looks nice, but the technique seems to be surprisingly useful in illustrating bursty-ness and reproduction rates (more on that later I hope).
A final feature of note — functional but still preliminary — is the inclusion of some pre-built "special effects" functions for animation rendering. i.e. color edges by their age. See the help page ?effects for details.


text:
namespace cobalt {
namespace dom {

// This class contains various state related to pointer and mouse support.
class PointerState {
 public:
  // Web API: Pointer Events: Extensions to the Element Interface (partial
  // interface)
  //   https://www.w3.org/TR/2015/REC-pointerevents-20150224/#extensions-to-the-element-interface
  void SetPointerCapture(int32_t pointer_id, Element* element,
                         script::ExceptionState* exception_state);
  void ReleasePointerCapture(int32_t pointer_id, Element* element,
                             script::ExceptionState* exception_state);
  bool HasPointerCapture(int32_t pointer_id, Element* element);

  // Custom: Not in any Web API.
  //

  // Queue up pointer related events.
  void QueuePointerEvent(const scoped_refptr<web::Event>& event);

  // Get the next queued pointer event.
  scoped_refptr<web::Event> GetNextQueuedPointerEvent();

  // Set the pending pointer capture target override for a pointer.
  void SetPendingPointerCaptureTargetOverride(int32_t pointer_id,
                                              Element* element);

  // Clear the pending pointer capture target override for a pointer.
  void ClearPendingPointerCaptureTargetOverride(int32_t pointer_id);

  // Process Pending Pointer Capture and return the capture override element.
  scoped_refptr<HTMLElement> GetPointerCaptureOverrideElement(
      int32_t pointer_id, PointerEventInit* event_init);

  // Set the 'active buttons state' for a pointer.
  //   https://www.w3.org/TR/2015/REC-pointerevents-20150224/#dfn-active-buttons-state
  void SetActiveButtonsState(int32_t pointer_id, uint16_t buttons);

  // Set of clear a pointer as 'active'.
  //   https://www.w3.org/TR/2015/REC-pointerevents-20150224/#dfn-active-pointer
  void SetActive(int32_t pointer_id);
  void ClearActive(int32_t pointer_id);

  // We will in general hold references back to window, which can result in
  // leaking nearly the entire DOM if we don't forcibly clear them during
  // shutdown.
  void ClearForShutdown();

  static bool CanQueueEvent(const scoped_refptr<web::Event>& event);

 private:
  // Stores pointer events until they are handled after a layout.
  std::queue<scoped_refptr<web::Event> > pointer_events_;

  // This stores the elements with target overrides
  //   https://www.w3.org/TR/2015/REC-pointerevents-20150224/#pointer-capture
  std::map<int32_t, base::WeakPtr<Element> > target_override_;
  std::map<int32_t, base::WeakPtr<Element> > pending_target_override_;

  // Store the set of active pointers.
  //   https://www.w3.org/TR/2015/REC-pointerevents-20150224/#dfn-active-pointer
  std::set<int32_t> active_pointers_;

  // Store the set of pointers with active buttons.
  //   https://www.w3.org/TR/2015/REC-pointerevents-20150224/#dfn-active-buttons-state
  std::set<int32_t> pointers_with_active_buttons_;
};

}  // namespace dom
}  // namespace cobalt

#endif  // COBALT_DOM_POINTER_STATE_H_

redpajama_set_name: RedPajamaGithub


text:
Kingsmen Win Fourth Straight
REDLANDS, Calif. - The longest road trip for the Cal Lutheran men's basketball team was well worth it tonight as the Kingsmen defeated Redlands 73-68 in an important Southern California Intercollegiate Athletic Conference (SCIAC) game.
Though UR won the tip-off and put away three consecutive three-pointers to start the night, CLU remained composed and turned a close battle and a deficit into an advantage on a Kyle Ferreira triple to put the visiting squad up 25-24. That bucket also served as a spark as the Kingsmen went on a 10-0 run for a 32-24 lead. At the 3:55 mark, Austin Cole also hit one from long range to give Cal Lutheran a double figure lead at 39-28 and the Violet and Gold took a comfortable 13-point, 43-30, lead into the locker rooms.
Once play resumed, CLU continued to control things, leading by as many as 13, though Redlands pulled within a bucket at 68-66 with 2:22 remaining in regulation. Caleb Richey and Cole converted crucial baskets in the final 1:06 as the Kingsmen hung on for the win.
Adrian Francis returned to the hardwood after being sidelined with an injury on Jan. 5.
Offensive Highlights: All five starters reached double figures with Kenneth Moffett adding the remaining four points off the bench. Wolfgang Wood turned in a monster 26-point, 11-rebound double-double to pace all players in each category. It was the second straight game that Wood finished with 26 points. Blake Miles also notched a double-double with 10 points and as many boards. Richey scored a dozen, Ferreira added 11, going 3-for-5 from three-point range, and Cole capped things off with 10. Richey and Ferreira handed out four and three assists, respectively.
Defensive Highlights: At the defensive end, Miles recorded two of the three CLU blocks with Moffett adding the other. Cole came away with a game-high five steals and Miles and Wood had two takeaways apiece. Of Wood's 11 rebounds, two were at the offensive end and Moffett also nabbed a pair of offensive boards.
The Opponent: Redlands (7-16, 3-11 SCIAC) was led by 19 points from Sean Milligan and 13 from Jesse Wims while Wims also came down with a team-best seven rebounds. Milligan also had five assists, four blocks and three steals.
Cal Lutheran (16-6, 9-4) remains on the road Thursday, travelling to Claremont-Mudd-Scripps where the Kingsmen and Stags will face off at 7:00 p.m.
Box Score: CLU 73, UR 68
CLU Instagram: http://instagram.com/clusports#
M Basketball Instagram: http://instagram.com/kingsmen_basketball/
CLU Twitter: https://twitter.com/clusports
M Basketball Twitter: https://twitter.com/CLUmBasketball
CLU Facebook: https://www.facebook.com/clusports
M Basketball Facebook: https://www.facebook.com/kingsmenbasketball/


text:
Kiprovo (ou Saounino) (en  (Саунино)) est un village du raïon de Kargopol, oblast d'Arkhangelsk, en Russie.

Géographie
Le village se situe à  au nord de Kargopol.

Population
La population du village suivant le recensement de 2010 en Russie s'élevait à 206 habitants.

Curiosités
Le village est connu pour son pogost de Saounino dans lequel se trouve l'église en bois Saint Jean Chrysostome et son clocher qui date de 1665.

Photos

Article connexe
 Pogost (Ochevenski)

Bibliographie
  G Gounn; Kargopol-Onega, Moscou, édition Iskousstvo,1974 ( Каргополье — Онега; Г. П. Гунн, Москва, «Искусство», 1974),143 pages
  F Dokoutchaiev-Baskov , Kargopol, Arkhangelsk 1996 (Kаргополь; Ф. К. Докучаев-Басков, Архангельск, 1996)
  B. Fedotov, Kargopol et environs , Léningrad, 1978 (Каргополь и его окрестности; Б. Н. Федотов, Ленинград, «Художник РСФСР»), 1978
  K, Gemp, Kargopol, Arkhangelsk, édition nord-ouest, 1968 (Каргополь; К. П. Гемп, Архангельск, Северо-Западное книжное издательство, 1968) 93 pages
 Le Nord russe : guide de l'oblast d'Arhangelsk , Moscou, 2005, 168 pages

Références

Lien externe
  Saounino

Oblast d'Arkhangelsk


We drum into our kids that they need to talk, if it's not to us, then to somebody they trust, just get it out … but are we really letting go enough to allow them to do that?
Current guidelines in adolescent medicine recommend that all young people should be able to see doctors for confidential consultations without parents present – however, research has shown that this just does not sit well with all parents.
Kidspot spoke to Dr Rony Duncan, Senior Research Fellow at Murdoch Children's Research Institute and lead researcher into a study that conducted a series of interviews with parents of adolescents to talk to them about their views on confidential consultations for young people. The research showed that the thought of their personal issues being disclosed to their parents or carers means that teens will be less likely to seek out healthcare in the first place. If teens do seek out care and don't feel confident in their privacy, they may not disclose sensitive information about their lives and they'll be less likely to return for future appointments.
Why do parents have such a hard time with this idea?
A recent case was highlighted in the Gold Coast when the mother of a schoolboy was furious when her son was prescribed the anti-depressant, Prozac, without her knowledge. The 16-year-old was given the prescription by a GP at the youth mental health service, Headspace, who defended the doctor's decision, saying young people using their service have a right to expect confidentiality.
This mum is not alone. Many parents want to be told what goes on behind closed doors when their teenager visits a doctor, even if their children don't want them to know. To find out why, the Centre for Adolescent Health in Melbourne recently interviewed parents of teenagers to find out what influences their views.
Some parents felt that not knowing every single detail of their teenager's life meant that they were a bad parent. Some believe that "no-one knows your child like a parent does" and therefore the right questions may not be asked.
In regards to confidentiality, one parent said, "I would willingly step out if I trusted the doctor to share with me anything I need to be aware of." Kind of confusing right?
"These parental skills are vital when children are young. But as children grow up and enter adolescence, it becomes more and more important for them to have privacy. Yes, this comes with risks. What if they don't share all the necessary information? What if they don't remember what is said? What if they don't understand what is explained? But these are necessary risks," Dr Duncan says.
How can doctors help parents feel comfortable with child confidentiality?
Doctors are not in competition with parents. They want the same things that parents do – to keep young people healthy and well, physically and mentally.
For more information on confidentiality (health privacy) for youth and teens in New Zealand, information is available from the Ministry of Health, including this helpful leaflet.


text:
Q: convert PSUTIL Process output to object/dict? I am currently running the following script to get the system_md status of each host. Its working but the output I am getting is a Process Class and I am not sure how to parse the following params to a usable dict. I do not use python much so any help would be great.

*

*convert:

 psutil.Process(pid=1153, name='sssd', status='sleeping', started='2022-09-22 19:36:12')>

to -
obj = {
name:"somename",
pid: 1010,
status: "sleeping"
started:'2022-09-22

#!/usr/bin/env python

import re
import psutil

def log_running_services():
    known_cgroups = set()
    for pid in psutil.pids():
        try:
            cgroups = open('/proc/%d/cgroup' % pid, 'r').read()
        except IOError:
            continue  # may have exited since we read the listing, or may not have permissions
        systemd_name_match = re.search(
            '^1:name=systemd:(/.+)$', cgroups, re.MULTILINE)
        if systemd_name_match is None:
            continue  # not in a systemd-maintained cgroup
        systemd_name = systemd_name_match.group(1)
        if systemd_name in known_cgroups:
            continue  # we already printed this one
        if not systemd_name.endswith('.service'):
            continue  # this isn't actually a service
        known_cgroups.add(systemd_name)
        print(systemd_name)
        process = psutil.Process(pid)

       # Attempting to get dict with  dict.name = name etc.

if __name__ == '__main__':
    log_running_services()

A: And I resolved it with the following code outputs pretty pretty json with the service and status name:
#!/usr/bin/env python

import re
import psutil
import json

def log_running_services():
    known_cgroups = set()
    result = []
    # print(psutil.pids)
    for pid in psutil.pids():
        try:
            cgroups = open('/proc/%d/cgroup' % pid, 'r').read()
        except IOError:
            continue  # may have exited since we read the listing, or may not have permissions
        systemd_name_match = re.search(
            '^1:name=systemd:(/.+)$', cgroups, re.MULTILINE)
        if systemd_name_match is None:
            continue  # not in a systemd-maintained cgroup
        systemd_name = systemd_name_match.group(1)
        if systemd_name in known_cgroups:
            continue  # we already printed this one
        if not systemd_name.endswith('.service'):
            continue  # this isn't actually a service
        known_cgroups.add(systemd_name)
        s = "{0}".format(psutil.Process(pid))
        mydict = dict((k.strip(), v.strip()) for k, v in
                      (item.split('=') for item in s.split(',')))

        obj = {
            "name": eval(mydict.get("name")),
            "status": eval(mydict.get('status'))
        }
        result.append(obj)
    print(json.dumps(result))

if __name__ == '__main__':
    log_running_services()

redpajama_set_name: RedPajamaStackExchange


text:
Free-For-All
Religious Topics
Calvinism, Slavery, Tangents, and You!
Thread starter Alpo
Iconodule
Hoplitarches
PA, USA
Patriarchate of Johnstown
I think Hinterlander is simply referring to Kuyper's model of church-society relations, leaving aside the problems inherent to Calvinist theology. Is there something in there that Orthodox can learn from? Do we have our own robust answer to the same question, after our empires have disappeared?
I know very little about Kuyper myself, apart from the rather evil exemplar of his views embodied in apartheid. Whether that was a misapplication of his views or not, I don't know.
Taxiarches
Ethiopian Jew
Cowgazing is when you see cows on the side of the road ... (Or driving) Doesn't mean your bovine.
AntoniousNikolas
East Coast, USA
Oriental Orthodox Church
Iconodule said:
I don't think Kuyper's model of church-state relations can be understood apart from the theological poison of Calvinism, and as such, it could never work for Orthodox Christians. Calvinism undergirded everything Kuyper did or thought. Whatever our church-state model in the modern era might be, it shouldn't be devised drawing upon Calvinist models.
In all fairness to Kuyper, I think it was a misapplication.
WPM said:
Welcome home, WPM. You'll feel right at home in this thread.
Hinterlander
High Elder
I appreciate the measured responses to my Kuyper name dropping.
By "engage" I mean seek to understand and critique. I am not a Calvinist (although was so into 20s), but even as I've inquired deeper into Orthodoxy I still see some of Kuyper's ideas - like sphere sovereignty - as relevant.
Perhaps I'm too steeped in the reactionary Netodox types to really see where Orthodox have explored what it means to live in the modern West. Perhaps somewhere in the St. Sergius/Parisian Russian Emigre school there is something?
Asteriktos
I wanted to write something in response, but I'm not sure if the things that I kept coming around to are helpful. For example, if someone asked for a recommendation of a book they could read about predestination and how orthodox writers have dealt with that doctrine, I'd suggest not an apologetic against Protestants, but rather the 3rd or 4th volume of Jaroslav Pelikan's work on Church History. In those books all sorts of ideas that became points of contention among Protestants (real presence, predestination, etc.) get discussed, and the reasons for the orthodox POV carrying the day among ancient and medieval fathers get quoted/referenced--albeit often as a story about whose interpretations of St. Augustine would become the norm. Anyway, while I don't know the fellow you had mentioned, I'd be willing to throw my 2 cents into any threads that get started on particular ideas.
RaphaCam
Patriarch of Trashposting
em-espirito-e-em-verdade.blogspot.com
Big-O Orthodox
Exarchate of Gotham City
The goal of psionic wave oscillations is to plant the seeds of being rather than dogma.
Consciousness consists of electromagnetic forces of quantum energy. "Quantum" means a flowering of the primordial. The dreamtime is aglow with molecular structures.
We exist as bio-feedback.
Have you found your vision quest? It can be difficult to know where to begin. If you have never experienced this network at the quantum level, it can be difficult to believe.
Although you may not realize it, you are ever-present. How should you navigate this perennial quantum matrix? Prophet, look within and unify yourself.
The solar system is calling to you via sonar energy. Can you hear it? Throughout history, humans have been interacting with the planet via four-dimensional superstructures. We are at a crossroads of complexity and stagnation.
The cosmos is approaching a tipping point.
Humankind has nothing to lose. Who are we? Where on the great story will we be reborn? Our conversations with other beings have led to an unveiling of hyper-perennial consciousness.
Today, science tells us that the essence of nature is guidance. Synchronicity is the healing of healing, and of us. This life is nothing short of a flowering reintegration of ethereal conscious living.
rakovsky
Toumarches
rakovskii.livejournal.com
Orthodox Church in America
RaphaCam said:
Are these your own words?
rakovsky said:
No, I just got them from the New Age Bulls...t Generator.
DeniseDenise
Unverifiable, so irrelevant
Odd. Sounds like several Romanian posters over the years.
That's so funny:
http://sebpearce.com/bullshit/
"This life is nothing short of a condensing canopy of interstellar joy." :laugh:
I don't have any more information.
HaydenTE
OC.Net Guru
Episcopalian-ish
I pray for all bishops
Asteriktos said:
"Although you may not realize it, you are sentient."
When I went to Greece on a tourist trip 2 decades ago, whenever we went into a chapel or church, the female tourist guide kissed the icon on the icon table in the forefront of the church sanctuary in front of the iconostasis. But from my memory, the typical EO practice in the OCA is just to cross oneself whenever one enters or exits a sanctuary, and just to venerate the central icon table when entering for a service. What is the real correct or normal practice in Orthodoxy, and does it differ between EOs in Greece, the US, and Russia?


we're not just saying that. we have the numbers to prove it too. with a presence in over 10 million s across india and abroad, preethi has established itself as india's largest mixer grinder brand and a leading kitchen appliances company. what began as a humble mixer grinder enterprise in 1978 has grown exponentially to take over market.
grinding mill china. premier mixer grinder repair in dubai wet grinder repair wet grinder repair centre in bur dubai wet grinder service centre in dubai. live chat.
preethi mixer grinder dubai news, uae premier mixer grinder repair in dubai . spare parts of preethi mixie in dubai mixer grinder spare parts deira dubai . live chat.


text:
El Mouradi est une chaîne hôtelière tunisienne comprenant 17 hôtels de catégories supérieures (entre 3 et 5 étoiles).

Appartenant au groupe Meublatex, qui l'a rachetée dans le cadre d'une stratégie de diversification complémentaire par rapport à son métier d'origine, la fabrication et la commercialisation de meubles, elle totalise  lits répartis dans les principales zones touristiques de Tunisie :

 Aïn Draham : El Mouradi Hammam Bourguiba
 Djerba : El Mouradi Djerba Menzel
 Douz : El Mouradi Douz
 Hammamet
 El Mouradi Beach
 El Mouradi El Menzah
 El Mouradi Hammamet
 Monastir : El Mouradi Skanès
 Mahdia :
 El Mouradi Mahdia
 El Mouradi Cap Mahdia
 Port El-Kantaoui
 El Mouradi Club Selima
 El Mouradi Port El Kantaoui
 El Mouradi Club Kantaoui
 El Mouradi Palm Marina
 El Mouradi Palace
 Tunis
 El Mouradi Africa
 El Mouradi Gammarth
 Tozeur : El Mouradi Tozeur

Références

Lien externe

Groupe hôtelier ayant son siège en Tunisie


text:
Алессандро «Алекс» Бритти — () — популярный итальянский певец и композитор, виртуозный гитарист.

Биография

В 17 лет основал свою собственную группу, которая играла в стиле блюз. Успех пришёл в 1998 году, когда его сингл «Solo una volta» взлетел на вершины итальянских хит-парадов.

В октябре 1998 года вышел его первый официальный альбом «it.Pop», было продано более 300 тыс. копий.

В 1999 году он выступил на фестивале Сан-Ремо с песней «Oggi sono io». В итоге, он стал победителем в категории «новичков». Позже его песню «Oggi sono io» перепела легендарная итальянская певица Мина.

В 2000 году он выпустил свой второй альбом «La vasca» (Бассейн), два сингла с которого поднялись на высшие ступени итальянских чартов.

В 2001 году Алекс вновь участвует в фестивале Сан-Ремо, но на этот раз он выступает в категории «Big» и занимает лишь 7-е место.

В 2003 году он представляет на фестивале песню 7000 caffe и занимает второе место. Позже выходит его третий альбом под названием «3».

В 2005-м выпускает четвёртый альбом «Festa», три песни с которого Алекс написал в сотрудничестве с Маурицио Костанцо.

2006 год и опять Сан-Ремо. На этот раз он занял третье место с песней «…Solo con te».

29 сентября 2007 года он участвует в передаче MTV Unplugged, которая проводилась в Италии всего второй раз. Он исполняет новые и старые хиты под аккомпанемент акустической гитары. Программа была выпущена в эфир 28 января 2008, а 1 февраля выходит DVD с концертом, а также подарочное издание CD + DVD.

25 сентября 2009 был выпущен новый сингл «Piove» (Дождь), а 6 ноября выходит новый альбом «.23».

Дискография

Официальные альбомы
 1998 — It.Pop
 2000 — La vasca
 2003 — 3
 2005 — Festa
 2008 — Alex Britti MTV Unplugged
 2009 — .23
 2011 — Best Of
 2013 - Bene cosi
 2015 - In nome dell'amore - Volume 1
 2017 - In nome dell'amore - Volume 2

Неофициальные альбомы

 1992 — Alex Britti

Синглы
 1998 — Solo una volta (o tutta la vita)
 1998 — Gelido
 1999 — Oggi sono io
 1999 — Mi piaci
 2000 — Una su 1.000.000
 2000 — La vasca
 2001 — Sono contento
 2001 — Io con la ragazza mia tu con la ragazza tua
 2003 — 7000 caffè
 2003 — La Vita sognata
 2003 — Lo zingaro felice
 2005 — Prendere o lasciare
 2006 — Festa
 2006 — Quanto ti amo
 2006 — Solo con te
 2006 — Notte di mezza estate
 2008 — Milano
 2008 — L'isola che non c'è
 2009 — Piove
 2009 — Buona fortuna
 2009 — L'attimo per sempre
 2011 — Immaturi

Примечания

Ссылки

  Официальный сайт

Родившиеся 23 августа
Родившиеся в 1968 году
Авторы-исполнители Италии


text:
Shin Bet arrests Israeli Arab who tried to join ISIS in Syria
Keywords:ISISIsraelSyria
Posted By: sabina 30.06.2016
A resident of Umm El-Fahm who allegedly attempted to travel to Syria and join ISIS was arrested by Turkish authorities and returned to Israel on June 10, when the Shin Bet (Israel Security Agency) took him into custody.
Ibrahim Agbariya, 23, was detained upon arrival at Ben-Gurion Airport after being deported from Turkey.
During interrogation, the Shin Bet learned the suspect had spent recent months viewing videos and content produced by ISIS, and became enamored with its jihadist ideology. He then "decided to go to Syria to join combat in the ranks of the organization," the Shin Bet said in a statement.
Agbariya gathered information on the Internet on how to get to Syria and took off for Istanbul in June, before flying on to the Turkish city of Gaziantep near the Syrian border. It was there that he was arrested by Turkish police, questioned, and deported to Israel.
Agbariya left a letter to his family explaining his intention to "join the jihad," the Shin Bet said. "Some of the people he knew were aware of Agbariya's intentions, and supported the idea," the agency added.
The latest arrest underlines the risk posed by the phenomenon of Israeli Arabs traveling to the Syrian combat zone after being exposed to online propaganda, the Shin Bet said. Volunteers undergo military training and acquire knowledge that could later be used in terrorist attacks.
Agrabiya was charged by Haifa District prosecutors on Wednesday.
Source: www.jpost.com
Russia: More than 3,200 Russians joined ISIS in Syria and Iraq
Spotlight: Turkey and Russia on chessboard for a play on Syrian Kurds issue: analysts
'BDS doesn't want a better Israel — it wants no Israel'
Azerbaijan's ex-military official does not rule out 'Armenian involvement' in assassination attempt on Israeli defense minister
Be the first to comment at "Shin Bet arrests Israeli Arab who tried to join ISIS in Syria"


On December 27, 2004, JESSE F. MELLOTT of Brooklyn, beloved husband of the late Virginia P. Mellott, dear brother of Hilda, Charles, and Robert Mellott and the late Madeline, Clarence and John Mellott, dear brother-in-law of Sue and Clyde Leonardi. Also survived by many nieces and nephews. Relatives and friends are invited to call at the GARY L. KAUFMAN FUNERAL HOME AT MEADOWRIDGE MEMORIAL PARK, INC., 7250 Washington Blvd., Elkridge (exit 6 off of Rte 100), on Thursday, 3 to 5 and 7 to 9 P.M. and to attend Funeral Services in the Vermillion Chapel on Friday, December 31, at 2:30 P.M. Interment Meadowridge Memorial Park.


One of the major attractions of the Butler Building, when completely renovated, will be the heritage wall. There are so many families and organizations that have been in Aitkin for many years as well as people who, although they have moved, fondly remember their years here.
The Heritage Wall will feature 4" wide x 2" high brass plaques all along the common walkway on the first floor. You can memorialize a friend, a family member, a store, an event, whatever you want people visiting the Butler building to experience. You can have up to three lines, 15 letters per line. Each plaque is $1,000 in perpetuity.
One of the ways you can celebrate your appreciation of Aitkin and the Butler building is to invest in a heritage plaque. There are already a number of them on exhibit in the building on the wall to your left, just as you walk in, opposite The Beanery. They are 2" high x 4" wide and are brass with the objective to have memories live on forever. Some of the current plaques already up there are "Memory of Floyd Hogan", "Malvina Newstrom Call", "Ruth Erickson Blanich", "Riverwood Healthcare Center", "Jean B. Madson (daughter of Vern & Ruth Butler)" and "Dorothy Allen". These plaques memorialize a friend, a family member, a store, an event, a business … whose memory do YOU want to live on? Only $1,000 to have a memory last forever. Create a forever memory through the purchase of one of these beautiful plaques.
since no goods or services are rendered.


Like most websites, when you use the Web Services we collect "Other Information" which does not, on its own, reveal your specific identity or directly relate to you as an individual. We use this Other Information to provide you with a personalized Web Service experience, to deliver the information, services, resources and products that are most relevant and useful to you and as described below.
In some instances, we may combine the Other Information we collect with Personal Information to better understand your interests and to help us maintain data accuracy and provide and enhance the Web Service. If we combine Other Information with Personal Information, we will treat the combined information as Personal Information.
We may require you to register before purchasing or using certain Web Services. You may be asked to provide us with Personal Information to complete the registration. We may also collect Personal and/or Other Information from your use of the Web Services as well as other activities such as account creation, account login, progress through certain content, submission of forms, notes, questions and surveys, or other transactions.
We may use information from automated tracking technologies on third party websites, other data you may have made publicly available or data provided by third party sources, such as marketing opt-in lists or data aggregators. When your use of the Web Services is through a subscription obtained by your employer, healthcare provider, health plan or other organization, we may receive certain information about you from that subscribing organization.
We use various third-party vendors for risk analytics and compliance purposes, to track and analyze usage and volume statistical information of our Web Services and to process commercial transactions. We may use services provided and/or hosted by third parties, such as analytics services, to assist in providing our services and to help us understand how you use the Web Services. This information about your use of Web Services (including your IP address) may be transmitted to, and stored at, our data warehouses or our vendors'.
We may send you emails which could contain certain cookies, web beacons and tokens which enable us to, among other things, determine whether you have opened or forwarded the email and/or clicked on links contained in the email. We use this information to customize messages you may receive, even after you have closed the email, and to determine whether you have made any inquiries or purchases in response to the email. These technical methods may enable us or our third party vendors to collect and use information in a form that is personally identifiable.
Our partners may collect information directly from your device, such as your IP address, device ID and information about your browser or operating system, may combine the Personal Information and Other Information we have about you with information from other sources, and may place or recognize a unique cookie on your browser.
Certain searches/queries that you conducted via our sites, the activities performed, and actions taken on our sites.
Web Beacons. We use Web beacons, HTML5 local storage and other similar technologies to (i) manage access to, and use of, the Web Services, (ii) provide personalization, and (iii) help us understand what services our visitors are accessing and how much time they spend accessing them.
Device Information. We may collect information about the computer, mobile phone, tablet or other device you use to access the Web Services. Such information may include your IP address, geolocation information, unique device identifiers, browser type, browser language and other transactional information.
Targeting and Advertising Cookies. These are cookies that record your visits to the Web Services, the pages you have visited and the links you have followed. Our targeting and advertising cookies collect information about your Web Services browsing history in order to make advertising of our services more relevant to you and your interests. They are also used to limit the number of times you see an advertisement as well as help measure the effectiveness of an advertising campaign. Please see our "Interest-based Advertising" section below for more information about your choices regarding our, and our vendors', use of these cookies.
The information stored in the Cookies from our Web Services (i) is used internally by us and our affiliates, and (ii) may be used and managed by third parties at our request to provide services, including advertising services relating to our products and services, and to improve the Web Services and the experience of the user browsing our Web Services.
Engage in and Process Transactions. We may use Personal Information along with financial and payment information to engage in and process your transactions. We may also use your Personal Information to keep you updated about the status of your orders.
Provide and Personalize the Web Services. We may use your Personal Information to help create and personalize content on the Web Services, facilitate your use of the Web Services, improve quality, track marketing campaign responsiveness, and evaluate page response rates.
Reporting. We may use your Personal Information to create utilization reports regarding the usage of the Web Services.
Provide Targeted Advertising. We may use your Personal Information, including demographic preference and other similar information, to allow targeted advertising of our services to you. This means users see advertising that is most likely to interest them. This improves both the viewer's experience and the effectiveness of the ads. Please see our "Interest-based Advertising" section below for more information.
Research, Development and Internal Purposes. We may use your Personal Information for internal purposes such as system administration, risk analytics, compliance, auditing, and data analysis. We may use your Personal Information for internal research and development purposes, to create new products and services, and to test and improve the quality of our Web Services.
Customer Support. If you contact us for customer support, we may ask you to provide Personal Information to verify your identity and other information about your computer, mobile phone, tablet or other device and about the issue you are trying to resolve. This information may be necessary to help us address the issue you are experiencing. We may record your requests and our responses for quality control purposes.
Provide The Presence Of Drapery Online Communities. For some Web Services, we may make chat rooms, forums, message boards, or news groups available to you. Please remember that any information disclosed in these forums is public. We encourage you to exercise caution when disclosing Personal Information in these forums, as this information is made available to other users. Do not disclose information in these public forums that might be considered confidential or proprietary or that you do not wish to be publicly available or that you are prohibited from disclosing.
Legal Obligations. We may disclose your Personal Information as we believe necessary or appropriate: (i) under applicable law, including laws outside your country of residence, (ii) to comply with legal process, either within or outside your country of residence, (iii) to respond to requests from public and government authorities, including public and government authorities outside your country of residence, for national security and/or law enforcement purposes, (iv) to enforce our terms and conditions, and (v) to allow us to pursue available remedies or limit the damages that we may sustain.
Service Providers. We may disclose your Personal Information to third parties that perform certain functions on our behalf, such as to provide analytics and site usage information, process transactions and payments, provide outsourced help with the operations of the Web Service functions, provide marketing and promotional assistance, and provide other services related to the operation of our business. In such cases, however, we require that such authorized third-party service providers institute safeguards to protect the confidentiality of your Personal Information.
Marketing Partners and Vendors. We may share your Personal Information with third parties to develop, deliver and report on targeted advertising of our services either online or in emails sent by us, or our marketing partners, to you. Please see our "Interest-based Advertising" section for more information on how these third parties may use your information. We may also share your Personal Information with third parties for suppression purposes so that you will not receive advertising materials or otherwise be contacted by such vendors if you have requested not to receive marketing communications from us or if certain marketing campaigns are not otherwise applicable to you. In such cases, however, we require that such authorized third-party service providers institute safeguards to protect the confidentiality of your Personal Information and use it only for suppression purposes.
Subscribing Organizations. When your use of the Web Services is through a subscription obtained by your employer, healthcare provider, health plan or other organization, that subscribing organization may be provided access to your Personal Information and certain utilization data about the Web Services consistent with the terms of such organization's subscription agreement.
Accrediting Organizations: To the extent a Web Service is capable of tracking and redeeming credits for professional accreditation, such as Continuing Medical Education (CME) credits, upon your valid request through the Web Services, we may disclose Personal Information to accrediting organizations so that you may redeem your accumulated CME credits.
Professional Organizations. If you are a member of a professional organization, including any professional association or society, and you register for or purchase a subscription to a Web Service through a promotion offered to the members of such professional organization, then we may share your Personal Information with such professional organization.
We may share Other Information we collect for any purpose unless prohibited by law. We may share aggregated, anonymous Other Information, such as aggregated statistics, usage information and demographic data with third parties, including advisors and advertisers. When we provide this Other Information, we perform appropriate procedures so that the data does not identify you.
Some of our Web Services may provide public forums or other areas where you can communicate with others and publicly post information. All the information (including any of your personal data) that you post will not be private and will be accessible to anyone with Internet access, and may be read, collected, and used by others. You should use caution when posting any personal data to these public areas.
You may opt out of having your Personal Information (i) collected by us, (ii) used by us for certain secondary purposes, or (iii) used by us to send you promotional correspondences, by contacting us via postal mail, email, or telephone at the addresses and telephone number below, or by unchecking the appropriate box while accessing your email preferences (if available); provided, however, (a) if you do not provide such information to us then you may be precluded from accessing and using the Web Services or using certain Web Services features, and (b) you may still receive automatically-generated product emails regarding the maintenance of your account, such as emails concerning passwords or suspension or expiration of your account, to the extent applicable.
There are additional means to correct, amend or delete (if applicable) your Personal Information or update your preferences. For example, you may update your preferences at any time. Or, if you no longer wish to receive information about our products or services, you may update your account preferences (where available), check the appropriate box when registering and/or utilize the "unsubscribe" mechanism within the communications that you receive from us.
Residents of California who have provided Personal Information to us have the right to request from us a list of the third parties with whom we have shared certain Personal Information, as defined under California Civil Code Section 1798.90(e) during the preceding year for third party direct marketing purposes. We will respond to one request per California resident per calendar year, in accordance with California Civil Code Section 1798.83.


text:
Project 88 Exhibitions
To Amol Patil, a conceptual and performance artist based in Mumbai, his artwork is an ongoing excavation and investigation to recapture the pulsating, vibrating movements and sound of the 'chawl' architecture and habitus. Amol grew up in an area of 'chawls', a built form specific to Bombay/Mumbai 5 storey social housing for mill and factory workers that were built in the early 1900s, with many tenements fit close together, long verandahs connecting every door, with children running on floorboards above, the swirls of gossiping voices from dimly lit tables under which men gather to play carrom, the woman with a walking stick, the sound of termites eating into wood, wedding festivities, and rhythmically creaking beds.
In his recent work Amol is expanding his research on the construct of urbanization and invisibility of the working class in emergent urban imaginaries. His project is to build counter-memory and contesting narratives that describe and disturb the relationship between humans and landscapes.
Amol K Patil (b. 1987, Mumbai) has shown at Yokohama Triennale (Yokohama, 2020); Goethe-Institute / Max Mueller Bhavan (Mumbai, 2019), Goethe-Institut / Max Mueller Bhavan (New Delhi, 2019), The Showroom (London, 2018), Tensta konsthall (Stockholm, 2017), Pompidou (Paris, 2017), Pune Biennale Habit-co Habit (Pune, 2017), New Galerie (Paris, 2016), Dakar Biennale (Dakar, 2016), Myymälä2 (Helsinki, 2015); Japan Foundation (Delhi, 2015); Stedelijk Museum (Amsterdam, 2015), International Artists Initiated, (Glasgow, 2014); Para Site, (Hong Kong, 2014); Kadist Art Foundation, (Paris, 2013).


Search files for one or more search terms at the same time via a very friendly interface. Optionally search subfolders too! Just point to the folder you want to search, provide a list of search terms, then select SEARCH. Results of your most recent search are saved to a file called FOUND.TXT. If you want to view, edit, or save it as another name, you can do so after the search process is complete, or you can select View Last Search Results. There are also options to show the line number or found text in the found results. If you are searching for just a few terms in a few files, the process will take just seconds to complete, regardless of whether or not you used these additional features. However, use of the options to show the text and/or line number where the search term was found can significantly slow the search process (since the program then has to search the files line by line for each term). If you have thousands of search terms and/or thousands of files, the process can go from being a 20 minute routine to one that may take a few hours -- again, depending on the number of terms and/or files you are searching for, the size of each file, and, of course, the speed of your computer.