text:
package java.nio;

import com.google.gwt.corp.compatibility.Endianness;
import com.google.gwt.corp.compatibility.StringToByteBuffer;

/** A buffer for bytes.
 *

 * A byte buffer can be created in either one of the following ways:
 *

 *

 *
{@link #allocate(int) Allocate} a new byte array and create a buffer based on it;

 *
{@link #allocateDirect(int) Allocate} a memory block and create a direct buffer based on it;

 *
{@link #wrap(byte[]) Wrap} an existing byte array to create a new buffer.

 *

 * @since Android 1.0 */
public abstract class ByteBuffer extends Buffer implements Comparable<ByteBuffer>, StringToByteBuffer {

	/** Creates a byte buffer based on a newly allocated byte array.
	 *
	 * @param capacity the capacity of the new buffer
	 * @return the created byte buffer.
	 * @throws IllegalArgumentException if {@code capacity < 0}.
	 * @since Android 1.0 */
	public static ByteBuffer allocate (int capacity) {
		if (capacity < 0) {
			throw new IllegalArgumentException();
		}
		return BufferFactory.newByteBuffer(capacity);
	}

	/** Creates a direct byte buffer based on a newly allocated memory block.
	 *
	 * @param capacity the capacity of the new buffer
	 * @return the created byte buffer.
	 * @throws IllegalArgumentException if {@code capacity < 0}.
	 * @since Android 1.0 */
	public static ByteBuffer allocateDirect (int capacity) {
		if (capacity < 0) {
			throw new IllegalArgumentException();
		}
		return BufferFactory.newDirectByteBuffer(capacity);
	}

	/** Creates a new byte buffer by wrapping the given byte array.
	 *

	 * Calling this method has the same effect as {@code wrap(array, 0, array.length)}.
	 *

	 *
	 * @param array the byte array which the new buffer will be based on
	 * @return the created byte buffer.
	 * @since Android 1.0 */
	public static ByteBuffer wrap (byte[] array) {
		return BufferFactory.newByteBuffer(array);
	}

	/** Creates a new byte buffer by wrapping the given byte array.
	 *

	 * The new buffer's position will be {@code start}, limit will be {@code start + len}, capacity will be the length of the array.
	 *

	 *
	 * @param array the byte array which the new buffer will be based on.
	 * @param start the start index, must not be negative and not greater than {@code array.length}.
	 * @param len the length, must not be negative and not greater than {@code array.length - start}.
	 * @return the created byte buffer.
	 * @exception IndexOutOfBoundsException if either {@code start} or {@code len} is invalid.
	 * @since Android 1.0 */
	public static ByteBuffer wrap (byte[] array, int start, int len) {
		int length = array.length;
		if ((start < 0) || (len < 0) || ((long)start + (long)len > length)) {
			throw new IndexOutOfBoundsException();
		}

		ByteBuffer buf = BufferFactory.newByteBuffer(array);
		buf.position = start;
		buf.limit = start + len;

		return buf;
	}

	/** The byte order of this buffer, default is {@code BIG_ENDIAN}. */
	Endianness order = Endianness.BIG_ENDIAN;

	/** Constructs a {@code ByteBuffer} with given capacity.
	 *
	 * @param capacity the capacity of the buffer. */
	ByteBuffer (int capacity) {
		super(capacity);
	}

	/** Returns the byte array which this buffer is based on, if there is one.
	 *
	 * @return the byte array which this buffer is based on.
	 * @exception ReadOnlyBufferException if this buffer is based on a read-only array.
	 * @exception UnsupportedOperationException if this buffer is not based on an array.
	 * @since Android 1.0 */
	public final byte[] array () {
		return protectedArray();
	}

	/** Returns the offset of the byte array which this buffer is based on, if there is one.
	 *

	 * The offset is the index of the array which corresponds to the zero position of the buffer.
	 *

	 *
	 * @return the offset of the byte array which this buffer is based on.
	 * @exception ReadOnlyBufferException if this buffer is based on a read-only array.
	 * @exception UnsupportedOperationException if this buffer is not based on an array.
	 * @since Android 1.0 */
	public final int arrayOffset () {
		return protectedArrayOffset();
	}

	/** Returns a char buffer which is based on the remaining content of this byte buffer.
	 *

	 * The new buffer's position is zero, its limit and capacity is the number of remaining bytes divided by two, and its mark is
	 * not set. The new buffer's read-only property and byte order are the same as this buffer's. The new buffer is direct if this
	 * byte buffer is direct.
	 *

	 *

	 * The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the
	 * other. The two buffer's position, limit and mark are independent.
	 *

	 *
	 * @return a char buffer which is based on the content of this byte buffer.
	 * @since Android 1.0 */
	public abstract CharBuffer asCharBuffer ();

	/** Returns a double buffer which is based on the remaining content of this byte buffer.
	 *

	 * The new buffer's position is zero, its limit and capacity is the number of remaining bytes divided by eight, and its mark is
	 * not set. The new buffer's read-only property and byte order are the same as this buffer's. The new buffer is direct if this
	 * byte buffer is direct.
	 *

	 *

	 * The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the
	 * other. The two buffer's position, limit and mark are independent.
	 *

	 *
	 * @return a double buffer which is based on the content of this byte buffer.
	 * @since Android 1.0 */
	public abstract DoubleBuffer asDoubleBuffer ();

	/** Returns a float buffer which is based on the remaining content of this byte buffer.
	 *

	 * The new buffer's position is zero, its limit and capacity is the number of remaining bytes divided by four, and its mark is
	 * not set. The new buffer's read-only property and byte order are the same as this buffer's. The new buffer is direct if this
	 * byte buffer is direct.
	 *

	 *

	 * The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the
	 * other. The two buffer's position, limit and mark are independent.
	 *

	 *
	 * @return a float buffer which is based on the content of this byte buffer.
	 * @since Android 1.0 */
	public abstract FloatBuffer asFloatBuffer ();

	/** Returns a int buffer which is based on the remaining content of this byte buffer.
	 *

	 * The new buffer's position is zero, its limit and capacity is the number of remaining bytes divided by four, and its mark is
	 * not set. The new buffer's read-only property and byte order are the same as this buffer's. The new buffer is direct if this
	 * byte buffer is direct.
	 *

	 *

	 * The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the
	 * other. The two buffer's position, limit and mark are independent.
	 *

	 *
	 * @return a int buffer which is based on the content of this byte buffer.
	 * @since Android 1.0 */
	public abstract IntBuffer asIntBuffer ();

	/** Returns a long buffer which is based on the remaining content of this byte buffer.
	 *

	 * The new buffer's position is zero, its limit and capacity is the number of remaining bytes divided by eight, and its mark is
	 * not set. The new buffer's read-only property and byte order are the same as this buffer's. The new buffer is direct if this
	 * byte buffer is direct.
	 *

	 *

	 * The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the
	 * other. The two buffer's position, limit and mark are independent.
	 *

	 *
	 * @return a long buffer which is based on the content of this byte buffer.
	 * @since Android 1.0 */
	public abstract LongBuffer asLongBuffer ();

	/** Returns a read-only buffer that shares its content with this buffer.
	 *

	 * The returned buffer is guaranteed to be a new instance, even if this buffer is read-only itself. The new buffer's position,
	 * limit, capacity and mark are the same as this buffer.
	 *

	 *

	 * The new buffer shares its content with this buffer, which means this buffer's change of content will be visible to the new
	 * buffer. The two buffer's position, limit and mark are independent.
	 *

	 *
	 * @return a read-only version of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer asReadOnlyBuffer ();

	/** Returns a short buffer which is based on the remaining content of this byte buffer.
	 *

	 * The new buffer's position is zero, its limit and capacity is the number of remaining bytes divided by two, and its mark is
	 * not set. The new buffer's read-only property and byte order are the same as this buffer's. The new buffer is direct if this
	 * byte buffer is direct.
	 *

	 *

	 * The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the
	 * other. The two buffer's position, limit and mark are independent.
	 *

	 *
	 * @return a short buffer which is based on the content of this byte buffer.
	 * @since Android 1.0 */
	public abstract ShortBuffer asShortBuffer ();

	/** Compacts this byte buffer.
	 *

	 * The remaining bytes will be moved to the head of the buffer, starting from position zero. Then the position is set to
	 * {@code remaining()}; the limit is set to capacity; the mark is cleared.
	 *

	 *
	 * @return this buffer.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer compact ();

	/** Compares the remaining bytes of this buffer to another byte buffer's remaining bytes.
	 *
	 * @param otherBuffer another byte buffer.
	 * @return a negative value if this is less than {@code other}; 0 if this equals to {@code other}; a positive value if this is
	 *         greater than {@code other}.
	 * @exception ClassCastException if {@code other} is not a byte buffer.
	 * @since Android 1.0 */
	public int compareTo (ByteBuffer otherBuffer) {
		int compareRemaining = (remaining() < otherBuffer.remaining()) ? remaining() : otherBuffer.remaining();
		int thisPos = position;
		int otherPos = otherBuffer.position;
		byte thisByte, otherByte;
		while (compareRemaining > 0) {
			thisByte = get(thisPos);
			otherByte = otherBuffer.get(otherPos);
			if (thisByte != otherByte) {
				return thisByte < otherByte ? -1 : 1;
			}
			thisPos++;
			otherPos++;
			compareRemaining--;
		}
		return remaining() - otherBuffer.remaining();
	}

	/** Returns a duplicated buffer that shares its content with this buffer.
	 *

	 * The duplicated buffer's position, limit, capacity and mark are the same as this buffer's. The duplicated buffer's read-only
	 * property and byte order are the same as this buffer's too.
	 *

	 *

	 * The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the
	 * other. The two buffer's position, limit and mark are independent.
	 *

	 *
	 * @return a duplicated buffer that shares its content with this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer duplicate ();

	/** Checks whether this byte buffer is equal to another object.
	 *

	 * If {@code other} is not a byte buffer then {@code false} is returned. Two byte buffers are equal if and only if their
	 * remaining bytes are exactly the same. Position, limit, capacity and mark are not considered.
	 *

	 *
	 * @param other the object to compare with this byte buffer.
	 * @return {@code true} if this byte buffer is equal to {@code other}, {@code false} otherwise.
	 * @since Android 1.0 */
	public boolean equals (Object other) {
		if (!(other instanceof ByteBuffer)) {
			return false;
		}
		ByteBuffer otherBuffer = (ByteBuffer)other;

		if (remaining() != otherBuffer.remaining()) {
			return false;
		}

		int myPosition = position;
		int otherPosition = otherBuffer.position;
		boolean equalSoFar = true;
		while (equalSoFar && (myPosition < limit)) {
			equalSoFar = get(myPosition++) == otherBuffer.get(otherPosition++);
		}

		return equalSoFar;
	}

	/** Returns the byte at the current position and increases the position by 1.
	 *
	 * @return the byte at the current position.
	 * @exception BufferUnderflowException if the position is equal or greater than limit.
	 * @since Android 1.0 */
	public abstract byte get ();

	/** Reads bytes from the current position into the specified byte array and increases the position by the number of bytes read.
	 *

	 * Calling this method has the same effect as {@code get(dest, 0, dest.length)}.
	 *

	 *
	 * @param dest the destination byte array.
	 * @return this buffer.
	 * @exception BufferUnderflowException if {@code dest.length} is greater than {@code remaining()}.
	 * @since Android 1.0 */
	public ByteBuffer get (byte[] dest) {
		return get(dest, 0, dest.length);
	}

	/** Reads bytes from the current position into the specified byte array, starting at the specified offset, and increases the
	 * position by the number of bytes read.
	 *
	 * @param dest the target byte array.
	 * @param off the offset of the byte array, must not be negative and not greater than {@code dest.length}.
	 * @param len the number of bytes to read, must not be negative and not greater than {@code dest.length - off}
	 * @return this buffer.
	 * @exception IndexOutOfBoundsException if either {@code off} or {@code len} is invalid.
	 * @exception BufferUnderflowException if {@code len} is greater than {@code remaining()}.
	 * @since Android 1.0 */
	public ByteBuffer get (byte[] dest, int off, int len) {
		int length = dest.length;
		if ((off < 0) || (len < 0) || ((long)off + (long)len > length)) {
			throw new IndexOutOfBoundsException();
		}

		if (len > remaining()) {
			throw new BufferUnderflowException();
		}
		for (int i = off; i < off + len; i++) {
			dest[i] = get();
		}
		return this;
	}

	/** Returns the byte at the specified index and does not change the position.
	 *
	 * @param index the index, must not be negative and less than limit.
	 * @return the byte at the specified index.
	 * @exception IndexOutOfBoundsException if index is invalid.
	 * @since Android 1.0 */
	public abstract byte get (int index);

	/** Returns the char at the current position and increases the position by 2.
	 *

	 * The 2 bytes starting at the current position are composed into a char according to the current byte order and returned.
	 *

	 *
	 * @return the char at the current position.
	 * @exception BufferUnderflowException if the position is greater than {@code limit - 2}.
	 * @since Android 1.0 */
	public abstract char getChar ();

	/** Returns the char at the specified index.
	 *

	 * The 2 bytes starting from the specified index are composed into a char according to the current byte order and returned. The
	 * position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 2}.
	 * @return the char at the specified index.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @since Android 1.0 */
	public abstract char getChar (int index);

	/** Returns the double at the current position and increases the position by 8.
	 *

	 * The 8 bytes starting from the current position are composed into a double according to the current byte order and returned.
	 *

	 *
	 * @return the double at the current position.
	 * @exception BufferUnderflowException if the position is greater than {@code limit - 8}.
	 * @since Android 1.0 */
	public abstract double getDouble ();

	/** Returns the double at the specified index.
	 *

	 * The 8 bytes starting at the specified index are composed into a double according to the current byte order and returned. The
	 * position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 8}.
	 * @return the double at the specified index.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @since Android 1.0 */
	public abstract double getDouble (int index);

	/** Returns the float at the current position and increases the position by 4.
	 *

	 * The 4 bytes starting at the current position are composed into a float according to the current byte order and returned.
	 *

	 *
	 * @return the float at the current position.
	 * @exception BufferUnderflowException if the position is greater than {@code limit - 4}.
	 * @since Android 1.0 */
	public abstract float getFloat ();

	/** Returns the float at the specified index.
	 *

	 * The 4 bytes starting at the specified index are composed into a float according to the current byte order and returned. The
	 * position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 4}.
	 * @return the float at the specified index.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @since Android 1.0 */
	public abstract float getFloat (int index);

	/** Returns the int at the current position and increases the position by 4.
	 *

	 * The 4 bytes starting at the current position are composed into a int according to the current byte order and returned.
	 *

	 *
	 * @return the int at the current position.
	 * @exception BufferUnderflowException if the position is greater than {@code limit - 4}.
	 * @since Android 1.0 */
	public abstract int getInt ();

	/** Returns the int at the specified index.
	 *

	 * The 4 bytes starting at the specified index are composed into a int according to the current byte order and returned. The
	 * position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 4}.
	 * @return the int at the specified index.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @since Android 1.0 */
	public abstract int getInt (int index);

	/** Returns the long at the current position and increases the position by 8.
	 *

	 * The 8 bytes starting at the current position are composed into a long according to the current byte order and returned.
	 *

	 *
	 * @return the long at the current position.
	 * @exception BufferUnderflowException if the position is greater than {@code limit - 8}.
	 * @since Android 1.0 */
	public abstract long getLong ();

	/** Returns the long at the specified index.
	 *

	 * The 8 bytes starting at the specified index are composed into a long according to the current byte order and returned. The
	 * position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 8}.
	 * @return the long at the specified index.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @since Android 1.0 */
	public abstract long getLong (int index);

	/** Returns the short at the current position and increases the position by 2.
	 *

	 * The 2 bytes starting at the current position are composed into a short according to the current byte order and returned.
	 *

	 *
	 * @return the short at the current position.
	 * @exception BufferUnderflowException if the position is greater than {@code limit - 2}.
	 * @since Android 1.0 */
	public abstract short getShort ();

	/** Returns the short at the specified index.
	 *

	 * The 2 bytes starting at the specified index are composed into a short according to the current byte order and returned. The
	 * position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 2}.
	 * @return the short at the specified index.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @since Android 1.0 */
	public abstract short getShort (int index);

	/** Indicates whether this buffer is based on a byte array and provides read/write access.
	 *
	 * @return {@code true} if this buffer is based on a byte array and provides read/write access, {@code false} otherwise.
	 * @since Android 1.0 */
	public final boolean hasArray () {
		return protectedHasArray();
	}

	/** Calculates this buffer's hash code from the remaining chars. The position, limit, capacity and mark don't affect the hash
	 * code.
	 *
	 * @return the hash code calculated from the remaining bytes.
	 * @since Android 1.0 */
	public int hashCode () {
		int myPosition = position;
		int hash = 0;
		while (myPosition < limit) {
			hash = hash + get(myPosition++);
		}
		return hash;
	}

	/** Indicates whether this buffer is direct.
	 *
	 * @return {@code true} if this buffer is direct, {@code false} otherwise.
	 * @since Android 1.0 */
	public abstract boolean isDirect ();

	/** Returns the byte order used by this buffer when converting bytes from/to other primitive types.
	 *

	 * The default byte order of byte buffer is always {@link ByteOrder#BIG_ENDIAN BIG_ENDIAN}
	 *

	 *
	 * @return the byte order used by this buffer when converting bytes from/to other primitive types.
	 * @since Android 1.0 */
	public final ByteOrder order () {
		return order == Endianness.BIG_ENDIAN ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
	}

	/** Sets the byte order of this buffer.
	 *
	 * @param byteOrder the byte order to set. If {@code null} then the order will be {@link ByteOrder#LITTLE_ENDIAN LITTLE_ENDIAN}
	 *           .
	 * @return this buffer.
	 * @see ByteOrder
	 * @since Android 1.0 */
	public final ByteBuffer order (ByteOrder byteOrder) {
		return orderImpl(byteOrder);
	}

	ByteBuffer orderImpl (ByteOrder byteOrder) {
		order = byteOrder == ByteOrder.BIG_ENDIAN ? Endianness.BIG_ENDIAN : Endianness.LITTLE_ENDIAN;
		return this;
	}

	/** Child class implements this method to realize {@code array()}.
	 *
	 * @see #array()
	 * @since Android 1.0 */
	abstract byte[] protectedArray ();

	/** Child class implements this method to realize {@code arrayOffset()}.
	 *
	 * @see #arrayOffset()
	 * @since Android 1.0 */
	abstract int protectedArrayOffset ();

	/** Child class implements this method to realize {@code hasArray()}.
	 *
	 * @see #hasArray()
	 * @since Android 1.0 */
	abstract boolean protectedHasArray ();

	/** Writes the given byte to the current position and increases the position by 1.
	 *
	 * @param b the byte to write.
	 * @return this buffer.
	 * @exception BufferOverflowException if position is equal or greater than limit.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer put (byte b);

	/** Writes bytes in the given byte array to the current position and increases the position by the number of bytes written.
	 *

	 * Calling this method has the same effect as {@code put(src, 0, src.length)}.
	 *

	 *
	 * @param src the source byte array.
	 * @return this buffer.
	 * @exception BufferOverflowException if {@code remaining()} is less than {@code src.length}.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public final ByteBuffer put (byte[] src) {
		return put(src, 0, src.length);
	}

	/** Writes bytes in the given byte array, starting from the specified offset, to the current position and increases the position
	 * by the number of bytes written.
	 *
	 * @param src the source byte array.
	 * @param off the offset of byte array, must not be negative and not greater than {@code src.length}.
	 * @param len the number of bytes to write, must not be negative and not greater than {@code src.length - off}.
	 * @return this buffer.
	 * @exception BufferOverflowException if {@code remaining()} is less than {@code len}.
	 * @exception IndexOutOfBoundsException if either {@code off} or {@code len} is invalid.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public ByteBuffer put (byte[] src, int off, int len) {
		int length = src.length;
		if ((off < 0) || (len < 0) || ((long)off + (long)len > length)) {
			throw new IndexOutOfBoundsException();
		}

		if (len > remaining()) {
			throw new BufferOverflowException();
		}
		for (int i = off; i < off + len; i++) {
			put(src[i]);
		}
		return this;
	}

	/** Writes all the remaining bytes of the {@code src} byte buffer to this buffer's current position, and increases both buffers'
	 * position by the number of bytes copied.
	 *
	 * @param src the source byte buffer.
	 * @return this buffer.
	 * @exception BufferOverflowException if {@code src.remaining()} is greater than this buffer's {@code remaining()}.
	 * @exception IllegalArgumentException if {@code src} is this buffer.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public ByteBuffer put (ByteBuffer src) {
		if (src == this) {
			throw new IllegalArgumentException();
		}
		if (src.remaining() > remaining()) {
			throw new BufferOverflowException();
		}
		byte[] contents = new byte[src.remaining()];
		src.get(contents);
		put(contents);
		return this;
	}

	/** Write a byte to the specified index of this buffer without changing the position.
	 *
	 * @param index the index, must not be negative and less than the limit.
	 * @param b the byte to write.
	 * @return this buffer.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer put (int index, byte b);

	/** Writes the given char to the current position and increases the position by 2.
	 *

	 * The char is converted to bytes using the current byte order.
	 *

	 *
	 * @param value the char to write.
	 * @return this buffer.
	 * @exception BufferOverflowException if position is greater than {@code limit - 2}.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putChar (char value);

	/** Writes the given char to the specified index of this buffer.
	 *

	 * The char is converted to bytes using the current byte order. The position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 2}.
	 * @param value the char to write.
	 * @return this buffer.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putChar (int index, char value);

	/** Writes the given double to the current position and increases the position by 8.
	 *

	 * The double is converted to bytes using the current byte order.
	 *

	 *
	 * @param value the double to write.
	 * @return this buffer.
	 * @exception BufferOverflowException if position is greater than {@code limit - 8}.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putDouble (double value);

	/** Writes the given double to the specified index of this buffer.
	 *

	 * The double is converted to bytes using the current byte order. The position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 8}.
	 * @param value the double to write.
	 * @return this buffer.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putDouble (int index, double value);

	/** Writes the given float to the current position and increases the position by 4.
	 *

	 * The float is converted to bytes using the current byte order.
	 *

	 *
	 * @param value the float to write.
	 * @return this buffer.
	 * @exception BufferOverflowException if position is greater than {@code limit - 4}.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putFloat (float value);

	/** Writes the given float to the specified index of this buffer.
	 *

	 * The float is converted to bytes using the current byte order. The position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 4}.
	 * @param value the float to write.
	 * @return this buffer.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putFloat (int index, float value);

	/** Writes the given int to the current position and increases the position by 4.
	 *

	 * The int is converted to bytes using the current byte order.
	 *

	 *
	 * @param value the int to write.
	 * @return this buffer.
	 * @exception BufferOverflowException if position is greater than {@code limit - 4}.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putInt (int value);

	/** Writes the given int to the specified index of this buffer.
	 *

	 * The int is converted to bytes using the current byte order. The position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 4}.
	 * @param value the int to write.
	 * @return this buffer.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putInt (int index, int value);

	/** Writes the given long to the current position and increases the position by 8.
	 *

	 * The long is converted to bytes using the current byte order.
	 *

	 *
	 * @param value the long to write.
	 * @return this buffer.
	 * @exception BufferOverflowException if position is greater than {@code limit - 8}.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putLong (long value);

	/** Writes the given long to the specified index of this buffer.
	 *

	 * The long is converted to bytes using the current byte order. The position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 8}.
	 * @param value the long to write.
	 * @return this buffer.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putLong (int index, long value);

	/** Writes the given short to the current position and increases the position by 2.
	 *

	 * The short is converted to bytes using the current byte order.
	 *

	 *
	 * @param value the short to write.
	 * @return this buffer.
	 * @exception BufferOverflowException if position is greater than {@code limit - 2}.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putShort (short value);

	/** Writes the given short to the specified index of this buffer.
	 *

	 * The short is converted to bytes using the current byte order. The position is not changed.
	 *

	 *
	 * @param index the index, must not be negative and equal or less than {@code limit - 2}.
	 * @param value the short to write.
	 * @return this buffer.
	 * @exception IndexOutOfBoundsException if {@code index} is invalid.
	 * @exception ReadOnlyBufferException if no changes may be made to the contents of this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer putShort (int index, short value);

	/** Returns a sliced buffer that shares its content with this buffer.
	 *

	 * The sliced buffer's capacity will be this buffer's {@code remaining()}, and it's zero position will correspond to this
	 * buffer's current position. The new buffer's position will be 0, limit will be its capacity, and its mark is cleared. The new
	 * buffer's read-only property and byte order are the same as this buffer's.
	 *

	 *

	 * The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the
	 * other. The two buffer's position, limit and mark are independent.
	 *

	 *
	 * @return a sliced buffer that shares its content with this buffer.
	 * @since Android 1.0 */
	public abstract ByteBuffer slice ();

	/** Returns a string representing the state of this byte buffer.
	 *
	 * @return a string representing the state of this byte buffer.
	 * @since Android 1.0 */
	public String toString () {
		StringBuffer buf = new StringBuffer();
		buf.append(getClass().getName());
		buf.append(", status: capacity="); //$NON-NLS-1$
		buf.append(capacity());
		buf.append(" position="); //$NON-NLS-1$
		buf.append(position());
		buf.append(" limit="); //$NON-NLS-1$
		buf.append(limit());
		return buf.toString();
	}

	public ByteBuffer stringToByteBuffer (String s) {
		return new StringByteBuffer(s);
	}
}

redpajama_set_name: RedPajamaGithub


A pilot was seriously injured when a blimp crashed while flying over the U.S. Open golf tournament in Erin, Wisconsin, on Thursday.
The aircraft deflated before bursting into flames.
The pilot, whose name has not been released, suffered "serious burns" and was airlifted to a hospital, according to the Washington County Sheriff's Office. He was the only person aboard the blimp, Patrick Walsh, CEO of AirSign, told CBS News. AirSign is the advertising agency operating the blimp.
The blimp after the crash.
The crash happened about half a mile from the Erin Hills golf course, where the tournament takes place, according to the United States Golf Association.
Numerous videos posted on social media showed the aircraft seemingly floating to the ground.
Rickie teeing off on No. 1.
Photos from the scene also showed first responders moving the pilot on a stretcher.
Medical personnel transport the injured pilot.


John Duarte's sparkling suite of American folk songs, commissioned for and premiered in New York in 1999 by Sharon Isbin, is the centerpiece of her recent Grammy-winning album Dreams of a World. Includes a program note by the composer.
Also find Sharon Isbin's CD "Dreams of A World".


text:
ARCTIC MONKEYS POP UP STORE | Tranquility Base Hotel + Casino
The moment Arctic Monkey's fans have been waiting for 5 years has finally arrived. The UK group has finally released a new album entitled,
"TRANQUILITY BASE HOTEL + CASINO."
In order to celebrate and promote the release of the album, the band set up six Pop Up Store locations internationally– Sheffield, Sydney, Paris, Berlin, Tokyo, and our very own SoHo!
Inside the store fans were greeted by posters of front-man Alex Turner, vinyls of all albums released throughout the years, keychains, tote bags, and more.
A projector displayed a short documentation of how the new album was created… scenes of Alex playing billiards, and constructing the playful album artwork.
The album so far has received mixed reviews– some love it, some are disappointed. This album is much different than what we have heard from the Arctic Monkeys before. In my opinion, much more laid back…
"…Take it easy for a little while… come and stay with us."
BOILER SUITS continue to be the trend of "NYC pop up" gear. Remember the Alexander Wang WANGFEST ones? Or the ones worn by the girls of Glossier…
Unfortunately, tickets to see the band in NYC are sold out and currently very high in price for re-sale.
For more info visit the Arctic Monkeys website.

redpajama_set_name: RedPajamaCommonCrawl


text:
El duodécimo All-Star Game de la NBA de la historia se disputó el día 16 de enero de 1962 en el Kiel Auditorium de la ciudad de San Luis, Misuri. El equipo de la Conferencia Este estuvo dirigido por Red Auerbach, entrenador de Boston Celtics y el de la Conferencia Oeste por Fred Schaus, de Los Angeles Lakers. La victoria correspondió al equipo del Oeste, por 150-130, siendo elegido MVP del All-Star Game de la NBA el ala-pívot de los St. Louis Hawks Bob Pettit por cuarta vez en su carrera, que consiguió 25 puntos y 27 rebotes. Por parte del equipo del Este, el base de Cincinnati Royals Oscar Robertson anotó 26 puntos, mientras que el novato pívot de los Chicago Packers Walt Bellamy, que al finalizar la temporada lograría el premio del Rookie del Año de la NBA, anotó 23. Pero el máximo anotador del encuentro fue Wilt Chamberlain, que consiguió el récord de anotación en un All-Star con 42 puntos, a lo que añadió 24 rebotes.

Estadísticas

Conferencia Oeste

MIN: Minutos. TCA: Tiros de campo anotados. TCI: Tiros de campo intentados. TLA: Tiros libres anotados. TLI: Tiros libres intentados. REB: Rebotes. AST: Asistencias. PTS: Puntos

Conferencia Este

MIN: Minutos. TCA: Tiros de campo anotados. TCI: Tiros de campo intentados. TLA: Tiros libres anotados. TLI: Tiros libres intentados. REB: Rebotes. AST: Asistencias. PTS: Puntos

Referencias

Enlaces externos
Estadísticas del All-Star Game de 1962
All-Star de 1962 en Basketball-Reference.com
Las 10 mejores jugadas del All Star de 1962 (vídeo)

All-Star de la NBA
NBA 1962
Deporte en San Luis

redpajama_set_name: RedPajamaWikipedia


I have different letters granting different amounts of financial support. Can you explain?
Students admitted into ECE may receive financial awards from a variety of sources. The UMaine Admissions Department may notify you of an award using funds through the office of Student Financial Aid. These awards are administered outside of the department and college. Questions regarding these awards should be directed to Student Financial Aid.
Separate (additional) awards may be provided by the College of Engineering (indicated through a letter from the Dean of Engineering), and/or by the Department of Electrical and Computer Engineering (indicated through a letter from the ECE Chair). These awards are typically funded through the external support of industry or alumni. Be sure to carefully read the source of your award, and if possible thank the donor.
How will my first semester class schedule be determined?
I'm a transfer student. How should I select my classes?
Information on transferring into UMaine is available on the Undergraduate Admissions website. Once your courses and test results have been transferred to UMaine, you'll need to schedule an appointment with the ECE chair to review how those courses would apply toward your degree in Electrical and Computer Engineering. (Call 581-2223, or use the Contact Us link on the web site.) The Chair will help you select your first semester classes, and your enrollment will be handled by the ECE department.
What else do I need to take care of before showing up in the fall?
Hopefully, the UMaine Office of Admissions has bombarded you with information. Be sure to review the Admitted Students website, which includes a new student checklist. If you have AP credits, you'll need to request that the College Board send your scores to UMaine (we cannot make this request on your behalf). Also, be sure to take the math placement test (unless you have a transfer or AP credit for a calculus course). The math placement exam results will determine which math course you are eligible to enroll in.
How do I reach my advisor?


Be careful with Facebook, it knows more about your Love life than you could think of. The infographic by WorldWideLearn shows that Facebook knows which songs you listen to after starting or ending a relationship. The infographic tells that about half of the Facebook users list their relationship status on Facebook. According to Facebook, in 2012, 37% of its users were single, 31% were married and 22% were in a relationship. There are many more statistics which you will find in the infographic below.


text:
The Royal Jewels of The Crown
Fans of Netflix's royal soap opera, The Crown, can rejoice: it's season three premiere day! To celebrate, we've got a look back at some of the replicas of real royal jewels that were featured in the first two seasons. Which royal jewels do you hope we'll be seeing in season three?
Queen Mary's Fringe Tiara, the Queen Anne and Queen Caroline Pearl Necklaces, and the Gloucester Pearl and Diamond Earrings
The very first episode of the series featured the wedding of Princess Elizabeth and Prince Philip, so we got several replicas straight away: her diamond fringe tiara (which famously broke just before the ceremony), her pearls, and her pearl and diamond earrings.
Queen Victoria's Diamond Jubilee Brooch, Queen Alexandra's Wedding Necklace, and the Cullinan III and IV Brooch
Episode one also showed us jewels worn by two prominent wedding guests: the Queen Mother (wearing Queen Victoria's Diamond Jubilee Brooch and Queen Alexandra's Wedding Necklace) and Queen Mary (wearing the Cullinan III and IV Brooch).
The Flower Basket Brooch
One of the Queen's most sentimental early jewelry pieces, the Flower Basket Brooch, was featured in an emotional scene in episode one.
The Flame Lily Brooch
Queen Elizabeth II's accession to the throne is featured in episode two of the series, which includes an appearance from the Flame Lily Brooch (which she really did wear when she arrived back in England for the first time as monarch).
The Lady Mount Stephen Necklace
Princess Margaret wears the grand diamond Lady Mount Stephen Necklace in scenes depicting the wedding of the future Lord and Lady Glenconner in episode four of season two.
The Queen's Pearls
Nearly every episode of the series features the Queen's trademark three-stranded pearl necklace, which is often used as a symbol of her royal role.
Queen Mary's Lover's Knot Tiara and the Gloucester Pendant Earrings
Queen Mary's Lover's Knot Tiara features in several episodes of the show, including this moment from episode one of season two. This shot also prominently features the elaborate Gloucester Pendant Earrings.
Queen Victoria's Golden Jubilee Necklace
Both Queen Elizabeth II and Princess Margaret are depicted wearing Queen Victoria's Golden Jubilee Necklace during the series -- including a moment in episode six of season one, when they both somehow wear the necklace while on different continents!
The Greville Tiara
The Queen Mother is shown several times wearing the Greville Tiara with Queen Alexandra's Wedding Necklace during the series, including this appearance during episode four of season two.
The Cartier Halo Tiara and Princess Margaret's Pearls
In a portrait session depicted in episode four of season two, Princess Margaret wears the Cartier Halo Tiara with her grand five-stranded pearl necklace.
Princess Margaret's Engagement Ring
Princess Margaret and Lord Snowdon's engagement was depicted in season two, and the show produced a fairly good replica of her famous ruby and diamond engagement ring.
Queen Mary's Lover's Knot Brooch
The show tackled Princess Margaret's wedding in episode seven of season two, and the Queen was shown wearing Queen Mary's grand Lover's Knot Brooch.
The Poltimore Tiara
One of the best royal replicas in the series, for my money, is their version of the Poltimore Tiara, shown here on Princess Margaret's wedding day in episode seven of season two.
The George VI Sapphires and the Albert Brooch
Queen Elizabeth II's sapphires, including the suite given to her by her father and the famous Albert Brooch, were both included during dinner with the Kennedys in season two.
Queen Alexandra's Kokoshnik
A rather tall version of Queen Alexandra's Kokoshnik has featured in multiple episodes, including this scene from episode three of season two.
The Teck Emperor of Austria Brooch
The production has a good replica version of the Teck Emperor of Austria Brooch, which the show featured in episode ten of season two.
The Vladimir Tiara and the Delhi Durbar Necklace
Both the emerald and pearl settings of the Vladimir Tiara have been shown during the series; here, Elizabeth wears the emerald version with the Delhi Durbar Necklace in Ghana during season two.
The George IV Diamond Diadem and the City of London Fringe Necklace
The spectacular Diamond Diadem and the City of London Fringe Necklace featured prominently in an important portrait session in episode ten of season one.
If you've missed any of my recaps of past episodes of the show, you can find them all linked here! And good news: I'll also be recapping season three here on the site, with one episode featured every week. Be sure to drop by on Thursday to read my recap of the jewels featured in episode one!
Labels: jewels on film , netflix , the crown , united kingdom


text:
E Sharp finally released a music video for their popular track O Shabana
Who remembers their performance of the original on Pepsi Battle of the Bands?
E Sharp made quite the journey from their audition in Pepsi Battle of the Bands Season 2 to them sweeping the judges off their feet in Season 4.
Who can forget the first time they debuted their original track as their audition, calling it 'The Anthem of Shabana' and impressing Fawad Khan just by the name - although he did give them a standing ovation for the track along with Meesha Shafi. And rightly so.
Now the band has finally launched a music video for 'O Shabana'.
The band described their song as fun and energetic and there are no lies there. You can't help but bop along to the beat and as Fawad had said, "Brilliantly arranged, brilliantly done."
The music video is full of vivid colours and imagery, showing the story of a schoolboy dealing with a crush and a condition where he can't engage in social gatherings without his gloves. Although, considering in their audition they'd mentioned an 'Aunty Shabana' we didn't really see this coming.
We're glad the song came back on our radar and we'll be adding it our playlist immediately!
We give you the low-down on Pepsi Battle of the Bands' season premiere
Pepsi Battle of the Bands season 4 promises bolder music and bigger battles
Great song! The video concept was really nice.


Great article written by Katie Kieffer in The Blaze May 29, 2014. And look who's Event is mentioned!!!! She highlights 5 runs in the entire country....and our 2014 Event is one of them!!! Humbled does not begin to describe what we are feeling right now.


text:
HomeBusiness News
Covid-19 crisis could leave $8.8 trillion hole in global economy, Asian Development Bank warns
FILE PHOTO © Getty Images / Colin Anderson Productions
The coronavirus pandemic could chop nearly 10 percent off global gross domestic product (GDP), the Asian Development Bank (ADB) predicts, more than doubling its previous forecast.
The global economy could suffer between $5.8 trillion and $8.8 trillion in losses, the equivalent of between 6.4 percent and 9.7 percent of global GDP, the report published on Friday said. This is much worse than the Manila-based bank predicted in April, when it said that the Covid-19 global cost could range between $2 trillion and $4.1 trillion.
Also on rt.com Norway dipping into its massive piggy bank to battle Covid-19 crisis
The blow to the global economy will depend on how long it will take to contain the pandemic, with the bank's worst-case scenario implying that the measures will stay in place for a half a year. The damage will be less severe if curbs on movement and business last no longer than three months.
"This new analysis presents a broad picture of the very significant potential economic impact of Covid-19," ADB Chief Economist Yasuyuki Sawada said. "It also highlights the important role policy interventions can play to help mitigate damage to economies."
Also on rt.com EU economy set to contract 7.5% this year in worst economic shock since Great Depression
The bank said that measures to contain the spread of the infection could inflict $1.7 trillion to $2.5 trillion in economic losses in Asia, while China alone may lose up to $1.6 trillion.
Earlier this week, the United Nations Department of Economic and Social Affairs forecast that the world economy is set to shrink by 3.2 percent this year, and the losses in output could reach $8.5 trillion in 2020 and 2021. The decline is set to nearly "wipe out" the cumulative output gains of the previous four years, according to the report.
For more stories on economy & finance visit RT's business section
Current economic disaster is like three neutron bombs dropped on us, market analyst tells Boom Bust
World economy has entered a recession 'as bad or worse' than the global financial crisis – IMF chief


We invite you to attend the DfR Solutions July Webinars.
Memory devices are at the heart of our digital lives from wearables to smart phones, entertainment devices and the cloud. The term "memory" is ubiquitous. However, it is often forgotten that there are many types of memory and a one-device-fits-all approach doesn't work. The architecture, reliability challenges, risks of obsolescence and level of system integration must be considered to develop a robust memory strategy for electronics design.


are you inferring google may have missed the chance to spy on something they had not thought of ???
phill wrote: Are you inferring google may have missed the chance to spy on something they had not thought of ???
Just make it easier than before.
Much the same with gooble maps.
Before I can type in a location I'm looking for, I see my area displayed on my monitor.
ALL google services in the browser use the same authentication/login, hence if you have logged into a Calendar, Google Drive, gmail, maps, Play store, account details, search etc., there is a cookie with those details. They try to keep you logged in across all of this all the time so that your history is "complete". If you do log out, there is still some "speculation" as to what you may/may not have been doing not explicitly recorded against you, but likely you. This can all work in your favour when you are trying to reset a password etc, but not if you are trying to fly under the radar.
Perry wrote: Much the same with gooble maps.
Yeah, they are just using IP location - like https://www.iplocation.net/, but since they're Google, probably even more accurate. Pretty easy to verify. Open in a private/incognito browser window, if it still shows the exact same location, it's that. For fun, try it with a VPN or from someone else's computer but on your home connection.
If you DO sign in to Google, you can save your home location and other places. Help, if you enable Google maps on your Android phone it will guess where you live and work and offer to save those locations. It'll even start suggesting when traffic is heavy to go home early to beat it!!! Still, they do give you the option to turn on/off all these suggestions.
It does give you pause to think though, even if they don't explicitly save them and make them available to you, they DO know. Have a look at various shops on Google maps, it gives you a histogram of the busiest times of day at that location - probably have better stats than most shopkeepers!
ALL google services in the browser use the same authentication/login, hence if you have logged into a Calendar, Google Drive, gmail, maps, Play store, account details, search etc., there is a cookie with those details.
ok, so if you've taken all those steps, I could understand your frustration with them still knowing. So are you interested in finding how they knew? I'm interested in experimenting - that sort of thing always gets me interested. What was the reminder for Rocket Labs launch from - link from email, your own calendar appointment?


The Mayor of Kiev, Vitali Klitschko has backed a new initiative which will prioritise animal abuse cases in a bid to protect more of the city's animals, as the country faces challenges to combat animal abuse.
This isn't the first time the former heavyweight champion of the world has used his voice to speak out over animal welfare issues in Ukraine.
In 2012 he met with Animal Shelter SOS amid concerns that street animals were being culled prior to the UEFA Euro 2012 football tournament which was co-hosted by Poland and Ukraine (it was reported at the time that the Ukrainian government was offering a bounty for each dead dog).
Now a full-time politician, and undoubtedly one of the biggest names in politics and sport, Klitschko has used his political position to give his full support to the project, which has been introduced by the UK organisation, Naturewatch Foundation in collaboration with Mark Randell, a retired senior Police Officer and Animal non-government organisation (NGO) Director.
The project, which mirrors similar training programmes in other western countries, launched in March 2018 with senior members of Kiev's police force attending a seminar and there are plans to further train 2000 more police officers.
The training also includes what makes up evidence at animal abuse crime scenes, and how to use Ukrainian animal protection legislation to prosecute cases.
Local animal welfare NGOs in the area also received training on how to work with police and provide usable evidence that will assist with prosecutions on animal abuse cases.
Recently, campaigners had a huge victory when one of Kiev's dog hunters was arrested, coincidentally just after the first training seminar took place.
Animal campaigners have been campaigning for his arrest for five years, so it does seem the tide could be turning for the country's animals and animal abusers.
Ukraine is the second poorest country in Europe and one of the biggest animal welfare problems the country faces is dog fighting, which is reportedly thriving as a money making industry.
Allegations of animals being poisoned, hung, beaten, shot and dropped from multi-storey buildings also regularly flood social media sites in Ukraine.
Through the launch of this project, it is hoped that by increasing awareness about the clinical evidence on the link between those who abuse animals and vulnerable people, and particularly the impact on children who witness abuse, that police can use this information to protect victims, both human and animal.
The intention of the training programme is to assist with building a collaborative framework within which animal welfare groups, police, prosecutors and the municipality may address animal cruelty together, reducing victims of animal crime and bringing suspected offenders to justice.
Armed with this new information, Head of Kyiv Patrol Police Public Relations Department, Sergiy Bezpalchuk, spoke of his hopes for the future.
For over twenty-five years, Naturewatch Foundation has run projects in Ukraine to protect animals from abuse and suffering.
On the launch of the new project, Naturewatch Foundation Campaign Director, Jennie Rudd, said, "By taking the initiative to tackle animal abuse and recognise the link between violence towards vulnerable people and animals, Kyiv police are developing a culture of compassion towards all living beings that future generations will benefit from.


text:
Ben Mockford signs Flyers extension
Thursday, December 24th 2020
Ben Mockford has extended his contract with Bristol Flyers until the end of the season.
The 31-year-old guard - who has 41 caps for Great Britain - had initially signed on a short-term deal, but has now extended his stay with the club until the end of the 2020/21 campaign.
Mockford has made four appearances for the Flyers so far, averaging six points per game since he joined club at the start of the month.
Flyers Head Coach Andreas Kapoulas said: "We're very pleased to see Ben continuing with us for the rest of the season.
"He is a true two-way player and brings a tremendous amount of experience and grit to our backcourt.
"We've had to deal with a number of changes to our backcourt since the start of the season, so consistency at the guard spots will help our team find the necessary rhythm moving forward as we enter the second most important part of the season."
Ben Mockford


I managed to make this durian ice cream to taste as good as I had remembered eating back when I was a child living in the Mekong Delta (Vietnam). My uncle would take my 2 brothers and me on his motorcycle in the evening for this special treat in a nearby city. Fortunately for us the ice cream store is still open for business to this day. The only complaint I have is that they give you 3 very small scoops per serving. I made a 1 1/2 quarts of this delicious treat and now I can eat 3 large scoops!!
1) In a blender, puree durian and about 3 tablespoons of heavy cream together, blend well, cover blended durian and chill in a refrigerator.
2) Heat a medium size pot over high heat and add milk and 2 cups of heavy cream until just boiling, then turn down heat to a simmer and stir for about 4-5 minutes.
3) Whisk eggs and sugar, and tempering this with hot milk/heavy cream (do not scramble the eggs)--let cool, cover and chill in a refrigerator.
4) Stir the 2 chilled items together and process in your ice cream maker for 30 minutes or according to your manufacturer's instruction.
5) Pour the ice cream into a container and put in the freezer for at least 4-6 hours or overnight.
6) Scoop the ice cream out into a bowl, sprinkle with roasted peanuts and garnish with mint leaves if interested.
addendum: Here is a photo that I took (2015).
Some things just don't change after 30 plus years!


professionearchitetto.it has a global alexa rank of 66182. With an estimated daily income of $65 (Sixty-Five dollars per day), professionearchitetto.it is estimated to be worth $53513 (Fifty-Three Thousand, Five Hundred And Thirteen dollars). Professionearchitetto receives around 34355 (Thirty-Four Thousand, Three Hundred And Fifty-Five) daily pageviews from around 18082 (Eighteen Thousand And Eighty-Two) unique visitors.


2016 is slated to be a big year for connected devices. They're designed to make life easier for consumers, but will they do the same for marketers?
2016 is slated to be a big year for connected devices. They're designed to make life easier for consumers, but will they do the same for marketers?
For most consumers, the term "smart" probably brings to mind phones, fitbits and watches. But it goes so much further than wearables, as people will soon see.
The expo halls at Consumer Electronics Show (CES) in Las Vegas are full of smart products, particularly cars and devices for the home. This next phase of the Internet of Things (IoT) means convenience for users, but what does an increasingly connected home mean for brands?
Taking it inside, consumer packaged goods (CPG) brands would be equally interested in what consumers do in the kitchen. Knowing how often you cook soup is certainly valuable data for Campbell's, which can use that information to create better user experiences (UX) and more relevant ads.
Gallagher points out that consumers will probably appreciate this, as long as the brands are transparent.
"Everything being more connected leads to better data we can funnel into the ad tech system, but privacy needs to be front and center, giving us the option to say how we want our data to be exposed," he says.
These issues will likely come up sooner rather than later. Earlier this week, real estate franchise Coldwell Banker released the results of its Smart Home Marketplace Survey.
Polling more than 4,000 Americans, Coldwell Banker found that 45 percent of people either own smart home technology, or plan to invest in it this year. Of those who don't use smart technology, 27 percent plan to incorporate it into their lives this year. And 70 percent of people said buying their first smart home product made them more likely to buy more.
According to Gallagher, IoT is one of the top priorities for Verizon, which acquired AOL back in June, in 2016. He compares connected devices to mobile devices five years ago; there's much more conversation than scale, but that's going to change soon.
Most of Coldwell Banker's respondents said that the first smart home accruements that typically come to mind include security, temperature and lighting. However, entertainment is typically the "gateway drug," since many people's first smart electronic is a TV or speaker system.
"[Consumers] think of smart as something they know to do one thing that all of a sudden, has new and advanced capabilities that go beyond the core function of the device," says Jim Gustke, vice president of marketing for Ooma.
Ooma was at CES showcasing its software, which aims to return the home phone to relevance again by making it the "communication hub for the connected home." Like Gallagher, Gustke believes the smart home will be key for marketers from a data perspective.
And like virtual reality, there's also an inherent increase in engagement. Incorporating smart home devices into their marketing strategies allows brands to reach consumers where they live, literally, and become integrated in their daily routines. What's more personal than someone's home? Smartphones are a distant second, and Gustke believes it's only a matter of time before someone connects the two in a real way.
"Who wants a separate app for the lights, for the garage door, for the coffee machine? Who wants to deal with all that? Someone is going to come and put it all together, as one way to interact with your home," he says.
That gives brands yet another opportunity: marketing within that app. It may not exist, but given how quickly people are making their homes smart, you can be sure that it will.


The strong, sturdy and handsome Acadia collection brings a new dimension to solid wood bedroom furniture for your kids and teens!. A deep Merlot lacquered finish on solid wood throughout will provide lasting great look and durability for many years to come. The Acadia Mission Full over Full bunk bed features timeless Mission styling and solid pine construction with steel hardware connections for unsurpassed strength and stability. The Acadia Mission Fulll over Full bunk bed can also be separated into two identical full size beds!. The under-bed area can be used to accommodate a optional 3-Drawer Unit for storage or a standard twin size Trundle Unit for extra sleep space!
Can separate into two identical fullsize beds.
Optional Trundle Unit can accommodate up to 7.5" thick standard twin size mattress.
See below for coordinating Ridgeline items.


text:
\r\nEteraz is the author of the critically acclaimed darkly comic memoir CHILDREN OF DUST: A Portrait of a Muslim as a Young Man (HarperCollins, 2009). It was selected as a New Statesman Book of the Year and was featured on PBS with Tavis Smiley, NPR with Terry Gross, C-SPAN2, and numerous international outlets. The book was called "compelling" by the Washington Post, and O: The Oprah Magazine, chose it for its Fall Reading List. It was also listed among the 2009 Books of the Year by New Statesman and has been translated into Italian. In 2010, Children of Dust won a Nautilus Book Award, and received Honorable Mention at the San Francisco Book Festival. In 2011, The Australian called the book \"an ambitious and accomplished work of literature.\"
\r\nEteraz is an inhabitant of the San Francisco Writer's Grotto where he is at work on his next project.","url":"https://www.huffpost.com/author/ali-eteraz"},"creator":{"@context":"http://schema.org","@type":"Person","name":"Ali Eteraz","jobTitle":"short story writer and memoirist","description":"Ali Eteraz grew up in the Caribbean, South Asia, and the American South. His debut short story collection, FALSIPEDIES AND FIBSIENNES, is due out in September 2014 (Guernica Editions). His stories have appeared in storySouth, Chicago Quarterly Review, Akashic Books, Crossborder, and Forge Journal, among others.
\r\nEteraz is an inhabitant of the San Francisco Writer's Grotto where he is at work on his next project.","url":"https://www.huffpost.com/author/ali-eteraz"},"publisher":{"@type":"NewsMediaOrganization","name":"HuffPost","url":"https://www.huffpost.com","logo":{"@type":"ImageObject","url":"https://s.m.huffpost.com/assets/hp-amp-101ecf8047b044dce5f3122c63056162580f1c26994c73ae90dbd1c5d1545a71.gif","width":600,"height":60}},"description":"Until we remain aware of our ignorance, we cannot ever get to ripping out the heart of extremism, nor can we realize the things we ourselves have done to...","keywords":["politics","islamism","cair","keith-ellison","jihadism","american-muslims","anti-muslim-bias","muslim-prejudice","type: contributor"],"inLanguage":"en_US","thumbnailUrl":"https://img.huffingtonpost.com/asset/default-entry.jpg?ops=200_150","url":"https://www.huffpost.com/entry/the-myth-of-muslim-condem_b_67904","headline":"The Myth of Muslim Condemnation of Terror","image":{"@type":"ImageObject","url":"https://img.huffingtonpost.com/asset/default-entry.jpg?ops=1778_1000","width":1778,"height":1000},"mainEntityOfPage":{"@type":"WebPage","@id":"https://www.huffpost.com/entry/the-myth-of-muslim-condem_b_67904"}}
By Ali Eteraz
The Myth of Muslim Condemnation of Terror
10/10/2007 01:09 pm ET Updated May 25, 2011
The amount of disinformation about Muslims is disconcerting. One popular smear is that Muslims are in an alliance with the left to take over the West; it is an allegation that far right loves to use.
The other, equally popular and equally absurd, idea is that Muslims do not condemn terrorism. This too makes its way into culture from the right (though judging by comments to my last post, its diffused to some members of the left). Though it is subtler, and argues from insinuation, it is no less pernicious. The implication is that every Muslim in the world who doesn't engage in terrorism is nevertheless a latent supporter, or enabler, of terrorism because he doesn't make loud proclamations against it.
First, there is something dirty with the premise of this idea because it makes terrorism a problem of the entire Muslim collective. Perhaps those individuals who make this argument were in a coma during the 20th century when most of us realized that to treat all the people of any one religion, ideology, or race, as a collective is not only bigoted, but downright dangerous.
Second, heaping an expectation on Muslims - to call out "their" criminals - is absurd when no similar expectation is placed on any other religious, ethnic, or ideological group. Is it appropriate for a white man to tell "the hispanics" to make proclamations against the drug trade? Why should a hispanic who has never even touched drugs speak out against drug lords? His abstention from engaging in the drug trade is condemnation enough. The same goes for Muslims and terrorism. If you want a Muslim to condemn terrorism, realize that he has done so by not engaging in it. Life becomes quite insufferable for Muslims if before speaking about any subject a Muslim is required to first "demonstrate" that he is not "on the side of the enemy." This has had a huge chilling effect on artistic and intellectual production by Muslim youth. I know because I was silent from 2001 to 2006, saving all my writings on my hard-drive, not caring to share them with society at large.
Third, in our digital age, it is an act of egregious ignorance for a human being to actually verbalize the words: "Do Muslims condemn terror?" Here is a suggestion from a lowly immigrant: try this thing called "googling." Start with using the search terms "Muslims condemn terror." This was the first hit for me, how about you?
Finally, the reality is that condemnations of terrorism have been pouring in for years. The reasons that so many Americans are still ignorant about them are because they have willfully chosen not to pay attention. Having traveled internationally quite a few times since 2001, I can confidently say that our media has one of the lowest IQs about Islam anywhere in the world. It is - and should be - downright shameful that when I speak to British audiences, I am able to have intelligent discussions about complicated points of Islamic history; meanwhile, now six years since 9/11 and in the US I am still clarifying the simple point that Muslims soundly oppose terrorism. With awareness about Muslims at such a shameful nadir, it should be no surprise that our beloved President was able to convince us that Saddam was behind 9/11 and take us to war against "Islamofascism."
Naturally, media ignorance has diffused to the public. In the US we don't have an idea who the Muslim leaders around the world are, much less how to access their opinion on terror. Bereft of such information we have latched onto a simple slogan fed to us by the far right, namely, why don't we see parades and public demonstrations?
Did we ever stop and think that asking Muslims to get together in a big public setting, unarmed, with women and children in tow, making loud gesticulations against suicide bombers and cold hearted murderers (who in their cowardice are not against cloaking themselves in veils), might be a rather stupid thing to demand? Did Americans forget how empty our streets were after 9/11 or how desolate Bethesda, Maryland, was during the days of DC sniper? Now try living in a society where suicide bombers are in every city and township and regularly attack group events like the Friday congregational prayers. In the US we have not had a suicide bombing since 9/11. Yet in Pakistan, 65 people - Muslims all of them - died in an attack by extremists yesterday. During the week before, there were two other suicide bombings. Is it reasonable to keep demanding that Muslims keep thronging out into the street at the whim of far away American masters? Then, when despite all these dangers, Muslims do gather to speak out against violence in their countries, it goes ignored by our media.
Instead of taking to the streets, Muslims have relied upon their religious elders to make stark declarations against violence. Part of it has to do with the fact that the peaceful and not-extremist Muslims in the world today value religious authority a lot more than extremists and terrorists who value mob rule and mayhem.
On September 12, 2001, one of the most learned Islamic scholars in the UK said the terrorists are "not Muslim." A month later he called terrorism a "heresy" against Islam in a pre-eminent British paper. A Pakistani Islamic scholar whose followers are active in 81 countries called Bin Laden a "false prophet" and "coward" barely a week after 9/11. Another major Islamic scholar issued a pamphlet (in many languages) attacking the Islamic legal arguments that the terrorists used so that future recruits might not be so easily led astray. One of the eldest traditionalist scholar in Sunni Islam issued a fatwa against the extremist group Al Muhajiroun. Muslims in Spain issued a fatwa against Bin Laden. President Bush was informed enough to bring an American-Muslim Imam to the White House who decried terrorists; yet average liberals who so delight in demeaning Bush probably still don't know that Imam's name. (Since 2001, that Imam has gone further and condemned antisemitism and holocaust denial as well). In 2005 there was a massive consensus reached at the international level that forbade Muslims from engaging in something called takfir - which attacks the jihadist ability to recruit. Muslim scholars have gone so far as to engage in "Koranic duels" with jihadists. Just the other day Bin Laden's former mentor condemned him for his violence. Nevermind the fact that before 9/11 it was a Muslim who warned our State department about monitoring certain mosques, or that it was a Muslim who tipped off the British authorities and helped prevent the 20 airliner hijacking in 2006. In the event someone wants more resources, try this and this.
Many times people demand that Muslims must "do more" than just merely condemn. Well, when Muslim religious leaders, lodged in Muslim communities, give lectures to Muslims on these subjects and write public opinion pieces, they are doing precisely that. They are educating Muslims. Their work has had positive result. A song that condemns extremism is at the top of the charts in Pakistan, and a Middle Eastern news station for Muslims has produced an anti-extremist film, which has been quite a hit. Now the question is will a Western producer bring the film here?
Of course, there are many who, even after being informed of such things, like to weasel their way out so they can continue badgering Muslims. In America, this is done by pointing the finger at the organization called CAIR, Council for Islamic Relations, and asking why CAIR doesn't openly condemn Hamas and Hezbollah. Yet the fact is that CAIR is a political, lobbying group, with no theological or religious imperative. Anytime it appears to act like a religious organization, it gets severely rebuked by Muslims. It does not speak for all Muslims (though like all lobbying groups it pretends to). It doesn't speak for the hundreds of thousands of Muslims who are not its members. In fact, its membership is down since 2001. Just as it is patently idiotic to point a finger at an American Jew and accuse him not condemning genocide because the Anti-Defamation League, one of the largest Jewish organizations, does not condemn the Armenian Holocaust, it is idiotic to point to a Muslim and accuse him of silence or complicity based on CAIR's political agenda. This is not a difficult distinction to make -- yet when it comes to Muslims, having selective myopia is acceptable. A recent trend among Americans has been to turn Representative Keith Ellison of Minnesota, the first Muslim in Congress, into some sort of Muslim Pope. It was my understanding that we separated religion from state. Are Christian Congressmen the leaders of the American Christian community? Again, there seems to be one standard for Muslims and another for other religious groups.
Anyway, I reiterate my first point. There is something wrong with the basic premise of the idea that Muslims must condemn terrorism, because at the end of the day there is no such thing as The Muslim Collective. If we as a society are going to make collective demands on a group, then we are implying that collective punishment is appropriate as well. So while learning about all the Muslims who have condemned terrorism is nice; its nicer if we started to move beyond that point.
Until we remain aware of our ignorance, we cannot ever get to ripping out the heart of extremism, nor can we realize the things we ourselves have done to help Muslim extremists. We need to be having more sophisticated discussions about Islam and Muslims, involving things like the Quran, the distinction between jihadism and islamism (political Islam), and the future of Islamic theocracy. The entire world is talking about such things, and we, the only ones who regularly take arms against Muslims or purport to bring them democracy, are not.
In conclusion, my request is for readers to send this article to anyone who may benefit from it so that we can advance the discourse. Feel free to email me:
eteraz@gmail.com
Politics News Islam Cair Keith Ellison Jihadism


PARAMUS, N.J., May 31 /PRNewswire-FirstCall/ -- Movado Group, Inc. (NYSE: MOV), today announced first quarter results for the period ended April 30, 2007.
Net sales increased 3.7% to $101.4 million compared to $97.7 million last year. Net sales for the quarter included $2.7 million of excess discontinued product.
Comparable store sales at the Company's Movado boutiques decreased 1.5% versus a 4.5% increase in the year-ago period.
Gross profit was $61.7 million, or 60.8% of sales, compared to $59.6 million, or 61.0% of sales last year. Excluding excess discontinued product sales, adjusted gross profit was $62.0 million, or 62.9% of sales, an improvement of 190 basis points over the year-ago period.
Operating profit was $2.8 million compared to $3.4 million in the year- ago period.
Net interest income was $0.4 million versus net interest expense of $0.1 million last year.
Income tax expense of $0.6 million reflects a 20.6% tax rate in the first quarter compared to income tax expense of $0.6 million, or a 17.9% tax rate, recorded last year. The Company adopted FASB Interpretation No. (FIN) 48, "Accounting for Uncertainty in Income Taxes" effective as of February 1, 2007, which resulted in an increase to income tax expense in the first quarter of $0.2 million.
Net income and earnings per diluted share were $2.4 million and $0.09, respectively, versus net income of $2.9 million and earnings per diluted share of $0.11 in the year-ago period. Average diluted shares outstanding increased 3.0% from the prior year period.
Efraim Grinberg, President and Chief Executive Officer, stated, "We are very pleased with the strength of our first quarter performance. As anticipated, sales growth slowed in the quarter reflecting a shift in the U.S. retail calendar, which resulted in timing differences in purchases by certain of our customers. We continue to support all of our brands with strong new product introductions and compelling advertising campaigns. Across our portfolio, we received an excellent response from our retail partners to the powerful array of new products debuted at the Basel Watch Fair in April."
Rick Cote, Executive Vice President and Chief Operating Officer, stated, "Strong operating disciplines across our organization led to continued improvement in gross margin, a key driver toward achieving our goal of expanding operating margin into the mid-teens. Additionally, in the quarter we converted additional discontinued product into cash, thereby improving our inventory mix."
Movado Group projects fiscal 2008 diluted earnings per share of approximately $1.72 based on an estimated 25% tax rate. This compares to fiscal 2007 adjusted diluted earnings per share of $1.54. Fiscal 2007 adjusted diluted earnings per share exclude the impact of the tax benefit resulting from the further utilization of the NOL acquired with Ebel in fiscal 2005 and previously disclosed one-time items related to accounts receivable, foreign currency and sale of a non-operating asset. On a GAAP basis, fiscal 2007 earnings per share were $1.87 with a 5.4% tax rate. Fiscal 2008 net sales remain projected to range between $550 million and $560 million.
The Company's management will host a conference call today, May 31, 2007 at 10:00 a.m. Eastern Time to discuss its first quarter financial results. A live broadcast of the call will be available on the Company's website: www.movadogroup.com. This call will be archived online within one hour of the completion of the conference call.
For a reconciliation of 2007 adjusted diluted earnings per share to 2007 earnings per share on a GAAP basis, please see the Company's press release, dated March 29, 2007.