text:
//!
//!	%TITLE "entr_3messagenewwindow - Display Message And Pause At Bottom Of Screen"
//!/
#pragma module entr_3messagenewwindow "V3.6 Calico"

/*
 * Include files
 */
#include <string>

#include "preferences.h"
#include "cmcfun.h"
#include "scopedef.h"
#include "smg/smg.h"

//!
//!
//! ABSTRACT:
//!
//!	This subroutine will display a message at the bottom
//!	of the screen, and pause for user input.  This routine
//!	differs from entr_3messagenewwindow in that it creates its own new
//!	SMG_MESSAGE window for its own use and deletes them when
//!	this routine is exited.
//!
//!
//! Parameters:
//!
//!	MESG$ - The passed message that the user wants to display.
//!
//!	FLAG%
//!	.table
//!		1 - Don't ask for continuence
//!		2 - Wide menu (132 columns)
//!		4 - Print message on line 23 instead of 24
//!			for long messages.
//!		8 - Dont erase the message (when bit 1 = 0)
//!	       16 - Display mesasage Please wait
//!	.endtable
//!
//!
//!	The return is a string message that is displayed at the
//!	bottom of the screen.
//!
//! Example:
//!
//!	entr_3messagenewwindow("HI",2%)
//!
//! AUTHOR:
//!
//!	07/09/85 - Kevin Handy
//!
//!
void entr_3messagenewwindow(
	scope_struct &scope,
	const std::string &mesg,
	long int flag)
{
	long int the_line, c_width;
	smg_display_id old_message;
	long int smg_status;
	long int junk;
	long int zero = 0L, one = 1L;
	int junkint;

	std::string dsc_mesg;

	/*
	 * Save the MESSAGE virtual display
	 */
	old_message = scope.smg_message;
	smg$create_virtual_display(2, 132, scope.smg_message);
	smg$paste_virtual_display(scope.smg_message,
		scope.smg_pbid,
		23, one);

	/*
	 * Get the current pasteboard width
	 */
	smg$change_pbd_characteristics(scope.smg_pbid, 0, &c_width);

	/*
	 * Display message
	 */
	if (flag & 4)
	{
		the_line = 1;
	}
	else
	{
		the_line = 2;
	}

	smg$begin_display_update(scope.smg_message);

	smg$erase_display(scope.smg_message);

	smg$put_chars(
		scope.smg_message, 	/* Window */
		mesg,	 		/* Message to display */
		the_line, 		/* Line */
		one,			/* Column */
		zero,
		SMG$M_BOLD		/* Attributes */
	);

	/*
	 * Exit unless 'Press <RETURN> to continue'
	 */
	if (flag & 1)
	{
		if (flag & 16)
		{
			dsc_mesg = "Please wait.";

			junk = SMG$M_BLINK + SMG$M_BOLD;

			smg$put_chars(scope.smg_message,
				dsc_mesg,
				one, one, one,
				junk);
		}
		smg$end_display_update(scope.smg_message);
	}
	else
	{
		/***************************************************
		 * Query user
		 ***************************************************/

		/*
		 * Paint press message
		 */
		junk = c_width - 30L;

		dsc_mesg ="  Press <RETURN> to continue ";

		smg$put_chars(
			scope.smg_message, 	/* Window */
			dsc_mesg,		/* Message to display */
			2,			/* Line */
			junk,			/* Column */
			zero,			/* Don't Erase screen */
			SMG$M_BOLD		/* Attributes */
		);

		smg$end_display_update(scope.smg_message);

		/*
		 * Get input
		 */
		junkint = 0;
		while (junkint == 0)
		{
			junkint = entr_4entry(scope, scope.smg_message, 0);
			junkint = entr_4specialkeys(scope, scope.smg_message, 0, junkint);
		}

		if ((junkint < 32) || (junkint > 254) || ((junkint > 126) && (junkint < 160)))
		{
			scope.scope_exit = junkint;
		}
		else
		{
			scope.scope_exit = 0;
		}

		if ((flag & 8) == 0)
			smg$erase_display(scope.smg_message);
	}

	/*
	 * Delete all displays
	 */
	smg$pop_virtual_display(scope.smg_message, scope.smg_pbid );
	scope.smg_message = old_message;

}


text:
Smart Swarm: Birds, Bees and Better Business
Ian Esplen|
October 31, 2011|
By Nilesh Bhagat, CHRP
What can bugs, birds and fish teach us about the way we do business?
The constraints of the organizational hierarchy common in today's economic landscape are incompatible with the emergent norms and values of the modern market. What's needed is a more adaptive system which appreciates the flexibility and responsiveness of individuals working dynamically together to realize goals. What we need is a smart swarm.
In Smart Swarm (How Understanding Flocks, Schools and Colonies Can Make Us Better at Communicating, Decision Making and Getting Things Done), author Peter Miller asks and explores how the complex adaptive systems of other life forms have evolved to generate effective, organic collective behaviors. He praises their wisdom and hints that we, as humans, can take cues from their models.
Miller defines a smart swarm as 'a group of individuals who respond to one another and to their environment in ways that give them power, as a group, to cope with uncertainty, complexity, and change'. What we as humans have forgone is the understanding of this interwoven and connected type of system – this smart system – as an optimal driver for productive behavior. In its stead, we have convinced ourselves that the hierarchy – with its command, control and predictability – is the model upon which productivity must be built.
Miller illustrates, via voyages through ant colonies, termite hills and schools of fish, that the smartest system of all is not the hierarchy of top-down control. It's the complex adaptive system where less is more – wherein one must paradoxically forgo control for the externalities of connectedness, adaptability, responsiveness and flow that arise from the bottom-up systems that fuel evolution.
The smart swarm operates through four principles: indirect collaboration, adaptive mimicking, self organization and diversity of knowledge. Miller shows how species are able to navigate their social environments to create successful complex adaptive systems with the principles of a smart swarm at work.
For illustration's sake, let's consider the diversity of knowledge, which says that greater sources of information lead to strengthen the collective judgment. The key here is to minimize the influence of outside factors which could taint each input. At work, this means reducing irrational collective behavior by removing polarizing stimuli like power and titles inherent in today's organizational hierarchies.
Miller argues that the reason we are so susceptible to these external influences is because we have 'caveman brains'. Biases hinder our ability to make accurate individual judgments because our individual brains haven't evolved to deal with decisions in complex situations on their own. However, as a growing list of scientists and researchers believe, our collective brain is more than able.
As Miller illustrates, bees seemed to have mastered this collectively genius approach to problem solving. Scout bees use waggle dances to help hives determine their future nesting spots. Many scouts perform dances in favor of many different nesting locations, but the intensity and duration of the dances act to influence and persuade others to move. No title or rank at play, just diverse scouts free to justify their opinions for the collective good.
This illustration also highlights the dark side of smart swarms with a word of caution as we shift our systems from top-down to bottom-up. For the principle of diversity of knowledge, subtle influences, like power and rank, can introduce biases into these so called 'smart' systems, rendering them counterproductive. Illustrated further, Miller uses the principle of adaptive mimicking in the context of locust swarms to illustrate how subtle changes in the environment can sway the collective behavior to its detriment. For locust swarms, a change in temperature can alter the way each individual insect perceives local information, leading to aggressive collective behavior that endangers the swarm's long term survival (crops are quickly devoured, depleting a food source necessary for the locusts and other co-inhabitants of the environment).
Cautions aside, Miller's analysis and interpretation of nature's organic adaptive systems hints at the type of evolution organizational leaders should be striving to understand as we move into the next great economic paradigm. Authors Don Tapscott and Anthony Williams, in Wikinomics, describe this economic shift as having the qualities of openness, transparency and collaboration. With these values, the need to tap the wisdom of crowds in the context of our organizations is becoming increasingly important in the race to create value and stay afloat in the hyper-competitive landscape.
Thus, Miller's exploration of nature's complex adaptive systems becomes paramount to understand as we enter new social and economic frontiers. Though we have an advanced cognitive set, we can take at least some of our cues from our planet's co-inhabitants as we strive to keep up with this increasing complexity.
In our economic environment, the hierarchal organization, with its rigid communication channels and sluggish response, is ill equipped to handle feats of accelerating adaptability and change. The flatter, organic organizations, much like the smart swarms of nature, are better prepared to step up to the challenges of the modern, wired economy.
Natural systems have evolved to interconnect and create super-organisms. Using the same guiding principles, we can evolve the economic institutions we devote our lives to from being mere organizations to super-organizations.
(PeopleTalk Fall 2011)
CHRPcommunicationcomplexityconnectednessdecision makingnatureNilesh BhagatPeter Millerproblem solvingThe Smart Swarm

redpajama_set_name: RedPajamaCommonCrawl


text:
12 Times Terrible Acting Ruined Potentially Great Movies
6. Bram Stoker's Dracula
Watched in isolation, Keanu Reeves' performance in Francis Ford Coppola's otherwise riveting gothic horror feels like a Saturday Night Live skit.
Reeves' much-ridiculed attempt at a British accent for his character Jonathan Harker is a frequent point of distraction throughout the film, with the actor clearly focusing so much on "nailing" the accent that his line readings come off wooden and stilted at almost all times.
Winona Ryder's British accent as Mina Harker isn't exactly great either, though it's Reeves who truly draws an insane amount of attention to the gulf in talent between himself and the venerable likes of Gary Oldman and Anthony Hopkins.
Reeves has a bit of an unfair reputation for being a "dull" actor, and while that charge certainly doesn't ring true here, he does something much, much worse: he tries incredibly hard to act and fails spectacularly.
First	Posted On: 6th Jul 2018
Jack Pooley
Stay at home dad who spends as much time teaching his kids the merits of Martin Scorsese as possible (against the missus' wishes). General video game, TV and film nut. Occasional sports fan. Full time loon.
See more from Jack


text:
Q: Array from static method returns empty array I don't understand what the {length} part is doing. Typeof '{length}' returns 'object' but in the Array.from call it seems to be doing something I don't understand
/// this gets array with 0 filled values
const length = 3;
const init2   = 0;
const result2 = Array.from( {length} , () => init2);

console.log(result2);
>>> Array(3) [ 0, 0, 0 ]

But this gets an empty array - changed length to l. Used a new tab in firefox (seems to be same in chrome). I wonder if this is a bug in the javascript engine or my brain.
const l = 3;
const init2   = 0;
const result2 = Array.from( {l} , () => init2);

console.log(result2);
Array []

//code based on https://dmitripavlutin.com/javascript-array-from-applications/

A: { length }

is an object literal. It uses the shorthand property syntax. It's similar to doing
{ length: length }

So, in the first case, it creates { length: 3 }
Now, Array.from() expects

*

*An array-like objects with a Symbol.Iterator property (a Map, Set, string etc)

*OR an object with length property and creates an array from it.

{ l } syntax creates the object { l: 3 }. This object has neither. So, it doesn't work
Here's a snippet:

const set = new Set([1, 2, 2]),
      string = 'abc',
      array = ['value 1', 'value 2'],

      objectWithLength = {
       length: 5
      },

      objectWithIterator = {
        [Symbol.iterator]: function*() {
          yield 'iterator 1'
          yield 'iterator 2'
        }
      },

      genericObject = {
        someProperty: 10
      }

// call Array.from() on every item
console.log(
  [set, string, array, objectWithLength, objectWithIterator, genericObject]
    .map(v => Array.from(v))
)

A: Array.from() uses the length property of the provided object to construct a "new" array from it (as long as the object is not iterable). If you rename length with l this doesn't work anymore.

A: The first argument of Array.from() can be an array-like object. An array-like object is an object with length property. So {length} is a contracted form of {length: length} object and it is accepted. While {l} is a contracted form of {l: l} object with length property undefined, so it produces an empty array,

redpajama_set_name: RedPajamaStackExchange


We have permission to play them, we have no problems with GEMA and GVL (Germany), we have no advertising (except for the artists), we have no revenue (except voluntary donations).
If you like a song, please help the artist and buy the song!
To protect your personal information, iframes to radiojar, Spotify, bandcamp & SoundCloud have been blocked. We want to support the artists / musicians, so they can only be unblocked or blocked together! We assume that you have already used and trusted the services of Spotify, bandcamp and / or SoundCloud to a certain extent. On Radiojar our Web-Radio is hosted.
Click on Load iframes, to unblock and remove the blockages to radiojar, Spotify, bandcamp & SoundCloud.


text:
HOME > Pakistan
Islamabad police arrest man, his son for raping a woman
The victim has identified them
SAMAA | Noor ul Amin Danish - Posted: May 10, 2021 | Last Updated: 9 months ago
SAMAA | Noor ul Amin Danish
Posted: May 10, 2021 | Last Updated: 9 months ago
File photo: Online
Police in Islamabad have arrested a man and his son for raping a woman, a police spokesperson said Monday. According to police, the two men had raped the woman in a taxi on March 12 in Islamabad. The spokesperson said that they were also wanted in several cases in other districts of Punjab. The have confessed to their crime and the victim has also identified them, he added. Last week, the police had arrested a 25-year-old man for raping 20 women, including a lady police constable. The man not only raped the women, but cut their private parts with a sharp object too, according to the report. The suspect, who hails from Azad Kashmir, used to sexually assault women in a forest near the Islamabad Highway. Rukhsar Mehdi, a sub-divisional police officer in Islamabad, told BBC Urdu that the suspect had been committing such heinous crimes for the past six months. The officer said he used to conduct recce of women for two to three days before assaulting them.
Police in Islamabad have arrested a man and his son for raping a woman, a police spokesperson said Monday.
According to police, the two men had raped the woman in a taxi on March 12 in Islamabad. The spokesperson said that they were also wanted in several cases in other districts of Punjab.
The have confessed to their crime and the victim has also identified them, he added.
Last week, the police had arrested a 25-year-old man for raping 20 women, including a lady police constable.
The man not only raped the women, but cut their private parts with a sharp object too, according to the report.
The suspect, who hails from Azad Kashmir, used to sexually assault women in a forest near the Islamabad Highway.
Child rape victim's single testimony sufficient to uphold conviction: LHC
Yasir Shah cleared in 14-year-old girl rape case
Eight-year-old child raped, strangled to death in New Karachi
Rukhsar Mehdi, a sub-divisional police officer in Islamabad, told BBC Urdu that the suspect had been committing such heinous crimes for the past six months.
The officer said he used to conduct recce of women for two to three days before assaulting them.
rape	rape case
Arshad Ali
Rape, Islamabad
Blast in Lahore's Anarkali, three killed
SHC wants encroachments in Hassan Square immediately removed
Pakistan to pay $11.6m in compensation to Chinese families
Strong and gusty winds batter Karachi
Indoor dining banned in big cities
Why Bykea passenger has insurance cover but not the rider
Lahore blast investigation, Pakistan reports highest Covid cases, PSL7 preparations
Man jailed for 'stirring sectarian hate' in Sialkot lynching
Lahore blast an outcome of govt-TTP ceasefire: Raza Rabbani
Pakistan appoints its first woman Supreme Court judge


text:
សាកលវិទ្យាល័យនៅ United States
សិស្សអន្តរជាតិ
តម្លៃស្នាក់នៅជាមធ្យមនៅ United States
801st / 1250
ចំំណាត់ថ្នាក់លើ THE World
អំពី Florida Atlantic University
Florida Atlantic University, established in 1961, officially opened its doors in 1964 as the fifth public university in Florida. Today, the University serves more than 30,000 undergraduate and graduate students across six campuses located along the southeast Florida coast and is ranked as a top public university by U.S. News and World Report.
FAU is an energetic and fast-growing institution, determined to propel itself to the forefront of innovation and scholarship. In recent years, the University has doubled its research expenditures and outpaced its peers in student achievement rates. Its students are bold, ambitious and ready to take on the world.
FAU offers students a transformative education rooted in the belief that creativity and dedication fuel academic excellence. Expert faculty create a learning environment that prepares students for success in all areas of life. The university offers more than 170 degree options in vast areas of subjects. Ranked among the best in the country for undergraduate research, FAU offers students a world of opportunities to dive into high-quality research, scholarship and creative experiences from the moment they step onto campus. FAU students participate in more than 6,000 undergraduate research experiences each year.
Students make the most of their time at FAU by participating in any of 400 clubs and organizations, recreational sports, volunteer activities and more. Each year more than 5,000 student-led events create a lively and enriching campus experience.
FAU?s first and largest campus sits on more than 850 acres just east of I-95. The campus features everything students expect from a modern university including state-of-the-art labs and classrooms, suite-style housing for students plus athletic and recreational facilities. It is also home to the A.D. Henderson University School, FAU High School, FAU Research Park and the nation?s largest Lifelong Learning Society.
កន្លែងស្នាក់នៅក្នុងបរិវេណសាលា
សមាជិកនៃ Southern Association of Southern Association of Colleges and Schools Commission on Colleges. + -
បង្ហាញបន្ថែម +បង្ហាញសង្ខេប -
Curriculum and Education Studies
Boca Raton Florida 777 Glades Road
Davie Florida 3200 College Avenue
FAU?s first and largest campus sits on more than 850 acres just east of I-95. The campus features everything students expect from a modern university including state-of-the-art labs and classrooms, suite-style housing for students plus athletic and recreational facilities. It is also home to the A.D. Henderson University School, FAU High School, FAU Research Park and the nation?s largest Lifelong Learning Society. https://images1.content-gbl.com/commimg/myhotcourses/institution/profile/myhc_242063_320px.jpg Florida Atlantic University https://www.idp.com/cambodia/universities/florida-atlantic-university/iid-us-00149/?lang=km
តម្លៃស្នាក់នៅ United States
តម្រូវការនៃការបញ្ចូលព័ត៌មាន
តម្រូវការចូលរៀនមានលក្ខណៈខុសៗគ្នាអាស្រ័យទៅលើមុខវិជ្ជា កម្រិតសិក្សា និងវគ្គសិក្សា។ អ្នកអាច ដើម្បីពិនិត្យទៅលើវគ្គសិក្សាទាំងអស់ ពី Florida Atlantic University ដើម្បីតម្រង់យកវគ្គសិក្សាផ្សេងៗ និងស្វែងយល់បន្ថែមពីតម្រូវការរបស់វគ្គសិក្សានីមួយៗ។
IELTS ត្រូវបានទទួលយកនៅ Florida Atlantic University
កក់ឥឡូវនេះ
ស្វែងរកបន្ថែម
Practice and prepare
លីងទៅកាន់សាលា
នេះជាលីងដែលនឹងដើរតួជាជំនួយសម្រាប់ការស្រាវជ្រាវទៅមុខទៀតរបស់អ្នក។ អ្នកជំនាញប្រឹក្សាយោបល់ពីការសិក្សានៅបរទេសតែងតែនៅទីនេះដើម្បីផ្តល់នៅដំបូន្មានដែលល្អៗ និងមិនគិតថ្លៃទៅលើជម្រើសសិក្សានៅបរទេសរបស់អ្នក។
ការទ្រទ្រង់សិស្ស និស្សិត
ព័ត៌មានអាហារូបករណ៍ពីសាលា
ថ្ងៃសំខាន់ៗ
តម្លៃសិក្សា
Call ឥឡូវ


Information technology researchers and executives from around the Middle East convened in Qatar recently to participate in an "Arabic Search Engine Workshop" hosted by Carnegie Mellon University in Qatar (CMUQ).
The meeting had mostly a business focus: to identify ways the small but wealthy kingdom of Qatar could become a research and commercial hub for Arabic language technologies, according to a report in Gulf Times.
"The workshop investigated the possibility of creating an Arabic Language Technologies Centre in Qatar and, more specifically, developing a high-quality Arabic Web search engine," said Jaime Carbonell, a CMU professor of computer science and director of its Language Technologies Institute.
CMU wants to team with academic and business groups in the area to develop regional expertise in language technology, Carbonell said. CMU faculty and students would provide scientific and technological support for Web search and Arabic/English machine translation.
Organizations that participated in the workshop included CMU, Qatar University, ictQatar, iHorizons, Microsoft Egypt, Qatar Foundation, Qatar National Research Fund, Qatar Science & Technology Park and Qatar Capital Partners.
"Longer term objectives in the collaboration include developing language technologies expertise in Qatar and joint research on improved methods for search and translation, especially focused on the unique characteristics of the Arabic language and Arabic users," Carbonell added.


text:
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
#include <errno.h>
#include <sys/queue.h>

#include <rte_common.h>
#include <rte_log.h>
#include <rte_memory.h>
#include <rte_memzone.h>
#include <rte_launch.h>
#include <rte_cycles.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_lcore.h>
#include <rte_atomic.h>
#include <rte_branch_prediction.h>
#include <rte_malloc.h>
#include <rte_ring.h>
#include <rte_random.h>
#include <rte_common.h>
#include <rte_errno.h>
#include <rte_hexdump.h>

#include "test.h"

/*
 * Ring
 * ====
 *
 * #. Basic tests: done on one core:
 *
 *    - Using single producer/single consumer functions:
 *
 *      - Enqueue one object, two objects, MAX_BULK objects
 *      - Dequeue one object, two objects, MAX_BULK objects
 *      - Check that dequeued pointers are correct
 *
 *    - Using multi producers/multi consumers functions:
 *
 *      - Enqueue one object, two objects, MAX_BULK objects
 *      - Dequeue one object, two objects, MAX_BULK objects
 *      - Check that dequeued pointers are correct
 *
 *    - Test watermark and default bulk enqueue/dequeue:
 *
 *      - Set watermark
 *      - Set default bulk value
 *      - Enqueue objects, check that -EDQUOT is returned when
 *        watermark is exceeded
 *      - Check that dequeued pointers are correct
 *
 * #. Check live watermark change
 *
 *    - Start a loop on another lcore that will enqueue and dequeue
 *      objects in a ring. It will monitor the value of watermark.
 *    - At the same time, change the watermark on the master lcore.
 *    - The slave lcore will check that watermark changes from 16 to 32.
 *
 * #. Performance tests.
 *
 * Tests done in test_ring_perf.c
 */

#define RING_SIZE 4096
#define MAX_BULK 32
#define N 65536
#define TIME_S 5

static rte_atomic32_t synchro;

static struct rte_ring *r;

#define	TEST_RING_VERIFY(exp)						\
	if (!(exp)) {							\
		printf("error at %s:%d\tcondition " #exp " failed\n",	\
		    __func__, __LINE__);				\
		rte_ring_dump(stdout, r);				\
		return -1;						\
	}

#define	TEST_RING_FULL_EMTPY_ITER	8

static int
check_live_watermark_change(__attribute__((unused)) void *dummy)
{
	uint64_t hz = rte_get_timer_hz();
	void *obj_table[MAX_BULK];
	unsigned watermark, watermark_old = 16;
	uint64_t cur_time, end_time;
	int64_t diff = 0;
	int i, ret;
	unsigned count = 4;

	/* init the object table */
	memset(obj_table, 0, sizeof(obj_table));
	end_time = rte_get_timer_cycles() + (hz * 2);

	/* check that bulk and watermark are 4 and 32 (respectively) */
	while (diff >= 0) {

		/* add in ring until we reach watermark */
		ret = 0;
		for (i = 0; i < 16; i ++) {
			if (ret != 0)
				break;
			ret = rte_ring_enqueue_bulk(r, obj_table, count);
		}

		if (ret != -EDQUOT) {
			printf("Cannot enqueue objects, or watermark not "
			       "reached (ret=%d)\n", ret);
			return -1;
		}

		/* read watermark, the only change allowed is from 16 to 32 */
		watermark = r->prod.watermark;
		if (watermark != watermark_old &&
		    (watermark_old != 16 || watermark != 32)) {
			printf("Bad watermark change %u -> %u\n", watermark_old,
			       watermark);
			return -1;
		}
		watermark_old = watermark;

		/* dequeue objects from ring */
		while (i--) {
			ret = rte_ring_dequeue_bulk(r, obj_table, count);
			if (ret != 0) {
				printf("Cannot dequeue (ret=%d)\n", ret);
				return -1;
			}
		}

		cur_time = rte_get_timer_cycles();
		diff = end_time - cur_time;
	}

	if (watermark_old != 32 ) {
		printf(" watermark was not updated (wm=%u)\n",
		       watermark_old);
		return -1;
	}

	return 0;
}

static int
test_live_watermark_change(void)
{
	unsigned lcore_id = rte_lcore_id();
	unsigned lcore_id2 = rte_get_next_lcore(lcore_id, 0, 1);

	printf("Test watermark live modification\n");
	rte_ring_set_water_mark(r, 16);

	/* launch a thread that will enqueue and dequeue, checking
	 * watermark and quota */
	rte_eal_remote_launch(check_live_watermark_change, NULL, lcore_id2);

	rte_delay_ms(1000);
	rte_ring_set_water_mark(r, 32);
	rte_delay_ms(1000);

	if (rte_eal_wait_lcore(lcore_id2) < 0)
		return -1;

	return 0;
}

/* Test for catch on invalid watermark values */
static int
test_set_watermark( void ){
	unsigned count;
	int setwm;

	struct rte_ring *r = rte_ring_lookup("test_ring_basic_ex");
	if(r == NULL){
		printf( " ring lookup failed\n" );
		goto error;
	}
	count = r->prod.size*2;
	setwm = rte_ring_set_water_mark(r, count);
	if (setwm != -EINVAL){
		printf("Test failed to detect invalid watermark count value\n");
		goto error;
	}

	count = 0;
	rte_ring_set_water_mark(r, count);
	if (r->prod.watermark != r->prod.size) {
		printf("Test failed to detect invalid watermark count value\n");
		goto error;
	}
	return 0;

error:
	return -1;
}

/*
 * helper routine for test_ring_basic
 */
static int
test_ring_basic_full_empty(void * const src[], void *dst[])
{
	unsigned i, rand;
	const unsigned rsz = RING_SIZE - 1;

	printf("Basic full/empty test\n");

	for (i = 0; TEST_RING_FULL_EMTPY_ITER != i; i++) {

		/* random shift in the ring */
		rand = RTE_MAX(rte_rand() % RING_SIZE, 1UL);
		printf("%s: iteration %u, random shift: %u;\n",
		    __func__, i, rand);
		TEST_RING_VERIFY(-ENOBUFS != rte_ring_enqueue_bulk(r, src,
		    rand));
		TEST_RING_VERIFY(0 == rte_ring_dequeue_bulk(r, dst, rand));

		/* fill the ring */
		TEST_RING_VERIFY(-ENOBUFS != rte_ring_enqueue_bulk(r, src,
		    rsz));
		TEST_RING_VERIFY(0 == rte_ring_free_count(r));
		TEST_RING_VERIFY(rsz == rte_ring_count(r));
		TEST_RING_VERIFY(rte_ring_full(r));
		TEST_RING_VERIFY(0 == rte_ring_empty(r));

		/* empty the ring */
		TEST_RING_VERIFY(0 == rte_ring_dequeue_bulk(r, dst, rsz));
		TEST_RING_VERIFY(rsz == rte_ring_free_count(r));
		TEST_RING_VERIFY(0 == rte_ring_count(r));
		TEST_RING_VERIFY(0 == rte_ring_full(r));
		TEST_RING_VERIFY(rte_ring_empty(r));

		/* check data */
		TEST_RING_VERIFY(0 == memcmp(src, dst, rsz));
		rte_ring_dump(stdout, r);
	}
	return 0;
}

static int
test_ring_basic(void)
{
	void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL;
	int ret;
	unsigned i, num_elems;

	/* alloc dummy object pointers */
	src = malloc(RING_SIZE*2*sizeof(void *));
	if (src == NULL)
		goto fail;

	for (i = 0; i < RING_SIZE*2 ; i++) {
		src[i] = (void *)(unsigned long)i;
	}
	cur_src = src;

	/* alloc some room for copied objects */
	dst = malloc(RING_SIZE*2*sizeof(void *));
	if (dst == NULL)
		goto fail;

	memset(dst, 0, RING_SIZE*2*sizeof(void *));
	cur_dst = dst;

	printf("enqueue 1 obj\n");
	ret = rte_ring_sp_enqueue_bulk(r, cur_src, 1);
	cur_src += 1;
	if (ret != 0)
		goto fail;

	printf("enqueue 2 objs\n");
	ret = rte_ring_sp_enqueue_bulk(r, cur_src, 2);
	cur_src += 2;
	if (ret != 0)
		goto fail;

	printf("enqueue MAX_BULK objs\n");
	ret = rte_ring_sp_enqueue_bulk(r, cur_src, MAX_BULK);
	cur_src += MAX_BULK;
	if (ret != 0)
		goto fail;

	printf("dequeue 1 obj\n");
	ret = rte_ring_sc_dequeue_bulk(r, cur_dst, 1);
	cur_dst += 1;
	if (ret != 0)
		goto fail;

	printf("dequeue 2 objs\n");
	ret = rte_ring_sc_dequeue_bulk(r, cur_dst, 2);
	cur_dst += 2;
	if (ret != 0)
		goto fail;

	printf("dequeue MAX_BULK objs\n");
	ret = rte_ring_sc_dequeue_bulk(r, cur_dst, MAX_BULK);
	cur_dst += MAX_BULK;
	if (ret != 0)
		goto fail;

	/* check data */
	if (memcmp(src, dst, cur_dst - dst)) {
		rte_hexdump(stdout, "src", src, cur_src - src);
		rte_hexdump(stdout, "dst", dst, cur_dst - dst);
		printf("data after dequeue is not the same\n");
		goto fail;
	}
	cur_src = src;
	cur_dst = dst;

	printf("enqueue 1 obj\n");
	ret = rte_ring_mp_enqueue_bulk(r, cur_src, 1);
	cur_src += 1;
	if (ret != 0)
		goto fail;

	printf("enqueue 2 objs\n");
	ret = rte_ring_mp_enqueue_bulk(r, cur_src, 2);
	cur_src += 2;
	if (ret != 0)
		goto fail;

	printf("enqueue MAX_BULK objs\n");
	ret = rte_ring_mp_enqueue_bulk(r, cur_src, MAX_BULK);
	cur_src += MAX_BULK;
	if (ret != 0)
		goto fail;

	printf("dequeue 1 obj\n");
	ret = rte_ring_mc_dequeue_bulk(r, cur_dst, 1);
	cur_dst += 1;
	if (ret != 0)
		goto fail;

	printf("dequeue 2 objs\n");
	ret = rte_ring_mc_dequeue_bulk(r, cur_dst, 2);
	cur_dst += 2;
	if (ret != 0)
		goto fail;

	printf("dequeue MAX_BULK objs\n");
	ret = rte_ring_mc_dequeue_bulk(r, cur_dst, MAX_BULK);
	cur_dst += MAX_BULK;
	if (ret != 0)
		goto fail;

	/* check data */
	if (memcmp(src, dst, cur_dst - dst)) {
		rte_hexdump(stdout, "src", src, cur_src - src);
		rte_hexdump(stdout, "dst", dst, cur_dst - dst);
		printf("data after dequeue is not the same\n");
		goto fail;
	}
	cur_src = src;
	cur_dst = dst;

	printf("fill and empty the ring\n");
	for (i = 0; i<RING_SIZE/MAX_BULK; i++) {
		ret = rte_ring_mp_enqueue_bulk(r, cur_src, MAX_BULK);
		cur_src += MAX_BULK;
		if (ret != 0)
			goto fail;
		ret = rte_ring_mc_dequeue_bulk(r, cur_dst, MAX_BULK);
		cur_dst += MAX_BULK;
		if (ret != 0)
			goto fail;
	}

	/* check data */
	if (memcmp(src, dst, cur_dst - dst)) {
		rte_hexdump(stdout, "src", src, cur_src - src);
		rte_hexdump(stdout, "dst", dst, cur_dst - dst);
		printf("data after dequeue is not the same\n");
		goto fail;
	}

	if (test_ring_basic_full_empty(src, dst) != 0)
		goto fail;

	cur_src = src;
	cur_dst = dst;

	printf("test watermark and default bulk enqueue / dequeue\n");
	rte_ring_set_water_mark(r, 20);
	num_elems = 16;

	cur_src = src;
	cur_dst = dst;

	ret = rte_ring_enqueue_bulk(r, cur_src, num_elems);
	cur_src += num_elems;
	if (ret != 0) {
		printf("Cannot enqueue\n");
		goto fail;
	}
	ret = rte_ring_enqueue_bulk(r, cur_src, num_elems);
	cur_src += num_elems;
	if (ret != -EDQUOT) {
		printf("Watermark not exceeded\n");
		goto fail;
	}
	ret = rte_ring_dequeue_bulk(r, cur_dst, num_elems);
	cur_dst += num_elems;
	if (ret != 0) {
		printf("Cannot dequeue\n");
		goto fail;
	}
	ret = rte_ring_dequeue_bulk(r, cur_dst, num_elems);
	cur_dst += num_elems;
	if (ret != 0) {
		printf("Cannot dequeue2\n");
		goto fail;
	}

	/* check data */
	if (memcmp(src, dst, cur_dst - dst)) {
		rte_hexdump(stdout, "src", src, cur_src - src);
		rte_hexdump(stdout, "dst", dst, cur_dst - dst);
		printf("data after dequeue is not the same\n");
		goto fail;
	}

	cur_src = src;
	cur_dst = dst;

	ret = rte_ring_mp_enqueue(r, cur_src);
	if (ret != 0)
		goto fail;

	ret = rte_ring_mc_dequeue(r, cur_dst);
	if (ret != 0)
		goto fail;

	free(src);
	free(dst);
	return 0;

 fail:
	free(src);
	free(dst);
	return -1;
}

static int
test_ring_burst_basic(void)
{
	void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL;
	int ret;
	unsigned i;

	/* alloc dummy object pointers */
	src = malloc(RING_SIZE*2*sizeof(void *));
	if (src == NULL)
		goto fail;

	for (i = 0; i < RING_SIZE*2 ; i++) {
		src[i] = (void *)(unsigned long)i;
	}
	cur_src = src;

	/* alloc some room for copied objects */
	dst = malloc(RING_SIZE*2*sizeof(void *));
	if (dst == NULL)
		goto fail;

	memset(dst, 0, RING_SIZE*2*sizeof(void *));
	cur_dst = dst;

	printf("Test SP & SC basic functions \n");
	printf("enqueue 1 obj\n");
	ret = rte_ring_sp_enqueue_burst(r, cur_src, 1);
	cur_src += 1;
	if ((ret & RTE_RING_SZ_MASK) != 1)
		goto fail;

	printf("enqueue 2 objs\n");
	ret = rte_ring_sp_enqueue_burst(r, cur_src, 2);
	cur_src += 2;
	if ((ret & RTE_RING_SZ_MASK) != 2)
		goto fail;

	printf("enqueue MAX_BULK objs\n");
	ret = rte_ring_sp_enqueue_burst(r, cur_src, MAX_BULK) ;
	cur_src += MAX_BULK;
	if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
		goto fail;

	printf("dequeue 1 obj\n");
	ret = rte_ring_sc_dequeue_burst(r, cur_dst, 1) ;
	cur_dst += 1;
	if ((ret & RTE_RING_SZ_MASK) != 1)
		goto fail;

	printf("dequeue 2 objs\n");
	ret = rte_ring_sc_dequeue_burst(r, cur_dst, 2);
	cur_dst += 2;
	if ((ret & RTE_RING_SZ_MASK) != 2)
		goto fail;

	printf("dequeue MAX_BULK objs\n");
	ret = rte_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
	cur_dst += MAX_BULK;
	if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
		goto fail;

	/* check data */
	if (memcmp(src, dst, cur_dst - dst)) {
		rte_hexdump(stdout, "src", src, cur_src - src);
		rte_hexdump(stdout, "dst", dst, cur_dst - dst);
		printf("data after dequeue is not the same\n");
		goto fail;
	}

	cur_src = src;
	cur_dst = dst;

	printf("Test enqueue without enough memory space \n");
	for (i = 0; i< (RING_SIZE/MAX_BULK - 1); i++) {
		ret = rte_ring_sp_enqueue_burst(r, cur_src, MAX_BULK);
		cur_src += MAX_BULK;
		if ((ret & RTE_RING_SZ_MASK) != MAX_BULK) {
			goto fail;
		}
	}

	printf("Enqueue 2 objects, free entries = MAX_BULK - 2  \n");
	ret = rte_ring_sp_enqueue_burst(r, cur_src, 2);
	cur_src += 2;
	if ((ret & RTE_RING_SZ_MASK) != 2)
		goto fail;

	printf("Enqueue the remaining entries = MAX_BULK - 2  \n");
	/* Always one free entry left */
	ret = rte_ring_sp_enqueue_burst(r, cur_src, MAX_BULK);
	cur_src += MAX_BULK - 3;
	if ((ret & RTE_RING_SZ_MASK) != MAX_BULK - 3)
		goto fail;

	printf("Test if ring is full  \n");
	if (rte_ring_full(r) != 1)
		goto fail;

	printf("Test enqueue for a full entry  \n");
	ret = rte_ring_sp_enqueue_burst(r, cur_src, MAX_BULK);
	if ((ret & RTE_RING_SZ_MASK) != 0)
		goto fail;

	printf("Test dequeue without enough objects \n");
	for (i = 0; i<RING_SIZE/MAX_BULK - 1; i++) {
		ret = rte_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
		cur_dst += MAX_BULK;
		if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
			goto fail;
	}

	/* Available memory space for the exact MAX_BULK entries */
	ret = rte_ring_sc_dequeue_burst(r, cur_dst, 2);
	cur_dst += 2;
	if ((ret & RTE_RING_SZ_MASK) != 2)
		goto fail;

	ret = rte_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
	cur_dst += MAX_BULK - 3;
	if ((ret & RTE_RING_SZ_MASK) != MAX_BULK - 3)
		goto fail;

	printf("Test if ring is empty \n");
	/* Check if ring is empty */
	if (1 != rte_ring_empty(r))
		goto fail;

	/* check data */
	if (memcmp(src, dst, cur_dst - dst)) {
		rte_hexdump(stdout, "src", src, cur_src - src);
		rte_hexdump(stdout, "dst", dst, cur_dst - dst);
		printf("data after dequeue is not the same\n");
		goto fail;
	}

	cur_src = src;
	cur_dst = dst;

	printf("Test MP & MC basic functions \n");

	printf("enqueue 1 obj\n");
	ret = rte_ring_mp_enqueue_burst(r, cur_src, 1);
	cur_src += 1;
	if ((ret & RTE_RING_SZ_MASK) != 1)
		goto fail;

	printf("enqueue 2 objs\n");
	ret = rte_ring_mp_enqueue_burst(r, cur_src, 2);
	cur_src += 2;
	if ((ret & RTE_RING_SZ_MASK) != 2)
		goto fail;

	printf("enqueue MAX_BULK objs\n");
	ret = rte_ring_mp_enqueue_burst(r, cur_src, MAX_BULK);
	cur_src += MAX_BULK;
	if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
		goto fail;

	printf("dequeue 1 obj\n");
	ret = rte_ring_mc_dequeue_burst(r, cur_dst, 1);
	cur_dst += 1;
	if ((ret & RTE_RING_SZ_MASK) != 1)
		goto fail;

	printf("dequeue 2 objs\n");
	ret = rte_ring_mc_dequeue_burst(r, cur_dst, 2);
	cur_dst += 2;
	if ((ret & RTE_RING_SZ_MASK) != 2)
		goto fail;

	printf("dequeue MAX_BULK objs\n");
	ret = rte_ring_mc_dequeue_burst(r, cur_dst, MAX_BULK);
	cur_dst += MAX_BULK;
	if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
		goto fail;

	/* check data */
	if (memcmp(src, dst, cur_dst - dst)) {
		rte_hexdump(stdout, "src", src, cur_src - src);
		rte_hexdump(stdout, "dst", dst, cur_dst - dst);
		printf("data after dequeue is not the same\n");
		goto fail;
	}

	cur_src = src;
	cur_dst = dst;

	printf("fill and empty the ring\n");
	for (i = 0; i<RING_SIZE/MAX_BULK; i++) {
		ret = rte_ring_mp_enqueue_burst(r, cur_src, MAX_BULK);
		cur_src += MAX_BULK;
		if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
			goto fail;
		ret = rte_ring_mc_dequeue_burst(r, cur_dst, MAX_BULK);
		cur_dst += MAX_BULK;
		if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
			goto fail;
	}

	/* check data */
	if (memcmp(src, dst, cur_dst - dst)) {
		rte_hexdump(stdout, "src", src, cur_src - src);
		rte_hexdump(stdout, "dst", dst, cur_dst - dst);
		printf("data after dequeue is not the same\n");
		goto fail;
	}

	cur_src = src;
	cur_dst = dst;

	printf("Test enqueue without enough memory space \n");
	for (i = 0; i<RING_SIZE/MAX_BULK - 1; i++) {
		ret = rte_ring_mp_enqueue_burst(r, cur_src, MAX_BULK);
		cur_src += MAX_BULK;
		if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
			goto fail;
	}

	/* Available memory space for the exact MAX_BULK objects */
	ret = rte_ring_mp_enqueue_burst(r, cur_src, 2);
	cur_src += 2;
	if ((ret & RTE_RING_SZ_MASK) != 2)
		goto fail;

	ret = rte_ring_mp_enqueue_burst(r, cur_src, MAX_BULK);
	cur_src += MAX_BULK - 3;
	if ((ret & RTE_RING_SZ_MASK) != MAX_BULK - 3)
		goto fail;

	printf("Test dequeue without enough objects \n");
	for (i = 0; i<RING_SIZE/MAX_BULK - 1; i++) {
		ret = rte_ring_mc_dequeue_burst(r, cur_dst, MAX_BULK);
		cur_dst += MAX_BULK;
		if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
			goto fail;
	}

	/* Available objects - the exact MAX_BULK */
	ret = rte_ring_mc_dequeue_burst(r, cur_dst, 2);
	cur_dst += 2;
	if ((ret & RTE_RING_SZ_MASK) != 2)
		goto fail;

	ret = rte_ring_mc_dequeue_burst(r, cur_dst, MAX_BULK);
	cur_dst += MAX_BULK - 3;
	if ((ret & RTE_RING_SZ_MASK) != MAX_BULK - 3)
		goto fail;

	/* check data */
	if (memcmp(src, dst, cur_dst - dst)) {
		rte_hexdump(stdout, "src", src, cur_src - src);
		rte_hexdump(stdout, "dst", dst, cur_dst - dst);
		printf("data after dequeue is not the same\n");
		goto fail;
	}

	cur_src = src;
	cur_dst = dst;

	printf("Covering rte_ring_enqueue_burst functions \n");

	ret = rte_ring_enqueue_burst(r, cur_src, 2);
	cur_src += 2;
	if ((ret & RTE_RING_SZ_MASK) != 2)
		goto fail;

	ret = rte_ring_dequeue_burst(r, cur_dst, 2);
	cur_dst += 2;
	if (ret != 2)
		goto fail;

	/* Free memory before test completed */
	free(src);
	free(dst);
	return 0;

 fail:
	free(src);
	free(dst);
	return -1;
}

static int
test_ring_stats(void)
{

#ifndef RTE_LIBRTE_RING_DEBUG
	printf("Enable RTE_LIBRTE_RING_DEBUG to test ring stats.\n");
	return 0;
#else
	void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL;
	int ret;
	unsigned i;
	unsigned num_items            = 0;
	unsigned failed_enqueue_ops   = 0;
	unsigned failed_enqueue_items = 0;
	unsigned failed_dequeue_ops   = 0;
	unsigned failed_dequeue_items = 0;
	unsigned last_enqueue_ops     = 0;
	unsigned last_enqueue_items   = 0;
	unsigned last_quota_ops       = 0;
	unsigned last_quota_items     = 0;
	unsigned lcore_id = rte_lcore_id();
	struct rte_ring_debug_stats *ring_stats = &r->stats[lcore_id];

	printf("Test the ring stats.\n");

	/* Reset the watermark in case it was set in another test. */
	rte_ring_set_water_mark(r, 0);

	/* Reset the ring stats. */
	memset(&r->stats[lcore_id], 0, sizeof(r->stats[lcore_id]));

	/* Allocate some dummy object pointers. */
	src = malloc(RING_SIZE*2*sizeof(void *));
	if (src == NULL)
		goto fail;

	for (i = 0; i < RING_SIZE*2 ; i++) {
		src[i] = (void *)(unsigned long)i;
	}

	/* Allocate some memory for copied objects. */
	dst = malloc(RING_SIZE*2*sizeof(void *));
	if (dst == NULL)
		goto fail;

	memset(dst, 0, RING_SIZE*2*sizeof(void *));

	/* Set the head and tail pointers. */
	cur_src = src;
	cur_dst = dst;

	/* Do Enqueue tests. */
	printf("Test the dequeue stats.\n");

	/* Fill the ring up to RING_SIZE -1. */
	printf("Fill the ring.\n");
	for (i = 0; i< (RING_SIZE/MAX_BULK); i++) {
		rte_ring_sp_enqueue_burst(r, cur_src, MAX_BULK);
		cur_src += MAX_BULK;
	}

	/* Adjust for final enqueue = MAX_BULK -1. */
	cur_src--;

	printf("Verify that the ring is full.\n");
	if (rte_ring_full(r) != 1)
		goto fail;

	printf("Verify the enqueue success stats.\n");
	/* Stats should match above enqueue operations to fill the ring. */
	if (ring_stats->enq_success_bulk != (RING_SIZE/MAX_BULK))
		goto fail;

	/* Current max objects is RING_SIZE -1. */
	if (ring_stats->enq_success_objs != RING_SIZE -1)
		goto fail;

	/* Shouldn't have any failures yet. */
	if (ring_stats->enq_fail_bulk != 0)
		goto fail;
	if (ring_stats->enq_fail_objs != 0)
		goto fail;

	printf("Test stats for SP burst enqueue to a full ring.\n");
	num_items = 2;
	ret = rte_ring_sp_enqueue_burst(r, cur_src, num_items);
	if ((ret & RTE_RING_SZ_MASK) != 0)
		goto fail;

	failed_enqueue_ops   += 1;
	failed_enqueue_items += num_items;

	/* The enqueue should have failed. */
	if (ring_stats->enq_fail_bulk != failed_enqueue_ops)
		goto fail;
	if (ring_stats->enq_fail_objs != failed_enqueue_items)
		goto fail;

	printf("Test stats for SP bulk enqueue to a full ring.\n");
	num_items = 4;
	ret = rte_ring_sp_enqueue_bulk(r, cur_src, num_items);
	if (ret != -ENOBUFS)
		goto fail;

	failed_enqueue_ops   += 1;
	failed_enqueue_items += num_items;

	/* The enqueue should have failed. */
	if (ring_stats->enq_fail_bulk != failed_enqueue_ops)
		goto fail;
	if (ring_stats->enq_fail_objs != failed_enqueue_items)
		goto fail;

	printf("Test stats for MP burst enqueue to a full ring.\n");
	num_items = 8;
	ret = rte_ring_mp_enqueue_burst(r, cur_src, num_items);
	if ((ret & RTE_RING_SZ_MASK) != 0)
		goto fail;

	failed_enqueue_ops   += 1;
	failed_enqueue_items += num_items;

	/* The enqueue should have failed. */
	if (ring_stats->enq_fail_bulk != failed_enqueue_ops)
		goto fail;
	if (ring_stats->enq_fail_objs != failed_enqueue_items)
		goto fail;

	printf("Test stats for MP bulk enqueue to a full ring.\n");
	num_items = 16;
	ret = rte_ring_mp_enqueue_bulk(r, cur_src, num_items);
	if (ret != -ENOBUFS)
		goto fail;

	failed_enqueue_ops   += 1;
	failed_enqueue_items += num_items;

	/* The enqueue should have failed. */
	if (ring_stats->enq_fail_bulk != failed_enqueue_ops)
		goto fail;
	if (ring_stats->enq_fail_objs != failed_enqueue_items)
		goto fail;

	/* Do Dequeue tests. */
	printf("Test the dequeue stats.\n");

	printf("Empty the ring.\n");
	for (i = 0; i<RING_SIZE/MAX_BULK; i++) {
		rte_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
		cur_dst += MAX_BULK;
	}

	/* There was only RING_SIZE -1 objects to dequeue. */
	cur_dst++;

	printf("Verify ring is empty.\n");
	if (1 != rte_ring_empty(r))
		goto fail;

	printf("Verify the dequeue success stats.\n");
	/* Stats should match above dequeue operations. */
	if (ring_stats->deq_success_bulk != (RING_SIZE/MAX_BULK))
		goto fail;

	/* Objects dequeued is RING_SIZE -1. */
	if (ring_stats->deq_success_objs != RING_SIZE -1)
		goto fail;

	/* Shouldn't have any dequeue failure stats yet. */
	if (ring_stats->deq_fail_bulk != 0)
		goto fail;

	printf("Test stats for SC burst dequeue with an empty ring.\n");
	num_items = 2;
	ret = rte_ring_sc_dequeue_burst(r, cur_dst, num_items);
	if ((ret & RTE_RING_SZ_MASK) != 0)
		goto fail;

	failed_dequeue_ops   += 1;
	failed_dequeue_items += num_items;

	/* The dequeue should have failed. */
	if (ring_stats->deq_fail_bulk != failed_dequeue_ops)
		goto fail;
	if (ring_stats->deq_fail_objs != failed_dequeue_items)
		goto fail;

	printf("Test stats for SC bulk dequeue with an empty ring.\n");
	num_items = 4;
	ret = rte_ring_sc_dequeue_bulk(r, cur_dst, num_items);
	if (ret != -ENOENT)
		goto fail;

	failed_dequeue_ops   += 1;
	failed_dequeue_items += num_items;

	/* The dequeue should have failed. */
	if (ring_stats->deq_fail_bulk != failed_dequeue_ops)
		goto fail;
	if (ring_stats->deq_fail_objs != failed_dequeue_items)
		goto fail;

	printf("Test stats for MC burst dequeue with an empty ring.\n");
	num_items = 8;
	ret = rte_ring_mc_dequeue_burst(r, cur_dst, num_items);
	if ((ret & RTE_RING_SZ_MASK) != 0)
		goto fail;
	failed_dequeue_ops   += 1;
	failed_dequeue_items += num_items;

	/* The dequeue should have failed. */
	if (ring_stats->deq_fail_bulk != failed_dequeue_ops)
		goto fail;
	if (ring_stats->deq_fail_objs != failed_dequeue_items)
		goto fail;

	printf("Test stats for MC bulk dequeue with an empty ring.\n");
	num_items = 16;
	ret = rte_ring_mc_dequeue_bulk(r, cur_dst, num_items);
	if (ret != -ENOENT)
		goto fail;

	failed_dequeue_ops   += 1;
	failed_dequeue_items += num_items;

	/* The dequeue should have failed. */
	if (ring_stats->deq_fail_bulk != failed_dequeue_ops)
		goto fail;
	if (ring_stats->deq_fail_objs != failed_dequeue_items)
		goto fail;

	printf("Test total enqueue/dequeue stats.\n");
	/* At this point the enqueue and dequeue stats should be the same. */
	if (ring_stats->enq_success_bulk != ring_stats->deq_success_bulk)
		goto fail;
	if (ring_stats->enq_success_objs != ring_stats->deq_success_objs)
		goto fail;
	if (ring_stats->enq_fail_bulk    != ring_stats->deq_fail_bulk)
		goto fail;
	if (ring_stats->enq_fail_objs    != ring_stats->deq_fail_objs)
		goto fail;

	/* Watermark Tests. */
	printf("Test the watermark/quota stats.\n");

	printf("Verify the initial watermark stats.\n");
	/* Watermark stats should be 0 since there is no watermark. */
	if (ring_stats->enq_quota_bulk != 0)
		goto fail;
	if (ring_stats->enq_quota_objs != 0)
		goto fail;

	/* Set a watermark. */
	rte_ring_set_water_mark(r, 16);

	/* Reset pointers. */
	cur_src = src;
	cur_dst = dst;

	last_enqueue_ops   = ring_stats->enq_success_bulk;
	last_enqueue_items = ring_stats->enq_success_objs;

	printf("Test stats for SP burst enqueue below watermark.\n");
	num_items = 8;
	ret = rte_ring_sp_enqueue_burst(r, cur_src, num_items);
	if ((ret & RTE_RING_SZ_MASK) != num_items)
		goto fail;

	/* Watermark stats should still be 0. */
	if (ring_stats->enq_quota_bulk != 0)
		goto fail;
	if (ring_stats->enq_quota_objs != 0)
		goto fail;

	/* Success stats should have increased. */
	if (ring_stats->enq_success_bulk != last_enqueue_ops + 1)
		goto fail;
	if (ring_stats->enq_success_objs != last_enqueue_items + num_items)
		goto fail;

	last_enqueue_ops   = ring_stats->enq_success_bulk;
	last_enqueue_items = ring_stats->enq_success_objs;

	printf("Test stats for SP burst enqueue at watermark.\n");
	num_items = 8;
	ret = rte_ring_sp_enqueue_burst(r, cur_src, num_items);
	if ((ret & RTE_RING_SZ_MASK) != num_items)
		goto fail;

	/* Watermark stats should have changed. */
	if (ring_stats->enq_quota_bulk != 1)
		goto fail;
	if (ring_stats->enq_quota_objs != num_items)
		goto fail;

	last_quota_ops   = ring_stats->enq_quota_bulk;
	last_quota_items = ring_stats->enq_quota_objs;

	printf("Test stats for SP burst enqueue above watermark.\n");
	num_items = 1;
	ret = rte_ring_sp_enqueue_burst(r, cur_src, num_items);
	if ((ret & RTE_RING_SZ_MASK) != num_items)
		goto fail;

	/* Watermark stats should have changed. */
	if (ring_stats->enq_quota_bulk != last_quota_ops +1)
		goto fail;
	if (ring_stats->enq_quota_objs != last_quota_items + num_items)
		goto fail;

	last_quota_ops   = ring_stats->enq_quota_bulk;
	last_quota_items = ring_stats->enq_quota_objs;

	printf("Test stats for MP burst enqueue above watermark.\n");
	num_items = 2;
	ret = rte_ring_mp_enqueue_burst(r, cur_src, num_items);
	if ((ret & RTE_RING_SZ_MASK) != num_items)
		goto fail;

	/* Watermark stats should have changed. */
	if (ring_stats->enq_quota_bulk != last_quota_ops +1)
		goto fail;
	if (ring_stats->enq_quota_objs != last_quota_items + num_items)
		goto fail;

	last_quota_ops   = ring_stats->enq_quota_bulk;
	last_quota_items = ring_stats->enq_quota_objs;

	printf("Test stats for SP bulk enqueue above watermark.\n");
	num_items = 4;
	ret = rte_ring_sp_enqueue_bulk(r, cur_src, num_items);
	if (ret != -EDQUOT)
		goto fail;

	/* Watermark stats should have changed. */
	if (ring_stats->enq_quota_bulk != last_quota_ops +1)
		goto fail;
	if (ring_stats->enq_quota_objs != last_quota_items + num_items)
		goto fail;

	last_quota_ops   = ring_stats->enq_quota_bulk;
	last_quota_items = ring_stats->enq_quota_objs;

	printf("Test stats for MP bulk enqueue above watermark.\n");
	num_items = 8;
	ret = rte_ring_mp_enqueue_bulk(r, cur_src, num_items);
	if (ret != -EDQUOT)
		goto fail;

	/* Watermark stats should have changed. */
	if (ring_stats->enq_quota_bulk != last_quota_ops +1)
		goto fail;
	if (ring_stats->enq_quota_objs != last_quota_items + num_items)
		goto fail;

	printf("Test watermark success stats.\n");
	/* Success stats should be same as last non-watermarked enqueue. */
	if (ring_stats->enq_success_bulk != last_enqueue_ops)
		goto fail;
	if (ring_stats->enq_success_objs != last_enqueue_items)
		goto fail;

	/* Cleanup. */

	/* Empty the ring. */
	for (i = 0; i<RING_SIZE/MAX_BULK; i++) {
		rte_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
		cur_dst += MAX_BULK;
	}

	/* Reset the watermark. */
	rte_ring_set_water_mark(r, 0);

	/* Reset the ring stats. */
	memset(&r->stats[lcore_id], 0, sizeof(r->stats[lcore_id]));

	/* Free memory before test completed */
	free(src);
	free(dst);
	return 0;

fail:
	free(src);
	free(dst);
	return -1;
#endif
}

/*
 * it will always fail to create ring with a wrong ring size number in this function
 */
static int
test_ring_creation_with_wrong_size(void)
{
	struct rte_ring * rp = NULL;

	/* Test if ring size is not power of 2 */
	rp = rte_ring_create("test_bad_ring_size", RING_SIZE + 1, SOCKET_ID_ANY, 0);
	if (NULL != rp) {
		return -1;
	}

	/* Test if ring size is exceeding the limit */
	rp = rte_ring_create("test_bad_ring_size", (RTE_RING_SZ_MASK + 1), SOCKET_ID_ANY, 0);
	if (NULL != rp) {
		return -1;
	}
	return 0;
}

/*
 * it tests if it would always fail to create ring with an used ring name
 */
static int
test_ring_creation_with_an_used_name(void)
{
	struct rte_ring * rp;

	rp = rte_ring_create("test", RING_SIZE, SOCKET_ID_ANY, 0);
	if (NULL != rp)
		return -1;

	return 0;
}

/*
 * Test to if a non-power of 2 count causes the create
 * function to fail correctly
 */
static int
test_create_count_odd(void)
{
	struct rte_ring *r = rte_ring_create("test_ring_count",
			4097, SOCKET_ID_ANY, 0 );
	if(r != NULL){
		return -1;
	}
	return 0;
}

static int
test_lookup_null(void)
{
	struct rte_ring *rlp = rte_ring_lookup("ring_not_found");
	if (rlp ==NULL)
	if (rte_errno != ENOENT){
		printf( "test failed to returnn error on null pointer\n");
		return -1;
	}
	return 0;
}

/*
 * it tests some more basic ring operations
 */
static int
test_ring_basic_ex(void)
{
	int ret = -1;
	unsigned i;
	struct rte_ring * rp;
	void **obj = NULL;

	obj = rte_calloc("test_ring_basic_ex_malloc", RING_SIZE, sizeof(void *), 0);
	if (obj == NULL) {
		printf("test_ring_basic_ex fail to rte_malloc\n");
		goto fail_test;
	}

	rp = rte_ring_create("test_ring_basic_ex", RING_SIZE, SOCKET_ID_ANY,
			RING_F_SP_ENQ | RING_F_SC_DEQ);
	if (rp == NULL) {
		printf("test_ring_basic_ex fail to create ring\n");
		goto fail_test;
	}

	if (rte_ring_lookup("test_ring_basic_ex") != rp) {
		goto fail_test;
	}

	if (rte_ring_empty(rp) != 1) {
		printf("test_ring_basic_ex ring is not empty but it should be\n");
		goto fail_test;
	}

	printf("%u ring entries are now free\n", rte_ring_free_count(rp));

	for (i = 0; i < RING_SIZE; i ++) {
		rte_ring_enqueue(rp, obj[i]);
	}

	if (rte_ring_full(rp) != 1) {
		printf("test_ring_basic_ex ring is not full but it should be\n");
		goto fail_test;
	}

	for (i = 0; i < RING_SIZE; i ++) {
		rte_ring_dequeue(rp, &obj[i]);
	}

	if (rte_ring_empty(rp) != 1) {
		printf("test_ring_basic_ex ring is not empty but it should be\n");
		goto fail_test;
	}

	/* Covering the ring burst operation */
	ret = rte_ring_enqueue_burst(rp, obj, 2);
	if ((ret & RTE_RING_SZ_MASK) != 2) {
		printf("test_ring_basic_ex: rte_ring_enqueue_burst fails \n");
		goto fail_test;
	}

	ret = rte_ring_dequeue_burst(rp, obj, 2);
	if (ret != 2) {
		printf("test_ring_basic_ex: rte_ring_dequeue_burst fails \n");
		goto fail_test;
	}

	ret = 0;
fail_test:
	if (obj != NULL)
		rte_free(obj);

	return ret;
}

static int
test_ring(void)
{
	/* some more basic operations */
	if (test_ring_basic_ex() < 0)
		return -1;

	rte_atomic32_init(&synchro);

	if (r == NULL)
		r = rte_ring_create("test", RING_SIZE, SOCKET_ID_ANY, 0);
	if (r == NULL)
		return -1;

	/* retrieve the ring from its name */
	if (rte_ring_lookup("test") != r) {
		printf("Cannot lookup ring from its name\n");
		return -1;
	}

	/* burst operations */
	if (test_ring_burst_basic() < 0)
		return -1;

	/* basic operations */
	if (test_ring_basic() < 0)
		return -1;

	/* ring stats */
	if (test_ring_stats() < 0)
		return -1;

	/* basic operations */
	if (test_live_watermark_change() < 0)
		return -1;

	if ( test_set_watermark() < 0){
		printf ("Test failed to detect invalid parameter\n");
		return -1;
	}
	else
		printf ( "Test detected forced bad watermark values\n");

	if ( test_create_count_odd() < 0){
			printf ("Test failed to detect odd count\n");
			return -1;
		}
		else
			printf ( "Test detected odd count\n");

	if ( test_lookup_null() < 0){
				printf ("Test failed to detect NULL ring lookup\n");
				return -1;
			}
			else
				printf ( "Test detected NULL ring lookup \n");

	/* test of creating ring with wrong size */
	if (test_ring_creation_with_wrong_size() < 0)
		return -1;

	/* test of creation ring with an used name */
	if (test_ring_creation_with_an_used_name() < 0)
		return -1;

	/* dump the ring status */
	rte_ring_list_dump(stdout);

	return 0;
}

static struct test_command ring_cmd = {
	.command = "ring_autotest",
	.callback = test_ring,
};
REGISTER_TEST_COMMAND(ring_cmd);

redpajama_set_name: RedPajamaGithub


Here's a preview of our upcoming deals of the day!!
Come see our new deals of the day!!
HAPPY NEW YEAR!! Get Double Rewards Points or 20% off!!
For a limited time you can double your rewards points plus free shipping or get 20% off your entire order!!


We realize you may have a few questions, like what size dumpster do I need or how much is this going to cost. Just give us a call and one of our specialists in Harrah, Oklahoma will be happy to answer any questions you may have.
If your looking to rent a roll off container in Harrah, don't accept slow responding companies or late deliveries. For over 15 year's we have delivered our dumpsters on-time, when and where our customers need them. Give us a call today to experience why we're the #1 affordable dumpster rental company nationwide.
Things To Consider For Renting a Roll Off Container in Harrah, Oklahoma!
When working on a new job, thinking of how to get rid of of the garbage you'll produce is likely the last thing on your mind, but it's just as important as deciding which approach you're going to take on your task. Whether you're a homeowner looking to do some remodeling or simply seeking to do some spring cleaning, there's always a cost effective dumpster option that will work for you in Harrah. Picking the right dumpster may seem like an easy, but there are usually weight and regulation factors that must be taken in order to make sure you don't spend more money than you need to.
It's vital to try and predict your costs prior to rental of your dumpster, that way you don't go over budget at the end. Several things will determine your rental costs including size, weight and the materials you'll be disposing of. Check to see if there are any permit charges in Harrah that could increase your overall budget for your job.
Your roll-off dumpster rental can come in a variety of different sizes, but the most common is the 20 cubic yard selection. If you are unsure of the size you need, it's better to overestimate than underestimate, since if you exceed your weight capacity you'll be charged a premium. Generally most home improvement jobs in Harrah can be finished with a 20 cubic yard dumpster, unless you have large materials you're working with. It's better to have some space left over so you don't exceed weight capacities, so a 40 yard dumpster would be an ideal choice for a big job like roof replacement. It never hurts to have a little leftover room for junk in your dumpster, and if you find yourself having an area leftover, you can always take care of any garbage you've got sitting around.
Just eyeballing the size of a dumpster can be deceiving, as depending on the materials you're using, it can fill up very quickly. Additionaly, it's not just about space, but also about the weight of the garbage you're throwing into the dumpster. Often times companies have weight limits on their dumpster that can quickly be exceeded, even if it isn't completely filled. In addition to additional charges due to weight, you'll also want to pay attention to the ground that the dumpster is staying on, as too much weight could easily damage your property. Checking with your rental company in Harrah first will help you get an idea of any fees or weight capacities.
Size makes a difference, along with the type of garbage you're getting rid of when considering the type of dumpster to go with. If you simply have a few large items, such as a couch or home appliance, then it may be better to contact a junk removal service instead of renting a dumpster. If you are only planning on to clean out some old furniture or junk in your garage, you could likely get away with a 10 cubic yard dumpster. You'll want to check with your rental company in Harrah to see if there are items that they prohibit before you decide to go with a dumpster option. Often times objects such as ovens, refrigerators, mattresses and batteries will not be allowed.
How much a dumpster rental costs is determined by a variety of different factors. While a lot of service providers commonly offer no-cost estimates, it is recommended you find out how rental rates are calculated. Clearly, bigger containers can contain far more volume and weight. It is going to be more work to move a large container, even if it's not full, since it requires more man power. Because of this, booking bigger containers is pricier than smaller dumpsters.
Doing business with a local dumpster rental company in Harrah will probably be a good. Local companies always have an established dumping contract with waste management facilities, which will save you time and paperwork. They'll also be aware of local laws, which can streamline the entire disposal process. It's a good idea to provide as many details as possible to the company you're renting from, that way they can make sure you have the best dumpster to suit your needs.


If you think about it for long enough you realize without the minerals of your skeleton holding your water up, you would be a puddle. We are water and minerals.
For optimal health, fill your body with the Calcium, Magnesium and over 70 trace minerals in the UMH Mineral Cartridge.
Minerals are the elements that comprise the entire universe, this earth, and everything on it, including you. Your body is truly a masterpiece formed from these same elements. As such, it is important to constantly replenish your body with the elements it expends on a daily basis.
Without potassium your nerves could not generate an impulse to signal your body to move, and the muscles in your heart, organs and body would not be able to contract and flex.
Without zinc supporting a strong immune system, your body would not be able to optimally defend against infections, adequately heal wounds or repair cells.
Without sufficient amounts of calcium, the most abundant mineral in the body, your bones could become brittle and less dense.
Without iron, oxygen could fail to attach to blood cells and your body would struggle to produce the energy necessary for life. Failing to get enough iron can lead to anemia and create weakness and fatigue.
As you can see, minerals are as essential to our bodies as sand is to a beach. Countless body processes such as bone strengthening, energy production, nerve and muscle function, and immune health depend on minerals.
Which minerals are best for the body?
There are over 2500 kinds of coral minerals in the world but only 1 has the ideal ratio of 2:1 calcium to magnesium. Sango Coral Minerals used in the UMH Sango Mineral Cartridge originate from the island of Okinawa, an island known for the longevity of it's people. Many believe it's the minerals in the life sustaining water that cause Okinawans to live so long.
Now through the UMH Sango Mineral Cartridge you can access these Sango Coral minerals. The natural calcium and magnesium are accompanied by 70 other trace elements essential for daily function.
Our Sango Coral Minerals are sustainably harvested and reliably tested. Your body will be able to efficiently use these minerals as they are delivered in liquid soluble form to ease assimilation.
The body uses alkaline minerals to buffer the acidity that is ubiquitous in our modern lifestyle. When current deposits of minerals are insufficient, the body makes withdrawals from the teeth and bones that serve as our "mineral bank".
With depleted soils and food most people are making frequent withdrawals from their mineral bank and heading down a path of shrinking skeletal structure and substantial tooth decay simply because they don't consume enough minerals on a daily basis.
The easiest way to keep standing tall and to be physically well is to add a constant supply of minerals to your body. For much less than the monthly cost of supplements, adding minerals to your water is the easiest and least expensive way to ensure your vitality.
The Jivara Remineralizer comes in a "see through" cartridge with enough life supporting minerals to last for approximately 2500 gallons of water. This fool proof design allows you to see when the minerals have run out by simply looking into the cartridge and noticing when it is empty. When the cartridge is empty, simply replace it with a new one.
Delighted customers have helped us to see the amazing properties of the UMH Sango Mineral Cartridge. Consider the following independent test results which show these minerals are intelligent. With all of the craze about alkaline water you may be confused into thinking a very high pH is desirable. Our research has demonstrated the best target for pH is the same as human blood which is a slightly alkaline 7.3.
Notice the hardness, color and turbidity increased after installing the Jivara Remineralizer. These are all signs that minerals were added to the water and yet the pH didn't go up. Our research indicates these Sango Coral Minerals will increase pH in situations where pH is low, but they will not increase the pH above the 7.3 range of human blood. This is a remarkable property and one of the main reasons we recommend these minerals.
See the Mineral Contents of the UMH Sango Mineral Cartridge Here.
After going back and forth with my nutritionist I finally agreed that I feel better and have more energy when I take mineral supplements. For years I resisted following her guidance because I didn't like spending hundreds of dollars on supplements every month. Ultimately, I chose to take supplements every day because my body is made of water and minerals which means they must be important.
The question is, which minerals offer the greatest impact and best value? In my quest for a satisfying answer, I found many different opinions about which minerals are necessary, in what proportions and from which sources. Then, I read the following from Dr. Bob Marshall and knew I had found something that makes sense.
The following letter from Dr. Bob Marshall explains why his company offers the same Sango Corals that are found in the Jivara Remineralizer. As you will see, his experience runs deep as does his credibility. Dr. Marshall is the CEO of a multimillion dollar global company that runs an FDA regulated facility exemplifying the highest standards.
As you contemplate the best source of minerals for you, remember to follow your own guidance as your truth is the only thing that matters. For me, a high quality source of water soluble minerals that are inexpensive and easy to integrate makes the most sense. How about for you?
Recently, coral products have been receiving a lot of attention in the news. Unfortunately, the press coverage has been filled with partial truths and some outright misinformation. Therefore, I'd like to set the record straight and help you read between the lines to gain the truth behind the print.
Q:Do high amounts of lead occur in coral?
A: Dozens of different types of coral sources exist and some have been known for years to contain significant amounts of lead, as the Consumer's Union test results recently found. In contrast, every batch of Premier Research Labs' Okinawan, Sango Reef marine coral is assayed for heavy metals, including lead. Every Certificate of Analysis of PRL's coral has shown that heavy metals, in particular, lead, to be below detection threshold.
Q: What is the form of the calcium in coral?
A: The form of calcium in all coral is calcium carbonate. This same form, calcium carbonate, is found in rocks; however, the rock form of calcium carbonate is not ionized and is extremely difficult to absorb. The same is true for over 2,500 species of coral which are similar to the rock form of calcium carbonate. However, there is one unique coral, the Sango Reef marine coral, which is naturally highly ionized and is better absorbed than any other form of calcium or magnesium that I have ever tested.
Sango Reef marine coral is currently the best selling form of mineral supplement in Japan, used by millions of people for many years with many verifiable stories of clinical success. Sango Reef marine coral is the best mineral delivery system I have seen in 35 years of mineral research. In stark contrast, other forms of coral have tested very poorly and I do not recommend them for human or animal consumption.
Q: How much magnesium is found in coral?
A: Of over 2,500 species of coral, all but one contains about 35-37% calcium and 2-3% magnesium, which is a 10:1 ratio of calcium to magnesium, far from ideal. However, PRL's Sango Reef marine coral is comprised of approximately 20% calcium and 10% magnesium, making it an ideal 2:1 ratio of calcium to magnesium, the same ratio that naturally occurs in the human body.
well as building and maintaining monoortho- calcium phosphate reserves, the form of calcium found in the soft tissues of the body.
Q: In your clinical practice, isn't it the results that really count?
A: Of course. In my 35 years of clinical practice, no other mineral supplement that I have used has been able to outperform or even compete with concentrated vegetable sources of minerals (such as large amounts of daily carrot and celery juice) except PRL's Sango Reef marine coral. I have never found any other source that was more effective or faster at correcting mineral deficiencies and rapidly restoring bone and soft tissue calcium reserves. I consider PRL's coral products as an important cornerstone of literally every nutritional program for our patients.
Remember, it is not just the marine coral that makes PRL products so excellent. At PRL, we have intensely researched and tested our coral products to be sure that critical synergists, cofactors and transporters are combined together in order to deliver the "Quantum Nutrition Effect". To achieve this effect, no toxic tagalongs can be used (including toxic flowing agents such as magnesium stearate, toxic forms of vitamin D3 or toxic forms of capsules such as gelatin capsules, etc.). Although true excellence inspires imitation, there is no substitute for careful clinical testing and a proven track record of outstanding results.
For practitioners who are proficient at QRA™ (Quantum Reflex Analysis), a precise, targeted form of kinesiology, a simple QRA™ test can rapidly demonstrate the difference between PRL's Sango Reef marine coral vs. other inferior coral products. PRL has been clinically using its Sango Reef coral exclusively since 1995 with thousands of patients as an integral part of their clinical nutritional programs. The spectacular clinical results speak for themselves. Our case files include a vast diversity of many different benefits of PRL's marine coral, because as the body's tissues become more alkalinized, many different body systems can return to normal with enhanced tissue oxygen and therefore, improved organ/gland function.
For example, regular use of PRL's marine coral allows a rapid return of normal alkalinity of the first morning urine pH (which ideally is between 6.4 – 7.0 pH, an excellent marker of healthy bone metabolism and tissue oxygen levels), improved bone density, dramatically increased flexibility, enhanced hormone balance, better mental clarity and mood – in short, a quantum leap in the efficient functioning of literally all the systems of the whole body.
For everything you need to know about installation, visit the Jivara Remineralizer Installation page.
The Jivara Mineralizer cartridges come with 1/4 inch quick connect flexible hose fittings. They are very easy to install.
Here's a video for how to use a quick connect fitting.


text:
Egypt's New Administrative Capital to build the biggest entertainment district in MENA for $20 billion
Doaa A.Moneim , Wednesday 11 Sep 2019
The ministerial district in Egypt's New Administrative Capital
Egypt is about to close a deal on building an entertainment district in the New Administrative Capital. Negotiations have been ongoing for some time between the New Administrative Capital for Urban Development (ACUD) and the US-based ATIP New Capital Entertainment, LLC (ATIP Entertainment), said ACUD Spokesman Khaled Al-Husseini.
He told Ahram Online the entertainment district would be the MENA region's biggest, and the largest investment in Egypt.
Last week ATIP Entertainment said it had signed a memorandum of understanding with the ACUD to establish a $20 billion entertainment district over 4,256 acres (4,100 feddans) in the heart of the New Administrative Capital, which has been under construction since 2015.
ITEC Entertainment Corporation stated it was awarded the contract to provide design, entertainment technology, and management for ATIP's development of the district.
"The site of the project was chosen and the partnership shares were determined. The contracts will be inked after the conclusion of negotiations," said Al-Husseini.
The project would attract more investments to Egypt, particularly to the new capital, and provide a large number of job opportunities, he added.
"The New Administrative Capital is attractive to the business community due to the multiple investment opportunities and incentives it offers, as well as the facilities introduced to obtain all the licences from one body, which is the New Administrative Capital Company", Al-Husseini stated.
According to the US-based company, the entertainment district would be built in three phases over a seven- to 10-year period, and is projected to create about 700,000 total jobs.
The plan envisions four- and six-star resorts and themed hotels; a wellness centre; vacation rentals; luxury homes, villas and high-rises; high-end and regional shopping and dining; a VIP golf course and other recreational and green space activities; world-class theme parks; a cultural arts centre; a convention centre; a planetarium; aviary, butterfly, topiary and botanical gardens/conservatories; a museum and recreational activities for children; a Formula One racetrack; a sports and concert stadium; and an entertainment college for training future global entertainment and travel destination development leaders.
The district will feature two iconic landmarks: the world's tallest observation wheel, with unique views of Egypt's past, present and future, as well as the world's tallest obelisk, an ancient symbol of Egypt's cultural heritage designed to point towards the country's bright future. The development will welcome visitors through a cutting-edge multi-modal transportation hub that will connect with the New Administrative Capital's superhighways, infrastructure and high-speed rails.


text:
After They Yelled Cut: Alana Haim on Licorice Pizza
Lex Briscuso December 22, 2021
May contain spoilers
Everything you've heard about Paul Thomas Anderson's ninth feature is true. It's a '70s Los Angeles film worthy of a slot next to all the rest of his love letters to the city; it's a charming and—at times—uncomfortable meditation on passion and connection; and it's a star vehicle for its leads, the late Philip Seymour Hoffman's son, Cooper Hoffman, and Alana Haim, a multi-instrumentalist from the pop-rock band Haim.
The film follows charismatic teen actor Gary Valentine (Hoffman) and headstrong twentysomething yearbook photo assistant Alana Kane (Haim), who meet randomly at Valentine's high school. From there, they embark on a whirlwind of ridiculous hijinks, entrepreneurial trysts, and a few immature plots to make each other jealous as they live and learn and fall in love in 1970s Los Angeles. "Licorice Pizza" is a movie that celebrates being young and dumb, and being full of endearment and tenderness that you just don't know what to do with yet.
RogerEbert.com spoke to Haim about the making of "Licorice Pizza," beginning her acting career with the film's insane Bradley Cooper scene, acting opposite her family members, and more.
Your relationship with Cooper Hoffman is the cornerstone of the film. Can you recall a moment with Cooper [where] you sort of felt your connection fall into place and your chemistry started to take shape?
There's many instances, but, being on set, going through the tornado of Jon Peters in the first week really did bond us as a team, because we had never done this before. I mean, I hadn't been on a movie set. I'd been on a music video set, which is similar, but not similar at all. Cooper had never done this before, and we show up to set the first day, and it's pure chaos. There's so many people, and everyone's moving something. It was me, Cooper, and Cooper's gang of boys that were helping: Kirk, Mark, and Greg. We're all kind of in a huddle, and all of us are asking each other, "Do you know what we're supposed to be doing?" It kind of felt like the world was spinning at a really rapid pace, and then all of a sudden, it stopped very abruptly, and then it was like no one was there. You just heard an "Action!" out of nowhere. It felt like it was down the street. And Bradley Cooper walks towards us, and it's like, "Oh, we're in it now. Like, oh, OK. It's starting."
Luckily for day one, I didn't have the wrath of Jon Peters coming at me, but Cooper did. The first scene that we shot was, you know, "Do you know who I am? Do you know who my girlfriend is?" That was the first five seconds of me, and Cooper, and Kirk, Mark, and Greg's new career. The energy coming off of Bradley Cooper playing Jon Peters was insane. He fully was in it, and never broke, and it really did bond me and Cooper together, like, "OK, so we have this obstacle in front of us, which is Bradley Cooper playing Jon Peters. Like, this is our obstacle." And he would look at me and be like, "Am I doing OK?" I would say like, "Yeah, you're doing great." In my mind I'm like, "I have no idea. I'm not sure. But of course you are. Like, I think you are."
So that was day one, and then day two was me getting in the truck, and driving Jon Peters, and Cooper, and Gary around the hills of Tarzana with a camera strapped on one side, lights strapped on the front, me free-driving. I was actually driving the truck in stick shift. And we had like, I think four days of the Jon Peters sequence. So after something like that, it was just like what is going on? I mean, it was so wild. And then, funny enough, after that happened, then we were at Gary's house, and we had to jump forward to basically the end of the movie, where Alana is upset at Gary for wanting to get pinball machines when I'm working for Joel Wachs.
So basically, Bradley Cooper had wrapped, and we didn't have this movie star to carry the scene anymore. I mean, the Jon Peters sequence is all about Jon Peters. We're just holding on for dear life, and then all of a sudden, it's like, OK. It's Alana and Gary, and it's just we're the ones that are having to do this scene together. And that was the moment where it felt like, "Can we do this?" This whole scene is on our shoulders.
It was a hard scene to do, but it was also so much fun to do, and I think that after that, we all were kind of like, "OK, we can breathe a little, just a little bit," right? But we eased back into actually doing it, and being like, "OK, I'm getting my sea legs," and I think that was the moment.
You and your character fit so well in the PTA cinematic universe. Did you take any inspiration from any of his past films or characters?
Paul has shot movies in this era before, but this movie felt like it stood on its own, especially since me and Cooper had never acted before, so I couldn't really like ... I didn't want to take too much. I really wanted to stay in this zone of me and Paul. Like, Paul constantly had to reassure me that I could do this, and he constantly had to tell me like, "I got you." And when Paul Thomas Anderson says, "I got you," you just kind of fall down the rabbit hole, in a great way.
I think the thing that was so lovely about Paul was that he knew what I could do, and he knew that to get the best performance out of me was to let me run free. Sometimes, he calls me like a caged lion. He needed to set me free, and let me kind of take on this life on its own. And anytime I had any sort of idea, or anytime I improv-ed anything, he was so happy.
Every time I would do something that made Paul laugh, he would put his arms up into the air, and I knew that I hit a nerve. Like, I did something right. And that was the goal every day. We were just so happy to be on set, and so happy to make art, that I just kind of followed Paul's lead. He's the reason why there was such a good performance that got brought out of me, because he directed me through the whole thing.
What does Alana's last line mean to you? What does that ending mean and feel like for you?
You know what? It's so funny that you say that. I always think about what happens. Not specifically that line, but I always think about what happens after that. They're running away. What happens after that? I honestly have this vivid ending to my story, where we're running and Gary just pulls me too hard, and I fall forward, and I skin my knees, and then I don't talk to him for another three weeks. Because that's Gary and Alana's relationship. Like, sometimes it's good, and then he'll annoy the shit out of me, and I'll be like, "Ugh. Annoying. Annoying." And that's the best part of Gary and Alana's relationship. They come together. They overcome these obstacles together and it's great, but then you turn your head, Gary says something annoying, and I'm like, "Ugh." Then a week passes and it's like, "OK. Alright. I'm back. Like, what do you need help with now?" That's what I loved about Gary and Alana's relationship, that you never really know where they stand because they're constantly being pulled apart, and coming back together, and being pulled apart. But yeah, that last scene, like five minutes after that, I fell, and didn't talk to Gary for three weeks.
Which is honestly, like, kind of perfect, and I picture it as an alternative ending to the movie now, so thank you for that!
Yeah! [Laughs] That's my ending. That's the Alana director's cut, like you follow them, and I just don't talk to him for three weeks. But then [I talk to] Paul, and then I'll be like, "Alright, fine. You're fine. Just don't pull me anymore."
Right? "Remember, my knees really got skinned, OK?"
"Can we just stop running? Can we just stop running? You run so much. Let's just—"
So much running.
"Let's just walk. Let's just walk, OK?"
Yeah, there is so much running in the movie, like genuinely so much running. It's lovely cinematically, but y'all must be tired.
Oh, I could have been a professional athlete after this movie. [Laughs]
What was the hardest scene, do you think, for you to film? What was the most difficult emotionally, physically? Obviously, we know it was difficult to drive stick shift, but aside from that ...
That was the physical part. [Laughs] Honestly, I think the scene that surprised me the most was when we were shooting Joel Wachs—the scene between Matthew and Joel Wachs, and I didn't realize how emotional that scene was going to be. Joseph Cross is one of the most incredible actors and so is Benny Safdie. There were a lot of times I was in-between two of the most incredible actors of all time, you know? It's like I was always in the middle, and I'm like, "[Who] do I put my vision to?" But shooting that scene, I remember just watching it for the first time and watching that Paul kind of held the focus on me. I just love the fact that the audience and also me are kind of realizing what's happening at the same time. I wasn't expecting that. I thought that that was really beautiful, because it is such an important scene in the movie, and it really does take it to a different place, in a good way.
How did working with your family help you settle into this character?
My family is great, but honestly, my dad's a star. Like, I got to give it up to my dad. He has never been in front of a camera before, and watching my dad ... we were crying of laughter in-between ... during every scene, and the person that I felt the worst for was Skyler Gisondo [who plays Alana's brief boyfriend, Lance]. I was like, "Wow. Now I understand what it feels like to bring a boyfriend to my parents," because I'd get to talking to him. Obviously, we weren't dating, but I was like, "Is this scary for you?" And he's like, "Yeah, it's scary. Your dad is scary." I never have asked any of my boyfriends before like, "Was it scary meeting my dad?" Now I know, and he was such a trooper, and is such a good actor.
It was so fun having my parents with me, because at that point, I had been shooting for like a month and I didn't really have anybody around me. Cooper and Paul were my family, and then having my actual family come—I think I made an announcement before we started shooting like, "If my parents say anything embarrassing, I am sorry. Everyone, the Haim family has landed on set. Everyone, just keep calm."
That was one of the funnest scenes to shoot by far. We were all just hysterically laughing. Honestly, while we were shooting, I was like, "There's no way any of this is going to make it in the film. How are we going to edit this? There's no way this is going to be edited. Like, we're not going to make it." And it's in there, and I'm so happy that I have this snapshot that I can rewatch for the rest of my life. It's great.
"Licorice Pizza" opens nationwide on December 25.


text:
@interface CJTableViewDelegate : NSObject
<
UITableViewDataSource,
UITableViewDelegate
>

@end


Visual Studio 2017 does not understand what type it is supposed to be cast to. After almost an hour of researching (Again I am new to programming), I finally found that the following change worked.
What was the code supposed to be doing? Or is it supposed to be casting to a specific type?


text:
Bayou City High School Rundown
By David Coleman Nov 15, 2010, 5:01pm CST
Share All sharing options for: Bayou City High School Rundown
Last weekend marked the bi-district round of the Texas state football playoffs. Some notable upsets and drubbings were handed out, but before I talk about some of the notable area matchups, I'd like to point out what's shaping up to be a pretty good story.
West Orange-Stark beat Dayton in its first playoff game of the season. That's not suprising, since WO-S was state-ranked earlier this season. What is kind of shocking is that this team has rebounded to make the playoffs and win big (the Dayton game was 63-7) despite the tragic death of its starting quarterback on the field earlier this season.
Reggie Garrett's death could have derailed that season, and no one would have thought less of that team for not playing up to expectations. But, after dropping a pair of games, WO-S has been very good. It's too soon to speculate on how deep of a playoff run they could make, but they certainly have plenty of motivation.
Here are some notes from other big games in the area:
One of the few 10-0 teams heading into the Class 4A playoffs, the Brenham Cubs were bounced by Kingwood Park this weekend. That's the same Brenham team that made the state quarterfinals a year ago.
Hightower beat a good Clear Springs team in overtime, despite going for two after the overtime touchdown and being stopped short.
Manvel won its first-ever playoff game, beating Terry this weekend.The story doesn't mention it, but the headline on the linking page from the Chron does. Kind of a big deal, no? I'd probably downplay it too...
La Marque also beat the No. 2 team in Class 4A in El Campo, scoring in the last minute to grab a 28-21 victory. La Marque used to be a powerhouse back in the day, but has fallen a bit in recent years.
Cinco Ranch bounced back from that rough loss to Katy, beating Lamar 27-23. There are apparently no easy games from here on out in the Class 5A, Division I playoffs. District winner Katy beat up on Bellaire 41-6. Sorry, Rivers.
Finally, those dirty evil-doers over at Klein Oak knocked out The Woodlands 31-14. I wasn't at the game and I haven't seen it mentioned anywhere else, but I bet there was some sort of cheating involved. I'm going to look into it and see if I can't get those brave Highlanders back into the playoffs...


Sean Penn has been named as a defendant in a new car crash lawsuit.
According to court documents obtained by The Blast, the alleged accident took place in West Hollywood in April 2017.
It is unclear if Penn was in the vehicle at the time of the crash, or if he simply owned the car.
The plaintiff claims she lost wages and incurred hospital and medical expenses as a result of the accident and she is suing Penn for property damage and a loss of earning capacity, seeking $25,000 in damages.


Hangs on appetizing images, hesitate, postpone?! I must simply phone and spend an unforgettable time .
On our resource only shocking prostitutes: wonderful and gorgeous beauties, sensitive juicy girls and experienced skank.


Italy's forte extend beyond its galleries, plates and wardrobes. The country is one of Mother Nature's masterpieces, its geography offering extraordinary natural diversity. From the north's icy Alps and glacial lakes to the south's volcanic craters and turquoise grottoes, this is a place for doing as well as seeing. Its capital, Rome, is home to the Vatican as well as landmark art and ancient ruins. Other major cities include Florence, with Renaissance treasures such as Michelangelo's "David" and its leather and paper artisans; Venice, the sinking city of canals and most the popular attraction is the gondola ride, and Milan, Italy's fashion capital.
Private Transfers: Rome Airport to Hotel & Venice hotel to Airport.


The Rickshaw Run starts in Bangalore and ends in Jaisalmer approximately two weeks later, give or take. Where we go in between is TBD. The Adventurists provide no guidance on route, and no checkpoints or support along the way, so it's totally up to us where we go in India.
Along the way, we will plot out our where we give out rubber duckies. Kind of like a breadcrumb trail. By far the best way of keeping track of our route across a foreign subcontinent.


text:
Catalog start Subject "Fiction." Remove constraint Subject: "Fiction." Call number LC Classification|S - Agriculture (General)|SH - Aquaculture, Fisheries, Angling Remove constraint Call number: LC Classification|S - Agriculture (General)|SH - Aquaculture, Fisheries, Angling
Bengali1
Hindi1
Marathi1
Tamil1
Day, Frank Parker2
Patwardhan, Anand1
SH - Aquaculture, Fisheries, Angling 3 [remove]
Fishers3
BIOGRAPHY & AUTOBIOGRAPHY2
Day, Frank Porter, 1881-19502
Pêcheurs2
SPORTS & RECREATION2
Aquaculture1
Economic development1
Fishery processing ships1
Fiction films1
Nouvelle-Écosse2
Nova Scotia2
South Asia1
First Run/Icarus Films1
1. The autobiography of a fisherman [1927]
Day, Frank Parker.
Toronto ; Buffalo, N.Y. : University of Toronto Press, ©2005.
Book — 1 online resource (202 pages)
My First Trout
Mountain Brooks and Lakes
New Waters and a Comrade
I Become a Fly Fisherman
Swallow Pool
Along Great Rivers
A Lost Comrade
Boni's Meadow
Brazil Lake Brook
Dean's Brook
Donald.
"In 1927, Frank Parker Day wrote his autobiographical reflections on fishing, family, and, more broadly, humanity's place in the natural world. The Autobiography of a Fisherman is a memoir, providing insight into a society where people were struggling to survive in a depressed economy, contending with the social pressures of local village life, and responding in one way or the other to the pull of the big city." "Day details his early introduction to fishing, which became a life-long passion, at once a 'gentle art' and a 'disease.' Studying at Oxford University on a Rhodes Scholarship, Day found his fervour for fishing was shared by many, but while at the University of Berlin studying Beowulf, he lamented that he 'did no trout fishing.'" "Eventually, Day returned to Canada and was hired as an English professor at the University of New Brunswick, knowing it to be 'the centre of a well-watered district.' The reader sees him through his last fishing experience with his father before his father dies, as well as through the First World War during which time he 'never wet a line, ' and beyond, as he married, built a family, and continued to fish. Day's reflections suggest the restorative powers of the environment and should appeal even to those readers who have never thought to sit quietly by the side of a stream, line in hand, waiting."--Jacket.
EBSCO University Press
3. Fishing in the sea of greed [videorecording] [1998]
Brooklyn, NY : First Run/Icarus Films, [2006?]
Video — 1 videodisc (45 min.) : sd., col. ; 4 3/4 in.
Documents the response of traditional fishing communities and rice farmers to the threat of displacement by overfishing and pollution resulting from industrial fishing practices such as use of gigantic factory ships.