text:
<?php

/**
 * Abstract class for all fields.
 * Subclasses need only override html()
 *
 * @abstract
 */
abstract class AS_Field {

	public $value;
	public $field_index = 0;

	public function __construct( $name, $title, array $values, $args = array() ) {

		$this->id 		= $name;
		$this->name		= $name . '[]';
		$this->title 	= $title;

		$this->args		= wp_parse_args( $args, array(
				'repeatable' 			=> false,
				'std'        			=> '',
				'default'    			=> '',
				'show_label' 			=> false,
				'taxonomy'   			=> '',
				'hide_empty' 			=> false,
				'data_delegate' 		=> null,
				'options'				=> array(),
				'cols' 					=> '12',
				'style' 				=> '',
				'class'					=> '',
				'readonly'				=> false,
				'disabled'				=> false
			)
		);

		if ( ! empty( $this->args['std'] ) && empty( $this->args['default'] ) ) {
			$this->args['default'] = $this->args['std'];
			_deprecated_argument( 'AS_Field', "'std' is deprecated, use 'default instead'", '0.9' );
		}

		if ( ! empty( $this->args['options'] ) && is_array( reset( $this->args['options'] ) ) ) {

			$re_format = array();

			foreach ( $this->args['options'] as $option )
				$re_format[$option['value']] = $option['name'];

			$this->args['options'] = $re_format;
		}

		// If the field has a custom value populator callback
		if ( ! empty( $args['values_callback'] ) )
			$this->values = call_user_func( $args['values_callback'], get_the_id() );
		else
			$this->values = $values;

		$this->value = reset( $this->values );

		$this->description = ! empty( $this->args['desc'] ) ? $this->args['desc'] : '';

	}

	/**
	 * Enqueue all scripts required by the field.
	 *
	 * @uses wp_enqueue_script()
	 */
	public function enqueue_scripts() {

		if ( isset( $this->args['sortable'] ) && $this->args['sortable'] )
			wp_enqueue_script( 'jquery-ui-sortable' );

	}

	/**
	 * Enqueue all styles required by the field.
	 *
	 * @uses wp_enqueue_style()
	 */
	public function enqueue_styles() {
	}

	/**
	 * Output the field input ID attribute.
	 *
	 * If multiple inputs are required for a single field,
	 * use the append parameter to add unique identifier.
	 *
	 * @param  string $append
	 * @return null
	 */
	public function id_attr( $append = null ) {

		printf( 'id="%s"', esc_attr( $this->get_the_id_attr( $append ) ) );

	}

	/**
	 * Output the for attribute for the field.
	 *
	 *
	 *
	 * If multiple inputs are required for a single field,
	 * use the append parameter to add unique identifier.
	 *
	 * @param  string $append
	 * @return null
	 */
	public function get_the_id_attr( $append = null ) {

		$id = $this->id;

		if ( isset( $this->parent ) ) {
			$parent_id = preg_replace( '/as\-field\-(\d|x)+/', 'as-group-$1', $this->parent->get_the_id_attr() );
			$id = $parent_id . '[' . $id . ']';
		}

		$id .= '-as-field-' . $this->field_index;

		if ( ! is_null( $append ) )
			$id .= '-' . $append;

		$id = str_replace( array( '[', ']', '--' ), '-', $id );

		return $id;

	}

	/**
	 * Return the field input ID attribute value.
	 *
	 * If multiple inputs are required for a single field,
	 * use the append parameter to add unique identifier.
	 *
	 * @param  string $append
	 * @return string id attribute value.
	 */
	public function for_attr( $append = null ) {

		printf( 'for="%s"', esc_attr( $this->get_the_id_attr( $append ) ) );

	}

	public function name_attr( $append = null ) {

		printf( 'name="%s"', esc_attr( $this->get_the_name_attr( $append ) ) );

	}

	public function get_the_name_attr( $append = null ) {

		$name = str_replace( '[]', '', $this->name );

		if ( isset( $this->parent ) ) {
			$parent_name = preg_replace( '/as\-field\-(\d|x)+/', 'as-group-$1', $this->parent->get_the_name_attr() );
			$name = $parent_name . '[' . $name . ']';
		}

		$name .= "[as-field-$this->field_index]";

		if ( ! is_null( $append ) )
			$name .= $append;

		return $name;

	}

	public function class_attr( $classes = '' ) {

		if ( $classes = implode( ' ', array_map( 'sanitize_html_class', array_filter( array_unique( explode( ' ', $classes . ' ' . $this->args['class'] ) ) ) ) ) ) { ?>

			class="<?php echo esc_attr( $classes ); ?>"

		<?php }

	}

	/**
	 * Get JS Safe ID.
	 *
	 * For use as a unique field identifier in javascript.
	 */
	public function get_js_id() {

		return str_replace( array( '-', '[', ']', '--' ),'_', $this->get_the_id_attr() ); // JS friendly ID

	}

	public function boolean_attr( $attrs = array() ) {

		if ( $this->args['readonly'] )
			$attrs[] = 'readonly';

		if ( $this->args['disabled'] )
			$attrs[] = 'disabled';

		$attrs = array_filter( array_unique( $attrs ) );

		foreach ( $attrs as $attr )
			echo esc_html( $attr ) . '="' . esc_attr( $attr ) . '"';

	}

	/**
	 * Check if this field has a data delegate set
	 *
	 * @return boolean
	 */
	public function has_data_delegate() {
		return (bool) $this->args['data_delegate'];
	}

	/**
	 * Get the array of data from the data delegate
	 *
	 * @return array mixed
	 */
	protected function get_delegate_data() {

		if ( $this->args['data_delegate'] )
			return call_user_func_array( $this->args['data_delegate'], array( $this ) );

		return array();

	}

	public function get_value() {
	   return ( $this->value || $this->value === '0' ) ? $this->value : $this->args['default'];
	}

	public function &get_values() {
		return $this->values;
	}

	public function set_values( array $values ) {

		$this->values = $values;

		unset( $this->value );

	}

	public function parse_save_values() {}

	public function parse_save_value() {}

	/**
	 * @todo this surely only works for posts
	 * @todo why do values need to be passed in, they can already be passed in on construct
	 */
	public function save( $post_id, $values ) {

		// Don't save readonly values.
		if ( $this->args['readonly'] )
			return;

		$this->values = $values;
		$this->parse_save_values();

		// Allow override from args
		if ( ! empty( $this->args['save_callback'] ) ) {

			call_user_func( $this->args['save_callback'], $this->values, $post_id );

			return;

		}

		// If we are not on a post edit screen
		if ( ! $post_id )
			return;

		delete_post_meta( $post_id, $this->id );

		foreach( $this->values as $v ) {

			$this->value = $v;
			$this->parse_save_value();

			if ( $this->value || $this->value === '0' )
				add_post_meta( $post_id, $this->id, $this->value );

		}
	}

	public function title() {

		if ( $this->title ) { ?>

				<label <?php $this->for_attr(); ?>>
					<?php echo esc_html( $this->title ); ?>

		<?php }

	}

	public function description() {

		if ( $this->description ) { ?>

<?php echo wp_kses_post( $this->description ); ?>

		<?php }

	}

	public function display() {

		// if there are no values and it's not repeateble, we want to do one with empty string
		if ( ! $this->get_values() && ! $this->args['repeatable'] )
			$values = array( '' );
		else
			$values = $this->get_values();

		$this->title();

		$this->description();

		$i = 0;
		foreach ( $values as $key => $value ) {

			$this->field_index = $i;
			$this->value = $value; ?>

			<div class="field-item" data-class="<?php echo esc_attr( get_class($this) ) ?>" style="position: relative; <?php echo esc_attr( $this->args['style'] ); ?>">

			<?php if ( $this->args['repeatable'] ) : ?>
				<button class="as-delete-field" title="Remove field">×</button>
			<?php endif; ?>

			<?php $this->html(); ?>

		<?php

			$i++;

		}

		// Insert a hidden one if it's repeatable
		if ( $this->args['repeatable'] ) {

			$this->field_index = 'x'; // x used to distinguish hidden fields.
			$this->value = ''; ?>

			<div class="field-item hidden" data-class="<?php echo esc_attr( get_class($this) ) ?>" style="position: relative; <?php echo esc_attr( $this->args['style'] ); ?>">

			<?php if ( $this->args['repeatable'] ) : ?>
				<button class="as-delete-field" title="Remove field">× Remove Group</button>
			<?php endif; ?>

			<?php $this->html(); ?>

			<button class="button repeat-field"><?php esc_html_e( 'Add New', 'as' ); ?></button>

		<?php }

	}

}

/**
 * Standard text field.
 *
 * @extends AS_Field
 */
class AS_Text_Field extends AS_Field {

	public function html() { ?>

		<input type="text" <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr(); ?> <?php $this->name_attr(); ?> value="<?php echo esc_attr( $this->get_value() ); ?>" />

	<?php }
}

class AS_Text_Small_Field extends AS_Text_Field {

	public function html() {

		$this->args['class'] .= ' as_text_small';

		parent::html();

	}
}

/**
 * Field for image upload / file updoad.
 *
 * @todo ability to set image size (preview image) from caller
 */
class AS_File_Field extends AS_Field {

	function enqueue_scripts() {

		parent::enqueue_scripts();
		wp_enqueue_media();
		wp_enqueue_script( 'as-file-upload', trailingslashit( AS_URL ) . 'js/file-upload.js', array( 'jquery', 'as-scripts' ) );

	}

	public function html() {

		$args = wp_parse_args( $this->args, array(
			'library-type' => array( 'video', 'audio', 'text', 'application' )
		) );

		if ( $this->get_value() ) {
			$src = wp_mime_type_icon( $this->get_value() );
			$size = getimagesize($src);
			$icon_img = '';
		}

		$data_type = ( ! empty( $args['library-type'] ) ? implode( ',', $args['library-type'] ) : null );

		?>

		<div class="as-file-wrap" <?php echo 'data-type="' . esc_attr( $data_type ) . '"'; ?>>

			<button class="button as-file-upload <?php echo $this->get_value() ? 'hidden' : '' ?>">
				<?php esc_html_e( 'Add File', 'as' ); ?>
			</button>

			<div class="as-file-holder type-file <?php echo $this->get_value() ? '' : 'hidden'; ?>">

				<?php if ( $this->get_value() ) : ?>

					<?php if ( isset( $icon_img ) ) echo wp_kses_post($icon_img); ?>

						<?php echo esc_html( basename( get_attached_file( $this->get_value() ) ) ); ?>

				<?php endif; ?>

			<button class="as-remove-file button <?php echo $this->get_value() ? '' : 'hidden'; ?>">
				<?php esc_html_e( 'Remove', 'as' ); ?>
			</button>

			<input type="hidden" class="as-file-upload-input" <?php $this->name_attr(); ?> value="<?php echo esc_attr( $this->value ); ?>" />

	<?php }

}

class AS_Image_Field extends AS_File_Field {

	public function html() {

		$args = $this->args = wp_parse_args( $this->args, array(
			'size' => 'thumbnail',
			'library-type' => array( 'image' ),
			'show_size' => false
		) );

		if ( $this->get_value() )
			$image = wp_get_attachment_image_src( $this->get_value(), $args['size'], true );

		// Convert size arg to array of width, height, crop.
		$size = $this->parse_image_size( $args['size'] );

		// Inline styles.
		$styles              = sprintf( 'width: %1$dpx; height: %2$dpx; line-height: %2$dpx', intval( $size['width'] ), intval( $size['height'] ) );
		$placeholder_styles  = sprintf( 'width: %dpx; height: %dpx;', intval( $size['width'] ) - 8, intval( $size['height'] ) - 8 );

		$data_type = ( ! empty( $args['library-type'] ) ? implode( ',', $args['library-type'] ) : null );

		?>

		<div class="as-file-wrap" style="<?php echo esc_attr( $styles ); ?>" data-type="<?php echo esc_attr( $data_type ); ?>">

			<div class="as-file-wrap-placeholder" style="<?php echo esc_attr( $placeholder_styles ); ?>">

				<?php if ( $args['show_size'] ) : ?>

						<?php printf( '%dpx × %dpx', intval( $size['width'] ), intval( $size['height'] ) ); ?>

				<?php endif; ?>

			<button class="button as-file-upload <?php echo esc_attr( $this->get_value() ) ? 'hidden' : '' ?>" data-nonce="<?php echo wp_create_nonce( 'as-file-upload-nonce' ); ?>">
				<?php esc_html_e( 'Add Image', 'as' ); ?>
			</button>

			<div class="as-file-holder type-img <?php echo $this->get_value() ? '' : 'hidden'; ?>" data-crop="<?php echo (bool) $size['crop']; ?>">

				<?php if ( ! empty( $image ) ) : ?>
					<img src="<?php echo esc_url( $image[0] ); ?>" width="<?php echo intval( $image[1] ); ?>" height="<?php echo intval( $image[2] ); ?>" />
				<?php endif; ?>

			<button class="as-remove-file button <?php echo $this->get_value() ? '' : 'hidden'; ?>">
				<?php esc_html_e( 'Remove', 'as' ); ?>
			</button>

			<input type="hidden" class="as-file-upload-input" <?php $this->name_attr(); ?> value="<?php echo esc_attr( $this->value ); ?>" />

	<?php }

	/**
	 * Parse the size argument to get pixel width, pixel height and crop information.
	 *
	 * @param  string $size
	 * @return array width, height, crop
	 */
	private function parse_image_size( $size ) {

		// Handle string for built-in image sizes
		if ( is_string( $size ) && in_array( $size, array( 'thumbnail', 'medium', 'large' ) ) ) {
			return array(
				'width'  => get_option( $size . '_size_w' ),
				'height' => get_option( $size . '_size_h' ),
				'crop'   => get_option( $size . '_crop' )
			);
		}

		// Handle string for additional image sizes
		global $_wp_additional_image_sizes;
		if ( is_string( $size ) && isset( $_wp_additional_image_sizes[$size] ) ) {
			return array(
				'width'  => $_wp_additional_image_sizes[$size]['width'],
				'height' => $_wp_additional_image_sizes[$size]['height'],
				'crop'   => $_wp_additional_image_sizes[$size]['crop']
			);
		}

		// Handle default WP size format.
		if ( is_array( $size ) && isset( $size[0] ) && isset( $size[1] ) )
			$size = array( 'width' => $size[0], 'height' => $size[1] );

		return wp_parse_args( $size, array(
			'width'  => get_option( 'thumbnail_size_w' ),
			'height' => get_option( 'thumbnail_size_h' ),
			'crop'   => get_option( 'thumbnail_crop' )
		) );

	}

	/**
	 * Ajax callback for outputing an image src based on post data.
	 *
	 * @return null
	 */
	static function request_image_ajax_callback() {

		if ( ! ( isset( $_POST['nonce'] ) && wp_verify_nonce( $_POST['nonce'], 'as-file-upload-nonce' ) ) )
			return;

		$id = intval( $_POST['id'] );

		$size = array(
			intval( $_POST['width'] ),
			intval( $_POST['height'] ),
			'crop' => (bool) $_POST['crop']
		);

		$image = wp_get_attachment_image_src( $id, $size );
		echo reset( $image );

		die(); // this is required to return a proper result
	}

}
add_action( 'wp_ajax_as_request_image', array( 'AS_Image_Field', 'request_image_ajax_callback' ) );

/**
 * Standard text meta box for a URL.
 *
 */
class AS_URL_Field extends AS_Field {

	public function html() { ?>

		<input type="text" <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'as_text_url code' ); ?> <?php $this->name_attr(); ?> value="<?php echo esc_attr( esc_url( $this->value ) ); ?>" />

	<?php }
}

/**
 * Date picker box.
 *
 */
class AS_Date_Field extends AS_Field {

	public function enqueue_scripts() {

		parent::enqueue_scripts();

		wp_enqueue_style( 'as-jquery-ui', trailingslashit( AS_URL ) . 'css/vendor/jquery-ui/jquery-ui.css', '1.10.3' );

		wp_enqueue_script( 'as-datetime', trailingslashit( AS_URL ) . 'js/field.datetime.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'as-scripts' ) );
	}

	public function html() { ?>

		<input <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'as_text_small as_datepicker' ); ?> type="text" <?php $this->name_attr(); ?> value="<?php echo esc_attr( $this->value ); ?>" />

	<?php }
}

class AS_Time_Field extends AS_Field {

	public function enqueue_scripts() {

		parent::enqueue_scripts();

		wp_enqueue_style( 'as-jquery-ui', trailingslashit( AS_URL ) . 'css/vendor/jquery-ui/jquery-ui.css', '1.10.3' );

		wp_enqueue_script( 'as-timepicker', trailingslashit( AS_URL ) . 'js/jquery.timePicker.min.js', array( 'jquery', 'as-scripts' ) );
		wp_enqueue_script( 'as-datetime', trailingslashit( AS_URL ) . 'js/field.datetime.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'as-scripts' ) );
	}

	public function html() { ?>

		<input <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'as_text_small as_timepicker' ); ?> type="text" <?php $this->name_attr(); ?> value="<?php echo esc_attr( $this->value ); ?>"/>

	<?php }

}

/**
 * Date picker for date only (not time) box.
 *
 */
class AS_Date_Timestamp_Field extends AS_Field {

	public function enqueue_scripts() {

		parent::enqueue_scripts();

		wp_enqueue_style( 'as-jquery-ui', trailingslashit( AS_URL ) . 'css/vendor/jquery-ui/jquery-ui.css', '1.10.3' );

		wp_enqueue_script( 'as-timepicker', trailingslashit( AS_URL ) . 'js/jquery.timePicker.min.js', array( 'jquery', 'as-scripts' ) );
		wp_enqueue_script( 'as-datetime', trailingslashit( AS_URL ) . 'js/field.datetime.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'as-scripts' ) );

	}

	public function html() { ?>

		<input <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'as_text_small as_datepicker' ); ?> type="text" <?php $this->name_attr(); ?>  value="<?php echo $this->value ? esc_attr( date( 'm\/d\/Y', $this->value ) ) : '' ?>" />

	<?php }

	public function parse_save_values() {

		foreach( $this->values as &$value )
			$value = strtotime( $value );

		sort( $this->values );

	}

}

/**
 * Date picker for date and time (seperate fields) box.
 *
 */
class AS_Datetime_Timestamp_Field extends AS_Field {

	public function enqueue_scripts() {

		parent::enqueue_scripts();

		wp_enqueue_style( 'as-jquery-ui', trailingslashit( AS_URL ) . 'css/jquery-ui.css', '1.10.3' );

		wp_enqueue_script( 'as-timepicker', trailingslashit( AS_URL ) . 'js/jquery.timePicker.min.js', array( 'jquery', 'as-scripts' ) );
		wp_enqueue_script( 'as-datetime', trailingslashit( AS_URL ) . 'js/field.datetime.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'as-scripts' ) );
	}

	public function html() { ?>

		<input <?php $this->id_attr('date'); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'as_text_small as_datepicker' ); ?> type="text" <?php $this->name_attr( '[date]' ); ?>  value="<?php echo $this->value ? esc_attr( date( 'm\/d\/Y', $this->value ) ) : '' ?>" />
		<input <?php $this->id_attr('time'); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'as_text_small as_timepicker' ); ?> type="text" <?php $this->name_attr( '[time]' ); ?> value="<?php echo $this->value ? esc_attr( date( 'h:i A', $this->value ) ) : '' ?>" />

	<?php }

	public function parse_save_values() {

		// Convert all [date] and [time] values to a unix timestamp.
		// If date is empty, assume delete. If time is empty, assume 00:00.
		foreach( $this->values as $key => &$value ) {
			if ( empty( $value['date'] ) )
				unset( $this->values[$key] );
			else
				$value = strtotime( $value['date'] . ' ' . $value['time'] );
		}

		$this->values = array_filter( $this->values );
		sort( $this->values );

		parent::parse_save_values();

	}

}

/**
 * Standard text field.
 *
 * Args:
 *  - int "rows" - number of rows in the <textarea>
 */
class AS_Textarea_Field extends AS_Field {

	public function html() { ?>

		<textarea <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr(); ?> rows="<?php echo ! empty( $this->args['rows'] ) ? esc_attr( $this->args['rows'] ) : 4; ?>" <?php $this->name_attr(); ?>><?php echo esc_html( $this->value ); ?></textarea>

	<?php }

}

/**
 * Code style text field.
 *
 * Args:
 *  - int "rows" - number of rows in the <textarea>
 */
class AS_Textarea_Field_Code extends AS_Textarea_Field {

	public function html() {

		$this->args['class'] .= ' code';

		parent::html();

	}

}

/**
 *  Colour picker
 *
 */
class AS_Color_Picker extends AS_Field {

	public function enqueue_scripts() {

		parent::enqueue_scripts();

		wp_enqueue_script( 'as-colorpicker', trailingslashit( AS_URL ) . 'js/field.colorpicker.js', array( 'jquery', 'wp-color-picker', 'as-scripts' ) );
		wp_enqueue_style( 'wp-color-picker' );
	}

	public function html() { ?>

		<input <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'as_colorpicker as_text_small' ); ?> type="text" <?php $this->name_attr(); ?> value="<?php echo esc_attr( $this->get_value() ); ?>" />

	<?php }

}

/**
 * Standard radio field.
 *
 * Args:
 *  - bool "inline" - display the radio buttons inline
 */
class AS_Radio_Field extends AS_Field {

	public function html() {

		if ( $this->has_data_delegate() )
			$this->args['options'] = $this->get_delegate_data(); ?>

			<?php foreach ( $this->args['options'] as $key => $value ): ?>

			<input <?php $this->id_attr( 'item-' . $key ); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr(); ?> type="radio" <?php $this->name_attr(); ?>  value="<?php echo esc_attr( $key ); ?>" <?php checked( $key, $this->get_value() ); ?> />
			<label <?php $this->for_attr( 'item-' . $key ); ?> style="margin-right: 20px;">
				<?php echo esc_html( $value ); ?>

			<?php endforeach; ?>

	<?php }

}

/**
 * Standard checkbox field.
 *
 */
class AS_Checkbox extends AS_Field {

	public function title() {}

	public function html() { ?>

		<input <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr(); ?> type="checkbox" <?php $this->name_attr(); ?>  value="1" <?php checked( $this->get_value() ); ?> />
		<label <?php $this->for_attr(); ?>><?php echo esc_html( $this->args['name'] ); ?>

	<?php }

}

/**
 * Standard title used as a splitter.
 *
 */
class AS_Title extends AS_Field {

	public function title() {
		?>

				<?php echo esc_html( $this->title ); ?>

		<?php

	}

	public function html() {}

}

/**
 * wysiwyg field.
 *
 */
class AS_wysiwyg extends AS_Field {

	function enqueue_scripts() {

		parent::enqueue_scripts();

		wp_enqueue_script( 'as-wysiwyg', trailingslashit( AS_URL ) . 'js/field-wysiwyg.js', array( 'jquery', 'as-scripts' ) );
	}

	public function html() {

		$id   = $this->get_the_id_attr();
		$name = $this->get_the_name_attr();

		$field_id = $this->get_js_id();

		printf( '
', $id, $name, $field_id );

		if ( $this->is_placeholder() ) 	{

			// For placeholder, output the markup for the editor in a JS var.
			ob_start();
			$this->args['options']['textarea_name'] = 'as-placeholder-name-' . $field_id;
			wp_editor( '', 'as-placeholder-id-' . $field_id, $this->args['options'] );
			$editor = ob_get_clean();
			$editor = str_replace( array( "\n", "\r" ), "", $editor );
			$editor = str_replace( array( "'" ), '"', $editor );

			?>

			<?php

		} else {

			$this->args['options']['textarea_name'] = $name;
			echo wp_editor( $this->get_value(), $id, $this->args['options'] );

		}

		echo '
';

	}

	/**
	 * Check if this is a placeholder field.
	 * Either the field itself, or because it is part of a repeatable group.
	 *
	 * @return bool
	 */
	public function is_placeholder() {

		if ( isset( $this->parent ) && ! is_int( $this->parent->field_index ) )
			return true;

		else return ! is_int( $this->field_index );

	}

}

/**
 * Standard select field.
 *
 * @supports "data_delegate"
 * @args
 *     'options'     => array Array of options to show in the select, optionally use data_delegate instead
 *     'allow_none'   => bool Allow no option to be selected (will palce a "None" at the top of the select)
 *     'multiple'     => bool whether multiple can be selected
 */
class AS_Select extends AS_Field {

	public function __construct() {

		$args = func_get_args();

		call_user_func_array( array( 'parent', '__construct' ), $args );

		$this->args = wp_parse_args( $this->args, array( 'multiple' => false ) );

	}

	public function parse_save_values(){

		if ( isset( $this->parent ) && isset( $this->args['multiple'] ) && $this->args['multiple'] )
			$this->values = array( $this->values );

	}

	public function get_options() {

		if ( $this->has_data_delegate() )
			$this->args['options'] = $this->get_delegate_data();

		return $this->args['options'];
	}

	public function enqueue_scripts() {

		parent::enqueue_scripts();

		wp_enqueue_script( 'select2', get_template_directory_uri() . '/js/select2/select2.js', array( 'jquery' ) );
		wp_enqueue_script( 'field-select', trailingslashit( AS_URL ) . 'js/field.select.js', array( 'jquery', 'select2', 'as-scripts' ) );
	}

	public function enqueue_styles() {

		parent::enqueue_styles();

		wp_enqueue_style( 'select2', get_template_directory_uri() . '/js/select2/select2.css' );
	}

	public function html() {

		if ( $this->has_data_delegate() )
			$this->args['options'] = $this->get_delegate_data();

		$this->output_field();

		$this->output_script();

	}

	public function output_field() {

		$val = (array) $this->get_value();

		$name = $this->get_the_name_attr();
		$name .= ! empty( $this->args['multiple'] ) ? '[]' : null;

		?>

		<select
			<?php $this->id_attr(); ?>
			<?php $this->boolean_attr(); ?>
			<?php printf( 'name="%s"', esc_attr( $name ) ); ?>
			<?php printf( 'data-field-id="%s" ', esc_attr( $this->get_js_id() ) ); ?>
			<?php echo ! empty( $this->args['multiple'] ) ? 'multiple' : '' ?>
			class="as_select"
			style="width: 100%"
		>

			<?php if ( ! empty( $this->args['allow_none'] ) ) : ?>
				<option value=""><?php echo esc_html_x( 'None', 'select field', 'as' ) ?></option>
			<?php endif; ?>

			<?php foreach ( $this->args['options'] as $value => $name ): ?>
			   <option <?php selected( in_array( $value, $val ) ) ?> value="<?php echo esc_attr( $value ); ?>"><?php echo esc_html( $name ); ?></option>
			<?php endforeach; ?>

		</select>

		<?php
	}

	public function output_script() {
		?>

		<?php
	}

}

class AS_Taxonomy extends AS_Select {

	public function __construct() {

		$args = func_get_args();

		call_user_func_array( array( 'parent', '__construct' ), $args );

		$this->args['data_delegate'] = array( $this, 'get_delegate_data' );

	}

	public function get_delegate_data() {

		$terms = $this->get_terms();

		$term_options = array();

		foreach ( $terms as $term )
			$term_options[$term->term_id] = $term->name;

		return $term_options;

	}

	private function get_terms() {

		return get_terms( $this->args['taxonomy'], array( 'hide_empty' => $this->args['hide_empty'] ) );

	}

}

/**
 * Post Select field.
 *
 * @supports "data_delegate"
 * @args
 *     'options'     => array Array of options to show in the select, optionally use data_delegate instead
 *     'allow_none'   => bool Allow no option to be selected (will palce a "None" at the top of the select)
 *     'multiple'     => bool whether multiple can be selected
 */
class AS_Post_Select extends AS_Select {

	public function __construct() {

		$args = func_get_args();

		call_user_func_array( array( 'parent', '__construct' ), $args );

		$this->args = wp_parse_args( $this->args, array( 'use_ajax' => false, 'ajax_url' => '' ) );

		$this->args['query'] = isset( $this->args['query'] ) ? $this->args['query'] : array();

		if ( ! $this->args['use_ajax'] ) {

			$this->args['data_delegate'] = array( $this, 'get_delegate_data' );

		} else {

			$this->args['ajax_url'] = admin_url( 'admin-ajax.php' );
			$this->args['ajax_args'] = wp_parse_args( $this->args['query'] );

		}

	}

	public function get_delegate_data() {

		$data = array();

		foreach ( $this->get_posts() as $post_id )
			$data[$post_id] = get_the_title( $post_id );

		return $data;

	}

	private function get_posts() {

		$this->args['query']['fields'] = 'ids';
		$query = new WP_Query( $this->args['query'] );

		return isset( $query->posts ) ? $query->posts : array();

	}

	public function parse_save_value() {

		// AJAX multi select2 data is submitted as a string of comma separated post IDs.
		// If empty, set to false instead of empty array to ensure the meta entry is deleted.
		if ( $this->args['ajax_url'] && $this->args['multiple'] ) {
			$this->value = ( ! empty( $this->value ) ) ? explode( ',', $this->value ) : false;
		}

	}

	public function output_field() {

		// If AJAX, must use input type not standard select.
		if ( $this->args['ajax_url'] ) :

			?>

			<input
				<?php $this->id_attr(); ?>
				<?php printf( 'value="%s" ', esc_attr( implode( ',' , (array) $this->value ) ) ); ?>
				<?php printf( 'name="%s"', esc_attr( $this->get_the_name_attr() ) ); ?>
				<?php printf( 'data-field-id="%s" ', esc_attr( $this->get_js_id() ) ); ?>
				<?php $this->boolean_attr(); ?>
				class="as_select"
				style="width: 100%"
			/>

			<?php

		else :

			parent::output_field();

		endif;

	}

	public function output_script() {

		parent::output_script();

		?>

		<?php
	}

}

// TODO this should be in inside the class
function as_ajax_post_select() {

	$post_id = ! empty( $_POST['post_id'] ) ? intval( $_POST['post_id'] ) : false;
	$nonce   = ! empty( $_POST['nonce'] ) ? $_POST['nonce'] : false;
	$args    = ! empty( $_POST['query'] ) ? $_POST['query'] : array();

	if ( ! $nonce || ! wp_verify_nonce( $nonce, 'as_select_field' ) || ! current_user_can( 'edit_post', $post_id ) ) {
		echo json_encode( array( 'total' => 0, 'posts' => array() ) );
		exit;
	}

	$args['fields'] = 'ids'; // Only need to retrieve post IDs.

	$query = new WP_Query( $args );

	$json = array( 'total' => $query->found_posts, 'posts' => array() );

	foreach ( $query->posts as $post_id )
		array_push( $json['posts'], array( 'id' => $post_id, 'text' => get_the_title( $post_id ) ) );

	echo json_encode( $json );

	exit;

}
add_action( 'wp_ajax_as_post_select', 'as_ajax_post_select' );

/**
 * Field to group child fieids
 * pass $args[fields] array for child fields
 * pass $args['repeatable'] for cloing all child fields (set)
 *
 * @todo remove global $post reference, somehow
 */
class AS_Group_Field extends AS_Field {

	static $added_js;
	private $fields = array();

	function __construct() {

		$args = func_get_args(); // you can't just put func_get_args() into a function as a parameter
		call_user_func_array( array( 'parent', '__construct' ), $args );

		if ( ! empty( $this->args['fields'] ) ) {
			foreach ( $this->args['fields'] as $f ) {

				$field_value = isset( $this->value[$f['id']] ) ? $this->value[$f['id']] : '';
				$f['uid'] = $f['id'];

				$class = _as_field_class_for_type( $f['type'] );
				$f['show_label'] = true;

				// Todo support for repeatable fields in groups
				$this->add_field( new $class( $f['uid'], $f['name'], (array) $field_value, $f ) );

			}
		}

	}

	public function enqueue_scripts() {

		parent::enqueue_scripts();

		foreach ( $this->args['fields'] as $f ) {

			$class = _as_field_class_for_type( $f['type'] );
			$field = new $class( '', '', array(), $f );
			$field->enqueue_scripts();
		}
	}

	public function enqueue_styles() {

		parent::enqueue_styles();

		foreach ( $this->args['fields'] as $f ) {
			$class = _as_field_class_for_type( $f['type'] );
			$field = new $class( '', '', array(), $f );
			$field->enqueue_styles();
		}

	}

	public function display() {

		global $post;

		$field = $this->args;

		$this->title();
		$this->description();

		// if there are no values and it's not repeateble, we want to do one with empty string
		if ( ! $this->get_values() && ! $this->args['repeatable'] )
			$values = array( '' );
		else
			$values = $this->get_values();

		$i = 0;
		foreach ( $values as $value ) {

			$this->field_index = $i;
			$this->value = $value;

			?>

			<div class="field-item" data-class="<?php echo esc_attr( get_class($this) ) ?>" style="<?php echo esc_attr( $this->args['style'] ); ?>">
				<?php $this->html(); ?>

			<?php

			$i++;

		}

		if ( $this->args['repeatable'] ) {

			$this->field_index = 'x'; // x used to distinguish hidden fields.
			$this->value = ''; ?>

				<div class="field-item hidden" data-class="<?php echo esc_attr( get_class($this) ) ?>" style="<?php echo esc_attr( $this->args['style'] ); ?>">

					<?php $this->html(); ?>

				<button class="button repeat-field"><?php esc_html_e( 'Add New Group', 'as' ); ?></button>

		<?php }

	}

	public function html() {

		$fields = &$this->get_fields();
		$value = $this->value;

		if ( ! empty( $value ) ) {
			foreach ( $value as $field_id => $field_value ) {
				if ( ! empty( $field_value ) && ! empty( $fields[$field_id] ) )
					$fields[$field_id]->set_values( (array) $field_value );
				else if ( ! empty( $fields[$field_id] ) )
					$fields[$field_id]->set_values( array() );
			}
		} else {
			foreach ( $fields as &$field ) {
				$field->set_values( array() );
			}
		}

		?>

		<?php if ( $this->args['repeatable'] ) : ?>
			<button class="as-delete-field" title="Remove field">× Remove Group</button>
		<?php endif; ?>

		<?php AS_Meta_Box::layout_fields( $fields ); ?>

	<?php }

	public function parse_save_values() {

		$fields = &$this->get_fields();
		$values = &$this->get_values();

		foreach ( $values as &$group_value ) {
			foreach ( $group_value as $field_id => &$field_value ) {

				if ( ! isset( $fields[$field_id] ) ) {
					$field_value = array();
					continue;
				}

				$field = $fields[$field_id];
				$field->values = $field_value;
				$field->parse_save_values();

				$field_value = $field->get_values();

				// if the field is a repeatable field, store the whole array of them, if it's not repeatble,
				// just store the first (and only) one directly
				if ( ! $field->args['repeatable'] )
					$field_value = reset( $field_value );
			}
		}

	}

	public function add_field( AS_Field $field ) {
		$field->parent = $this;
		$this->fields[$field->id] = $field;
	}

	public function &get_fields() {
		return $this->fields;
	}

	public function set_values( array $values ) {

		$this->values = $values;
		$fields = &$this->get_fields();

		foreach ( $values as $value ) {
			foreach ( $value as $field_id => $field_value ) {
				$fields[$field_id]->set_values( (array) $field_value );
			}
		}

	}

}


Native storage approaches, architectures and techniques for data processing and data management.
I. Petrov, A. Koch, S. Hardock, T. Vincon. C. Riegger Native Storage Techniques for Data Management. In Proc. ICDE 2019.
In the present tutorial we perform a cross-cut analysis of database storage management from the perspective of modern storage technologies. We argue that neither the design of modern DBMS, nor the architecture of modern storage technologies are aligned with each other. Moreover, the majority of the systems rely on a complex multi-layer and compatibility-oriented storage stack. The result is needlessly suboptimal DBMS performance, inefficient utilization, or significant write amplification due to outdated abstractions and interfaces. In the present tutorial we focus on the concept of native storage, which is storage operated without intermediate abstraction layers over an open native storage interface and is directly controlled by the DBMS. We cover the following aspects of native storage: (i) architectural approaches and techniques; (ii) interfaces; (iii) storage abstractions; (iv) DBMS/system integration; (v) in-storage processing.
Check out DBLab's GitHub repository.
We have open-sourced NoFTL, SIAS, and cIPT.
Clone, download, use ... and send us feedback.
C. Riegger, T. Vincon, I. Petrov.
C. Riegger, T. Vincon, I. Petrov. Efficient Data and Indexing Structure for Blockchains in Enterprise Systems. In Proc. iiWAS 2018.
Blockchains yield to new workloads in database management systems and K/V-Stores. Distributed Ledger Technology (DLT) is a technique for managing transactions in 'trustless' distributed systems. Yet, clients of nodes in blockchain networks are backed by 'trustworthy' K/V-Stores, like LevelDB or RocksDB in Ethereum, which are based on Log-Structured Merge Trees (LSM-Trees). However, LSM-Trees do not fully match the properties of blockchains and enterprise workloads. In this paper, we claim that Partitioned B-Trees (PBT) fit the proper- ties of this DLT: uniformly distributed hash keys, immutability, consensus, invalid blocks, unspent and off-chain transactions, reorganization and data state / version ordering in a distributed log-structure. PBT can locate records of newly inserted key-value pairs, as well as data of unspent transactions, in separate partitions in main memory. Once several blocks acquire consensus, PBTs evict a whole partition, which becomes immutable, to sec- ondary storage. This behavior minimizes write amplification and enables a beneficial sequential write pattern on modern hardware. Furthermore, DLT implicate some type of log-based versioning. PBTs can serve as MV-Store for data storage of logical blocks and indexing in multi-version concurrency control (MVCC) transaction processing.
In Enc. Big Data Technologies Sakr, Zomaya (Eds.) Springer 2018.
T. Vincon, S. Hardock C. Riegger, J. Oppermann, A. Koch, I. Petrov.
T. Vincon, S. Hardock C. Riegger, J. Oppermann, A. Koch, I. Petrov. NoFTL-KV: Tackling Write-Amplification on KV-Stores with Native Storage Management. In Proc. EDBT 2018.
Modern persistent Key/Value stores are designed to meet the demand for high transactional throughput and high data-ingestion rates. Still, they rely on backwards-compatible storage stack and abstractions to ease space management, foster seamless proliferation and system integration. Their dependence on the traditional I/O stack has negative impact on performance, causes unacceptably high write-amplification, and limits the storage longevity.
In the present paper we present NoFTL-KV, an approach that results in a lean I/O stack, integrating physical storage management natively in the Key/Value store. NoFTL-KV eliminates backwards compatibility, allowing the Key/Value store to directly consume the characteristics of modern storage technologies. NoFTL-KV is implemented under RocksDB. The performance evaluation under LinkBench shows that NoFTL-KV improves transactional throughput by 33%, while response times improve up to 2.3x. Furthermore, NoFTL-KV reduces write-amplification 19x and improves storage longevity by imately the same factor.
C. Riegger, T. Vincon, I. Petrov. Multi-Version Indexing and modern Hardware Technologies - A Survey of present Indexing Approaches. In Proc. iiWAS 2017.
Characteristics of modern computing and storage technologies fundamentally differ from traditional hardware. There is a need to optimally leverage their performance, endurance and energy consumption characteristics. Therefore, existing architectures and algorithms in modern high performance database management systems have to be redesigned and advanced. Multi Version Concurrency Control (MVCC) approaches in data-base management systems maintain multiple physically independent tuple versions. Snapshot isolation approaches enable high parallelism and concurrency in workloads with almost serializable consistency level. Modern hardware technologies benefit from multi-version approaches. Indexing multi-version data on modern hardware is still an open research area. In this paper, we provide a survey of popular multi-version indexing approaches and an extended scope of high performance single-version approaches. An optimal multi-version index structure brings look-up efficiency of tuple versions, which are visible to transactions, and effort on index maintenance in balance for different workloads on modern hardware technologies.
C. Riegger, T. Vincon, I. Petrov. Write-Optimized Indexing with Partitioned B-Trees. In Proc. iiWAS 2017.
Database management systems (DBMS) are critical performance component in large scale applications under modern update-intensive workloads. Additional access paths accelerate look-up performance in DBMS for frequently queried attributes, but the required maintenance slows down update performance. The ubiquitous B + -Tree is a commonly used key-indexed access path that is able to support many required functionalities with logarithmic access time to requested records. Modern processing and storage technologies and their characteristics require reconsideration of matured indexing approaches for today's workloads. Partitioned B-Trees (PBT) leverage characteristics of modern hardware technologies and complex memory hierarchies as well as high update rates and changes in workloads by maintaining partitions within one single B + -Tree. This paper includes an experimental evaluation of PBTs optimized write pattern and performance improvements. With PBT transactional throughput under TPC-C increases 30%; PBT results in beneficial sequential write patterns even in presence of updates and maintenance operations.
© DBLab. All rights reserved.


this bicycle look a bit weird to me... oh.. there is 2 seat! but is it really suitable for couple? maybe.. maybe not?
Tada~ found another looong bicycle for us. gosh.. never think that i will ride on this kind of bicycle before. LOL.
a group photos Cyclist . the Kanasai Cyclist . let the cycling session begins.
there is a tough bridge, and we crossing a river. and stop by to burn some shutter.
another group photo of Kanasai Cyclist.
The Twin Seat Cyclist, from the twin seat cycle.
we reached Hou Li, and here come another group photo.
and when you see this Houli Horse Ranch, mean we're reached the end and time to U-Turn..
here's the map of the bicycle map, and we took the shortest path which clocked 18KM!


text:
http://tvtropes.org/pmwiki/pmwiki.php/Literature/TheExorcist
Literature / The Exorcist
ReferencedBy
Create New - Create New - Analysis FanficRecs FanWorks Haiku ImageLinks PlayingWith Quotes Recap Synopsis Timeline
The Exorcist is 1971 horror novel by William Peter Blatty, which was adapted into a 1973 film.
It was followed by a 1983 sequel, Legion, which was later adapted into The Exorcist III.
Deadpan Snarker: Karl can also be one of these. He and Chris have several low-key sparring exchanges.
Disappeared Dad: Howard MacNeil is in Europe for the whole book, which the characters surmise is the reason of her pick of the name "Captain Howdy."
Driven to Suicide: The Gemini Killer in Legion.
Evil vs. Evil: The theme of "evil against evil" is prevalent, starting with Merrin's archeological trip to Northern Iraq where he finds a demon statue that the natives stated was an evil artifact to combat evil. This foreshadows Karras' "evil act" of accepting Pazuzu into himself, to save Regan: also, suicide's a mortal sin in the Catholic Church. The reason it works is that Karras, like Christ, is willing to give his life to save another (John 15:13).
Fire-Forged Friends: The book focuses on the growing friendship between Kinderman and Karras.
It Amused Me:
Burke Dennings enjoys tormenting the housekeeper Karl simply because he can. After Burke's death, the possessed Regan spends quite a bit of time speaking with Burke's voice and continues to torment Karl.
The demon also mocks Karras for the drugs he's using to keep Regan stable, informing him (correctly) that he's going to give Regan a fatal heart arrhythmia if he keeps it up.
"It" Is Dehumanizing: A variation. The demon never refers to Regan as human or a girl, preferring to call her a sow.
Maybe Magic, Maybe Mundane: Karras continues to find scientific explanations for the various phenomena for most of the book. It's more than a bit of a stretch by the end, but a rational explanation is at least possible, if not quite plausible. Averted in The Film of the Book by the floating body of Regan, which is pretty tough to explain away as anything but supernatural. In the novel, she does not float. The demon does some telekinesis, but Karras is aware of scientific research that indicates evidence for TK, so it doesn't count. A lot of the bed lurching around the room, etc., is explained by her superhuman strength as she thrashes around. Speaking foreign languages? Regan herself has only some basic French, but she could have picked up snippets of German, etc. from people around her. The demon answers Karras' questions in Latin, but Karras knows he's been formulating the answers in his mind before the demon speaks, so it could be simple telepathy (which also doesn't count because that is under scientific investigation, too.) All of this, the demon knows, and is playing Karras like a fish on a line.note Speaking backwards with multiple voices at once is what is the evidence she really is possessed.
No-Harm Requirement: The book has a desperate mother plead for help from two Catholic priests to remove an evil spirit that has turned her daughter into an Enfant Terrible. The trick, of course, is to extract the evil spirit while leaving the daughter mostly intact.
Nothing Is Scarier: A good chunk of the book is Karras thinking about recent cases of devil worship and Black Sabbath defacement, and it generates a genuine chilling slow-burn towards the climax.
Pet the Dog: Burke Dennings is a drunk and a vulgar, foul-mouthed, often hateful bastard, but he is very fond of Regan. He gives her a birthday party on the set, and when he films her cutting the cake he calls it a screen test. His love for her is what killed him; when Sharon left him alone in the house with her, he knew only that she was sick; he must have gone upstairs to check on her.
Say My Name: "MEEEEEEEEEEEERRRRRRRRRRRRRRRIIIIIIIIIIIIINNNNNNNNNNNNNNN!"
Shown Their Work: William Blatty dug really deep, finding literature about supposed epidemics of possession in the past as well as writings pro and con Psychic Powers and evidence for and against supernatural occurrence. He based much of the details on the legend of the "Devils of Loudon", where nuns made animal sounds, lifted up their skirts and yelled "Fuck me!", and a priest who did exorcisms was said to have become possessed himself. The exorcisms at Loudon were a public spectacle, held in the town square! The stories told by Mary, the Jeane Dixon Expy at Chris' party are all real. The medium who faked out the French empressnote She was Eugenie Montijo, the same Empress you see in The Song of Bernadette whose sick baby is helped by Lourdes water. was D.D. Home ; the Bavarian family who tried to burn all their worldly goodsnote not the baby, however, as Mary tells Chris: it wasn't about that are mentioned in Montague Summers' Encyclopedia of Witchcraft & Demonology which is probably the book Mary lends Chris. Blatty also used Traugott Oesterreich's 1921 psychology book Possession: Demoniacal and Other, a collection of historical accounts. The tale Fr. Karras tells Kinderman about the man who was convinced he was a werewolf is also true. However, that last one was mostly made up by the Church to rationalize the brutal torture and execution of a man and his daughter for becoming Protestants. Loudon had similar political motivations.
Ex-Heroes
Horror Literature
Expedition Z
Exodus UK
Literature of the 1970s
Extraterrestrial Civilizations

redpajama_set_name: RedPajamaCommonCrawl


To enable SSL/TLS protocols I had updated tls-default.conf file with "enabledProtocols=TLSv1.2"entry. And also add wrapper.java.additional.=-Djavax.net.debug=ssl to enable SSL debugging.
I am using Mule Version 3.5.2 And JDK 7 which has SunJSSE security provider which allows (PKCS12, SunX509 key/trust factories, SSLv3, TLSv1) protocols.
Is there any way to find out the enabled protocols apart from looking into SSL Handshake logs?
I had the same issue with Mule server 3.8.x which does not support TLSv1 protocol. down grading the mule server to 3.7.x resolved the issue.
Are you using this with FIPS enabled? In that case could you try adding the "enabledProtocols=TLSv1.2" line to tls-fips140-2.conf?
Can you share your XML config? I think you may be affected by another flavor of https://www.mulesoft.org/jira/browse/MULE-7663.
This resolved my error and I was able to connect.


text:
Fuser, the Secret Best Multiplayer Game Out There, is Down to $40
Giovanni Colantonio
Fuser (Switch Digital) | $40 | Best Buy
Fuser (Xbox Digital) | $40 | Best Buy
Screenshot: Harmonix
You may have heard of Fuser, Harmonix's DJ'ing game where players can make mash-ups. What you may not know is that it's secretly one of the best multiplayer games out right now. That's thanks to the game's freestyle co-op mode where players take turns building on each other's mixes. It's an extremely chill experience that's the video game equivalent of passing the aux. Fuser keeps expanding with new songs, so it's an especially great time to hop in and see what the fuss is about. Best Buy currently has the game down to $40 on Xbox and Switch, so hop in with a friend and make some chill beats to study and relax to.
Fuser (Switch Digital)
Buy for $40 at Best Buy
Fuser (Xbox Digital)


Well, I'm sure if you've been shopping on Madison Avenue any time in the last few months - or read more that one blog posting in the last 60 days - you're most like aware that Oscar de la Renta has launched a new collection of textiles with Lee Jofa. And to celebrate and publicize the new fabric line - a collection of skirts were made from a small selection of the textiles.
And NOW, they're being auctioned off for charity! With all proceeds going to Casa del Niño.
"Founded in 1982 by Ziomara Menendez and Oscar de la Renta, Casa del Nino is regarded as the most complete project of child assistance in the Dominican Republic, and is considered to be a model of efficiency and quality care. At Casa del Nino every child receives food, full dental and medical care, and vocational training for the age appropriate - all in hopes of a better tomorrow for the youth of the community. Today, this worthwhile organization cares for more than 14500 children, from newborns to young adults. "
"Custom designs created by Oscar de la Renta for the launch of his exclusive collections of fabrics with Lee Jofa will be auctioned for charity. The items were created by hand in the atelier of Mr. de la Renta, and feature the hallmarks of his superb quality and workmanship.
Each skirt is fully lined, women's designer size 4, and created from fabrics from Oscar de la Renta's Home collection. There are nine floor length skirts and one caftan made from various patterns from Mr. de la Renta's collection. Each item is exquisite and a one of a kind collector's item. Bidding will be hosted online from September 7, 2010 through November 30, 2010 at biddingforgood.com with an opening bid of $750 for each item."
To see the complete collection, and to get involved with the bidding - go to biddingforgood.com - and see which one might be perfect first those upcoming holiday parties. Remember, it's only 88 days until Christmas!
PS. and seriously, if anyone from my little blogging world bids on and ends up WINNING one of these beautiful pieces - you HAVE to let me know - and pictures WILL be posted here. lol.
"Weekend in Scotland . . . "
Just a little something lush and romantic for your weekend pleasure. Castle Forter in Perthshire (North of Edinburgh) is a excellent example of Scotch Baronial design - and also a stunning example of the work of London interior designer Katharine Pooley.
Originally built in 1560, Forter Castle lay as a ruin for over 300 years before being restored in 1980. Katharine took on the challenge of decorating and designing this exceptionally beautiful, historic castle in a style which would successfully combine the demands of contemporary living and entertaining, but not detract from the heritage of the building.
"One For the Money, Two for the . . . "
Let's hop back on the "Love Letters" Express . . . and continue are little trip through the alphabet of all the things I love.
And let me tell you. I. Love. Shopping. Both the strategic 'I need to find this specific thing in the next 10 minutes' kinda shopping, and the more general (and somewhat less cardio-centric) 'I've got all day to wander and shop' kinda shopping.
As I've said on several occasions, I firmly believe that there is a shopping gene. And I know that I came by this genetically from my mother's side of the family. I think I've been out for a good long shop with almost every relative on the Willis and Meacham side of the family. We also all seem to genetically have very tiny wrists. I've always wondered if there is any connection there . . . lol.
So for shopping - and appropriately on a weekend - "O' is for . . .
some of our most important designers.
This weekend with Madeline Stuart and Steven Sclaroff.
"Prepared to Launch . . . "
For those of you who thought maybe you'd missed something - yes - I was in New York for about 26 hours the first of this week. I had a quick client meeting Monday morning . . . and then the great pleasure of attending the launch party for the premier issue of Rue Magazine later that evening.
But, let's start at the very beginning . . .
After landing Monday morning from the red-eye - and after a quick meeting - I was fortunate to run into Jonathan Legate whilst shopping my way down Madison Ave. We'd planned to connect later in the day - but, realized we were just 6 blocks apart - so ended up window shopping together for most of the afternoon.
Then Jonathan and I met up with Maybelline Te for a quick drink at Campbell Apartment in Grand Central Station.
Jonathan and me, waiting for the subway.
And then, there was the party.
It was like being dropped into the middle of social media heaven. There was such an amazing energy in the room. Bloggers and designers from around the country. And endless conversations beginning with "it feels like I've already met you!"
And more shots of the crowd.
And then - after a busy day - and despite several invitations to dinner - I finally admitted exhaustion.
and quiet stroll back up Lexington to my hotel - and I was planted in the comfy bed within 13 minutes of getting to my room.
Zzzzzzzzzzzzzzzz . . . .
With one other meeting Tuesday morning - and then a quick trip around Central Park - then off to the airport.
"Joe Nye . . . "
Well the weekend is upon us once again - and blessedly a couple of days away from the office and some time to relax and enjoy time with friends - and another Sunday morning at the flea market - and some time to peruse the sales at One Kings Lane - and a few moments to revel in the fantastic designs of the fantastic Joe Nye.
Now when I started working on the "Love Letters" series - my plan was not to include any specific designers. But HOW could I let the letter "n" pass by without highlighting Joe's beautiful work.
I love his great flair with colour.
And his pitch-perfect ability for mixing styles and patterns.
And a few more shots from "Flair."
A few images of Joe's home in Los Angeles - from House Beautiful.
And his wonderful work at the Kip's Bay Showhouse last year.
from the pages of House Beautiful.
their home is clearly alright with me - lol !
If you haven't ordered Joe's book - it is just marvelous.
GREAT photography - and great entertaining advice.
"Hey Y'all . . . "
And we'll get back to the alphabet tomorrow . . . but, I kinda wanted to touch base and confirm that I'm still amongst the land of the living.
But - there have been several things happening in the last few days that I wanted to share so - in no particular order . . .
Rue Magazine. Premier issue went live yesterday. And I'm truly impressed. A great mix of styles. A virtual who's who of online personalities. Fashion. Shopping. Parties.
Also LOVED seeing the Spring 2011 Line from Ralph Lauren yesterday.
Beautiful silhouettes. Wonderful fabrics. Great style.
Spring 2011 men's line from Michael Bastian.
We'll be back with "N" tomorrow - and will feature one of the only two designers in the mix.
"A Little Madness Now and Then . . . "
Well, it's been one of my traditional busy, busy, busy weeks here at the office - and I apologize for going somewhat 'radio-silent' these last few days. Working on a little something that's going to be quite exciting - when, and if, it all comes together. I'll keep y'all informed as thing start coming together.
But, despite my last posting (which was about being 'lazy'), I'm back in the saddle and ready to continue our adventurous tour through the alphabet in the "Love Letters" series.
It's something that I do every week.
Sometimes I even do it in a larger group.
It's easy to do - but, it DOES take some focus.
And it seems like it's ALWAYS on my mind.
And the topic of endless conversation amongst my friends.
"M" is for . . .
Jon Hamm, as Don Draper.
I'm not quite sure how many of you are watching this every Sunday night on AMC - but, I almost can't begin to recommend it highly enough.
And easily some of the best writing on television today.
And clearly, some of the best costuming and set design anywhere. Ever.
A great deal of the stories take place in an advertising agency during the 1960's.
War hero. Award winning advertising genius. Cad.
And one of my favourite characters, Peggy Olson.
Brought into the agency as a secretary, but clearly capable of SO much more.
Elizabeth Moss, as Peggy Olson.
When the show returned last month - Peggy was almost unrecognizable. The time-line had skipped forward just over a year - but, Peggy was clearly beginning to come into her own at the agency. One of the best aspects of the show - is its incredible attention to detail. And it's been great seeing the great changes in style, fashion, technology, and design over the first few seasons as we've progressed from the early - to now the mid-60's.
OMG. And then there's Joan.
Joan Holloway. Office Manager. Smart. No-nonsense.
When I grow up, I wanna be Joan Holloway. There, I said it.
Or maybe I just want to be that confident. That self-assured. Maybe even just that SMART.
You could easily see that if this series took place set in, oh - I don't know, the early 1980's - Joan would be chairman of the board by now. lol.
But, ok, this is supposed to be a design blog - so we can examine a few shots of the Draper home over the last few years.
One of the many things I love about the show is its intersection with parts of my own life. If you follow the time line of the show forward - I'm about the same age as the Draper's youngest son Gene. We were both born in the early 60's. And seeing his life brings back SO many memories of my own upbringing. Of my Mom. And my Dad. And the way my brother and I dressed for Halloween. The clothes my Mom would wear to diner parties at the house.
And a bit more on the design front - The Draper Living Room from the first several seasons . . .
And a screen shot of its new incarnation. HOW fabulous are those two armchairs?!?!?!?
As a favor to those who might be new to the show and getting ready to start watching - let's keep the spoilers to a minimum in the comments . . . thanks. I know I like getting my Mad Men fresh.
"Relax. Don't Do It . . . "


If you would like to subscribe to this blog, so that you automatically receive notification of new posts there are several ways to do so.
Facebook Facebook users can follow the MECP2 Duplication Syndrome Blog and all their favorite blogs using Networked Blogs. If you are a regular facebook user, this may be a good choice, especially if you have a a few blogs that you like to check on regularly. Just go to the MECP2 Duplication Syndrome Blog Networked Blogs page and click on the follow button.
Twitter Twitterers can follow the MECP2 Duplication Syndrome Blog by subscribing to MECP2 Twitter feeds. This will send you the title and link to each new posting.
Hi, I'm a mum of a 30 yr old son who has MECP2 Dup. I also have a grandson with Mecp2 dup. Where we live in NSW Australia we are the only family that we know of. I have been in contact with Pam Albert and have just met Alison, Leam and most importantly Asher, when visiting my daughter Teresa and her family in Newcastle.It was something having 3 boys in the same room who have Mecp2 duplication, we hope to do it again and get a photo. Asher was not very well and was in hospital, but we will meet again.
Good to hear from you Yvonne. Happy New Year to you and your family! It is always great to hear from other families who have faced and are facing some similar challenges.
I'm a special education teacher and for 2 years I have had a student with with MEPC2 Dup in myself-contained classroom of 6 students. His skills seem to be be regressing more every day. I want to make sure that I can prepare him for the best quality of life possible. My biggest concern is communication as he is non-verbal.


The colorful and relaxed Bocas Town has a welcoming atmosphere, with the modestly sized urban area showcasing typical Caribbean clapboard houses and home to a mixed community from across the world. Visits to Bocas Town allow for further exploration of the archipelago, with water taxis running regular services between the remote islands. Visitors get active on a range of ecotourism experiences, including diving in the biologically rich marine environment that thrives between each of the archipelago's islands. Surfers find a wealth of spots to choose from when on vacation in Bocas Town, with the water taxis on hand to take them and their board to the best beaches, no matter how remote. Bocas Town is in Isla Colon. Use our Panama vacation planner to arrange the details of your trip to Bocas Town and other destinations.
Look close to the waterfront for mid-range hotels, and on side streets for a selection of hostels. If you want a bit more seclusion than is on offer there, opt to stay farther afield in locations like Playa Bluff, a beach just a taxi ride to the north.


text:
Q: cron job occasionally not running I have a CentOS 6.6 server with the following packages installed:
crontabs-1.10-33.el6.noarch
cronie-1.4.4-12.el6.x86_64
cronie-anacron-1.4.4-12.el6.x86_64
kernel-2.6.32-504.3.3.el6.x86_64

Sometimes, one of the backup jobs that is scheduled to run daily simply does not run. The script is not even called according to /var/log/cron.log.
Interesting to mention that other jobs scheduled to run exactly at the same time run without any issues.
I can't reproduce the problem and haven't spotted any patterns on it. If I do nothing, then the job runs correctly the next day as expected.
crond simply ignores just one of the multiple jobs that are supposed to run at a particular time. This only happens sporadically.
I read in a few other places people talking about adding an empty line at the end of the crontab file. The job that's occasionally failing to run is indeed at the last line of my crontab file.
I could not find any confirmation this is a real or known bug.
# tail -2 /var/spool/cron/postgres
*  * * * * OTHERJOB
0 21 * * * /pg_backup.sh

This is all I have in my /var/log/cron.log
Mar 31 21:00:02 SERVERNAME [cron.info] CROND[19394]: (root) CMD (OTHERJOB)
Mar 31 21:00:02 SERVERNAME [cron.info] CROND[19418]: (postgres) CMD (/pg_backup.sh)
Mar 31 21:01:02 SERVERNAME [cron.info] CROND[20062]: (root) CMD (OTHERJOB)

Apr  1 21:00:02 SERVERNAME [cron.info] CROND[31349]: (root) CMD (OTHERJOB)
Apr  1 21:01:01 SERVERNAME [cron.info] CROND[32080]: (root) CMD (OTHERJOB)

See how OTHERJOB always run while on Apr 1 pg_backup.sh was not even executed.
I've already tried restarting crond but this keeps happening. This is affecting multiple servers with the same version of OS, kernel and cron RPMs.
There is a newer version of cronie (1.4.12), however upgrading it is not an option as we're already using the latest available version for Centos 6.6
I went through the changelog for all cronie versions after mine (1.4.4) and haven't seem any fix to this particular problem. Also checked all commit messages.

A: The original cron required each entry to end with a newline so yes sometimes you do need a blank line or something at the end.
   Although cron requires that each entry in a crontab end  in  a  newline
   character,  neither the crontab command nor the cron daemon will detect
   this error. Instead, the crontab will appear to load normally. However,
   the  command  will  never  run.  The best choice is to ensure that your
   crontab has a blank line at the end.

   4th Berkeley Distribution      29 December 1993               CRONTAB(1)

Some versions have it fixed or emit a warning for example Ubuntu Maverik (10.10) : crontab look at the diagnostics section at the bottom which states a warning will be written to syslog.
DIAGNOSTICS
       cron requires that each entry in a crontab end in a newline  character.
       If  the last entry in a crontab is missing a newline (ie, terminated by
       EOF), cron will consider the crontab (at  least  partially)  broken.  A
       warning will be written to syslog.

A: This is the first answer that comes up with the search text cron error getpwname failed so I thought I would post the cause of my issue:
I was using /etc/crontab but had forgotten to put the user in front of the command.
i.e.,
*/5   *  *  *  * /bin/bash <filename>

Instead of
 */5   *  *  *  * root /bin/bash <filename>

It gave the same error, go figure.

A: we use sssd for remote authentication. crond has to check for available users ahead of running jobs and it does this every 60 seconds.
sssd default client_idle_timeout is 60 seconds. so we had a race condition between sssd and crond
We only got to the bottom of this problem because on version 1.4.4-14 crond started being a bit more verbose about some errors.
* Thu Feb  5 12:00:00 2015 Tomáš Mráz <tmraz@redhat.com> - 1.4.4-14
- add log message when getpwnam fails

After updating to that version we started seeing the error below at the same time a job would not run:
[cron.err] crond[8654]: (user) ERROR (getpwnam() failed): Broken pipe

that brought us to this:
https://bugzilla.redhat.com/show_bug.cgi?id=1209600#c2
and finally to this:
https://access.redhat.com/solutions/1125133

Issue: sssd_be terminated with SIGKILL due to getpwnam() returning EPIPE
  (ie. broken pipe) can cause crond to silently skip cron job entries.

The suggest solution on the link above was add the line below to /etc/sssd/sssd.conf:
client_idle_timeout = 75

The change above has fixed the problem for us and cron no longer skips jobs.

redpajama_set_name: RedPajamaStackExchange


The current odds at leading online bookmaker World Sports Betting has Rory McIlroy the favourite at 7/1 with Dustin Johnson 10/1, Justin Rose 12/1, Tiger Woods 16/1 and you can get 18/1 and better the rest. You have to scroll fairly far down the betting list to find your first South African who is Louis Oosthuizen priced at 40/1. Oosthuizen was beaten in a payoff here by Bubba Watson a few years ago and he certainly showed he is coming into some excellent form in last week's WGC event.
I haven't finalized my US Masters betting strategy but one player who caught the eye last week was Lucas Bjerregaard who was a beaten semi-finalist at the WGC Match Play. He faded on Sunday but showed plenty during the week including a great victory over Tiger Woods in the quarters. He is currently priced at 125/1 and while realistically I don't see him winning the event as a 1st timer, I will be looking for a price on a Top 20 and will also be looking to back him in the Top Debutante market.
One player towards the top of the betting boards that may well get a few rand of mine thrown at him is Italian, Francesco Molinari. Molinari was a golfer that was always thereabouts but struggled to make it into the big league. He put his head down and made some changes to his game finding a bit more distance and in 2018 he was one of the hottest golfers on the planet and won The Open. Like Bjerregaard he lost in the semi-finals at the WGC, but for my money he was the best player all week and his putter was red hot which is critical for Masters success. At 22/1 to win the tournament, Molinari (whose best finish at the Masters is 19th) is shaping up as my main bet for my favourite golfing event of the year.
Lookout for our US Masters betting preview show on YouTube next week.
This article was written for the CitiGaming supplement of the Citizen Newspaper and was published on the 4th of April 2019.


text:
Kiama Cultural Arts Network
Kiama Municipal Council in partnership with the Kiama arts community
Weave Artist Directory
Artist Events & Workshops
Artist Gatherings
Arts Biz Program
Kiama Arts Precinct
Exhibition & Arts Spaces
Old Fire Station
Art @ the Library
Daisy the Decorated Dairy Cow
Urban Street Art
Flugelman Sculpture
Kiama Cultural Grants
Funding Links
This is a War Zone, Baby – Improvise!
1970. Aussie, strictly Kosher, recent ballet school graduate, seventeen year-young flamenco and jazz dancer, Aviva, goes to entertain the troops in Vietnam – with a rhythm and blues band.
Aviva Sheb'a toured (South) Vietnam for three months. Her inability to readjust to life in Australia following her tumultuous tour led the dancer to travel widely and to live in several different countries.
Aviva's survival and sanity-saving mechanism was – and remains – her art. She developed her own method of using voice and body as a way to express and integrate her deepest emotions. She coined the term, Vocal Dance, while working and living in Amsterdam in the 1970s. Her work as a performer and as a performance therapist has been embraced widely.
In 1996, Aviva began writing "This is a War Zone, Baby – Improvise!" and first performed it in the Adelaide Fringe, 2000. Since then, she has kept developing the show, performing various incarnations at festivals and conferences. The title comes from the exclamation she heard most on her tour. As it suggests, each show is different.
Kiama Municipal Council supported Aviva's show (that time under the name, Shebada!) with a generous Cultural Contributions Grant. In 2013, Aviva's show (back to the original name) was the first of the Make it @ Merrigong Studio Sessions, directed by Anne-Louise Rentell. In 2014, Anne-Louise and Aviva presented excerpts together at the International Oral History Congress in Barcelona.
Aviva is currently rehearsing a new version under the direction of UOW Creative Arts Faculty's Dr. Janys Hayes. This time, audiences will laugh and cry with Aviva as she shares some of her experiences she has not performed in Wollongong before as well as showing the development of Vocal Dance. Those who wish will also have a chance to experience the joys of Vocal Dance.
Now that the Phoenix Theatre Company have ownership of the Bridge Street Theatre, they are hosting a season of "This is a War Zone, Baby – Improvise!"
October: Friday 21, Saturday 22 at 8pm, Sunday 23 at 3pm.
Tickets: $15 www.phoenixtheatre.net.au/
Bridge Street Theatre, 24 Bridge Street,Coniston.
See www.avivasheba.com for further insight into Aviva's work.
Aviva Sheb'a, dance, music, performance, Phoenix Theatre, song, theatre
Kiama Readers Festival
The Escalators


text:
NASA Earth Expeditions
A Few of My Favorite (Frozen) Things
Sastrugi, crevasses, sea ice, and bergy bits—a few of my ever-changing favorite things. Credits: NASA/Kate Ramsayer
by Kate Ramsayer / ANTARCTICA /
I knew they were my favorite as soon as I saw them. Sastrugi, the ice dunes of the polar desert, covered the landscape when I first flew low over Antarctica with Operation IceBridge. They were amazing—winds had shaped them into repeating patterns, appearing as diamonds or fish scales or branching tree roots. They were the only texture in the vast ice sheet that stretched as far as the eye could see.
The next day, however, crevasses took the top spot. Gigantic cracks that bent around mountains as the mass of ice crept toward the ocean—those were definitely my new favorite ice formations. As our IceBridge team took measurements down a path that ICESat-2 would trace from its orbit in space, I wondered how the height profile from these instruments could reflect these seemingly bottomless and terrifying cracks in the ice.
Then sea ice made an appearance. Icebergs were trapped at awkward angles in the frozen floes, and new ice spreading across open waters in translucent blues and whites—those had to be the most artistic formations, right? Maybe so—in my mind—until the next flight, which measured a newly created gigantic iceberg, and I glimpsed the jumble of bergy bits and sea ice in the rift between it and the glacier.
A glacier on the Antarctic Peninsula flows into the Bellingshausen Sea. Credits: NASA/Kate Ramsayer
At least I would be safe from a new favorite ice formation on my last flight, I thought. A survey farther inland of a region we had flown before, it should be old hat. But no. As we flew toward the site, the skies cleared over the Antarctic Peninsula, revealing glacier after glacier after glacier, all textbook examples of how spectacular glaciers can be.
Every day flying over Antarctica with the Operation IceBridge campaign brought a new incredible stretch of ice that left me, a new visitor to the continent, awestruck. Many members of the team have been surveying the continent for years, using a suite of instruments to map the ice and bedrock and monitor change. I couldn't pick a favorite view, and can't imagine they could either, so instead I just asked some of the IceBridge crew for an example of one of the neatest things they've seen flying over Antarctica.
Actually seeing Pine Island and Thwaites glaciers, which she has studied for more than a decade, is a highlight for Brooke Medley, IceBridge's deputy project scientist. Her research showed that enough ice flows out of each glacier to contribute 1 millimeter to global sea level rise per decade. They're massive glaciers, and flying over them puts into perspective just how massive they are. Credits: NASA/Kate Ramsayer
The vastness of the Antarctic ice sheet can leave Eugenia DeMarco, IceBridge's project manager, speechless. It's just raw nature, she said, and provides a glimpse of what early explorers might have felt when they first ventured to this distant part of the world. Credits: NASA/Kate Ramsayer
In massive ice streams that appear solid and unmoving, it's the crevasses that remind you the ice is in motion, said Thorsten Markus, ICESat-2 project scientist. These giant breaks form as the faster ice downstream pulls away from the slower ice upstream. Credits: NASA/Brooke Medley
From above, crevasses can appear as wrinkles on fabric. Credits: NASA/Kate Ramsayer
The ice may seem desolate, but there's life in Antarctica, and Lyn Lohberger, an aircraft mechanic and safety technician, points to seals visible on the ice floes. They provide a contrast as well, he said—the black seals on the white ice, with blue seas and sky. Credits: NASA/Jeremy Harbeck
Icebergs that have broken off of glaciers and ice shelves create different three-dimensional shapes in the flat sea ice, noted Victor Berger, with the CReSIS snow radar team. And Tim Moes, DC-8 project manager, pointed out the blue color of the older ice visible in the bergs. Credits: NASA/Kate Ramsayer
Operation IceBridge has surveyed Arctic and Antarctic ice for a decade, collecting scientific data on the changing ice. It's the best office window view, said Jim Yungel, Airborne Topographic Mapper team lead—and it never gets old. Credits: NASA/Kate Ramsayer
Author sreinyPosted on November 13, 2018 November 13, 2018 Tags IceBridge
Iceberg Ahead!
The NASA DC-8 aircraft's shadow is dwarfed in scale by the B-46 iceberg. Credits: NASA/Brooke Medley
by Kate Ramsayer / THE SKIES ABOVE ANTARCTICA /
The crack that would become B-46 was first noticed in September 2018 – and the berg broke the next month.
NASA's Operation IceBridge flew over a new iceberg that is three times the size of Manhattan on Wednesday – the first known time anyone has laid eyes on the giant berg, dubbed B-46, that broke off from Pine Island Glacier in late October.
The flight over one of the fastest-retreating glaciers in Antarctica was part of IceBridge's campaign to collect measurements of Earth's changing polar regions. Surveys of Pine Island are one of the highest priority missions for IceBridge, in part because of the glacier's significant impact on sea level rise.
On Wednesday, IceBridge's approach to the iceberg began far above the glacier's outlet, in the upper reaches of ice that will eventually flow into the glacier's trunk. There, as far as the eye can see, it was flat and it was white.
As the aircraft headed toward the glacier's outlet in the Amundsen Sea, snow-covered crevasses became visible when sunlight struck at just the right angle. Every once in a while, a dark hole appeared in the crevasses where the snow had fallen through, providing a glimpse into the depths of the ice sheet. Then the holes got bigger.
The crevasses and dunes became a jumbled mess of ice, as Pine Island Glacier picks up speed as it flows to the sea. The crevasses got deeper and wider, swirling around each other. Striated snow layers in white and pale blue were visible down the crevasse walls, like an icy version of the slot canyons in the American West.
Crevasses in Pine Island Glacier indicate how fast the ice is moving. Credits: NASA/Kate Ramsayer
Crevasses in Pine Island Glacier get larger as the ice moves faster toward the Amundsen Sea. Credits: NASA/Kate Ramsayer
Then finally – the berg. Satellite imagery had revealed a massive calving event from Pine Island in late October, and the IceBridge crew was the first to lay eyes on the newly created iceberg.
The glacier ends in a sheer 60-meter cliff, dropping off into an ocean channel filled with a mix of bergy bits, snow, and newly forming sea ice. On the other side, a matching jagged cliff marked the beginning of B-46, as it stretched across the horizon.
The rift between Pine Island Glacier and a new giant iceberg, dubbed B-46, in Antarctica. Credits: NASA/Kate Ramsayer
"From this perspective at 1,500 feet, it's actually really difficult to grasp the entire scale of what we just looked at," said Brooke Medley, Operation IceBridge's deputy project scientist who has studied Pine Island Glacier for 12 years. "It was absolutely stunning. It was spectacular and inspiring and humbling at the same time."
Even though it had calved just over a week ago, the berg was already showing signs of wear and tear. Cracks wove through B-46, and upturned bergy bits floated in wide rifts. The iceberg will probably break down into smaller icebergs within a month or two, Medley said.
Iceberg calving is normal for glaciers – snow falls within the glacier's catchment and slowly flows down into the main trunk, where the ice starts to flow faster. Eventually it encounters the ocean, is lifted afloat, and over time travels to the edge of the shelf. There, ice breaks off in the form of an iceberg. When the amount of snowfall and ice loss (from iceberg calving and melt) are the same, a glacier's in balance. So it's hard to link a particular iceberg like B-46 to the increasing ice loss from Pine Island Glacier.
A sheer wall of the new iceberg B-46 looms over a mix of sea ice, bergy bits, and snow at the base of Pine Island Glacier, as seen from a NASA Operation IceBridge flight on Nov. 7, 2018. Credits: NASA/Kate Ramsayer
But the frequency, speed, and size of the calving is something to keep an eye on, Medley said. In 2016, IceBridge saw a crack beginning across the base of Pine Island; it took a year for an actual rift to form and the iceberg to float away.
They're not the biggest glaciers on the planet, but Pine Island and its neighbor, Thwaites, have an oversized impact on sea level rise. Enough ice flows from each of these West Antarctic glaciers to raise sea levels by more than 1 millimeter per decade, according to a study led by Medley. And by the end of this century, that number is projected to at least triple.
"It's deeply concerning," Medley said. The geography of these glaciers make them highly susceptible to ice loss: relatively warm waters cut under the ice shelf, weakening it from below. This shock to the system has the capability to initiate an unstoppable retreat of these glaciers. There's a reason Pine Island and Thwaites are dubbed the "weak underbelly" of Antarctica.
NASA has been monitoring Pine Island Glacier from aircraft since 2002, and IceBridge started taking extensive measurements of the fast-moving ice in 2009.
"Both Pine Island and Thwaites are ready to go and to take their neighboring glaciers with them," Medley said. "Ice is getting sucked out into the ocean – and it's hard to stop it."
Author sreinyPosted on November 8, 2018 Tags IceBridge
Send Me a Postcard From Station P, Will You?
Satellite image of ocean color showing variations in phytoplankton biomass in the Northeast Pacific Ocean (cyan colored swirls). Station P is at the bottom of the image, hidden under the clouds. Credits: NASA
Adrian Marchetti is an associate professor in the department of Marine Sciences at the University of North Carolina at Chapel Hill and was aboard the R/V Roger Revelle for the EXPORTS field campaign this August and September.
So perhaps you read about the EXPORTS cruise and have heard about this place called Station P. You are now probably wondering why NASA would fund a mission that includes two research vessels spending over three weeks at this place? Well, to some, Station P (also known as Ocean Station Papa or P26) is simply a point on a map in the middle of the North Pacific Ocean – latitude 50 degrees north, longitude 145 degrees west. But to others it is much more than that.
Historically, in the 1950's the Canadian weather service established a program to position ships off the west coast of Canada to forecast the incoming weather and sea state conditions. Station P was occupied for six weeks at a time by one of two alternating weather ships. Spending that much time at sea at one location can get, well, boring. To help pass the time, the crew collected samples and obtained measurements of the ocean. In the early days, these included bathythermograph casts that measured ocean temperatures at various depths. As more sophisticated approaches were developed to measure additional ocean properties, they started collecting samples for analysis of seawater chemistry (salinity, nutrient concentrations, etc.), chlorophyll concentrations (used as a proxy for phytoplankton biomass) and performed the occasional plankton haul to discover what critters called Station P their home.
A few decades later, with the development of new satellite technologies that enabled the monitoring of weather conditions from space (thanks NASA!), the weather ships became obsolete, and so the program was discontinued in the early 1980s. But as a result of the decades-long time series, what became apparent was the critical need for long-term monitoring of the ocean. So the Department of Fisheries and Oceans Canada established the Line P program made up of a transect where Station P is the endpoint. Today the Line P program is one of the longest ongoing oceanographic time series.
Map of the Line P transect, ending at Station P (also known as Ocean Station Papa or P26) in the Northeast Pacific Ocean. Credits: Karina Giesbrect.
So what's so special about Station P? Well, this mostly depends on who you ask. For one, the North Pacific is one of the largest ocean basins. It undergoes periodic oscillations on approximately decadal timescales that can influence global climate. The North Pacific also represents the finish line of a long conveyer belt that transports deep waters from far-off regions of the planet to the surface.
From a biologist's perspective (yes, I am a biological oceanographer), Station P also happens to reside in a so-called High Nutrient, Low Chlorophyll (HNLC) region where the growth of phytoplankton is limited by the availability of the micronutrient iron. This is a relatively new discovery, and although evidence for iron limitation in this region dates back to the early 1980s, the most compelling data was obtained in 2002 when Canadian scientists performed a large-scale iron fertilization experiment at Station P. The experiment was named the Subarctic Ecosystem Response to Iron Enrichment Study, or SERIES.
I participated in SERIES as a graduate student while completing my Ph.D at the University of British Columbia. My Ph.D. research focused on pennate diatoms (a type of phytoplankton) of the genus Pseudo-nitzschiathat that dominate iron-induced blooms in many HNLC regions across the globe .
Microscope image of the pennate diatom Pseudo-nitzschia granii. Diatoms like this one are common responders to iron enrichment in many iron-limited regions of the ocean, including Station P. Credits: Adrian Marchetti.
These particular diatoms can achieve rapid growth rates at iron concentrations that would leave their coastal counterparts fully anemic and left for dead. These oceanic diatoms have many adaptations to survive in low-iron waters and sometimes flourish when new inputs of iron, which are primarily from atmospheric dust, periodically enter the ocean. Prior to SERIES I joined a number of Line P cruises adding iron to diatoms in bottles to make them bloom. We now know that not all phytoplankton are created equal and, given their extensive diversity and important role in contributing to the planet's carbon cycle, we need to keep studying them.
During the SERIES experiment we also created a massive bloom of diatoms (you guessed it, dominated by Pseudo-nitzschia) as a consequence of adding several tons of iron to an initial patch of seawater approximately 80 square kilometers in size. At the peak of the bloom, the patch had grown to a size of about 700 square kilometers, representing one of the largest experimental manipulations on the planet to date. Fortuitously, the patch was captured by a satellite image of ocean sea surface color at the peak of the bloom, the only such image obtained throughout the entire SERIES experiment. Indeed, the North Pacific Ocean is known for having dense cloud cover almost every day of the year.
Satellite image from July of 2002 showing surface chlorophyll concentrations in the North Pacific. Warmer colors indicate more chlorophyll. The arrow is pointing to the enhanced chlorophyll concentrations due to a diatom bloom that developed as a result of the SERIES iron enrichment at Station P. Data courtesy of NASA's SeaWiFS Project. Credits: Institute of Ocean Sciences/Jim Gower
So this brings us back to EXPORTS, which marked my seventh trip to Station P, so I am beginning to feel quite at home there. With so many measurements obtained from Station P over the span of almost seven decades, what possibly is there left for us to learn? Well, to put it bluntly—lots! In my career I have been fortunate enough to participate on a number of field missions, and by far the EXPORTS program constitutes one of the most extensive scientific undertakings I have been part of. Although, this time we were not adding iron into the ocean but instead making observations of its natural state by following the same parcel of water that passed through Station P.
Scientists retrieve an instrument that collects ocean optical measurements while aboard the R/V Revelle during the EXPORTS cruise. These optical measurements are similar to those obtained from satellites in space. Credits: Adrian Marchetti
A primary objective of EXPORTS is to quantify the components of the ocean's biological carbon pump, the process by which organic matter from the surface waters makes it's way to ocean depths. Scientists aboard both ships measured the processes that constitute the initial formation of organic matter by phytoplankton all the way to its export from the upper ocean or it's remineralization back into inorganic carbon.
UNC graduate student Weida Gong hard at work collecting phytoplankton on filters aboard the R/V Revelle during the EXPORTS cruise. Credits: Adrian Marchetti.
Bacteria or little animals known as zooplankton that feed on phytoplankton, bacteria, or other small animals perform both these processes. Other scientists were focused on measuring the fate of the carbon that does sink out of the upper ocean by looking at the overall amount and what forms these sinking particles take. It was quite an undertaking that had a lot of moving parts, all happening on two moving ships.
There was also a large effort to obtain as much information about this region using a multitude of underway systems that includes mass spectrometers, particle imaging "cytobots" and flow cytometers, autonomous instruments that includes gliders, floats and wire walkers, and instruments that collect optical measurements. Although we may consider ourselves lucky if we are able to obtain more than a handful of satellite images of ocean properties from space, we are making similar measurements from ships. We are also making new measurements that do not currently exist on satellites but perhaps will one day so that we can continue to develop new ways of monitoring our precious planet from above.
Through the years we have learned a lot about how this part of the ocean operates, yet there is still so much more for us to learn. This is especially important at this period in Earth's history as we continue to place considerable pressures on our valuable ocean resources.
And as for that postcard, well lets just say that it's in the mail.
Author sreinyPosted on November 7, 2018 Tags EXPORTS
Compasses Get Quite Unhappy When Every Direction Is North
by Kate Ramsayer / 20,000 FEET ABOVE THE SOUTH POLE /
This was my first flight over Antarctica, and the vast expanse of ice – just white on the ground and blue in the sky as far as the eye can see – took my breath away.
As Operation IceBridge flew directly over the South Pole, my eyes went to the updating flight map. We were already off the edge of the map, as our survey line along 88 degrees south latitude had dropped below the extent of the Mercator projection. And now, as the latitude indicator counted up to 90 degrees and the crew counted down the seconds, I watched as our flight path showed the plane completely reversing course midair and looping up north. Of course, (and fortunately for my stomach) our actual DC-8 aircraft kept in a straight line.
OIB Deputy Project Scientist Brooke Medley shows the weird flight map path that results from flying around, then over, the South Pole. Credits: NASA/Kate Ramsayer
The Continuous Airborne Mapping By Optical Translator (CAMBOT) system images the Amundsen-Scott South Pole station as NASA's DC-8 flying laboratory ascends after completing a survey line. Credits: NASA/Matt Linkswiler
Navigating can be tricky at the end of the world. While the mapping software went out of whack crossing over the pole, the actual flight software didn't miss a beat – IceBridge Mission Scientist John Sonntag programmed it that way, knowing the ice-monitoring flights would need to handle the situation.
And although Halloween was last week, Saturday's flight called for another trick – fooling the plane into flying a smooth arc around the 88 south line of latitude.
"Basically, we hack the autopilot," Sonntag said. "We make the aircraft think that it's lining up on a runway in bad weather, and the pilots can't see. But what we're really doing is lining it up on a data collection line, and doing it very precisely."
West Antarctic mountains, on the way to the South Pole. (NASA/Kate Ramsayer)
He developed this system to deal with a quirk of flying at such a high latitude. If a plane is flying at the equator and wanted to go east, it would just go straight. But to go due east along the 88 south latitude line, the plane has to actually turn to the right a bit. If we wanted to circle the pole at 89 degrees latitude, we'd have to turn right even more.
Typical navigation procedures involve flying the shortest path between two points (known as a "great circle" path), where the aircraft's heading varies continually to keep it on the flight path. But this far south, that would create a scalloped flight path: not efficient for the plane nor optimal for the instruments onboard, and – again – not friendly to my stomach. So Sonntag designed an autopilot system that can fly a perfect, smooth arc around the pole, along a mathematical concept called a loxodrome.
"I'm half engineer and half scientist, and this flight brings out the engineer nerd in me – I love this stuff," Sonntag said. "Then seeing this in use, flying a 350,000-pound airplane around the South Pole – I mean, it's nerd heaven."
Sastrugi are fragile shapes on top of snow that are formed by winds. Sastrugi near the South Pole suggest there are two dominant wind directions. Credits: NASA/Brooke Medley
It was nerd heaven for me as well, but for different reasons. This was my first flight over Antarctica, and the vast expanse of ice – just white on the ground and blue in the sky as far as the eye can see – took my breath away.
This particular survey route isn't a favorite with the regular crew. There's none of the dramatic mountains of the coastal glaciers, or icebergs calving into sea ice. But I loved seeing the repeating kaleidoscope patterns of the ice dunes called sastrugi (a favorite word AND a favorite ice formation, all in one!). From 1,500 feet up, it's almost impossible to gauge how high they are, but it's an incredible texture in this bleak, bright expanse of ice.
And this was a key flight for another reason: I've been writing for the ICESat-2 mission for more than five years, and in September I watched as it launched into orbit. ICESat-2 uses a laser instrument to measure the height and focuses on the polar regions. All of its orbits cross the globe at – you guessed it – 88 south latitude. So by flying this route a third of the way around the 88 south latitude circle, IceBridge is taking measurements that will help check a third of ICESat-2's orbits.
The ATLAS lidar on ICESat-2 uses three pairs of laser beams to measure Earth's elevation and elevation change. As a global mission, ICESat-2 collects data over the entire globe. However the ATLAS instrument is optimized to measure land ice and sea ice elevation in the polar regions, as is shown by this graphic representation of its orbital path around the South Pole. Credits: NASA
That means the satellite instrument I saw years ago when it was just an empty box in a cleanroom flew over that stretch of ice we measured 16 times, taking 60,000 height measurements each second. From 300 miles up, it measured the height of my new favorite sastrugi.
Author sreinyPosted on November 5, 2018 November 5, 2018 Tags IceBridge
NASA's view from space shows our planet is changing, but to really understand the nitty-gritty of these changes and what they mean for our future, scientists need a closer look. This year NASA takes you on a world tour as we kick off new field research campaigns to study regions of critical change from land, sea and air.
IceBridge Takes Flight from Down Under
The New and the Lost World of Hunga Tonga-Hunga Ha'apai
Chasing Caribou Across a Changing Arctic
A Sea of Islands
An Island of Opportunity
ACT-America
CAMP2Ex
Ice bridge
IceBridge
KORUS-AQ
NAAMES
Sea to Space
NASA Earth Expeditions	National Aeronautics and Space Administration NASA Official: Brian Dunbar


Brake Ring 28:25 & Brake Ring TW11, 25 are used to perform various functions. These brake rings have already stunned the market via its quality and price affordability. We are popular in the market as a brake ring suppliers who endear its clients via delivering marvelous products.


text:
Q: What do do with Notifications when UIApplicationStateActive I have set up an app that is registered for remote notifications.
- (void)application:(UIApplication*)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSString *status = [NSString stringWithFormat:@"Notification Received:\n%@",userInfo.description];
    NSLog(@"%@",status);

    UIAlertView *alert=[[UIAlertView alloc]
                        initWithTitle:@"didReceiveRemoteNotification"
                        message:eventName
                        delegate:self
                        cancelButtonTitle:@"Hide"
                        otherButtonTitles:@"View",
                        nil];
    alert.tag = kAlertTypeNotification;
    [alert show];
    [self vibrate];

if ( application.applicationState == UIApplicationStateActive ) {
    // app was already in the foreground
    **DO SOMETHING HERE**

}
else {
    // app was just brought from background to foreground

}
}

So, when the app is not active, i get that really nifty banner alert, that looks so nice on the iPhone.
However, when the app is open, the only option I seem to have is to present a UIAlertView. This is intrusive in my opinion. Is there a way I can display the banner while application.applicationState == UIApplicationStateActive? Or, is there an open source library that implements this kind of feature?
Thanks for all your help!

A: I've asked this question more directly here:
Displaying a stock iOS notification banner when your app is open and in the foreground?
The short answer is that as of iOS 9, you cannot show the stock iOS banner when your app is in the foreground.
You will instead have to rely on a home-built or 3rd-part notification banner.
Please duplicate this radar requesting this feature: rdar://22313177

A: You can do whatever you want when the app is in the foreground. Who says you have to display a UIAlertView?


used 7 foot cs crusher for sale Used CS Cone Crusher For SaleManufacturer7 ft and clubs cs 7 foot crusher cs 7 foot cone crusher poster. get more info. CS Cone Crusher miningcrushersalecom. CS Cone Crusher CS cone crusher is a efficient modern highperformance cone crusher in the introduction and absorption of foreign advanced technology based on .
Mar 24, 2017· 7 foot cone crusher cs gibma. 7foot cs cone crusher for sale . home gt;gt; 7foot cs cone crusher for sale. Inquiry. If you have any questions, please tell us, machinery trader used 7 foot cone crusher . Get Price standard type cs cone crusher for sale christoartfair.nl.
7foot simons crusher water use - fmsbaroda. 7 foot Zenith crusher water use The density of pure water is also 624 lbs/cuft (pounds per cubic foot) and, We use water sprays when the material contains a, 7foot simons crusher h2o use | Sbm Mobile Crusher 2ft simons cone .
cs cone crusher stone crusher for sale - christoartfair.nl. crusher kokas machine woodpulpindia. CS Cone Crusher. Comparing with other kinds of crushers, CS Series spring cone crusher is quite excellent in hard material crushing and the final product has good sharp.
7ft Crusher Oil System - shikhafoundation.co.in. Used 7 Foot Crusher For Sale Grinding Mill China foot simmons cone crusher may help you stone quarrying machine,mining quarry machine,crusher,grinding. cs cone crusher for sale & rental new & used used 7ft.
cs 7 foot cone crusher poster - hgtu 7foot cs crusher water use 7foot cs cone crushers for sale 7 foot cone crusher poster 7foot cs cone is designed to fi t onto a 7 ft Zenith cone crusher. Get More Info; Cs 7 Foot Cone Crusher Poster - gategseeu.
7foot cs cone crusher price, 7foot china cone crushers for sale, 7foot cs cone crushers price, 7foot cone crushers for sale stone crusher machine, 7foot short head crushers, 7foot scm cone crusher price, Recommd products.
7foot Cs Cone Crushers For Saleharshacorporationcoin. ... in south africacs simons cone crusher 4 for sale1940 3 ft for sale cs cone crusher types 2ft 3ft4ft4 crusher plant 250 tons hour second hand. Read more. cs 2 ft cone crusher spare partstirupatipipesin.
used 7 foot cs crusher for sale lenguaglobal. 2 ft cone crusher simmons for sale used. 7 cs cone crusher for sale Hudson Dental NH. 7 cs cone crusher for sale is PF Impact Crusher. By absorbing the advanced technology from the world, we researched and designed PF series impact crusher.