text:
#include "fsck.h"
#include <stdlib.h>

reiserfs_bitmap_t bad_unfm_in_tree_once_bitmap;

//int step = 0; // 0 - find stat_data or any item ; 1 - find item ; 2 - already found

/* allocates buffer head and copy buffer content */
struct buffer_head * make_buffer (int dev, int blocknr, int size, char * data)
{
    struct buffer_head * bh;

    bh = getblk (dev, blocknr, size);
    if (buffer_uptodate (bh))
	return bh;
//    die ("make_buffer: uptodate buffer found");
    memcpy (bh->b_data, data, size);
    set_bit (BH_Uptodate, (char *)&bh->b_state);
    return bh;
}

int find_not_of_one_file(struct key * to_find, struct key * key)
{
    if ((to_find->k_objectid != -1) &&
        (to_find->k_objectid != key->k_objectid))
        return 1;
    if ((to_find->k_dir_id != -1) &&
        (to_find->k_dir_id != key->k_dir_id))
        return 1;
    return 0;
}

int is_item_reachable (struct item_head * ih)
{
    return ih_reachable (ih) ? 1 : 0;
}

void mark_item_unreachable (struct item_head * ih)
{
    mark_ih_unreachable (ih);

    if (is_indirect_ih (ih))
	set_free_space (ih, 0);
}

void mark_item_reachable (struct item_head * ih, struct buffer_head * bh)
{
    mark_ih_ok (ih);
    mark_buffer_dirty (bh);
}

static void stat_data_in_tree (struct buffer_head *bh,
			       struct item_head * ih)
{
#if 0
    __u32 objectid;

    objectid = le32_to_cpu (ih->ih_key.k_objectid);

    if (mark_objectid_really_used (proper_id_map (fs), objectid)) {
	stat_shared_objectid_found (fs);
	mark_objectid_really_used (shared_id_map (fs), objectid);
    }
#endif

    zero_nlink (ih, B_I_PITEM (bh, ih));
}

/* this just marks blocks pointed by an indirect item as used in the
   new bitmap */
static void indirect_in_tree (struct buffer_head * bh,
			      struct item_head * ih)
{
    int i;
    __u32 * unp;
    unsigned long unfm_ptr;

    unp = (__u32 *)B_I_PITEM (bh, ih);

    for (i = 0; i < I_UNFM_NUM (ih); i ++) {
	unfm_ptr = le32_to_cpu (unp[i]);
	if (unfm_ptr == 0)
	    continue;

	if (still_bad_unfm_ptr_1 (unfm_ptr))
	    reiserfs_panic ("mark_unformatted_used: (%lu: %k) "
			    "still has bad pointer %lu",
			    bh->b_blocknr, &ih->ih_key, unfm_ptr);

	mark_block_used (unfm_ptr);
    }
}

static void leaf_is_in_tree_now (struct buffer_head * bh)
{
    item_action_t actions[] = {stat_data_in_tree, indirect_in_tree, 0, 0};

    mark_block_used ((bh)->b_blocknr);

    for_every_item (bh, mark_item_unreachable, actions);

    stats(fs)->inserted_leaves ++;

    mark_buffer_dirty (bh);
}

static void insert_pointer (struct buffer_head * bh, struct path * path)
{
    struct item_head * ih;
    char * body;
    int zeros_number;
    int retval;
    struct tree_balance tb;

    init_tb_struct (&tb, fs, path, 0x7fff);

    /* fix_nodes & do_balance must work for internal nodes only */
    ih = 0;

    retval = fix_nodes (/*tb.transaction_handle,*/ M_INTERNAL, &tb, ih);
    if (retval != CARRY_ON)
	die ("insert_pointer: fix_nodes failed with retval == %d", retval);

    /* child_pos: we insert after position child_pos: this feature of the insert_child */
    /* there is special case: we insert pointer after
       (-1)-st key (before 0-th key) in the parent */
    if (PATH_LAST_POSITION (path) == 0 && path->pos_in_item == 0)
	PATH_H_B_ITEM_ORDER (path, 0) = -1;
    else {
	if (PATH_H_PPARENT (path, 0) == 0)
	    PATH_H_B_ITEM_ORDER (path, 0) = 0;
/*    PATH_H_B_ITEM_ORDER (path, 0) = PATH_H_PPARENT (path, 0) ? PATH_H_B_ITEM_ORDER (path, 0) : 0;*/
    }

    ih = 0;
    body = (char *)bh;
    //memmode = 0;
    zeros_number = 0;

    do_balance (&tb, ih, body, M_INTERNAL, zeros_number);

    leaf_is_in_tree_now (bh);
}

/* return 1 if left and right can be joined. 0 otherwise */
int balance_condition_fails (struct buffer_head * left, struct buffer_head * right)
{
    if (B_FREE_SPACE (left) >= B_CHILD_SIZE (right) -
	(are_items_mergeable (B_N_PITEM_HEAD (left, B_NR_ITEMS (left) - 1), B_N_PITEM_HEAD (right, 0), left->b_size) ? IH_SIZE : 0))
	return 1;
    return 0;
}

/* return 1 if new can be joined with last node on the path or with
   its right neighbor, 0 otherwise */
int balance_condition_2_fails (struct buffer_head * new, struct path * path)
{
    struct buffer_head * bh;
    struct key * right_dkey;
    int pos, used_space;

    bh = PATH_PLAST_BUFFER (path);

    if (balance_condition_fails (bh, new))
	/* new node can be joined with last buffer on the path */
	return 1;

    /* new node can not be joined with its left neighbor */

    right_dkey = uget_rkey (path);
    if (right_dkey == 0)
	/* there is no right neighbor */
	return 0;

    pos = PATH_H_POSITION (path, 1);
    if (pos == B_NR_ITEMS (bh = PATH_H_PBUFFER (path, 1))) {
	/* we have to read parent of right neighbor. For simplicity we
	   call search_by_key, which will read right neighbor as well */
	INITIALIZE_PATH(path_to_right_neighbor);

	if (usearch_by_key (fs, right_dkey, &path_to_right_neighbor) != ITEM_FOUND)
	    die ("get_right_neighbor_free_space: invalid right delimiting key");
	used_space =  B_CHILD_SIZE (PATH_PLAST_BUFFER (&path_to_right_neighbor));
	pathrelse (&path_to_right_neighbor);
    }
    else
	used_space = dc_size(B_N_CHILD (bh, pos + 1));

    if (B_FREE_SPACE (new) >= used_space -
	(are_items_mergeable (B_N_PITEM_HEAD (new, B_NR_ITEMS (new) - 1), (struct item_head *)right_dkey, new->b_size) ? IH_SIZE : 0))
	return 1;

    return 0;
}

static void get_max_buffer_key (struct buffer_head * bh, struct key * key)
{
    struct item_head * ih;

    ih = B_N_PITEM_HEAD (bh, B_NR_ITEMS (bh) - 1);
    copy_key (key, &(ih->ih_key));

    if (is_direntry_key (key)) {
	/* copy 3-rd and 4-th key components of the last entry */
	//set_le_key_k_offset (ih_version(ih), key, B_I_DEH (bh, ih)[I_ENTRY_COUNT (ih) - 1].deh_offset);
	//set_le_key_k_type (ih_version(ih), key, TYPE_DIRENTRY);
	set_offset (KEY_FORMAT_1, key,
			     deh_offset (&(B_I_DEH (bh, ih)[ih_entry_count (ih) - 1])));

    } else if (!is_stat_data_key (key))
	/* get key of the last byte, which is contained in the item */
	set_offset (key_format (key), key, get_offset (key) + get_bytes_number (ih, bh->b_size) - 1);
    //set_le_key_k_offset(ih_version(ih), key,
    //		    le_key_k_offset(ih_version(ih), key) + get_bytes_number (bh, ih, 0, CHECK_FREE_BYTES) - 1 );
}

static int tree_is_empty (void)
{
  return (SB_ROOT_BLOCK (fs) == ~0) ? 1 : 0;
}

static void make_single_leaf_tree (struct buffer_head * bh)
{
    /* tree is empty, make tree root */
    set_root_block (fs->s_rs, bh->b_blocknr);
    set_tree_height (fs->s_rs, 2);
    mark_buffer_dirty (fs->s_sbh);
    leaf_is_in_tree_now (bh);
}

/* inserts pointer to leaf into tree if possible. If not, marks node as
   uninsertable in special bitmap */
static void try_to_insert_pointer_to_leaf (struct buffer_head * new_bh)
{
    INITIALIZE_PATH (path);
    struct buffer_head * bh;			/* last path buffer */
    struct key * first_bh_key, last_bh_key;	/* first and last keys of new buffer */
    struct key last_path_buffer_last_key, * right_dkey;
    int ret_value;

    if (tree_is_empty () == 1) {
	make_single_leaf_tree (new_bh);
	return;
    }

    first_bh_key = B_N_PKEY (new_bh, 0);

    /* try to find place in the tree for the first key of the coming node */
    ret_value = usearch_by_key (fs, first_bh_key, &path);
    if (ret_value == ITEM_FOUND)
	goto cannot_insert;

    /* get max key in the new node */
    get_max_buffer_key (new_bh, &last_bh_key);

    bh = PATH_PLAST_BUFFER (&path);
    if (comp_keys (B_N_PKEY (bh, 0), &last_bh_key) == 1/* first is greater*/) {
	/* new buffer falls before the leftmost leaf */
	if (balance_condition_fails (new_bh, bh))
	    goto cannot_insert;

	if (uget_lkey (&path) != 0 || PATH_LAST_POSITION (&path) != 0)
	    die ("try_to_insert_pointer_to_leaf: bad search result");

	path.pos_in_item = 0;
	goto insert;
    }

    /* get max key of buffer, that is in tree */
    get_max_buffer_key (bh, &last_path_buffer_last_key);
    if (comp_keys (&last_path_buffer_last_key, first_bh_key) != -1/* second is greater */)
	/* first key of new buffer falls in the middle of node that is in tree */
	goto cannot_insert;

    right_dkey = uget_rkey (&path);
    if (right_dkey && comp_keys (right_dkey, &last_bh_key) != 1 /* first is greater */)
	goto cannot_insert;

    if (balance_condition_2_fails (new_bh, &path))
	goto cannot_insert;

 insert:
    insert_pointer (new_bh, &path);
    goto out;

 cannot_insert:
    /* statistic */
    stats (fs)->uninsertable_leaves ++;

    mark_block_uninsertable (new_bh->b_blocknr);

 out:
    pathrelse (&path);
    return;
}

/* everything should be correct already in the leaf but contents of indirect
   items. So we only
   1. zero slots pointing to a leaf
   2. zero pointers to blocks which are pointed already
   3. what we should do with directory entries hashed by another hash?
   they are deleted for now
*/
static void pass1_correct_leaf (reiserfs_filsys_t s,
				struct buffer_head * bh)
{
    int i, j;
    struct item_head * ih;
    __u32 * ind_item;
    unsigned long unfm_ptr;
    int dirty = 0;

    ih = B_N_PITEM_HEAD (bh, 0);
    for (i = 0; i < B_NR_ITEMS (bh); i ++, ih ++) {
	if (is_direntry_ih (ih)) {
	    struct reiserfs_de_head * deh;
	    char * name;
	    int name_len;
	    int hash_code;

	    deh = B_I_DEH (bh, ih);
	    for (j = 0; j < ih_entry_count (ih); j ++) {
		name = name_in_entry (deh + j, j);
		name_len = name_length (ih, deh + j, j);

		if ((j == 0 && is_dot (name, name_len)) ||
		    (j == 1 && is_dot_dot (name, name_len))) {
		    continue;
		}

		hash_code = find_hash_in_use (name, name_len,
					      GET_HASH_VALUE (deh_offset (deh + j)),
					      rs_hash (fs->s_rs));
		if (hash_code != rs_hash (fs->s_rs)) {
		    fsck_log ("pass1: block %lu, %H, entry \"%.*s\" "
			      "hashed with %s whereas proper hash is %s\n",
			      bh->b_blocknr, ih, name_len, name,
			      code2name (hash_code), code2name (rs_hash (fs->s_rs)));
		    if (ih_entry_count (ih) == 1) {
			delete_item (fs, bh, i);
			i --;
			ih --;
			break;
		    } else {
			cut_entry (fs, bh, i, j, 1);
			j --;
			deh = B_I_DEH (bh, ih);
		    }
		}
	    }
	    continue;
	}

	if (!is_indirect_ih (ih))
	    continue;

	/* correct indirect items */
	ind_item = (__u32 *)B_I_PITEM (bh, ih);

	for (j = 0; j < I_UNFM_NUM (ih); j ++, ind_item ++) {
	    unfm_ptr = le32_to_cpu (*ind_item);

	    if (!unfm_ptr)
		continue;

	    /* this corruption of indirect item had to be fixed in pass0 */
	    if (not_data_block (s, unfm_ptr) || unfm_ptr >= SB_BLOCK_COUNT (s))
		/*!was_block_used (unfm_ptr))*/
		reiserfs_panic ("pass1_correct_leaf: (%lu: %k), %d-th slot is not fixed",
				bh->b_blocknr, &ih->ih_key, j);

	    /* 1. zero slots pointing to a leaf */
	    if (is_used_leaf (unfm_ptr)) {
		dirty ++;
		*ind_item = 0;
		stats(fs)->wrong_pointers ++;
		continue;
	    }

	    /* 2. zero pointers to blocks which are pointed already */
	    if (is_bad_unformatted (unfm_ptr)) {
		/* this unformatted pointed more than once. Did we see it already? */
		if (!is_bad_unfm_in_tree_once (unfm_ptr))
		    /* keep first reference to it and mark about that in
                       special bitmap */
		    mark_bad_unfm_in_tree_once (unfm_ptr);
		else {
		    /* Yes, we have seen this pointer already, zero other pointers to it */
		    dirty ++;
		    *ind_item = 0;
		    stats(fs)->wrong_pointers ++;
		    continue;
		}
	    }
	}
    }

    if (dirty)
	mark_buffer_dirty (bh);
}

/*######### has to die ##########*/
/* append item to end of list. Set head if it is 0. For indirect item
   set wrong unformatted node pointers to 0 */
void save_item (struct si ** head, struct buffer_head * bh, struct item_head * ih, char * item)
{
    struct si * si, * cur;

    if (is_bad_item (bh, ih, item/*, fs->s_blocksize, fs->s_dev*/)) {
	return;
    }

    if (is_indirect_ih (ih)) {
	fsck_progress ("save_item: %H (should not happen)\n", ih);
    }

    stats(fs)->saved_on_pass1 ++;

    si = getmem (sizeof (*si));
    si->si_dnm_data = getmem (ih_item_len(ih));
    /*si->si_blocknr = blocknr;*/
    memcpy (&(si->si_ih), ih, IH_SIZE);
    memcpy (si->si_dnm_data, item, ih_item_len(ih));

    // changed by XB
    si->last_known = NULL;

    if (*head == 0)
	*head = si;
    else {
	cur = *head;
	// changed by XB
	//    while (cur->si_next)
	//      cur = cur->si_next;

	{
	  int count = 0;
	  int speedcount = 0;

	  while (cur->si_next) {
	    if (cur->last_known!=NULL) {
	      cur = cur->last_known; // speed up to the end if the chain
	      speedcount++;
	    } else {
	      cur = cur->si_next;
	      count++;
	    }
	  }

	  if ((*head)!=cur) // no self referencing loop please
	    (*head)->last_known = cur;
	}

	cur->si_next = si;
    }
    return;
}

static void save_items (struct si ** head, struct buffer_head * bh)
{
    int i;
    struct item_head * ih;

    ih = B_N_PITEM_HEAD (bh, 0);
    for (i = 0; i < B_NR_ITEMS (bh); i ++, ih ++) {
	save_item (head, bh, ih, B_I_PITEM (bh, ih));
    }
}

struct si * remove_saved_item (struct si * si)
{
    struct si * tmp = si->si_next;

    freemem (si->si_dnm_data);
    freemem (si);
    return tmp;
}

/* insert_item_separately */
static void put_saved_items_into_tree_1 (struct si * si)
{
    while (si) {
	insert_item_separately (&(si->si_ih), si->si_dnm_data,
				0/*was not in tree*/);
	si = remove_saved_item (si);
    }
}

/* reads the device by set of 8 blocks, takes leaves and tries to
   insert them into tree */
void pass_1_pass_2_build_the_tree (void)
{
    struct buffer_head * bh;
    int i;
    int what_node;
    unsigned long done = 0, total;
    struct si * saved_items = 0;

    if (fsck_log_file (fs) != stderr)
	fsck_log ("####### Pass 1 #######\n");

    bad_unfm_in_tree_once_bitmap = reiserfs_create_bitmap (SB_BLOCK_COUNT (fs));

    /* on pass0 we have found that amount of leaves */
    total = how_many_leaves_were_there ();

    fsck_progress ("\nPass1:\n");

    /* read all leaves found on the pass 0 */
    for (i = 0; i < SB_BLOCK_COUNT (fs); i ++) {
	if (!is_used_leaf (i))
	    continue;

	print_how_far (&done, total, 1, fsck_quiet (fs));

	/* at least one of nr_to_read blocks is to be checked */
	bh = bread (fs->s_dev, i, fs->s_blocksize);
	if (!bh) {
	    /* we were reading one block at time, and failed, so mark
	       block bad */
	    fsck_progress ("pass1: reading block %lu failed\n", i);
	    continue;
	}

	what_node = who_is_this (bh->b_data, fs->s_blocksize);
	if ( what_node != THE_LEAF ) {
	    fsck_progress ("build_the_tree: nothing but leaves are expected. "
			   "Block %lu - %s\n", i,
			   (what_node == THE_INTERNAL) ? "internal" : "??");
	    brelse (bh);
	    continue;
	}

	if (is_block_used (i))
	    /* block is in new tree already */
	    die ("build_the_tree: leaf (%lu) is in tree already\n", i);

	/* fprintf (block_list, "leaf %d\n", i + j);*/
	stats(fs)->analyzed ++;

	/* the leaf may still contain indirect items with wrong
	   slots. Fix that */
	pass1_correct_leaf (fs, bh);

	if (node_item_number (bh) == 0) {
	    /* all items were deleted on pass 0 or pass 1 */
	    mark_buffer_clean (bh);
	    brelse (bh);
	    continue;
	}

	if (is_leaf_bad (bh)) {
	    /* FIXME: will die */
	    fsck_log ("pass1: (is_leaf_bad) bad leaf (%lu)\n", bh->b_blocknr);

	    /* Save good items only to put them into tree at the
	       end of this pass */
	    save_items (&saved_items, bh);

	    brelse (bh);
	    continue;
	}

	try_to_insert_pointer_to_leaf (bh);
	brelse (bh);
    }

#if 0
    /* read all leaves found on the pass 0 */
    for (i = 0; i < SB_BLOCK_COUNT (fs); i += nr_to_read) {
	to_scan = how_many_to_scan (fs, i, nr_to_read);
	if (to_scan) {
	    print_how_far (&done, total, to_scan, fsck_quiet (fs));

	    /* at least one of nr_to_read blocks is to be checked */
	    bbh = bread (fs->s_dev, i / nr_to_read, fs->s_blocksize * nr_to_read);
	    if (bbh) {
		for (j = 0; j < nr_to_read; j ++) {
		    if (!is_used_leaf (i + j))
			continue;

		    data = bbh->b_data + j * fs->s_blocksize;

		    what_node = who_is_this (data, fs->s_blocksize);
		    if ( what_node != THE_LEAF ) {
			fsck_progress ("build_the_tree: nothing but leaves are expected. "
				       "Block %lu - %s\n", i + j,
				       (what_node == THE_INTERNAL) ? "internal" : "??");
			continue;
		    }

		    if (is_block_used (i + j))
			/* block is in new tree already */
			die ("build_the_tree: leaf (%lu) is in tree already\n",
			     i + j);

		    /* fprintf (block_list, "leaf %d\n", i + j);*/

		    bh = make_buffer (fs->s_dev, i + j, fs->s_blocksize, data);
		    stats(fs)->analyzed ++;

		    /* the leaf may still contain indirect items with wrong
                       slots. Fix that */
		    pass1_correct_leaf (fs, bh);

		    if (node_item_number (bh) == 0) {
			/* all items were deleted on pass 0 or pass 1 */
			mark_buffer_clean (bh);
			brelse (bh);
			continue;
		    }

		    if (is_leaf_bad (bh)) {
			/* FIXME: will die */
			fsck_log ("pass1: (is_leaf_bad) bad leaf (%lu)\n", bh->b_blocknr);

			/* Save good items only to put them into tree at the
                           end of this pass */
			save_items (&saved_items, bh);

			brelse (bh);
			continue;
		    }

		    try_to_insert_pointer_to_leaf (bh);
		    brelse (bh);
		}

		bforget (bbh);
	    } else {
		done -= to_scan;

		/* bread failed */
		if (nr_to_read != 1) {
		    /* we tryied to read bunch of blocks. Try to read them by one */
		    nr_to_read = 1;
		    i --;
		    continue;
		} else {
		    /* we were reading one block at time, and failed, so mark
                       block bad */
		    fsck_progress ("pass0: block %lu is bad, marked used\n", i);
		}
	    }
	}

	if (nr_to_read == 1 && ((i + 1) % NR_TO_READ) == 0) {
	    /* we have read NR_TO_READ blocks one at time, switch back to
               reading NR_TO_READ blocks at time */
	    i -= (NR_TO_READ - 1);
	    nr_to_read = NR_TO_READ;
	}
    }
#endif
    fsck_progress ("\n");

    /* Pass 1a (this should die) */

    /* put saved items into tree. These items were in leaves, those could not
       be inserted into tree because some indirect items point to those
       leaves. Rather than lookup for corresponding unfm pointers in the tree,
       we save items of those leaves and put them into tree separately */
    if (how_many_items_were_saved ()) {
	fsck_progress ("There were %lu saved items\nPass 1a - ",
		       how_many_items_were_saved ());
	fflush (stdout);
	put_saved_items_into_tree_1 (saved_items);
    }

    stage_report (1, fs);
    /* end of pass 1 */

    if (SB_ROOT_BLOCK(fs) == -1)
        die ("\n\nNo reiserfs metadata found");

    /* pass 2 */
    pass_2_take_bad_blocks_put_into_tree ();

    flush_buffers ();

    stage_report (2, fs);

    fsck_progress ("Tree is built. Checking it - "); fflush (stdout);
    reiserfsck_check_pass1 ();
    fsck_progress ("done\n"); fflush (stdout);

    reiserfs_delete_bitmap (bad_unfm_in_tree_once_bitmap);

}

#if 0

/* pass the S+ tree of filesystem */
void recover_internal_tree (struct super_block * s)
{
    check_internal_structure(s);
    build_the_tree();
}
#endif

void rebuild_sb (reiserfs_filsys_t fs)
{
    int version;
    struct buffer_head * bh;
    struct reiserfs_super_block * rs;
    __u32 blocks;

    if (no_reiserfs_found (fs)) {
	char * answer = 0;
	size_t n = 0;
        printf("\nwhat is version of ReiserFS you use[1-4]\n"
	       "\t(1)   3.6.x\n"
	       "\t(2) >=3.5.9\n"
	       "\t(3) < 3.5.9 converted to new format\n"
	       "\t(4) < 3.5.9\n"
	       "\t(X)   exit\n");
	getline (&answer, &n, stdin);
	version = atoi (answer);
        if (version < 1 || version > 4)
    	    die ("rebuild_sb: wrong version");

	fs->s_blocksize = 4096;

        switch(version){
        case 1:
        case 2:
            bh = getblk (fs->s_dev, (REISERFS_DISK_OFFSET_IN_BYTES / fs->s_blocksize),
			 fs->s_blocksize);
            break;
        case 3:
        case 4:
            bh = getblk (fs->s_dev, (2), fs->s_blocksize);
            break;
        default:
            exit(0);
        }
        if (!bh)
            die ("rebuild_sb: can't bread");
        rs = (struct reiserfs_super_block *)bh->b_data;
        fs->s_rs = rs;
    }
    else
    {
	/* reiserfs super block is found */
        version = check_sb(fs);
        if (!user_confirmed ("\nDo you want to remake your super block\n"
			    "(say no if you use resizer)[Yes/no]: ", "Yes\n"))
	    return;
        rs = fs->s_rs;
	bh = fs->s_sbh;
    }

    // set block number on the device and number of bitmap blocks needed to
    // address all blocks
    blocks = (count_blocks ("", fs->s_blocksize, fs->s_dev) / 8) * 8;
    set_block_count (rs, blocks);
    //rs->s_block_count = cpu_to_le32(blocks);

    set_bmap_nr (rs, (blocks + (fs->s_blocksize * 8 - 1)) / (fs->s_blocksize * 8));
    set_journal_size(rs, JOURNAL_BLOCK_COUNT);

    //rs->s_bmap_nr = cpu_to_le16( blocks / (g_sb.s_blocksize * 8) +
    //      ((blocks % (g_sb.s_blocksize * 8)) ? 1 : 0) );

    switch (version){
    case 1:
	// super block v2 at 64k offset
	set_blocksize (rs, fs->s_blocksize);
	strncpy (rs->s_v1.s_magic, REISER2FS_SUPER_MAGIC_STRING,
		 strlen(REISER2FS_SUPER_MAGIC_STRING));
	set_journal_start (rs, get_journal_start_must (fs->s_blocksize));
	set_version (rs, REISERFS_VERSION_2);
	set_objectid_map_max_size (rs, (fs->s_blocksize - SB_SIZE) / sizeof(__u32) / 2 * 2);
	break;

    case 2:
	// super block v1 at 64k offset
	set_blocksize (rs, fs->s_blocksize);
	strncpy (rs->s_v1.s_magic, REISERFS_SUPER_MAGIC_STRING,
		 strlen(REISERFS_SUPER_MAGIC_STRING));
	set_journal_start (rs, get_journal_start_must (fs->s_blocksize));
	set_version (rs, REISERFS_VERSION_1);
	set_objectid_map_max_size (rs, (fs->s_blocksize - SB_SIZE_V1) / sizeof(__u32) / 2 * 2);
	break;

    case 3:
	// super block v2 at 8k offset
	set_blocksize (rs, fs->s_blocksize);
	strncpy (rs->s_v1.s_magic, REISER2FS_SUPER_MAGIC_STRING,
		 strlen(REISER2FS_SUPER_MAGIC_STRING));
	set_journal_start (rs, get_journal_old_start_must (rs));
	set_version (rs, REISERFS_VERSION_2);
	set_objectid_map_max_size (rs, (fs->s_blocksize - SB_SIZE) / sizeof(__u32) / 2 * 2);
	break;

    case 4:
	// super block v1 at 8k offset
	set_blocksize (rs, fs->s_blocksize);
	strncpy (rs->s_v1.s_magic, REISERFS_SUPER_MAGIC_STRING,
		 strlen(REISERFS_SUPER_MAGIC_STRING));
	set_journal_start (rs, get_journal_old_start_must (rs));
	set_version (rs, REISERFS_VERSION_1);
	set_objectid_map_max_size (rs, (fs->s_blocksize - SB_SIZE_V1) / sizeof(__u32) / 2 * 2);
	break;
    }

    print_block (stderr, fs, bh);
    if (user_confirmed ("Is this ok ? [N/Yes]: ", "Yes\n")) {
	mark_buffer_uptodate (bh, 1);
	mark_buffer_dirty (bh);
	bwrite (bh);
	fsck_progress ("\nDo not forget to run reiserfsck --rebuild-tree\n\n");
    } else
	fsck_progress ("Super block was not written\n");
    brelse (bh);
}

/*
   check_sb and rebuild-sb don't touch these fields:
   __u32 s_journal_dev;
   __u32 s_journal_trans_max ;
   __u32 s_journal_block_count ;
   __u32 s_journal_max_batch ;
   __u32 s_journal_max_commit_age ;
   __u32 s_journal_max_trans_age ;

   others are checked and set in either rebuild_sb or rebuild-tree
*/

redpajama_set_name: RedPajamaGithub


Why Should a Business Invest in a Video Surveillance System?
As a business leader, you need to do whatever you can to protect your business. You put a lot of time and money in your business, so you want to maximize your profits. Unfortunately, theft can significantly impact your profits and could prove to be disastrous for your business. By having a video surveillance system, you can ensure that your business is completely protected from those who want to make some easy money off of your hard-earned business. This article will take a look at why your business needs to invest in a top-notch video surveillance system.
One of the best reasons for a video surveillance system is that you can reduce operating costs for your business. Did you know that you can get a significant improvement on your insurance premium costs? Insurance can be a hefty cost for your business, especially if you have valuable big-ticket items at your company. If you have a video surveillance system at your company, they will credit you for taking the necessary precautions to protect your business thus reducing your liability. Just having a surveillance system in place for both the outside and inside of your business can deter thieves. Cameras can also reduce operating costs by increasing your productivity. You can make sure your employees stay on task, take the appropriate break times, and even make sure that your equipment is always working since you can watch everything that goes on in your business.
Video surveillance also offers a high level of security for your business. It can not only protect your business, but it can also protect your employees. You are able to ensure that they are taking the necessary safety precautions, such as only allowing authorized people into the building or other important safety rules. You can see if your employees are being harassed by customers or a fellow co-worker, allowing you to take the necessary steps to protect your employee. It can also be helpful to ensure someone can't fake an injury on your premises to get money out of your business.
Then there are other aspects of your business that can be helped through video surveillance. You can ensure productivity, identifying issues that may be holding back your business. Maybe the layout of your office space isn't conducive to productivity or your employees have low morale which can reduce their productivity. You can offer video documentation of your business, something that may be required for compliance purposes especially in regulated industries. Lastly, it can also be helpful in ensuring a high level of customer service. You can easily monitor your customer's experience remotely, such as if they have been helped by an employee, wait times, and if the floor is safe for your customers.
As you can see, there are so many reasons as to why a video surveillance system is an important investment in your business. A lot of people think that this is just for security purposes, but there are other various aspects of your business that can be improved by video surveillance.


text:
Q: Hadamard finite part and pricipal part of Laurent series In "Fourier analysis and its applications" by Folland, the distribution (generalized function) $X^{-k}$ is defined as
$$
X^{-k}[\phi] = \frac{1}{(k-1)!} P.V. \int \frac{\phi^{(k-1)}(x)-\phi^{(k-1)}(0)}{x} dx,
$$
and the formula
$$
X^{-k}[\phi] = P.V.\int \frac{1}{x^k} \left[ \phi(x) - \sum_0^{k-1} \frac{\phi^{(j)}(0)}{j!} x^j \right]dx
$$
is proved. Here $k$ is an integer. The integrand looks like $\phi(x)/x^k$ from which the principal part of its Laurent expansion at $x = 0$ is subtracted. Folland calls the integral as "finite part" of the integral $\int \phi(x) / x^k$. After studying this, I wanted to get some more information on the concept. So I googled of "finite part" and found some materials saying that the distribution $X^{-k}[\phi]$ actually gives "Hadamard finite part" of the integral $\int \phi(x) / x^k$. However I can't show that the formula given by Folland is actually equivalent to the Hadamard finite part. How can I show that?

redpajama_set_name: RedPajamaStackExchange


East Haven is known to have a great power play. As a coach, it's probably the most embarrassing game I've been associated with in 23 years. We had 12 penalties and two were hitting from behind. We were in the box the entire night on ridiculous penalties.


I used Tea Tree Oil on my dog's sarcoptic mange because the vet couldn't fit him in for an appointment for a week. I canceled the vet appointment because the Tea Tree Oil cleared it beautifully! I cleaned the area and applied the oil with a dropper twice a day. This stuff is great! My dog thanks you! J.K.
Read more great Pet Success Stories here.
I'd recommend diluting Tea Tree Oil before applying to a pet....it's much too strong for their sensitive skin. Diluting it in Aloe, a carrier oil or even putting in your pet's favorite shampoo when bathing.


text:
Q: Setting libjpeg environment variables in Ubuntu 16.04 I am trying to build libuvc for my arm64 ubuntu16.04 board and I am running into this error after installing libjpeg-dev:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
JPEG_INCLUDE_DIR
   used as include directory in directory /home/nvidia/dev/libuvc
   used as include directory in directory /home/nvidia/dev/libuvc
   used as include directory in directory /home/nvidia/dev/libuvc
   used as include directory in directory /home/nvidia/dev/libuvc
   used as include directory in directory /home/nvidia/dev/libuvc
   used as include directory in directory /home/nvidia/dev/libuvc
   used as include directory in directory /home/nvidia/dev/libuvc
   used as include directory in directory /home/nvidia/dev/libuvc

-- Configuring incomplete, errors occurred!

It looks like I have to set a environment variable for it. I am unfamiliar with ubuntu packaging and I don't know how to correctly set it. Any ideas?
edit-----
here's the log file:
The system is: Linux - 4.4.38-tegra - aarch64
Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
Compiler: /usr/bin/cc
Build flags:
Id flags:

The output was:
0

Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out"

The C compiler identification is GNU, found in "/home/nvidia/dev/libuvc/build/CMakeFiles/3.5.1/CompilerIdC/a.out"

Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
Compiler: /usr/bin/c++
Build flags:
Id flags:

The output was:
0

Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"

The CXX compiler identification is GNU, found in "/home/nvidia/dev/libuvc/build/CMakeFiles/3.5.1/CompilerIdCXX/a.out"

Determining if the C compiler works passed with the following output:
Change Dir: /home/nvidia/dev/libuvc/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_286b1/fast"
/usr/bin/make -f CMakeFiles/cmTC_286b1.dir/build.make CMakeFiles/cmTC_286b1.dir/build
make[1]: Entering directory '/home/nvidia/dev/libuvc/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_286b1.dir/testCCompiler.c.o
/usr/bin/cc     -o CMakeFiles/cmTC_286b1.dir/testCCompiler.c.o   -c /home/nvidia/dev/libuvc/build/CMakeFiles/CMakeTmp/testCCompiler.c
Linking C executable cmTC_286b1
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_286b1.dir/link.txt --verbose=1
/usr/bin/cc       CMakeFiles/cmTC_286b1.dir/testCCompiler.c.o  -o cmTC_286b1 -rdynamic
make[1]: Leaving directory '/home/nvidia/dev/libuvc/build/CMakeFiles/CMakeTmp'

Detecting C compiler ABI info compiled with the following output:
Change Dir: /home/nvidia/dev/libuvc/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_220aa/fast"
/usr/bin/make -f CMakeFiles/cmTC_220aa.dir/build.make CMakeFiles/cmTC_220aa.dir/build
make[1]: Entering directory '/home/nvidia/dev/libuvc/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_220aa.dir/CMakeCCompilerABI.c.o
/usr/bin/cc     -o CMakeFiles/cmTC_220aa.dir/CMakeCCompilerABI.c.o   -c /usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c
Linking C executable cmTC_220aa
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_220aa.dir/link.txt --verbose=1
/usr/bin/cc      -v CMakeFiles/cmTC_220aa.dir/CMakeCCompilerABI.c.o  -o cmTC_220aa -rdynamic
Using built-in specs.
COLLECT_GCC=/usr/bin/cc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/5/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.10' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-arm64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-arm64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-arm64 --with-arch-directory=aarch64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.10)
COMPILER_PATH=/usr/lib/gcc/aarch64-linux-gnu/5/:/usr/lib/gcc/aarch64-linux-gnu/5/:/usr/lib/gcc/aarch64-linux-gnu/:/usr/lib/gcc/aarch64-linux-gnu/5/:/usr/lib/gcc/aarch64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/aarch64-linux-gnu/5/:/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/:/usr/lib/gcc/aarch64-linux-gnu/5/../../../../lib/:/lib/aarch64-linux-gnu/:/lib/../lib/:/usr/lib/aarch64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/aarch64-linux-gnu/5/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_220aa' '-rdynamic' '-mlittle-endian' '-mabi=lp64'
 /usr/lib/gcc/aarch64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/aarch64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/aarch64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccr8x7EZ.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib/ld-linux-aarch64.so.1 -X -EL -maarch64linux --fix-cortex-a53-843419 -z relro -o cmTC_220aa /usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/crt1.o /usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/crti.o /usr/lib/gcc/aarch64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/aarch64-linux-gnu/5 -L/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu -L/usr/lib/gcc/aarch64-linux-gnu/5/../../../../lib -L/lib/aarch64-linux-gnu -L/lib/../lib -L/usr/lib/aarch64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/aarch64-linux-gnu/5/../../.. CMakeFiles/cmTC_220aa.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/aarch64-linux-gnu/5/crtend.o /usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/crtn.o
make[1]: Leaving directory '/home/nvidia/dev/libuvc/build/CMakeFiles/CMakeTmp'

Parsed C implicit link information from above output:
  link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)]
  ignore line: [Change Dir: /home/nvidia/dev/libuvc/build/CMakeFiles/CMakeTmp]
  ignore line: []
  ignore line: [Run Build Command:"/usr/bin/make" "cmTC_220aa/fast"]
  ignore line: [/usr/bin/make -f CMakeFiles/cmTC_220aa.dir/build.make CMakeFiles/cmTC_220aa.dir/build]
  ignore line: [make[1]: Entering directory '/home/nvidia/dev/libuvc/build/CMakeFiles/CMakeTmp']
  ignore line: [Building C object CMakeFiles/cmTC_220aa.dir/CMakeCCompilerABI.c.o]
  ignore line: [/usr/bin/cc     -o CMakeFiles/cmTC_220aa.dir/CMakeCCompilerABI.c.o   -c /usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c]
  ignore line: [Linking C executable cmTC_220aa]
  ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_220aa.dir/link.txt --verbose=1]
  ignore line: [/usr/bin/cc      -v CMakeFiles/cmTC_220aa.dir/CMakeCCompilerABI.c.o  -o cmTC_220aa -rdynamic  ]
  ignore line: [Using built-in specs.]
  ignore line: [COLLECT_GCC=/usr/bin/cc]
  ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/5/lto-wrapper]
  ignore line: [Target: aarch64-linux-gnu]
  ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.10' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-arm64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-arm64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-arm64 --with-arch-directory=aarch64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu]
  ignore line: [Thread model: posix]
  ignore line: [gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.10) ]
  ignore line: [COMPILER_PATH=/usr/lib/gcc/aarch64-linux-gnu/5/:/usr/lib/gcc/aarch64-linux-gnu/5/:/usr/lib/gcc/aarch64-linux-gnu/:/usr/lib/gcc/aarch64-linux-gnu/5/:/usr/lib/gcc/aarch64-linux-gnu/]
  ignore line: [LIBRARY_PATH=/usr/lib/gcc/aarch64-linux-gnu/5/:/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/:/usr/lib/gcc/aarch64-linux-gnu/5/../../../../lib/:/lib/aarch64-linux-gnu/:/lib/../lib/:/usr/lib/aarch64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/aarch64-linux-gnu/5/../../../:/lib/:/usr/lib/]
  ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_220aa' '-rdynamic' '-mlittle-endian' '-mabi=lp64']
  link line: [ /usr/lib/gcc/aarch64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/aarch64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/aarch64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccr8x7EZ.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib/ld-linux-aarch64.so.1 -X -EL -maarch64linux --fix-cortex-a53-843419 -z relro -o cmTC_220aa /usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/crt1.o /usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/crti.o /usr/lib/gcc/aarch64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/aarch64-linux-gnu/5 -L/usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu -L/usr/lib/gcc/aarch64-linux-gnu/5/../../../../lib -L/lib/aarch64-linux-gnu -L/lib/../lib -L/usr/lib/aarch64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/aarch64-linux-gnu/5/../../.. CMakeFiles/cmTC_220aa.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/aarch64-linux-gnu/5/crtend.o /usr/lib/gcc/aarch64-linux-gnu/5/../../../aarch64-linux-gnu/crtn.o]
    arg [/usr/lib/gcc/aarch64-linux-gnu/5/collect2] ==> ignore
    arg [-plugin] ==> ignore
    arg [/usr/lib/gcc/aarch64-linux-gnu/5/liblto_plugin.so] ==> ignore
    arg [-plugin-opt=/usr/lib/gcc/aarch64-linux-gnu/5/lto-wrapper] ==> ignore
   ...

This is the top of the log file and I don't see anything that sticks though I am new to cmake(and c++).


The most well-known unknown American artist" died in a suicide drowning 13 January 1995, after a lifetime as unique and perplexing as his art. His suicide, the film proposes, was perhaps his greatest and most mysterious artwork. Can suicide become an artwork? A performance? The idea was troubling. When I'd first heard about it (a call from a friend on the 14 January), I was stunned and saddened. I didn't understand how someone I knew and adored, who had intrigued me with his words and keen intelligence, and seduced me with his friendship, would or could take his life….
The origins of this mysterious Ray Johnson film began many years ago when John Walters a young 16-year-old, soon-to-be PBS fimmaker began combing the stacks at Book Beat collecting surrealist tomes and rarities, especially on the artist Marcel Duchamp who occupied the central position of Walter's interest in artists (and anti-artists). At some point I mentioned that Ray was giving a midnight performance in the bookstore (one of several, over the 1980s). I don't know if Walter's was able to see Ray's performance, but his interest soon morphed into the idea of making a movie several years after the artist swam into oblivion in 1995.
Ray's performances at the Book Beat were very simple and poetic "non-performances". For one event Ray simply altered a sign in the front window announcing the performance with large capital that spelled my name in capital letters bought at a hardware store. We were having a midnight madness sale at the bookstore and at midnight he placed the adhesive letters on the back of the announcement in the front window: "Come see Artist Ray johnson tonight at midnight! one performance onlY!" Another time Ray sat in the children's book section with a bag over his head and recited "I'm not Iggy Pop!" over and over. Once for several days he'd come by with his arm always wrapped up completely with rope, he said something about how his arm was a Christo wrapping. At an informal book signing we had, Ray often signed his name with his right or left hand upside down and backwards. He also had a small clipboard attached to his steering wheel so he could make drawings while he drove. He amassed hundreds of these he kept in the glove box and a small shoebox on the floor of the car.
How to Draw a Bunny is one of the best artist biographies ever put to film. It is one of the few approaches to a difficult subject put into an honest and objective framework. It was awarded a special jury prize at the 2002 Sundance Film Festival and the Grand Prix du Public 2002 at the Rencontres Internationales de Cinema in Paris. The film was also nominated for a 2003 Independent Spirit Award. The film soundtrack also reflects the offbeat world of Ray with tracks by Max Roach, Thurston Moore and Destoy All Monsters.
Ray used to phone the bookstore at all hours of the day and night. "Check out The Warhol Diaries, now, page 425, I'll hold on.." ( his name appeared on that page) or "Nico is dead!" and then he'd hang up… "did I tell you about that guy I mailed a ham sandwich to… he still has it in his fridge!" …"call Joy Colby and ask her to review my nothing…" Ray worked the phone lines in similar style to the mail art network.
One of Ray's best friends was the archivist William S. Wilson, who lives now in a small apartment in Chelsea, New York, totally crammed in with works by his artist mother and a huge Ray Johnson archive dating back to the mid-fifties. Bill has some of the best insights to Ray. Some of Bill's old home movies of Ray row-boating down a river were included in How to Draw a Bunny. Bill took 13 wonderful black and white photos of Ray Johnson sometime in the late 1960s and wrote an article on Ray's obsession with the number 13. You can read his article online at Blastitude 13: Ray Johnson and the Number 13.


Great Deals For Go Compare Life Insurance.
Go Compare are now considered one of the best life insurance providers in the UK.
Secure your future and purchase Go Compare Life Insurance with optional critical illness cover. Its hard to think about but when a loved one passes away you have enough to think about without having to find the funds for a funeral or for unpaid bills. We can help you before the worst happens.


Chandigarh, December 17, 2017: The Serendipity Arts Festival -Goa 2017, grows every day to further surprise visitors, dignitaries, and guests alike with overwhelming performance through the day. Today, being Day-3, brings more exuberance to the SAF-Goa 2017 with theatrical dance, contemporary crafts and the great Indian delightfully sumptuous street delicacies from across the nation's varied palette. With ten venues outfitted in vivid colours of the rainbow, state-of-the-art stage set-ups and visually captivating displays; this is a world which whisks visitors into deeper dimensions in absorbing the performing arts diversity of India.
Sharing the views on the captivating audiences' delight in the Serendipity Arts Festival Goa 2017, Ms. Smriti Rajgharia, Director Serendipity Arts Festival 2017 said, "It is truly bringing more people from all walks of life, and their excitement is delightful. I am happy to see the response we've received and assure our patrons that we have bigger and better performances coming up in the next few days".
Christie's Conclave at the SAF-Goa 2017 that presents the second edition this year with more vitally and engaging keynote address by Dr. Kavita Singh, and then covers the Indian Arts and its Regional Idioms – where speakers will share their thoughts on Jewelry by Meera Kumar, on Textiles by Dr. Monisha Ahmed, and on Sculpture by Dr. Deepak Kannal, followed by the Patrons and Connoisseurship talk – where speakers present were Czaee Shah, Deepthi Sasidharan, at the Adil Shah Palace.
Shiv Yin – A Celebration of Life – a special showcasing at the DB Football Ground, by The Beijing Contemporary, Teng Amin, and Rukmini Chatterjee and a panel of talented artists showcasing a spectacular theatrical dance drama performed by two of the oldest and most traditional rich culture's and natives of Asia – a collaboration of Chinese contemporary and Indian classical music dance performance. While the performance displays each art-form imbibed in its own culture. Here the mix between the Chinese and Indian dancers, each representing the male and female energies. Interplays of duos and solos choreographed to perfection as they act out the emotional, expressive and physical flow of contemporary dance.
Jaali – a Manjari Nirula and Laila Tyabji presentation at the Adil Shah Palace, on India's most intrinsic craft 'Jaali' which is a traditional art form that displayed dexterity, creativity and embroidered hand-made techniques practiced in India. It shows intricate handwoven detailing of craftsmanship in inlay marble work – stone work, jaali in pashmina, block prints and the use of leather and natural fibres are more. A truly breathtaking display of India's cultural crafts.
Dumb Wait-err – a theatre presentation curated by Tushar Pandey that challenges the spectators' notions on traditions and bring forth the ghoulishness in an experimental style using elements like CCTV cameras, and video.
Stand on the Street – curated by Aruna Ganesh Ram, a performance director, designer, and trainer, who is dedicated to creating riveting performance in unique experiences. This show "Stand on the Street' a promenade experience of culinary delights that recreates moments of delectable and an aspiring amalgamation of a journey in the culinary enchantments of the various tastes on Indian Street food. It brings forth the oldest tradition of a foodies' paradise of flavors, the labour and passion behind creating each dish of ubiquitous street food.
Serendipity Arts Festival – Goa 2017 also has been responsible for putting India on the world map for performing culinary cultural arts. This initiative is a personal passion of the patronage of Mr. Munjal, who has been involved personally in curating the SAF-Goa 2017. This year is all about scale and pushing boundaries – SAF 17, will be experimenting with site, form and display. Along with a line-up of scintillating programming spanning music, dance, theatre, visual arts, and culinary arts, this year's edition is an unmissable spectacle of epic proportions.


text:
Officers fatally shoot armed California woman who was holding another woman hostage
by Carson Choate on October 9, 2021
Carson Choate Author
Authorities say police shot and reportedly killed an armed woman who held another woman hostage in an apartment high-rise near a Los Angeles homeless encampment [US News].
It wasn't clear Thursday what led up to the shooting. The incident prompted a SWAT response and the closure of nearby freeway off-ramps during a search of the homeless encampment around Arcadia and Spring streets, the news station said. The hostage and the officers were unhurt, police said.
Officer Tony Im, a spokesman for the Los Angeles Police Department, confirmed that an officer shot the suspect, who was taken to a hospital in unknown condition. The hostage is alive, but their condition was not available, Im said. The suspect was armed with a gun, the spokesman said. No officers were hurt during the incident.
Authorities were initially called to a report of a possible shooting at 4:10 p.m. in the 500 block of South Main Street, Im said. By 5:40 p.m., the suspect had barricaded themselves and SWAT officers responded to the scene, the spokesman said [ABC7].
Videos taken by bystanders appear to show the Santa Fe Lofts on East 6th Street as the location of the hours-long standoff. One video appears to show the suspect holding a gun to the hostage's head before dragging the hostage to a different area of the room and walking away. A few seconds pass, and the suspect walks back into the room before a loud explosion rocks the building. The suspect runs. There are more loud booms.
Eventually the suspect grabs the hostage again and moves toward a dark area of the room. There's another loud boom. Officers wearing tactical gear can be seen swarming the suspect before several gunshots are fired and the video ends. Further information about the shooting was not immediately available [LA Times].
PHOTO CREDITS: ABC7
Carson Choate
Latest posts by Carson Choate (see all)
Texas Board of Pardons and Paroles withdraws George Floyd clemency recommendation - December 28, 2021
Trump 'very appreciative' and 'surprised' President Biden acknowledged his COVID-19 vaccine 'success' - December 21, 2021
Socialist Seattle City Councilmember survives recall attempt - December 19, 2021

redpajama_set_name: RedPajamaCommonCrawl


text:
Broadcast Information
Courtesy: Duke Photography
Nine Duke Teams Post Perfect APR Scores
Courtesy: Duke Sports Information
print rss
BDN+ Premium Content
15 Duke Teams Honored by NCAA for APR Achievement
DURHAM, N.C. -- Nine Duke University varsity athletics programs registered a perfect 1000 score in the most recent multi-year (2011-15) Academic Progress Report (APR) data released on Wednesday by the NCAA.
In all, Duke totaled the highest APR score among ACC institutions in 12 of the league's sports – baseball (993), men's cross country (1000), women's cross country (1000), women's fencing (1000), football (995), men's golf (1000), women's golf (1000), women's lacrosse (1000), men's tennis (1000), women's track and field (1000), volleyball (1000) and wrestling (977). Also, eight additional Duke programs ranked among the ACC's top three in their respective sports.
For the four academic years ending in 2014-15, all of Duke's teams scored at least 977 points and posted scores greater than the national average in each respective sport. Duke's 995 points in football was the highest FBS score in the nation.
Last week, 15 Duke varsity athletics programs were honored by the NCAA for placing among the top 10 percent in their respective sports nationally in the latest multi-year APR report. The Blue Devils' baseball, men's basketball, men's cross country, women's cross country, women's fencing, football, men's golf, women's golf, men's lacrosse, women's lacrosse, men's soccer, men's outdoor track and field, women's outdoor track and field, men's tennis and volleyball programs were among those listed by the NCAA.
Each year, the NCAA tracks the classroom performance of student-athletes on every Division I team through the annual scorecard of academic achievement, known as APR. The score measures eligibility and retention each semester or quarter and provides a clear picture of the academic culture in each sport. The most recent APRs are multi-year rates based on scores from the 2011-12, 2012-13 and 2013-14, 2014-15 academic years. Beginning with 2012-13 championships, teams were required to post a minimum 900 four-year average APR or a 930 average over the most recent two years to be eligible to participate. For 2014-15 championships, teams were required to earn a 930 four-year average APR or a 940 average over the most recent two years to participate in championships. In 2015-16 and beyond, teams must earn a four-year APR of 930 to compete in championships.
Annually, Duke has ranked among the top FBS institutions in terms of raw numbers of individual team 1,000 APR scores:
2016—1. Notre Dame 16; 2. Stanford 14; 3. Boston College 12; 4. Minnesota 11; 5. Rice 10; 6. (tie) Duke, Northwestern 9; 8. Tulane 7.
2015—1. Notre Dame 17; 2. Stanford 15; 3. Northwestern 12; 4. Boston College 10; 5. Duke 9; 6. Minnesota 8.
2014—1. Stanford 12; 2. Notre Dame 11; 3. Northwestern 10; 4. Minnesota 9; 5. (tie) Boston College, Duke 8; 7. Penn State 7; 8. (tie) Ohio State, Vanderbilt 6.
2013—1. Notre Dame 12; 2. Stanford 11; 3. Duke 10; 4. (tie) Boston College, Northwestern 9; 6. Vanderbilt 7; 7. Rice 6.
2012—1. Notre Dame 12; 2. (tie) Boston College, Duke 9; 4. (tie) Northwestern, Vanderbilt 8; 6. Stanford 7; 7. (tie) North Carolina, Rice, Texas 5.
2011—1. Duke 10; 2. Notre Dame 9; 3. Boston College 6, 4. (tie) Michigan, Northwestern, Penn State, Texas, Tulane, U.S. Naval Academy, Vanderbilt 5.
2010—1. Duke 10, 2. Notre Dame 8; 3. Boston College 7.
2009—1. Notre Dame 9; 2. Duke 8; 3. (tie) Boston College, Stanford 6; 5. U.S. Naval Academy 5; 6. Michigan 4.
2008—1. (tie) Notre Dame, Duke 8; 3. Boston College 7; 4. Stanford 5; 5. (tie) Northwestern, Rice, U.S. Naval Academy 4.
2007—1. Boston College 10, 2. Notre Dame 9; 3. (tie) Rice, Stanford, U.S. Naval Academy 7; 6. Duke 6; 7. Northwestern 5.
#GoDuke
MORE DUKE ATHLETICS
McDonald Checks In on "Blue Devil 360" Summer Series
Subscribe on iTunes Subscribe on Google Play Blue Devil 360 Archives
2019 ACE Class Checks in From Vietnam
Duke Sets ACC Record with 519 Honor Roll Selections
Full List of 2018-19 Honor Roll
DUKE NEWS ARCHIVES
Besser, Robinson, White Named to NABC Honors Court
WGOLF
Kim's Run at North & South Concludes in Match Play
Harris, Quansah and Cutcliffe Head to ACC Kickoff
ACC Kickoff Homepage Watch the Commissioner's Forum ACC Atlantic Division Coverage
Goodchild Selected Player to Watch for World Cup
Players to Watch
Brown and Jackson Placed on Doak Walker Watch List
Brittain Brown Bio Deon Jackson Bio
Duke in the NBA: Summer League Recap
DUKE VIDEOS
Blue Devil 360: Season 2, Episode 16 - Thanks...
Boys & Girls Club Shoe Donation
2019 Athletics Graduation Ceremony
ATH Harrison Taee STARS Performance
ATH Sydnei Murphey STARS Performance
ATH Delaney Graham STARS Performance
go to media portal
SIGN UP | LAUNCH PLAYER
LATEST VIDEOS More
Blue Devil 360: Season 2, Episode 16 - Thanks
BDN+ LIVE EVENTS SCHEDULE
FULL LIVE EVENTS SCHEDULE
PHOTO GALLERIES MORE ALBUMS
ATHLETICS HEADLINES
White, USOPC's CAC Convene in Durham
2019 ACE Class Checks in From South Africa
Duke Finishes Ninth in Directors' Cup Standings
Van Raaphorst Next on "Blue Devil 360" Summer Series
MORE Athletics


Whether she's surfing, singing, or dancing like there's nobody watching, Liv Phyland has energy to burn. She's a fresh, healthy face with a cheeky sense of humour and her genuine lust for life is addictive.
Not only has she has hosted ABC3's flagship show 'Studio3' since 2011 but she also appeared in her own extreme sports series 'Liv on the Edge' and MC'd events such as 'Fun4Kids' festival, Cyber Safety Summit and St Kilda Festival. Liv is also a singer/songwriter who has travelled extensively.
Liv has completed an undergraduate degree in Psychology and is currently studying Integrative Nutrition with IIN.


Being a protege, may at first feel like you are giving up. Sooner, rather than later, you will come to find it this not to be an act of submission, but rather a act of empowerment.
If you are interested in becoming a protege, please read the criteria on this page. If you meet this criteria, please reach out to us by clicking on the Contact page.
If you are not in need of mentoring at this time, you may be ready to mentor. If so, reach out to us by clicking on the Mentor page.
The League is always in need of funding, if you would like to contribute, click on the Donate page.
You must want to be self sufficient, able to provide yourself with clothing, food, and shelter, without the aid of others.
You must not hurt others - if your advancement comes at the cost of others well being, this is not the place for you.


the adventures of tartanscot™: "By an Open Fire . . . "
As temperatures start to fall - we all begin to gather around the fireplace. Sipping hot chocolate. Telling stories. And basking to the glow of these beautiful mantels all decorated for the holiday season. Just a sample of the entries in the Tartanscot Holiday Decorating Contest.
I'm so glad that I don't have to judge these entries. They are all so wonderful. Thank heavens for these fine folks! Don't forget, you can submit entries in all three categories (Christmas tree, mantel, and dining room) until midnight on Thursday. All the details are here.
Scot these are all wonderful, I really love the first though!! Do I spy an Eddie R inspired wreath!?
What a beautiful blog here!
I've found you thanks to Sharon at My French country home!
I love love and love the first picture, so beautiful!
I love Cristin's mantle... simply gorgeous!!!
I have no fireplace and it is summer where I live, so I am enjoying the sights of the season ( as I know it) through your blog photos.


text:
Q: ValueError: Index length mismatch: 4064 vs. 1 I am working on a NLP problem https://www.kaggle.com/c/nlp-getting-started. I want to perform vectorization after train_test_split but when I do that, the resulting sparse matrix has size = 1 which cannot be right.
My train_x set size is (4064, 1) and after tfidf.fit_transform I get
size = 1. How can that be??! Below is my code:
def clean_text(text):
    tokens = nltk.word_tokenize(text)    #tokenizing the words
    lower = [word.lower() for word in tokens]  #converting words to lowercase
    remove_stopwords = [word for word in lower if word not in set(stopwords.words('english'))]
    remove_char = [word for word in remove_stopwords if word.isalpha()]
    lemm_text = [ps.stem(word) for word in remove_char]     #lemmatizing the words
    cleaned_data = " ".join([str(word) for word in lemm_text])
    return cleaned_data

x['clean_text']= x["text"].map(clean_text)

x.drop(['text'], axis = 1, inplace = True)

from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size = 0.2, random_state = 69,
stratify = y)

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
tfidf = TfidfVectorizer()
train_x_vect = tfidf.fit_transform(train_x)
test_x1 = tfidf.transform(test_x)

pd.DataFrame.sparse.from_spmatrix(train_x_vect,
                              index=train_x.index,
                              columns=tfidf.get_feature_names())

When I try to convert the sparse matrix (with size = 1) into a dataframe, it gives me error.
The dataframe x has size = 4064 and my sparse matrix has size = 1 which is why it is giving me error. Any help will be aprreciated!

A: The reason you are getting the error is because TfidfVectorizer only accepts lists as the input. You can check this from the documentation itself.
Here you are passing a Dataframe as the input. Hence the weird output.
First convert your dataframe to lists using:
train_x = train_x['column_name'].to_list()

and then pass it to the vectorizer. Also there are many ways to convert dataframe to list but the output of of all of them might be different formats of list. For example if you try to convert dataframe to list using:
train_x = train_x.values.tolist()

it will convert the dataframe to list but then the format of this list won't work with Tidfvectorizer and will give you the same output as you were getting before in your question. I found the above way of converting to list to work with the vectorizer.
Another thing to keep in mind is that you can only have one column/variable in your list/dataframe. If you have more than one columns in your dataframe and you convert it to list and pass it to the vectorizer, it will throw an error! I don't know why this is but just throwing it out there in case someone faces this problem.


I am the mother of an almost-18-year-old. This having an almost-grown kid is hard stuff, y'all. Remember those days of sweetness, when your little girl cried every time you dropped her off at Sunday School? Or how about those days when you longed to go to the grocery store (or the bathroom) ALONE? My mamma told me those days would pass quick as lightning and that one day I would look back on them with longing.


Cleaning up the Marilao-Meycauayan-Obando River System (MMORS) will require constant dredging even if the task takes years to complete, according to senators and Bulacan officials who attended a consultative meeting in Manila on Tuesday.
The rehabilitation of MMORS, once branded as one of the 30 dirtiest rivers in the world, started in 2008 but it was not given full attention due to insufficient funding for dredging operations. The cleanup operation requires P2 billion, which has to be included in the 2018 national budget.
Sen. Cynthia Villar, chair of the Senate committee on environment, urged the government to conduct an annual dredging to keep the pace of rehabilitating the river system serving Valenzuela and Caloocan cities in Metro Manila, and Meycauayan and San Jose del Monte cities and Marilao, Obando and Sta. Maria towns, all in Bulacan province.
"Maintaining a river is work we will have to do for the rest of our lives. It is eternal work," Villar said.
Bulacan Gov. Wilhelmino Sy-Alvarado sought the help of Villar and Sen. Sherwin Gatchalian, a former Valenzuela City mayor and representative, to improve rehabilitation work at MMORS.
The river system suffers from pollution attributed to heavy industries in the area. But the river also catches 75 percent of domestic wastes produced by 3.5 million residents living along the riverbanks, said Lormelyn Claudio, Central Luzon director of the Environmental Management Bureau.
Gold smelting and leather tanneries operate in Meycauayan, a battery recycling firm is hosted by Marilao, and heavy machinery industries are active in Sta. Maria and in the cities of Valenzuela and Caloocan, Claudio said.
Badly designed septic lines also contribute to the pollution, she added.
Villar discouraged the use of dredging machines and suggested tapping amphibious backhoes to sustain work without damaging the river ecosystem.
She said she would ask her son, Public Works Secretary Mark Villar, to supply backhoes for the MMORS rehabilitation.
"I sympathize with [the local governments undertaking MMORS rehabilitation] because we also had money problems in Las Piñas when we cleaned our river," she said.
Villar said the key to the cleanup program was proper waste segregation.


A new and improved scoreboard is up and running at the Fisher softball field. It is almost 3 times the size of the old one. The previous score board which lasted about 20 years, stopped working in the middle of last season.
With the help of community sponsors, the team was able to get a new scoreboard. The Fisher Athletic Booster Club donated $2,000. Their logo will be put on the scoreboard, along with Dewey Bank, and Illinois Brick Company.
The installation was also completed with the help of the community. Many local people helped including… Chris Stipp, Tim Hood, Scott May, and Lucas Bell. Bill Marry also put in a lot time and effort into the project. Bryan Baker of Baker Electric, owns his own business and did all of the electrical work. Mark Varner of Action Rents, donated his time and equipment. Kevin Terven and Allen Walker, who both work for Illinois Brick, donated a third beam to help stabilize the board.
The softball program is looking for one more business to sponsor the scoreboard campaign. If anyone is interested please contact Ken Ingold or Jon Kelly.


We're getting some big names in comedy, a Dave Matthews Band tribute band, a Pink Floyd tribute band, two brewery anniversaries and Easter Sunday.
This week in Cincinnati brings two brewery anniversaries (Alexandria and Urban Artifact), jokes from Nick Offerman and Cedric the Entertainer, a Carnival of Mysteries (how mysterious!) at Findlay Market, a Dave Matthews Band tribute band, a Pink Floyd tribute band and a little hoppy Sunday called Easter. Have an egg-cellent week! Be good, always use your turn signals.
Nick Offerman 8 p.m., Taft Theatre, 317 East 5th St., Downtown. $39.50-$95. ticketmaster.com.
Cedric the Entertainer Funny Bone Comedy Club Liberty, 7518 Bales St. $50-$70. April 19-20. Two shows nightly. Saturday 7 p.m. is SOLD OUT.
Circle It Album Release Party with Jane Decker and Beloved Youth 8 p.m., Top Cats, 2820 Vine St., Corryville.
Dave Matthews Band Tribute: Trippin Billies 8 p.m., Bogart's, 2621 Vine St., Corryville.
FC Cincinnati vs. Real Salt Lake 7:30 p.m., Nippert Stadium, 2700 Bearcat Way, CUF. MLS Soccer. ccm.uc.edu.
American Atheists 2019 National Convention April 18-21, Hilton Hotel, 35 West 5th St., Downtown. $49-$249. Celebrate what it means to be an atheist in America. Speakers, activists, community leaders, academics, musicians and artists.
Bri Pruett Thursday-Sunday, Go Bananas, 8410 Market Pl Lane, Montgomery. $8-$14. gobananascomedy.com.
Miss Saigon through April 21, Aronoff Center for the Arts, 650 Walnut St., Downtown. $31-up.
Easter Celebration noon, Cincinnati Zoo and Botanical Garden, 3400 Vine St., Avondale. Celebrate Easter with treat stations throughout the zoo, children's activities, animal egg hunts, and visits with the Easter Bunny. cincinnatizoo.org.
Kings Island opens for the season!
Pinkalicious: The Musical noon and 2 p.m., Memorial Hall, 1222 Elm St., Over-the-Rhine. $14. Pinkalicious can't stop eating pink cupcakes despite warnings from her parents. memorialhallotr.com.
Pink Droyd 8 p.m., Bogart's, 2621 Vine St., Corryville.
Flaw, the Mendenhall Experiment, Black Water Rising, Livid, Mister Mas 8 p.m., Thompson House, 24 East 3rd St., Newport.
Saturn Batteries Album Release MOTR Pub, 1345 Main St., Over-the-Rhine. Free. With Lemon Sky. motrpub.com.
Sour Fest 4 p.m., Northside Yacht Club, 4231 Spring Grove Ave., Northside. Variety of sour beers tapped at 4 p.m.
Alexandria Brewing Company Anniversary 11 a.m., Alexandria Brewing Co., 7926 Alexandria Pike, Alexandria. Free. Celebration includes limited releases, surprise beers throughout the day, extended patio seating with local vendors, entertainment and more. alexandriabrewingcompany.com.
Urban Artifact 4th Birthday Celebration noon, Urban Artifact, 1660 Blue Rock St., Northside. Beer, music and food.
Adult Easter Egg Hunt 4 p.m., Harley-Davidson, 1799 Tennessee Ave., Paddock Hills. Includes 1 beer ticket and donations to be made to Iron Pits Rescue. Enjoy BBQ and Beverages from Bad Tom Smith Brewing.
Breakfast with the Easter Bunny 9 a.m., Dave and Buster's Springdale, 11775 Commons Drive, Springdale. $23.
Breakfast with the Easter Bunny 9 a.m., Maggiano's Little Italy, 7875 Montgomery Road, Kenwood. $25 adults, $20 children.
Hopping into Easter Craft and Vendor Show 10 a.m.-3 p.m., Day Heights Fireman's Memorial Building, 1313 State Route 131, Milford. Free.
Easter Sunday, go to events.cincinnati.com for more Easter brunches, egg hunts and services.
Crawfish Boil noon-3 p.m. or 4-7 p.m., Darkness Brewing, 224 Fairfield Ave., Bellevue. $25 all-you-can-eat.


I found a terrific recipe for pickled radishes recently, and made a couple of batches in rapid succession. Before I knew it I had tweaked the recipe, added more vegetables, and seen the whole lot disappear so quickly I had to make more. I particularly like these pickles served alongside pate on French bread, but you can put the jar out to have with anything you like — from fried chicken or fish and chips through to soy beef skewers on rice.
Cut small radishes in half and large ones in quarters. Halve carrots lengthwise, or cut in thick slices if they are unusually fat. Slice cucumber.
Place vegetables in a bowl and toss with salt to combine. Set aside for 30 minutes, then transfer to a sieve so juices can drain (do not rinse).
Pat dry with a paper towel. Transfer vegetables to a jar or bowl, and add ginger.
Dissolve sugar in vinegar and water with peppercorns and coriander seeds over low heat. Pour over vegetables.
Allow liquid to cool then cover and refrigerate pickles for at least 1½ hours before serving.
Pickles are at their crunchy best in the first 2 days, but will keep, refrigerated, for 2 weeks.


On the one hand, the new HTC's One smartphone line looked intriguing when it was announced, and it suggested optimistic feelings about the company's future. On the other hand, the reality turned out not so unclouded as the manufacturer wished and even as its fans, like me, did. Starting from the middle of 2011, the price of the company's shares has fallen down by almost a factor of ten: in May 2011, one share cost about TWD 2,500 (USD 83), but in July 2012, it's only TWD 280 (USD 9).
It's obvious that in this situation the company had to change something, to revise its views on its own product family and its scale, and to set some other priorities for its smartphones in various price categories. And HTC is really trying to make something. Probably, the Desire V represents exactly this kind of an attempt in a new market segment, as this is not only their first dual-SIM handset ever, but also one of the few middle-end dual-SIM smartphones on the market, while all the dual-SIM handsets available today belong to the low-end sector.
The design of the HTC Desire V is easily recognizable. The handset resembles other models by HTC due to the slightly curved lower part of its body, to its gradually rounded corners, and some other design details that can be found in a lot of HTC products. I liked the handset appearance: it looks ascetic and business-like, but it's not boring though, so I can't say the design is dull or drab.
In Russia, only black model is available now. Probably, the white version is coming later. The black handset is made of soft-touch plastic. It's comfortable to hold it in the hand; the handset doesn't slip out and feels fairly nice to the touch. The frame around the screen is made of black metal, while the camera eyelet is embedded into a rim and located on a small platform made of grooved plastic. The handset body is not too easily soiled, although if you peer at it closely enough, some traces and worn spots become visible at certain angles.
I don't know whether it was my bad luck or the handset's specific design feature, but the battery cover in the sample I tested, which occupies the entire backside of the handset, didn't cling tightly enough to the rest of the body. Judged by eye, the gap between the body and the cover is less than a millimeter, but if you press the cover, some crackling can be heard. I can't say this is a serious downside, but on the other hand, my sample showed it right after the cover had been removed and placed back for the first time, so no one can say what it will look like after 6 or 12 months of usage, if the brand new handset already has this "specific" feature.
There are no other complaints about the build or design quality.
The Desire V resembles other middle-end HTC models with its dimensions. It fits comfortably in the hand during phone conversations and when you operate the device. It's not too heavy, and you can put it practically in any kind of pocket.
The smartphone runs Android 4.0, so all the controls are made in accordance with the requirements of the operating system. Like in the other HTC models running the same OS, we have only three buttons under the screen instead of four (as before): Back, Home and Recent Apps.
The touch buttons are quite distanced from each other, while their marks are simple and clear. There is white illumination that turns on when you operate the smartphone in the dark.
Every time you touch the buttons, the handset produces a hardly noticeable vibration. It was stronger in the HTC models released last year, but now it is weaker, which is quite an unpleasant trend. In some Android 4.0 applications, a software button is used to open the menu, but some other applications don't have it, so you have to hold the Recent Apps button for a couple of seconds to open the menu.
The right side of the smartphone accommodates the volume control button; it's quite comfortable and easy to press it without looking at it. On the left side we have the microUSB jack. The power button is in the center of the top side of the handset; the 3.5-mm audio jack is nearby. Holding the power button launches a menu that allows turning the handset off, switching it to the flight mode, or rebooting the device.
At the top of the front side, we find the voice speaker; the light and proximity sensors are nearby. To the right, there is an indicator. It is red when the battery is being charged or when the handset is connected to a PC; it blinks green if you have missed calls, unread text or email messages. At the top of the backside, we see the eyelet of a 5-megapixel camera; a nicely designed grid of the ringing speaker and the Beats Audio logo are at the bottom.
The memory card slot and the SIM card slots are under the battery cover. The slot for the main SIM card is to the left of the camera module (underneath it); the one for the additional SIM card (marked) is to the right. And the microSD slot is a little higher.
The HTC Desire V features a capacitive Super-LCD screen with a diagonal of 4" and resolution of 800 x 480 pixels (WVGA). The specifications of this screen are absolutely the same as those of the screen in the HTC Incredible S: for instance, the screen ensures maximum viewing angles and natural color reproduction (as far as I can judge). The screen is capable of rendering up to 16 million colors and supports 4 touches at a time. It is covered with the protective Gorilla Glass: it is scratch resistant and if you take scissors and run them across the screen surface without pressing too hard, you won't notice any traces of it. But still, after some period of usage some small scratches and worn spots may appear. It's pretty comfortable to control the screen with fingers, as the surface provides excellent sliding.
The screen remains more or less readable in the sun, but under direct sunlight it gets totally unreadable though. In general, as for a middle-end smartphone, the screen of the HTC Desire V is surprisingly good. Of course, it represents the previous generation used in the flagship model released last year, but the screen still produces a pretty high picture quality.
The smartphone sports a 5 MP camera with auto focus and LED flash. The interface of the camera application is exactly the same as in the HTC One X and One S models, so the screenshots below are the ones taken for the One S.
The maximum picture resolution is 2,592 x 1,552 pixels (in the widescreen mode). You can also select the resolution for the 4:3 side ratio. There are settings for white balance, ISO, exposure, contrast, sharpness, and saturation. You can apply special effects to your pictures.
The maximum video resolution is 800 x 480 pixels. Effects are also available for videos, as well as white balance, exposure, contrast, saturation, and sharpness settings. When recording a video, you can zoom in and out and change the point of focus manually. There is neither tracking auto focus nor the opportunity to take pictures when shooting a video.
You can judge about the picture and video quality by the samples below. As for me, the camera of the HTC Desire V is not bad, but not more than that.
The handset uses a 1,650-mAh Li-Ion battery. During the test, the battery was capable of lasting for a day at the following daily usage conditions: 2 to 3 hours of listening to music, 10 to 20 text messages, Gmail account with the Push-mail function on, 10 to 20 camera shots, reviewing Facebook and Twitter accounts from time to time, and about an hour of talking on the phone. The smartphone has two SIM cards, both being active simultaneously.
However, without any special efforts, I was able to exhaust the battery within half a day by listening to music for 4 or 5 hours, by surfing the web all the time, posting various stuff to Instagram and Twitter, and replying to emails. Hence, if you start to use the fully charged device at 9 in the morning, constantly handling the smartphone this or that way for about half of that half-a-day time, the battery level will get down to 10% by 4 or 5 p. m.
The smartphone is built on the Qualcomm MSM7227A platform and has a 1-GHz CPU. The handset has 512 MB of RAM and 4 GB of internal storage for user data. Besides, there is a microSD card slot.
To put it briefly, the smartphone is not very fast. When performing the most ordinary tasks like opening a menu, launching the email application or opening contacts, the handset may lag or hang for some time. Actually, it often takes the handset about a second to respond to a tap. If you have a lot of applications running, the performance becomes too poor, so you have to reboot the smartphone to make it work in an acceptable way. Removing the active applications from the memory by using the Task Manager doesn't help at all.
The poor performance is what disappointed me most about this handset. I can put up with the pretty short battery life, almost like with the flagship models, with the weak vibration produced when you touch the buttons, and even with the high price, because you have practically no choice if you want to get a dual-SIM smartphone with a good design. But when you buy it, you always expect comfortable operation of all of its features, and your general impressions may get spoilt by the smartphone lagging and working just not so fast.
Here I would also like to say that if you switch to the HTC Desire V from some really low-end smartphones, even those running Android, most likely you won't notice how slowly it works. But if you had a flagship before, even one of an earlier generation, or the iPhone or a Windows Phone device, the interface lags will certainly be too obvious.
The smartphone operates in the GSM (850/900/1800/1900) and UMTS (900/2100) networks and supports the two high-speed data transfer standards: EDGE and HSDPA. You can turn the connection modules on and off using the menu settings or one of the tabs on the system panel falling down from the top of the screen, or through the widgets. There is a special widget presenting a line of icons for controlling the connections, as well as individual widgets and the standard Android one.
The HSDPA data transfer protocol is only supported by the main SIM card installed into the first slot. The second SIM card only provides EDGE connection.
The handset features an in-built Bluetooth 3.0 module supporting A2DP and EDR, as well as all other major profiles.
Wi-Fi (802.11b/g/n). There are no complaints about the operation of the Wi-Fi module. The settings allow adjusting the rules of switching to sleep mode, using a static IP only, and adding security certificates. There is also a special mode for the maximum performance of the Wi-Fi connection. With Wi-Fi on, the handset practically doesn't get warm.
Wi-Fi router. The HTC Desire V has a feature of sharing 2G/3G internet connection via Wi-Fi. It works as follows. You go to the wireless connections menu and enable the Wi-Fi Router option, which opens the settings menu. Then you select the network name, password and connection type (WEP, WPA, WPA2). Besides, you can set the maximum number of allowed connections to your handset, or you can allow or ban every new connection individually.
What I liked about this device right from the start is the elegant and convenient way the dual SIM support is implemented. I can't say I'm a very experienced user of dual-SIM mobile phones, but still, comparing to the few devices I have ever used, the dual SIM support at the user interface level provided in the HTC Desire V is the best and the most convenient implementation.
You can set the main and the additional SIM card and provide a name of up to 4 characters for each of them. It's not too long, but in various menus those names will be shown fully, without any contractions.
In the dialer window, you can see two buttons showing the names of the SIM cards instead of the ordinary Dial key. After you have found the necessary phone number in your phonebook using the SmartDial function, all you have to do is tap on it and then press the SIM card button you want to use, so there is no need to hold buttons or use any pop-up menus.
In the call log, every phone call is marked with the SIM card number, which is also very helpful. In the list of received messages, you can also see which of the SIM cards was used. In the window for sending text messages, you have two Send buttons instead of one: they show the SIM card names and you make your selection by simply tapping on one of them.
In the phone call settings, you can set an individual ringtone for each of the SIM cards or select the common ringtone for both of them, but you can't select different notification sounds for the two SIM cards.
The smartphone uses a Qualcomm gpsOne chip. Finding the satellites takes 10 to 15 seconds. For the navigation the handset uses the standard Google applications: Google Maps and Google Navigation, as well as the НTС Locations application based on Route 66. Google Maps allow building routes and finding addresses by street or location names. Google Navigation provides route tracking and voice hints.
The HTC Navigation software is launched with the help of the Locations application. It is a full-blown navigation application supporting points of interest (POI), route log and route building. The handset is supplied with a general map of Russia and a demo version of the map for the Russian cities with a 30-day trail period. You can buy any maps available for this software directly from the application interface, paying with your plastic card (VISA, Master Card, American Express, Diners Club). Besides, you can also buy maps online at the developer's website, and then you will have to enter a special voucher code in your handset and download the maps you have paid for. The good thing is that you can select one of the available license versions: 30 days, one year, or unlimited. You can judge about the prices basing on these quotations for the Russian maps: $5.99 for 30 days, $24.98 for a year, and $37.99 for the unlimited license.
The smartphone runs Android 4.0.3 and features the HTC Sense 4.0 interface extension. The interface looks the same as in the more expensive models, but still some functions are curtailed. For example, some of the widgets available in the One Series handsets are absent (why HTC decided to remove almost all clock widgets seems unclear). Besides, you can't call the matrix of the desktops to quickly switch between them. The weather application doesn't have HTC's usual animation.
There are a few even more annoying restrictions introduced for some absolutely uncertain reasons. For example, in the more expensive models with Sense, the user has the opportunity to switch to the music player right from the lock screen by simply dragging the window with the album cover to the lock ring or, on the contrary, by dragging the lock ring to the music player window.
The Sense version of the HTC Desire V doesn't allow that. First, I thought it was conditioned by the complicated animation and by the manufacturer's wish to minimize the interface load or something like that. However, in the Desire V you can switch to a missed call or an unread message by dragging the notification through the center of the screen to the lock ring. Although the animation and the general mechanics of all those three operations – quick switching to messages, calls and music from the lock screen – are absolutely the same.
But that's enough about the sad things. The interface itself, as usual, is beautiful and enjoyable, at least if we leave the lagging aside. The Recent Apps button calls up miniatures of the recent application windows instead of their screenshots, so the switching system resembles the one used in the tablet version of Android 3.0.
The smartphone is decorated with the Beats Audio nameplate, while the package contains nice-looking but simple earphones with a flat cable.
I've tested the sound quality in comparison with that of the HTC One X that I had at hand at the moment, using a Chinese earphone set, the Awei es900i, bought in Hong Kong at some $5-$7, that ensures surprisingly good sound (as some connoisseurs say).
With the Beats Audio effect turned off, the sound produced by the HTC Desire V is clear but flat and inexpressive. I liked the sound of the HTC One X, also with the improvers turned off, much better: the sound is much deeper and has more volume. When the Beats Audio is on, the sound became slightly different, but I can't say if it's better or worse. Hence, the general thought I'm trying to express is that the One X sounds far better than the Desire V, regardless of the fact that the Beats Audio logo is also present on the body of the latter.
The handset works quite well with the mobile network, although during the two-week period of my testing it, there had been a few similar occasions when one of the SIM cards lost its signal without any reasons, while the other one was still showing the best reception possible. The mobile operator was the same and the SIM cards were nearly of the same age. The voice reproduction quality is not bad; the voice speaker loudness is slightly above the average level, but without any reserve. The ringing speaker is loud, so almost in every situation I set the volume to 60% or 70%, and that was enough for me. The vibration alert level is moderate.
The smartphone is already available on the shelves. The large retailers sell it at about $490. There are no unofficial supplies yet, as the sales are only at the starting point. On the one hand, if the HTC Desire V had appeared a month earlier, we could say it had no quality alternatives. The majority of dual-SIM Android smartphones have either a lower-end screen (the diagonal and resolution are lower) or a simpler design and build quality, or both. Of course, the prices for those handsets are twice lower, too.
However, not so long ago, another Android smartphone supporting dual SIM operation was introduced on the Russian market – the ZTE V880E Dual. The device looks simpler and more ordinary than the HTC Desire V, and the body materials are not so attractive (regular patterned plastic). But it also features a 4-inch screen with the resolution of 800 x 480 pixels, though with an obviously lower quality (color reproduction and viewing angles) than the one in the HTC model. It doesn't have the HTC Sense interface and runs Android 2.3 – these are disadvantages too. But in the rest the both smartphones look quite similar: 1-GHz CPU, 512 MB of RAM, a microSD slot, and a 5 MP camera. The price difference is the main factor here: the ZTE V880E Dual is offered at $250, which is two times less than the price of the HTC Desire V, both having similar specifications.
Certainly, if you need a really beautiful Android smartphone that wouldn't look cheap but would support dual SIM operation and feature a nice design and a good build quality, then the HTC Desire V is beyond the competition. However, you should remember that you will have to overpay quite a lot for this exterior (design) and interior (software) beauty. Actually, you will pay twice as much as for any other device with similar technical specifications offered by other manufacturers.


Listing courtesy of Waterside Realty LLC.
Ask a question about 544 Canal Rd, or schedule a tour.
This single family home located at 544 Canal Rd, Sarasota, FL 34242 is currently listed for sale by Waterside Realty LLC, with an asking price of $2,398,000. The property was built in 1948 and has 1 bedrooms and 1 baths. Canal Road is located in the Siesta Key area.
Two building lots -zoned RMF with 4 buildings with 4 one bedroom apartments on each lot for a TOTAL of ---8 apartments and ---6 carports plus an office. Just one block to beach and 5 blocks to Siesta Village. Can be rented by-Day... more., -week, -month. $2,398,000. ---- One existing dock and another one possible. Will not sell separately. 550 Canal is included in the sale!


A nice place with a unique concept. It is a startup culture inspired cafe with meeting rooms to rent, charging points and interesting healthy food. It is a good place to spend quality time with friends. They have all kind of board games plus books/novels here.
Prior Calling recommended to avail services.


Getting fast cash is easy in Mendham Twsp when you need to borrow amounts between $100 and $1,000. (Exact amounts may vary depending on local law and your individual circumstances). The entire process can be completed online and funds are automatically sent by direct deposit.
All you need to do is choose the amount you need, provide your personal details, and we'll tap you into a network of more than 100 payday lenders, who are licensed in Mendham Twsp.
If you're looking for payday loans online, then you've found the right website. We provide our visitors from Mendham Twsp, NJ with a fast and secure online service.
Are you over the age of 18, living in Mendham Twsp, and are employed, self-employed or otherwise have a stable source of income? Then you are eligible to use our loan request service!
Apply for Cash Loans in Mendham Twsp Today!
ExtLoansUSA cuts the hassle out of finding and applying for loans by using one form to connect you with a network of direct and indirect lenders in Mendham Twsp, New Jersey, who can direct deposit funds in as fast as one working day!


$400,000.00 Down & $199,000 at 6.5% at 24 months.
Excellent opportunity to purchase a rapidly growth shutter company located in the heart of the low country. Numbers are up substantially year over year. MANY jobs on the books for 2017. Very easy business to learn even if you have no experience in the industry. Basically just about anyone can wrap their arms around the business quickly. If you are thinking about relocating to the Charleston area, this is the business for you. Owner works about 4 days a week. Incredible quality with all their shutters, indoors and out. Many different lines to pick from for any type of customer. Dependable and experienced staff set in place. Owner is happy to stay on for a very smooth transition. The business owner will offer a nice piece of owner financing to the right party. Please contact broker or email us for further information.


Plan your orders and take advantage of discounts for quantities. Be informed before ordering.
We count on a automated logistic base that allows us to reduce dispatch time and offer a better service.
We have a wide range of products available that gives the opportunity to take order decisions with agility.
Subscribe to our newsletter and stay updated on the latest news about best products of collectivity products on the market.


text:
More Money Stories»
He's Down to Last 2 Guesses to Access $240M in Bitcoin
A Doritos Ad Is Going Viral
IRS Delays the Start of Tax-Filing Season
On Its Way to Texas, NRA Files for Bankruptcy Protection
COVID Stimulus Fails to Deliver Jolt to Market
Taco Bell Is Bringing Back a Beloved Menu Item
Markets Can't Wait to Hear Biden Plan on Stimulus
Want to Cancel Amazon Prime? Prepare for an 'Ordeal'
Powerball Jackpot Just Got Even Bigger
Big Tech Stocks Help S&P 500 Drift Upward
De Blasio: NYC Finally Able to Kill Trump Contracts
Money /
On Wall Street, the 'Santa Claus Rally' Has Arrived
Stocks hit new highs after Trump signs relief bill
By Newser Editors and Wire Services
Currency traders watch computer monitors near the screens showing the foreign exchange rates at the foreign exchange dealing room in Seoul, South Korea, Monday, Dec. 28, 2020. (AP Photo/Lee Jin-man)Currency traders watch computer monitors near the screens showing the foreign exchange rates at the foreign exchange dealing room in Seoul, South Korea, Monday, Dec. 28, 2020. (AP Photo/Lee Jin-man)
(Newser) – Stocks closed at record highs Monday as Wall Street entered the final week of 2020. President Trump signed a $900 billion economic aid package that helps reduce uncertainty as governments re-impose travel and business curbs in response to a new coronavirus variant. The measure also includes money for other government functions through September, but Trump expressed frustration that payments to the public weren't bigger. The S&P 500 jumped 32.30 points, or 0.87%, to 3,725.36. The Dow Jones rose 204.10 points, or 0.68%, to 30.403.97, and the Nasdaq closed at 12,899.42, up 94.69 points, or 0.74%.
"By and large, it's a kind of broad-based optimism, so-far-so-good on the vaccine rollout, and the stimulus bill to bridge the gap," Ross Mayfield, investment strategist at Baird, tells the AP. "It's really just a continuation of the broader strength that we've seen over the last couple of months." Stocks are getting a seasonal tailwind, too, Mayfield says. The market tends to climb in the final five days of trading in December and the first two trading days in January, a phenomenon known as the "Santa Claus rally." Since 1950, the S&P 500 index has risen an average of 1.3% during those seven days. Trading is expected to be light this week, as most fund managers and investors have closed their books for the year. It will be another holiday-shortened week, with New Year's Day on Friday.
(Read more stock market stories.)
Copyright 2021 Newser, LLC. All rights reserved. This material may not be published, broadcast, rewritten, or redistributed. AP contributed to this report.


text:
package org.luban.common;

import net.sf.cglib.beans.BeanCopier;

import java.util.HashMap;
import java.util.Map;

/**
 *
 */
public class BeanCopierUtils {
    public static Map<String, BeanCopier> beanCopierMap = new HashMap<String, BeanCopier>();

    public static void copyProperties(Object source, Object target) {
        String beanKey = generateKey(source.getClass(), target.getClass());
        BeanCopier copier = null;
        if (!beanCopierMap.containsKey(beanKey)) {
            copier = BeanCopier.create(source.getClass(), target.getClass(), false);
            beanCopierMap.put(beanKey, copier);
        } else {
            copier = beanCopierMap.get(beanKey);
        }
        copier.copy(source, target, null);
    }

    private static String generateKey(Class<?> class1, Class<?> class2) {
        return class1.toString() + class2.toString();
    }
}


Memory foam is a great invention and it is widely used in many places where comfort is crucial, including hotels and hospitals. A memory foam mattress topper is made to allow even distribution of weight and to automatically reduce pressure for different parts of the body while you sleep.
Improving your sleep quality has never been easier. Now you can upgrade your existing bed into 5 star luxury comfort with this memory foam mattress topper.
Made of special high-density foam with 5cm, 7cm, or 8cm thickness, the topper provides more than 1,000 supporting points when compared to an ordinary mattress.
As part of our bedding series, this high quality yet affordable topper is all you need to upgrade your existing bed into a luxurious and comfortable bed.