text:
/*
 * cbc.cpp
 *
 * Author: C. Rathgeb (crathgeb@cosy.sbg.ac.at), P. Wild (pwild@cosy.sbg.ac.at)
 *
 * Calculates distance of iris codes generated by the context-based algorithm
 *
 */
#include <cstdio>
#include <map>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <fstream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <boost/regex.hpp>
#include <boost/filesystem.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

using namespace std;
using namespace cv;

/* xy-dimension of the analysed texture cells */
#define CB_WIDTH  8
#define CB_HEIGHT 2

/* number of different grayscale values */
#define CB_VALUES 256

/* number of resulting grayscale values */
#define CB_FILTER 3

/* neighboring cells to be taken into account: default setting */
#define CB_UL 1 // upper left
#define CB_U  0 // upper
#define CB_UR 1 // upper right
#define CB_L  0 // left
#define CB_R  0 // right
#define CB_BL 1 // bottom left
#define CB_B  0 // bottom
#define CB_BR 1 // bottom right

#define CB_UU 1 // 2x upper
#define CB_LL 1 // 2x left
#define CB_RR 1 // 2x right
#define CB_BB 1 // 2x bottom

/** no globbing in win32 mode **/
int _CRT_glob = 0;

/** Program modes **/
static const int MODE_MAIN = 1, MODE_HELP = 2;

/*
 * Print command line usage for this program
 */
void printUsage() {
	printf("+-----------------------------------------------------------------------------+\n");
	printf("| cbc - calculates distance of iris codes generated by the context-based      |\n");
	printf("|       algorithm (this algorithm does NOT consider masking bits)             |\n");
	printf("|                                                                             |\n");
	printf("| MODES                                                                       |\n");
	printf("|                                                                             |\n");
	printf("| (# 1) distance calculation of the input images (cross comparison)           |\n");
	printf("| (# 2) usage                                                                 |\n");
	printf("|                                                                             |\n");
	printf("| ARGUMENTS                                                                   |\n");
	printf("|                                                                             |\n");
	printf("+------+------------+---+---+-------------------------------------------------+\n");
	printf("| Name | Parameters | # | ? | Description                                     |\n");
	printf("+------+------------+---+---+-------------------------------------------------+\n");
	printf("| -i   | infile1    | 1 | N | source/reference iris codes (use * as wildcard, |\n");
	printf("|      | infile2    |   |   | all other files may refer to n-th * with ?n)    |\n");
	printf("| -o   | outfile    | 1 | Y | target text                                     |\n");
	printf("| -q   |            | 1 | Y | quiet mode on (off)                             |\n");
	printf("| -t   |            | 1 | Y | time progress on (off)                          |\n");
	printf("| -h   |            | 2 | N | prints usage                                    |\n");
	printf("+------+------------+---+---+-------------------------------------------------+\n");
	printf("|                                                                             |\n");
	printf("| EXAMPLE USAGE                                                               |\n");
	printf("|                                                                             |\n");
	printf("| -i s1.png s2.png -o compare.txt                                             |\n");
	printf("| -i *.png *.png -s -o compare.txt -q -t                                      |\n");
	printf("|                                                                             |\n");
	printf("| AUTHOR                                                                      |\n");
	printf("|                                                                             |\n");
	printf("| Christian Rathgeb (crathgeb@cosy.sbg.ac.at)                                 |\n");
	printf("| Peter Wild (pwild@cosy.sbg.ac.at)                                           |\n");
	printf("|                                                                             |\n");
	printf("| COPYRIGHT                                                                   |\n");
	printf("|                                                                             |\n");
	printf("| (C) 2012 All rights reserved. Do not distribute without written permission. |\n");
	printf("+-----------------------------------------------------------------------------+\n");
}

/**
 * Distance estimation for the context based algorithm
 * a: sample iris code
 * b: reference iris code
 * codelength8: length of iris-code in bytes
 */
double cbdist(const Mat a, const Mat b, const unsigned int codelength8){

	unsigned int i, x, y, neighbors, cnt;
	double result;
	int *match;
	uchar *bcode1, *bcode2, *code_1, *code_2;
	unsigned int curr_1, curr_2;

	MatConstIterator_<uchar> pa = a.begin<uchar>();
	MatConstIterator_<uchar> pb = b.begin<uchar>();
	MatConstIterator_<uchar> enda = pa + codelength8;
	int j=0;

	match = (int *)malloc(8*codelength8/2 * sizeof(int));
	bcode1 = (uchar*)malloc(8*codelength8* sizeof(uchar));
	bcode2 = (uchar*)malloc(8*codelength8* sizeof(uchar));
	code_1 = (uchar*)malloc(8*codelength8/2* sizeof(uchar));
	code_2 = (uchar*)malloc(8*codelength8/2* sizeof(uchar));

	x = 512;
	y = 64;
	/*
	 * obtain an an binary representation of iris-code
	 */
	for (;pa<enda; pa++, pb++){
	      curr_1 = *pa;
	      curr_2 = *pb;
	      for (int i = 0; i<8; i++)
	      {
		  bcode1[j*8 + 7 - i] = curr_1 % 2;
		  bcode2[j*8 + 7 - i] = curr_2 % 2;
		  curr_1 /= 2;
		  curr_2 /= 2;
	      }
	      j++;
	}

	/* re-map the code */
	for (i = 0; i<8*codelength8/2; i++)
	{
            if(bcode1[2 * i] == 0 && bcode1[2 * i + 1] == 0)
            {
                code_1[i] = 0;
            }
            if(bcode2[2 * i] == 0 && bcode2[2 * i + 1] == 0)
            {
                code_2[i] = 0;
            }
            if(bcode1[2 * i] == 0 && bcode1[2 * i + 1] == 1)
            {
                code_1[i] = 1;
            }
            if(bcode2[2 * i] == 0 && bcode2[2 * i + 1] == 1)
            {
                code_2[i] = 1;
            }
            if(bcode1[2 * i] == 1 && bcode1[2 * i + 1] == 1)
            {
                code_1[i] = 2;
            }
            if(bcode2[2 * i] == 1 && bcode2[2 * i + 1] == 1)
            {
                code_2[i] = 2;
            }
            if(bcode1[2 * i] == 1 && bcode1[2 * i + 1] == 0)
            {
                code_1[i] = 3;
            }
            if(bcode2[2 * i] == 1 && bcode2[2 * i + 1] == 0)
            {
                code_2[i] = 3;
            }
	}

	cnt=0;
	for (i=0; i<((x / CB_WIDTH) * (y / CB_HEIGHT)); i++)
	{
            if (code_2[i] == CB_FILTER || code_1[i] == CB_FILTER)
            {
                match[i] = 0;
                cnt++;
            }
            else if (code_1[i] != code_2[i])
            {
                match[i] = -1;
            }
            else
            {
                match[i] = 1;
            }
	}
	/* calculate the number of neighbors */
	for (i =2 * (x / CB_WIDTH) + 2; i < ((x / CB_WIDTH) * (y / CB_HEIGHT)) - 2 * ((x / CB_WIDTH) + 2); i++)
	{
            if (match[i] == 1)
            {
                if (CB_UL && match[i - ( x / CB_WIDTH) - 1] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i - (x / CB_WIDTH) - 1])
		    {
			match[i]++;
		    }
                }
                if (CB_U && match[i - (x / CB_WIDTH)] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i - (x / CB_WIDTH)])
		    {
			match[i]++;
		    }
                }
                if (CB_UR && match[i-(x / CB_WIDTH) + 1] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i-(x / CB_WIDTH) + 1])
		    {
			match[i]++;
		    }
                }
                if (CB_L && match[i - 1] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i - 1])
		    {
			match[i]++;
		    }
                }
                if (CB_R && match[i + 1] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i + 1])
		    {
			match[i]++;
		    }
                }
                if (CB_BL && match[i + (x / CB_WIDTH) - 1] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i + (x / CB_WIDTH) - 1])
		    {
			match[i]++;
		    }
                }
                if (CB_B && match[i + (x / CB_WIDTH)] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i + (x / CB_WIDTH)])
		    {
			match[i]++;
		    }
                }
                if (CB_BR && match[i + (x / CB_WIDTH)+1] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i + (x / CB_WIDTH)+1])
		    {
			match[i]++;
		    }
                }
                if (CB_UU && match[i - 2 * (x / CB_WIDTH)] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i - 2 * (x / CB_WIDTH)])
		    {
			match[i]++;
		    }
                }
                if (CB_BB && match[i + 2 * (x / CB_WIDTH)] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i + 2 * (x / CB_WIDTH)])
		    {
			match[i]++;
		    }
                }
                if (CB_LL && match[i-2] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i - 2])
		    {
			match[i]++;
		    }
                }
                if (CB_RR && match[i + 2] >= 0)
                {
                    match[i]++;
                    if (code_1[i] != code_1[i + 2])
		    {
			match[i]++;
		    }
                }
            }
	}
	/* calculate the number of neighbors */
	for (i =2 * (x / CB_WIDTH) + 2; i < ((x / CB_WIDTH) * (y/CB_HEIGHT)) - 2 * ((x / CB_WIDTH) + 2); i++)
	{
            if (match[i] == -1)
            {
                if (match[i - (x / CB_WIDTH)] < 0)
                {
                    match[i] -= abs(abs(code_1[i - (x / CB_WIDTH)]) - abs(code_2[i - (x / CB_WIDTH)]));
                    if (code_1[i] == code_1[i - (x / CB_WIDTH)])
		    {
			match[i]--;
		    }
                }
                if (match[i - 1] < 0)
                {
                    match[i] -= abs(abs(code_1[i - 1]) - abs(code_2[i - 1]));
                    if (code_1[i] == code_1[i - 1])
		    {
			match[i]--;
		    }
                }
                if (match[i + 1] < 0)
                {
                    match[i] -= abs(abs(code_1[i + 1]) - abs(code_2[i + 1]));
                    if (code_1[i] == code_1[i + 1])
		    {
			match[i]--;
		    }
                }
                if (match[i+(x / CB_WIDTH)] < 0)
                {
                    match[i] -= abs(abs(code_1[i + (x / CB_WIDTH)])-abs(code_2[i + (x / CB_WIDTH)]));
                    if (code_1[i] == code_1[i + (x / CB_WIDTH)])
		    {
			match[i]--;
		    }
                }
            }
	}
	result = 0;
	for (i=0; i < ((x / CB_WIDTH) * (y/CB_HEIGHT)); i++)
	{
            if (match[i] == 0)
            {

            }
            else if (match[i] < 0)
            {
                result -= pow(2.0, abs(match[i]));
            }
            else
            {
                result += pow(2.0, match[i] + 1);
            }
	}
	neighbors = CB_UL + CB_U + CB_UR + CB_L + CB_R + CB_BL + CB_B + CB_BR + CB_BB + CB_UU + CB_RR + CB_LL + 1;
	//printf("neighbors: %d cnt: %d\n", neighbors, cnt);
	result/= (((x / CB_WIDTH) *(y / CB_HEIGHT) - 2 - cnt)  * pow(2.0, neighbors+2));
	return 1.0/result;
}

/** ------------------------------- commandline functions ------------------------------- **/

/**
 * Parses a command line
 * This routine should be called for parsing command lines for executables.
 * Note, that all options require '-' as prefix and may contain an arbitrary
 * number of optional arguments.
 *
 * cmd: commandline representation
 * argc: number of parameters
 * argv: string array of argument values
 */
void cmdRead(map<string ,vector<string> >& cmd, int argc, char *argv[]){
	for (int i=1; i< argc; i++){
		char * argument = argv[i];
		if (strlen(argument) > 1 && argument[0] == '-' && (argument[1] < '0' || argument[1] > '9')){
			cmd[argument]; // insert
			char * argument2;
			while (i + 1 < argc && (strlen(argument2 = argv[i+1]) <= 1 || argument2[0] != '-'  || (argument2[1] >= '0' && argument2[1] <= '9'))){
				cmd[argument].push_back(argument2);
				i++;
			}
		}
		else {
			CV_Error(CV_StsBadArg,"Invalid command line format");
		}
	}
}

/**
 * Checks, if each command line option is valid, i.e. exists in the options array
 *
 * cmd: commandline representation
 * validOptions: list of valid options separated by pipe (i.e. |) character
 */
void cmdCheckOpts(map<string ,vector<string> >& cmd, const string validOptions){
	vector<string> tokens;
	const string delimiters = "|";
	string::size_type lastPos = validOptions.find_first_not_of(delimiters,0); // skip delimiters at beginning
	string::size_type pos = validOptions.find_first_of(delimiters, lastPos); // find first non-delimiter
	while (string::npos != pos || string::npos != lastPos){
		tokens.push_back(validOptions.substr(lastPos,pos - lastPos)); // add found token to vector
		lastPos = validOptions.find_first_not_of(delimiters,pos); // skip delimiters
		pos = validOptions.find_first_of(delimiters,lastPos); // find next non-delimiter
	}
	sort(tokens.begin(), tokens.end());
	for (map<string, vector<string> >::iterator it = cmd.begin(); it != cmd.end(); it++){
		if (!binary_search(tokens.begin(),tokens.end(),it->first)){
			CV_Error(CV_StsBadArg,"Command line parameter '" + it->first + "' not allowed.");
			tokens.clear();
			return;
		}
	}
	tokens.clear();
}

/*
 * Checks, if a specific required option exists in the command line
 *
 * cmd: commandline representation
 * option: option name
 */
void cmdCheckOptExists(map<string ,vector<string> >& cmd, const string option){
	map<string, vector<string> >::iterator it = cmd.find(option);
	if (it == cmd.end()) CV_Error(CV_StsBadArg,"Command line parameter '" + option + "' is required, but does not exist.");
}

/*
 * Checks, if a specific option has the appropriate number of parameters
 *
 * cmd: commandline representation
 * option: option name
 * size: appropriate number of parameters for the option
 */
void cmdCheckOptSize(map<string ,vector<string> >& cmd, const string option, const unsigned int size = 1){
	map<string, vector<string> >::iterator it = cmd.find(option);
	if (it->second.size() != size) CV_Error(CV_StsBadArg,"Command line parameter '" + option + "' has unexpected size.");
}

/*
 * Checks, if a specific option has the appropriate number of parameters
 *
 * cmd: commandline representation
 * option: option name
 * min: minimum appropriate number of parameters for the option
 * max: maximum appropriate number of parameters for the option
 */
void cmdCheckOptRange(map<string ,vector<string> >& cmd, string option, unsigned int min = 0, unsigned int max = 1){
	map<string, vector<string> >::iterator it = cmd.find(option);
	unsigned int size = it->second.size();
	if (size < min || size > max) CV_Error(CV_StsBadArg,"Command line parameter '" + option + "' is out of range.");
}

/*
 * Returns the list of parameters for a given option
 *
 * cmd: commandline representation
 * option: name of the option
 */
vector<string> * cmdGetOpt(map<string ,vector<string> >& cmd, const string option){
	map<string, vector<string> >::iterator it = cmd.find(option);
	return (it != cmd.end()) ? &(it->second) : 0;
}

/*
 * Returns number of parameters in an option
 *
 * cmd: commandline representation
 * option: name of the option
 */
unsigned int cmdSizePars(map<string ,vector<string> >& cmd, const string option){
	map<string, vector<string> >::iterator it = cmd.find(option);
	return (it != cmd.end()) ? it->second.size() : 0;
}

/*
 * Returns a specific parameter type (int) given an option and parameter index
 *
 * cmd: commandline representation
 * option: name of option
 * param: name of parameter
 */
int cmdGetParInt(map<string ,vector<string> >& cmd, string option, unsigned int param = 0){
	map<string, vector<string> >::iterator it = cmd.find(option);
	if (it != cmd.end()) {
		if (param < it->second.size()) {
			return atoi(it->second[param].c_str());
		}
	}
	return 0;
}

/*
 * Returns a specific parameter type (float) given an option and parameter index
 *
 * cmd: commandline representation
 * option: name of option
 * param: name of parameter
 */
float cmdGetParFloat(map<string ,vector<string> >& cmd, const string option, const unsigned int param = 0){
	map<string, vector<string> >::iterator it = cmd.find(option);
	if (it != cmd.end()) {
		if (param < it->second.size()) {
			return atof(it->second[param].c_str());
		}
	}
	return 0;
}

/*
 * Returns a specific parameter type (string) given an option and parameter index
 *
 * cmd: commandline representation
 * option: name of option
 * param: name of parameter
 */
string cmdGetPar(map<string ,vector<string> >& cmd, const string option, const unsigned int param = 0){
	map<string, vector<string> >::iterator it = cmd.find(option);
	if (it != cmd.end()) {
		if (param < it->second.size()) {
			return it->second[param];
		}
	}
	return 0;
}

/** ------------------------------- timing functions ------------------------------- **/

/**
 * Class for handling timing progress information
 */
class Timing{
public:
	/** integer indicating progress with respect tot total **/
	int progress;
	/** total count for progress **/
	int total;

	/*
	 * Default constructor for timing initializing time.
	 * Automatically calls init()
	 *
	 * seconds: update interval in seconds
	 * eraseMode: if true, outputs sends erase characters at each print command
	 */
	Timing(long seconds, bool eraseMode){
		updateInterval = seconds;
		progress = 1;
		total = 100;
		eraseCount=0;
		erase = eraseMode;
		init();
	}

	/*
	 * Destructor
	 */
	~Timing(){}

	/*
	 * Initializes timing variables
	 */
	void init(void){
		start = boost::posix_time::microsec_clock::universal_time();
		lastPrint = start - boost::posix_time::seconds(updateInterval);
	}

	/*
	 * Clears printing (for erase option only)
	 */
	void clear(void){
		string erase(eraseCount,'\r');
		erase.append(eraseCount,' ');
		erase.append(eraseCount,'\r');
		printf("%s",erase.c_str());
		eraseCount = 0;
	}

	/*
	 * Updates current time and returns true, if output should be printed
	 */
	bool update(void){
		current = boost::posix_time::microsec_clock::universal_time();
		return ((current - lastPrint > boost::posix_time::seconds(updateInterval)) || (progress == total));
	}

	/*
	 * Prints timing object to STDOUT
	 */
	void print(void){
		lastPrint = current;
		float percent = 100.f * progress / total;
		boost::posix_time::time_duration passed = (current - start);
		boost::posix_time::time_duration togo = passed * (total - progress) / max(1,progress);
		if (erase) {
			string erase(eraseCount,'\r');
			printf("%s",erase.c_str());
			int newEraseCount = (progress != total) ? printf("Progress ... %3.2f%% (%i/%i Total %i:%02i:%02i.%03i Remaining ca. %i:%02i:%02i.%03i)",percent,progress,total,passed.hours(),passed.minutes(),passed.seconds(),(int)(passed.total_milliseconds()%1000),togo.hours(),togo.minutes(),togo.seconds(),(int)(togo.total_milliseconds() % 1000)) : printf("Progress ... %3.2f%% (%i/%i Total %i:%02i:%02i.%03d)",percent,progress,total,passed.hours(),passed.minutes(),passed.seconds(),(int)(passed.total_milliseconds()%1000));
			if (newEraseCount < eraseCount) {
				string erase(newEraseCount-eraseCount,' ');
				erase.append(newEraseCount-eraseCount,'\r');
				printf("%s",erase.c_str());
			}
			eraseCount = newEraseCount;
		}
		else {
			eraseCount = (progress != total) ? printf("Progress ... %3.2f%% (%i/%i Total %i:%02i:%02i.%03i Remaining ca. %i:%02i:%02i.%03i)\n",percent,progress,total,passed.hours(),passed.minutes(),passed.seconds(),(int)(passed.total_milliseconds()%1000),togo.hours(),togo.minutes(),togo.seconds(),(int)(togo.total_milliseconds() % 1000)) : printf("Progress ... %3.2f%% (%i/%i Total %i:%02i:%02i.%03d)\n",percent,progress,total,passed.hours(),passed.minutes(),passed.seconds(),(int)(passed.total_milliseconds()%1000));
		}
	}
private:
	long updateInterval;
	boost::posix_time::ptime start;
	boost::posix_time::ptime current;
	boost::posix_time::ptime lastPrint;
	int eraseCount;
	bool erase;
};

/** ------------------------------- file pattern matching functions ------------------------------- **/

/*
 * Formats a given string, such that it can be used as a regular expression
 * I.e. escapes special characters and uses * and ? as wildcards
 *
 * pattern: regular expression path pattern
 * pos: substring starting index
 * n: substring size
 *
 * returning: escaped substring
 */
string patternSubstrRegex(string& pattern, size_t pos, size_t n){
	string result;
	for (size_t i=pos, e=pos+n; i < e; i++ ) {
		char c = pattern[i];
		if ( c == '\\' || c == '.' || c == '+' || c == '[' || c == '{' || c == '|' || c == '(' || c == ')' || c == '^' || c == '$' || c == '}' || c == ']') {
			result.append(1,'\\');
			result.append(1,c);
		}
		else if (c == '*'){
			result.append("([^/\\\\]*)");
		}
		else if (c == '?'){
			result.append("([^/\\\\])");
		}
		else {
			result.append(1,c);
		}
	}
	return result;
}

/*
 * Converts a regular expression path pattern into a list of files matching with this pattern by replacing wildcards
 * starting in position pos assuming that all prior wildcards have been resolved yielding intermediate directory path.
 * I.e. this function appends the files in the specified path according to yet unresolved pattern by recursive calling.
 *
 * pattern: regular expression path pattern
 * files: the list to which new files can be applied
 * pos: an index such that positions 0...pos-1 of pattern are already considered/matched yielding path
 * path: the current directory (or empty)
 */
void patternToFiles(string& pattern, vector<string>& files, const size_t& pos, const string& path){
	size_t first_unknown = pattern.find_first_of("*?",pos); // find unknown * in pattern
	if (first_unknown != string::npos){
		size_t last_dirpath = pattern.find_last_of("/\\",first_unknown);
		size_t next_dirpath = pattern.find_first_of("/\\",first_unknown);
		if (next_dirpath != string::npos){
			boost::regex expr((last_dirpath != string::npos && last_dirpath > pos) ? patternSubstrRegex(pattern,last_dirpath+1,next_dirpath-last_dirpath-1) : patternSubstrRegex(pattern,pos,next_dirpath-pos));
			boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end
			try {
				for ( boost::filesystem::directory_iterator itr( ((path.length() > 0) ? path + pattern[pos-1] : (last_dirpath != string::npos && last_dirpath > pos) ? "" : "./") + ((last_dirpath != string::npos && last_dirpath > pos) ? pattern.substr(pos,last_dirpath-pos) : "")); itr != end_itr; ++itr )
				{
					if (boost::filesystem::is_directory(itr->path())){
						boost::filesystem::path p = itr->path().filename();
						string s =  p.string();
						if (boost::regex_match(s.c_str(), expr)){
							patternToFiles(pattern,files,(int)(next_dirpath+1),((path.length() > 0) ? path + pattern[pos-1] : "") + ((last_dirpath != string::npos && last_dirpath > pos) ? pattern.substr(pos,last_dirpath-pos) + pattern[last_dirpath] : "") + s);
						}
					}
				}
			}
			catch (boost::filesystem::filesystem_error &e){}
		}
		else {
			boost::regex expr((last_dirpath != string::npos && last_dirpath > pos) ? patternSubstrRegex(pattern,last_dirpath+1,pattern.length()-last_dirpath-1) : patternSubstrRegex(pattern,pos,pattern.length()-pos));
			boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end
			try {
				for ( boost::filesystem::directory_iterator itr(((path.length() > 0) ? path +  pattern[pos-1] : (last_dirpath != string::npos && last_dirpath > pos) ? "" : "./") + ((last_dirpath != string::npos && last_dirpath > pos) ? pattern.substr(pos,last_dirpath-pos) : "")); itr != end_itr; ++itr )
				{
					boost::filesystem::path p = itr->path().filename();
					string s =  p.string();
					if (boost::regex_match(s.c_str(), expr)){
						files.push_back(((path.length() > 0) ? path + pattern[pos-1] : "") + ((last_dirpath != string::npos && last_dirpath > pos) ? pattern.substr(pos,last_dirpath-pos) + pattern[last_dirpath] : "") + s);
					}
				}
			}
			catch (boost::filesystem::filesystem_error &e){}
		}
	}
	else { // no unknown symbols
		boost::filesystem::path file(((path.length() > 0) ? path + "/" : "") + pattern.substr(pos,pattern.length()-pos));
		if (boost::filesystem::exists(file)){
			files.push_back(file.string());
		}
	}
}

/**
 * Converts a regular expression path pattern into a list of files matching with this pattern
 *
 * pattern: regular expression path pattern
 * files: the list to which new files can be applied
 */
void patternToFiles(string& pattern, vector<string>& files){
	patternToFiles(pattern,files,0,"");
}

/*
 * Renames a given filename corresponding to the actual file pattern using a renaming pattern.
 * Wildcards can be referred to as ?1, ?2, ... in the order they appeared in the file pattern.
 *
 * pattern: regular expression path pattern
 * renamePattern: renaming pattern using ?1, ?2, ... as placeholders for wildcards
 * infile: path of the file (matching with pattern) to be renamed
 * outfile: path of the renamed file
 * par: used parameter (default: '?')
 */
void patternFileRename(string& pattern, const string& renamePattern, const string& infile, string& outfile, const char par = '?'){
	size_t first_unknown = renamePattern.find_first_of(par,0); // find unknown ? in renamePattern
	if (first_unknown != string::npos){
		string formatOut = "";
		for (size_t i=0, e=renamePattern.length(); i < e; i++ ) {
			char c = renamePattern[i];
			if ( c == par && i+1 < e) {
				c = renamePattern[i+1];
				if (c > '0' && c <= '9'){
					formatOut.append(1,'$');
					formatOut.append(1,c);
				}
				else {
					formatOut.append(1,par);
					formatOut.append(1,c);
				}
				i++;
			}
			else {
				formatOut.append(1,c);
			}
		}
		boost::regex patternOut(patternSubstrRegex(pattern,0,pattern.length()));
		outfile = boost::regex_replace(infile,patternOut,formatOut,boost::match_default | boost::format_perl);
	} else {
		outfile = renamePattern;
	}
}

/** ------------------------------- Program ------------------------------- **/

/*
 * Main program
 */
int main(int argc, char *argv[])
{
	int mode = MODE_HELP;
	map<string,vector<string> > cmd;
	try {
		cmdRead(cmd,argc,argv);
		if (cmd.size() == 0 || cmdGetOpt(cmd,"-h") != 0) mode = MODE_HELP;
		else mode = MODE_MAIN;
		if (mode == MODE_MAIN){
			// validate command line
			cmdCheckOpts(cmd,"-i|-o|-q|-t");
			cmdCheckOptExists(cmd,"-i");
			cmdCheckOptSize(cmd,"-i",2);
			string infilesSmpl = cmdGetPar(cmd,"-i",0);
			string infilesRef = cmdGetPar(cmd,"-i",1);
			string outfile;
			if (cmdGetOpt(cmd,"-o") != 0){
				cmdCheckOptSize(cmd,"-o",1);
				outfile = cmdGetPar(cmd,"-o");
			}
			bool quiet = false;
			if (cmdGetOpt(cmd,"-q") != 0){
				cmdCheckOptSize(cmd,"-q",0);
				quiet = true;
			}
			bool time = false;
			if (cmdGetOpt(cmd,"-t") != 0){
				cmdCheckOptSize(cmd,"-t",0);
				time = true;
			}
			// starting routine
			Timing timing(1,quiet);
			vector<string> filesSmpl;
			patternToFiles(infilesSmpl,filesSmpl);
			vector<string> filesRef;
			patternToFiles(infilesRef,filesRef);
			CV_Assert(filesSmpl.size() > 0);
			CV_Assert(filesRef.size() > 0);
			timing.total = filesSmpl.size() * filesRef.size();
			ofstream cfile;
			if (!outfile.empty()){
				if (!quiet) printf("Opening result file '%s' ...\n", outfile.c_str());;
				cfile.open(outfile.c_str(),ios::out | ios::trunc);
				if (!(cfile.is_open())) {
					CV_Error(CV_StsError,"Could not open result file '" + outfile + "'");
				}
			}
			for (vector<string>::iterator infileSmpl = filesSmpl.begin(); infileSmpl != filesSmpl.end(); ++infileSmpl){
				vector<Mat> imgSmpl;
				vector<Mat> maskSmpl;
				Mat img = imread(*infileSmpl, CV_LOAD_IMAGE_UNCHANGED);
				CV_Assert(img.data != 0);
				CV_Assert(img.type() == CV_8UC1);
				imgSmpl.push_back(img);
				Size codeSize = imgSmpl[0].size();
				unsigned int codeLength = codeSize.height * codeSize.width;
				CV_Assert(codeLength % sizeof(int) == 0);
				for (vector<string>::iterator infileRef = filesRef.begin(); infileRef != filesRef.end(); ++infileRef, timing.progress++){
					Mat imgRef = imread(*infileRef, CV_LOAD_IMAGE_UNCHANGED);
					CV_Assert(imgRef.data != 0);
					CV_Assert(imgRef.type() == CV_8UC1);
					CV_Assert(imgRef.size() == codeSize);
					Mat maskRef;
					maskRef = Mat();
					double score = cbdist(imgSmpl[0],imgRef,codeLength);
					if (!quiet) printf("dist(%s,%s) = %f\n",(*infileSmpl).c_str(), (*infileRef).c_str(), score);
					if (!outfile.empty() && cfile.is_open()){
						cfile << *infileSmpl << " " << *infileRef << " " << score << endl;
					}
					if (time && timing.update()) timing.print();
				}
			}
			if (time && quiet) timing.clear();
			if (!outfile.empty() && cfile.is_open()){
				cfile.close();
			}
    	}
    	else if (mode == MODE_HELP){
			// validate command line
			cmdCheckOpts(cmd,"-h");
			if (cmdGetOpt(cmd,"-h") != 0) cmdCheckOptSize(cmd,"-h",0);
			// starting routine
			printUsage();
    	}
    }
	catch (...){
	   	printf("Exit with errors.\n");
	   	exit(EXIT_FAILURE);
	}
    return EXIT_SUCCESS;
}

redpajama_set_name: RedPajamaGithub


text:
Diversity Over Quality
Mayor de Blasio is fighting to reduce Asian representation in New York City's elite schools.
Dennis Saffran
At a state senate forum earlier this month on Mayor Bill de Blasio's plan to end the admissions test for New York City's top high schools, an African-American woman went on a harangue about how Asian-Americans come from "a culture that has no problem with cheating." Waving a sheaf of "documentation," McCarthy-style, she railed against "some of the newer immigrants who have come here . . . with that cultural milieu of cheating." She was not interrupted or challenged by any of the legislators.
But when a 12-year-old, Asian-American middle school girl spoke in favor of retaining the test—asking "If I work hard, shouldn't I have a higher advantage than those who . . . are just being lazy"—the senators were alert to potentially racially insensitive language. "Be very careful how you prepare them for this argument," Senator Velmanette Montgomery of Brooklyn admonished Asian parents in the audience after the girl testified—taking the word "lazy" as a reference to blacks, though the girl had said nothing about race. "It is your responsibility and . . . obligation that . . . those children do not internalize those racist attitudes."
These anecdotes tell you a lot about the progressive war on New York's selective "specialized high schools" (Stuyvesant, Bronx Science, Brooklyn Tech, and five others), now dominated by Asian-American students from largely poor and working-class immigrant backgrounds. It's a war being fought on two fronts, and both involve attacks on Asian-Americans that would be unimaginable against any other minority group.
The main action is in the state legislature, where the Democratic takeover of the senate last fall gives the Left its best chance to get rid of the 48-year-old state law that requires a competitive exam as the sole criterion for admission to the selective high schools. De Blasio and his schools chancellor Richard Carranza are pushing an alternative scheme that would cut Asian enrollment in half.
The other skirmish, in the courts, concerns the one exception to the current test requirement: a remedial-admissions program for disadvantaged students, which de Blasio and Carranza are vastly expanding by executive fiat, while manipulating the admissions criteria so that many poor Asian kids no longer qualify.
The bill backed by the mayor and liberal lawmakers would repeal the 1971 Hecht-Calandra Act, which provides that admission "shall be solely and exclusively by taking a competitive, objective and scholastic achievement examination," though the test requirement actually dates to the 1920s. The de Blasio proposal would phase out the test over three years, replacing it with guaranteed admission for students in the top 5 percent to 7 percent of their eighth-grade classes (provided they were also in the top quarter of eighth-grade students citywide). This cohort would not be determined by grades, but by "multiple measures of student achievement," determined by the chancellor. And while these "multiple measures" would include grades, as well as scores on standardized state tests, the chancellor exclusively would determine "the weight of each such measure."
Even if the class rankings were confined to grades and standardized test scores, the changes would have a dramatic impact on Asian enrollment—and on the academic quality of the student body. A study by the city's Independent Budget Office found that while the de Blasio plan would dramatically increase black and Hispanic enrollment in the specialized schools from 10 percent to 46 percent, it would cut Asian enrollment virtually in half, from 61 percent to 31 percent, while white enrollment would only drop from 24 percent to 20 percent. The same study also found that 10 percent of the students at these elite STEM schools—which have produced 14 Nobel Laureates—would not meet basic proficiency standards in math.
The smart money seems to be that the mayor's bill will not pass this session, despite the new Democratic majority in the senate. Grassroots opposition in the Asian community has led even some usually reliable liberals to abandon the measure. But one can't underestimate the power of "wokeness" on the left these days, and with the racial provocateur Carranza blasting Hecht-Calandra as "racist," Democrats might be pushed into repealing it in a frenzy of virtuous fervor.
Meantime, de Blasio and Carranza have moved to limit the test requirement administratively by significantly expanding and revamping a remedial-admissions program. Hecht-Calandra permitted the specialized schools to "maintain a discovery program" for "disadvantaged students" who "score[d] below the cut-off" on the exam. The law did not define "disadvantaged," or specify the size of the program, or just how far "below the cut-off" a student could be. Historically, the program has been restricted to about 4 percent of the seats in the schools, and regulations defined "disadvantaged" in terms of family circumstances. Moreover, each of the schools operated its own program, which was open to those scoring below its individual cut-off score. Thus, Discovery students had typically scored only a few points below their classmates.
Even before de Blasio's election, the Discovery program had become unworkable due to two actions taken by the administration of former mayor Michael Bloomberg. The city added five new specialized schools, which greatly increased the range of scores between the schools; and it applied the lowest cut-off score among the schools as the benchmark for all of them, for the purposes of the Discovery program. The result is that the program now sets Discovery students up for failure by leapfrogging them several levels above their competency, rather than nurturing them at the next-highest level. So Stuyvesant, with the highest cut-off, is required to accept students whose scores are significantly below the bottom of its class.
The new rules that de Blasio and Carranza are implementing will exacerbate this disparity, perhaps markedly, by expanding the program from roughly 4 percent of the specialized-school population to 13 percent this fall, and a full 20 percent next year. This will raise the cut-off scores for regular admission—due to the smaller number of slots available—and lower the threshold for Discovery admission, due to the larger number of slots.
Even more perniciously, in what appears to be an attempt to exclude poor Asian students, the new rules arbitrarily redefine "disadvantaged" so that poor children who attend schools in middle- or working-class neighborhoods no longer qualify. A new Economic Needs Index gauges Discovery eligibility criteria by community rather than by family poverty. A student living in a homeless shelter in a prosperous area would thus not count as disadvantaged for the purposes of the Discovery program. This new criterion will exclude students from 18 of 23 Asian-majority middle schools.
Asian parents and civic groups have challenged the new Discovery rules in federal court, citing as evidence of discriminatory intent both this racial impact and a statement by Carranza last year that "I just don't buy into the narrative that any one ethnic group owns admission to these schools." The district court denied a preliminary injunction, thus allowing the implementation of these changes, but the plaintiffs have appealed the ruling, hoping to block the program's full expansion, slated for next year.
In denying the injunction, the district judge attempted to explain the "context" of Carranza's statement. Again, the double standard is jarring. It's inconceivable that a New York City schools chancellor could make such a remark about any other racial minority group and keep his job, much less avoid a preliminary injunction in a racial discrimination case. Let's hope that the Second Circuit Court of Appeals, with several new Trump appointees, will recognize this.
Dennis Saffran, @dennisjsaffran, is a Queens-based appellate attorney and writer. He filed an amicus brief on behalf of parents' associations supporting the lawsuit against the new Discovery Program rules.
Photo: Afoot_A. Strakey/Flickr
It's Not Archie Bunker's District Anymore
Dennis Saffran Joseph Crowley's defeat reflects two demographic shifts in the outer boroughs.
No Piece of Cake
Dennis Saffran The Supreme Court's Masterpiece decision satisfies no one.
Massacre of the Innocents
Dennis Saffran New York's misguided family-reunification policies continue to have fatal consequences.
How to Guarantee Higher College Tuition Costs
Scott Yenor Like many public universities, Boise State illustrates how federal and state funding create incentives to spend more money—and pass the cost on to students.
Great Hearts, Great Minds
Max Eden An unusual charter school network, serving middle-class families, promotes a classical curriculum—and gets results.
Joseph Crowley's defeat reflects two demographic shifts in the outer boroughs. Dennis Saffran June 28, 2018	New York, Politics and law

redpajama_set_name: RedPajamaCommonCrawl


This dessert is one of those classic dishes from the 1980s. It seemed that at every church potluck, family gathering or other event, there was always at least one tray of no bake cherry cheesecake. One of my friend's mom used to make it all the time and I swear that there was always a tray of it in the fridge anytime I went to their house.
Please don't think I am complaining that this dessert seemed to be everywhere during my childhood. It is amazing and I seriously love it! But, sometime during the 90s, it seemed that everyone transitioned to making baked New York style cheesecake instead. While I love that version as well, I did miss this no bake kind.
No bake cheesecake is light, creamy and an awesome summer dessert. My kids go nuts whenever I make this treat.
It's funny because any time I serve this there is definitely some nostalgia for people who enjoyed this during the 1980s. And, once tasted, many often say that they forgot how delicious it is!
No bake cheesecake is often prepared in a rectangular baking dish. I use a 13×9 dish, which makes lots of this dessert. If I was to make it in a smaller dish, like a 9×9, it would disappear in one sitting, and I love having a little bit of this leftover in the fridge for a late night treat! If a 13×9 dish is more than you want, you can easily halve this recipe, which will fit perfectly in a 9×9 square dish or even a pie plate.
This dessert consists of three layers. Trust me when I say, that this truly is one of the simplest desserts that you will ever make.
The bottom layer is a crust made from graham cracker crumbs, sugar and melted butter. Stir the crust ingredients in a bowl until well mixed and the graham cracker crumbs are wet from the melted butter. Press the crust mixture across the bottom of a 13×9 dish.
The first step in preparing the cream cheese filling is to make the whipped cream. While using a tub of cool whip does work, I prefer to make the whipped cream from scratch with heavy cream, sugar and vanilla. Whisk with a stand mixer on high until stiff peaks form.
Once you have made the whipped cream, mix in the bricks of cream cheese until smooth and creamy.
Spread the cream cheese filling across the top of the graham cracker crust.
The final step to make the cheesecake is to spoon the canned cherry pie filling across the cream cheese mixture.
Once the cheesecake has been assembled, place the dish in the fridge to chill. This allows the crust and cream cheese filling to firm up, to make slicing into squares much easier.
While the classic no bake cheesecake is topped with cherry pie filling, you can use pretty much any canned berry pie filling, like blueberry, strawberry or raspberry. Personally, I like blueberry cheesecake about as much as cherry.
Easy recipe for classic no bake cherry cheesecake. Graham cracker crust, cream cheese and whipped cream middle layer and cherry pie filling for the topping!
Mix together the graham cracker crumbs, sugar and melted butter until well mixed. The graham crackers should be evenly wet by the butter and sticking together.
Press the graham cracker mixture in a 13x9 pan.
Whisk the heavy cream, sugar and vanilla on high until stiff peaks form and it makes whipped cream.
Add in the cream cheese and continue to mix on medium high until the filling is smooth and creamy.
Use a spatula to spread the cream cheese filling on top of the crust. Be careful not to move the graham crackers around.
Dump the 2 cans of cherry pie filling on top of the cream cheese filling and evenly spread it across the top.
Place in the fridge for 90 minutes to chill.
While this recipe is made for a 13x9 pan, it can easily be modified for smaller dishes. Reduce each ingredient by half and it will fit in an 9x9, 8x10 or even an 8x8 pan. Half of the above recipe will also work for a round pie pan as well.
I have a question. The recipe says 2 bricks of cream cheese (8 oz or 250 grams) – is that 2 8 oz bricks or total 8 oz of cream cheese?
2 bricks that are 8oz or 250g each. I will edit the recipe ingredients to clarify.
This is the perfect recipe for summer BBQ's and pitch-ins! I love that it's chilled so it is nice and refreshing for guests on a hot day. And, of course, who doesn't love a super-simple recipe? Thanks for sharing it with us at Merry Monday this week!
This is one of my standby favourites! I also make it with blueberry pie filling which also goes over well with Family.
Hi Steve looks great,I,m using cool whip as I don.t have thick cream,do I leave out vanilla and sugar.
This is an excellent recipe my 21 yr old daughter made this with no problems. It was excellent!
Excellent recipe my 21 yr old daughter made 2 pies ! Was wonderful.
Would I be able to make the whip cream and cheese mixture and freeze this?
I have not tried freezing it first so I am not sure what the consistency would be like. Sorry I can't help!


Learn more about our partners who are bringing together knowledge, influence and capacities to love and serve our region's greatest needs and foster hope.
"Are You Sure?" is a workshop for parents to help you build resilient teens who grow, thrive and have futures filled with hope. Workshop materials are available for download for local churches to use internally and with surrounding communities The world our children are growing up in is changing rapidly. There is a perfect storm developing. The environment is more challenging and our teens are less resilient. There are increasing rates of depression, anxiety, fears, drug abuse and even suicides. Too many have lost hope. But, we carry hope through Christ who has the answers.
OneHeartDC is a movement uniting and mobilizing churches, church networks and other organizations to serve the metro Washington region and share the good news of the gospel. We want each of our 5 million neighbors to experience the love and message of Jesus Christ through one or more of our partners. For this to happen, every Christ-follower needs to go on mission together. OneHeartDC is creating an environment for collaboration that makes an impact where we live!
500,000 Christ followers will actively be living out their faith, reaching a spiritual 'tipping point' where the impact of the Gospel will be felt throughout the region.
5 million of our neighbors will be experiencing the love and message of Jesus Christ through one or more of our partners. Every man, woman and child will be having the opportunity to see, hear and to respond to the Gospel.
Our leaders are a cross section of our community who recognize that the body of Christ has far more work to do than any one church or any denomination can do alone.
Increasing prayer to fuel the movement.
Interconnecting and releasing Kingdom builders across the 7 Spheres of our community, particularly marketplace leaders, young adults, social entrepreneurs and investors.
Knowledge transfer, resource sharing and a digital infrastructure.
Local and regional mobilization, collaboration, multiplication and transformation strategies.
See a list of upcoming events, conferences, and opportunities to unite together in spreading the Good News of Jesus Christ.
Visit our prayer wall and see the requests and praise reports from people all over our region.
Follow us on Twitter and stay up to date with everything going on with OneHeartDC and our partners.
Take a look at our gallery to see pictures from previous events and partner churches and organizations.
Head over to our Facebook page to become part of our online community and connect with people who share our vision.


text:
You Survived Cancer... Experts Now Want to Help You Have a Better Life
Medical professionals are ramping up programs to help cancer survivors deal with the emotional, physical, and financial aftermath.
There are now more than 15 million cancer survivors in the United States.
The number of cancer survivors is growing.
And they're living longer.
While advances in diagnosis and treatment are speeding along, we have a lot of catching up to do when it comes to survivorship.
Whether in remission, or "cancer-free," or living with disease for which treatment will continue indefinitely, survivors face a myriad of long-term effects.
These issues aren't limited to physical side effects.
Cancer survivors often face a lifetime of psychological, social, and economic fallout.
Yet, there isn't much research on these problems or how to address them, according to the United Kingdom's National Cancer Research Institute (NCRI).
New research presented at the 2018 Cancer NCRI Conference proposes a set of priorities that could be aimed at addressing the long-term consequences of cancer.
"There are not enough researchers studying these issues and there's very little funding currently available for this work," said NCRI's Dr. Feng Li in a press release.
"This is an enormous gap in our knowledge and it's one that can only begin to be filled if we have a starting point. We've looked at cancer research in the U.K., but the situation is similar around the world," she continued.
Identifying problem areas
With help from patients, caregivers, and professionals, the NCRI spent two years determining areas of research that should take priority.
These priorities focus on managing long-term and late effects of cancer and cancer treatment.
These include researching the best ways to educate patients and families, coordination of care, and lifestyle changes that can improve overall health and quality of life.
In the United States, there were about 15.5 million cancer survivors in 2016. By 2026, that number is expected to grow to 20.3 million.
Access to healthcare services differs in the United States, depending on where you live and what type of insurance you have, if any.
There's also great variation in survivors' experiences.
Finding help where a person lives may be even more difficult for people with rare cancers, according to registered nurse Karen Selby.
From her home in Florida, Selby spends her days helping cancer patients from all around the country.
As a patient advocate at the Mesothelioma Center, she knows well the struggles of those living with rare, incurable cancers.
Life-altering physical side effects
One of the effects of cancer treatment is that it can raise your risk of other cancers.
Selby recently spoke to a woman who survived breast cancer.
"She has scarring on the lung and is now at risk for lung cancer because of the radiation she had for breast cancer," she told Healthline.
A common problem among those in her mesothelioma group is the daily struggle to breathe, something that affects every aspect of life.
Roberta Luna has been living with pancreatic cancer for 16 years.
She's the Pancreatic Cancer Action Network's (PanCAN) community engagement chair for the Orange County, California, affiliate of volunteers.
Luna lost both parents, a grandmother, and an uncle to the disease.
Things have changed since her father was diagnosed with pancreatic cancer in 1998. He survived only two weeks.
"I'm still fighting the disease," Luna told Healthline. "I've been on chemo for 16 years."
All that chemo has resulted in serious kidney and heart problems.
"Having pancreatic cancer is scary, but when I learned my heart was affected, it got even scarier," she said.
Luna also deals with neuropathy of the hands, which makes it difficult and sometimes dangerous to do something as simple as preparing a meal.
She lives with near-constant nausea, tiredness, and the memory loss and confusion of "chemo brain."
Luna gets through her days by breaking things down into manageable chunks.
Dr. Anthony Perre is chief of the Division of Outpatient Medicine at Cancer Treatment Centers of America (CTCA) in Philadelphia.
He noted that cognitive dysfunction due to chemotherapy is common. So is fatigue.
"This often extends for years after treatment. You think you're done and you should be back to normal, but you're not. It can profoundly affect perspective," Perre told Healthline.
Just going in for a scan can raise the stress level.
Luna sometimes waits three or four days to get test results.
"You go through a weekend not knowing. It's very difficult to put yourself in a different frame of mind and enjoy what you're doing. It changes your life," she said.
In her work with PanCAN, she speaks with loved ones of people who died of pancreatic cancer.
Survivor's guilt, said Luna, is real.
Meanwhile, her husband, Vic, lives with another kind of guilt.
"I can fix just about anything. I feel guilty because there's nothing I can do to correct this," he told Healthline.
Perre, a Hodgkin lymphoma survivor, remembers how it feels to learn you have cancer.
"At the time, I was overwhelmed," said Perre. "So, when I meet with patients, I certainly understand the fear."
"People will often wall themselves off and don't accept help. It's important to be able to receive help. One thing you realize quickly is that just because you're done treatment, it doesn't mean everything will go back to the way it was before. There are a host of things to be addressed," he explained.
The weight of all the "what ifs" take a toll, said Selby, noting these stressors also affect family members.
"What if it comes back? When will it come back? You're always dealing with that anxiety. That stress can cause an endless amount of other problems," she said.
Selby explained that some survivors don't want to admit to the psychosocial aspect of cancer. They want to be strong.
"Mental health is the secret disease no one wants to talk about, but it can happen with a diagnosis of cancer," she continued.
Employment and financial issues can present big problems.
"I was just researching options for a one-year survivor who is now in remission," said Selby.
"But he doesn't know how he's doing because he can't afford follow-up studies or get a job. He may lose his home. It's one of the many things survivors and caregivers in our mesothelioma support group talk about. It comes up in every call. These are the consequences that occur from surviving cancer."
Financial strain can also add to survivor's guilt, according to Luna.
"Insurance doesn't cover everything. These medications are very expensive. Some patients have to decide if they should do chemo or put their kid through school," she said.
Luna wants to see an issue with insurers addressed.
"Often the person making the decision is a layperson, not a doctor, and they're in a position to deny treatment. We need to get more awareness of that out there," she said.
Cancer survivors can get lost in transition, said Perre.
There's a gap between the medical oncologist and going back to the primary care physician.
CTCA provides patients with a survivorship care plan that includes a treatment summary and information on maintenance medications, which can continue for years.
They also include a follow-up plan with information on scans, blood tests, and screening for other cancers. They also include diet, exercise, and other preventive information.
During visits with patients, issues such as anxiety, depression, and financial distress are discussed.
"There are effective treatments and they're not all pharmacological-based," said Perre.
One of the most important things you can do to prevent cancer and reduce the risk of recurrence is to exercise, he said.
"We're playing for the long term."
Perre said that cancer survivorship plans are a relatively new thing, but there's a major need for them.
"Some barriers haven't been recognized, especially by payers," he explained. "That being said, my advice is to be seen by a medical oncologist and go back to your primary care physician. Ask questions if you're suffering from the consequences of treatment. Ask questions about things that are tough to talk about. Be your own advocate and get a game plan."
Perre said there should be coordination of care between the oncologist and the primary care physician.
"Education is important. For patients who have completed treatment for cancer, life doesn't just go back to normal at the snap of a finger. People continue to have issues related to cancer. A comprehensive, integrative model looks to encompass the best attributes of medical oncology and primary care — that's the model we should be looking toward," he said.
Luna urges cancer patients to seek out clinical trials.
"Clinical trials should not be a last-ditch effort. It should be first," she said.
She's also grateful for groups like PanCAN, which she calls a "one-stop shop" for research, advocacy, and clinical trial information.
"They've been there for me," she said.
"We try to make every day last a lifetime," said her husband.
"If we can do something to change this hideous disease, we want to be right up front. Not for ourselves, but for those people who haven't yet experienced it. We're seeing strides. Somebody will benefit from what we're going through," he said.
This article was from Healthline and was legally licensed through the NewsCred publisher network. Please direct all licensing questions to [email protected].
When Cancer Strikes Twice
Adult Cancer Survivor: Emotional Concerns
Cancer Survivors Celebrate Their Cancerversary
Cancer Survivors: Late Effects of Cancer Treatment
The Latest News About Cancer Death Rates in the U.S. Will Fill You With Hope


In capital markets, Volume, or trading Volume, is the amount that were traded during a given period of time. In the context of a single stock trading on a stock exchange, the Volume is commonly reported as the number of shares that changed hands during a given day. The transactions are measured on stocks, bonds, options contracts, futures contracts and commodities.
The average Volume of a security over a longer period of time is the total amount traded in that period, divided by the length of the period. Therefore, the unit of measurement for average Volume is shares per unit of time, typically per trading day.
Is Volume's estimated NPS of 67 considered to be good?
Consider an example: If Volume sends out NPS surveys immediately after purchase, they are tracking their customers' initial excitement and the checkout experience.
Therefore, comparing the NPS score of Volume with your own without any further context is not that useful.


Guthmann Construction is a Charlotte area Design-Build firm with over 25 years of experience in home renovation. Widely respected for excellence in the architecture and construction industries, our reputation is built on innovative design and superior craftsmanship. Our projects range from repairs and restoration, updating kitchens and bathrooms, finishing attics and basements, creative outdoor living spaces, and building custom homes. Regardless of the size of the job, our clients receive a dedicated Project Manager to ensure consistent and detailed communication throughout the project. Our experienced and professional crews deliver extraordinary workmanship and attention to detail.


Ruff House Rescue is a certified 501(c)(3) non profit rescue organization in Nassau County, Long Island NY. We are a foster-based network of animal lovers who seek to save as many lives as possible, as fast as we can. As a largely volunteer-based organization, we depend on the generosity of our Ruff House family to do this life changing work.
Our Vision is to Go BIG so they can go home! Going BIG means that our fosters and volunteers always show up in a big way and are incredibly hands-on, passionate, and dedicated, whether they are volunteering remotely, at our kennel, or at our adoption events.
How do I apply to foster?
Complete our foster application! We'll be in touch in a few days.
Complete our volunteer application! We'll be in touch in a few days.
When you volunteer with Ruff House, you're part of a family all working towards our Mission to rescue animals in need and help create a world where the kind and rewarding experience of adoption is the standard. You'll make friends and have fun while helping us save lives!
We literally depend on our volunteers to help us save more lives.Please keep these things in mind before applying.
We encourage all of our volunteers to be positive and professional with each other as well as our potential adopters, fosters, other volunteers, donors, and the public.
Can you volunteer at least 4 hours or more of remote time per month, or attend at least 1-2 in-person event per month?
We always want to ensure the safety of our team, our animals, and the confidentiality of personal information.
We rescue both cats and dogs. Our cats are housed at Petco Oceanside and our dogs in our kennel location.
Kennel – One of our biggest needs is having a reliable base of volunteers who take ownership of the operations at our kennel. This is where most of our dogs start out.
Adoption Events – We do adoption events every weekend, and participate in several super adoption events throughout the year.
Cat Care at Petco – We have a relationship with the Petco in Oceanside where our cats are kept in habitats. Basic maintenance every day and socialization really helps these cats.
Transport – If you can drive then you can help save lives. We often need help transporting for our weekend events, and sometimes for special rescue missions.
Thrifty Pawz – We are fortunate to have a thrift shop where all proceeds go to the rescue. If you can help solicit for goods or to staff the shop, let us know!
Application Screening Teams – As one of the largest rescues in the area, we receive thousands of applications every year. Our screeners review each application and help us find the best matches for every animal we save.
Social Media Team – Help us save more lives by growing our social presence and leveraging each platform to engage our fosters, volunteers, donors, and potential adopters.
Fundraising Team – Have experience with fundraising or event planning? Our lifesaving operations depend on this team to raise as much money as possible to save more lives!
Marketing & Visual Team – Experience in graphic design, copywriting, web design or support, brand development, PR, advertising, marketing, or other transferable skills?
Finance Team – Good with accounting systems? Help our team carefully and responsibly manage our funding to help save more lives, more quickly.
If you have any questions, email us at volunteer@ruffhouserescue.org.


text:
Colorado Sundown è un film del 1952 diretto da William Witney.

È un western statunitense con Rex Allen, Mary Ellen Kay, Slim Pickens e June Vincent.

Trama

Produzione
Il film, diretto da William Witney su una sceneggiatura di Eric Taylor e di Lively e un soggetto di Taylor, fu prodotto da Edward J. White per la Republic Pictures e girato a Lake Arrowhead e nello Shay Ranch (Big Bear Valley, San Bernardino National Forest, California, a Big Bear Lake, Big Bear Valley, San Bernardino National Forest) in California, dal 9 agosto a fine agosto 1951.

Distribuzione
Il film fu distribuito negli Stati Uniti dall'8 febbraio 1952 al cinema dalla Republic Pictures. È stato distribuito anche in Brasile con il titolo Cavaleiro do Colorado.

Note

Collegamenti esterni

Film western
Film diretti da William Witney

redpajama_set_name: RedPajamaWikipedia


The 3-day tour will take to to Bac Ha and Sapa, Lao Cai province in northern Vietnam and includes such highlights as the Bac Ha Sun day market, the colorful highland market is only open on Sunday morning; a day walking in Sapa offering you the opportunity to visit the H'mong and the Red Dzao, two biggest ethnic groups in Sapa. Enjoy also one day bicycle tour to Binh Lu, Tam Duong, Lai Chau (mountain bike trip).
Upon your arrival at Laocai railway station at 6:00, you will be greeted by our local team and transferred to a local restaurant for early breakfast. Then leave Lao Cai for a 2-hour road journey to Bac Ha. The first portion of the road is flat and good. Then it is narrower and turns left and right more frequently from Bac Ngam to the market.
Arrive to the Market place at about 10.00 am. Spend two hours joining the local tribal peoples including Flower H'mong, Black Zao, Phu La and Tay for the festive market activities where peoples in their best traditional costume gather every Saturday for shopping and socializing. The animal and clothing sections are the most interesting until 11.30 am, and then comes the food section.
Lunch break in a local restaurant.
Leaving Bac Ha after lunch for a half-hour drive downhill to Trung Do. Enjoy a leisure walk to explore this prosperous village of the Tay ethnic people who live in large stilt house. Enjoy an hour boat trip along the Chay River to Bao Nhai where you will be picked up again by our vehicle for the road trip to Sapa.
You will be met up at your hotel in Sapa by our team. Leaving Sapa, you will go uphill to the Silver Waterfall where you will be dropped off to start the tour. From here you will cycle up to the Heavens Gate, the highest stretch of road in Vietnam. You will experience the stunning views across the valley. You will then travel by bicycle downhill to Binh Lu, where the lunch will be provided. From Binh Lu it is also possible for you to take 1 more hour on the bike and 1 hour walking to a remote village inhabited by the Dao minority. It is now time for the jeep ride back to Sapa.
Transfer 15 km to the Mong Sen Bridge with stops along the way for enjoying spectacular landscapes.
Upon our arrival in Mong Sen village, we start trekking uphill along large dirt road for nearly an hour, then following a narrow dirt trail winding its way on steep hill-sides along the western bank of the upstream part of Ngoi Dum River for 2 hours to an isolated hamlet of the Black H'mong people, explore these isolated hamlets of the Black H'mong, then lunch break.
After lunch, we continue trekking along the same trail for nearly 1,5 hours up and downhill towards Ta Phin Valley and arrive at the center of Ta Phin Commune in mid afternoon. Take a walk around this stunning valley, paying visit to some Red Zao families, then we will be picked up again by our vehicle for one-hour drive to Laocai.
You will be dropped off at Loacai railway station. Trip ends.


text:
Teleutomyrmex – rodzaj mrówek z podrodziny Myrmicinae. Obejmuje dwa gatunki.

Gatunki
 Teleutomyrmex kutteri Tinaut, 1990
 Teleutomyrmex schneideri Kutter, 1950

Przypisy

Mrówkowate


Is it better to book Angkor tours before or after I arrive in Siem Reap?
I'm travelling to Cambodia, Phnom Penh and Siem Reap, any advice? Travel agency, tours, places to visit, restaurants.
is it true that the angkor wat will soon be closed to public?


text:
Help Ukraine in the war with Russia
info.starkmoving@gmail.com
Boston movers
Couch moving
Antique furniture moving
Small Moving
Chicago movers
Chicago Local Moving
Long Distance Movers Chicago
Interstate Moving in Chicago
Chicago Packing Services
Piano Movers Chicago
Long Distance Movers Washington DC
Interstate Moving Washington DC
Loading And Unloading Help
Crating
Moving from Boston to Charleston
Stark Moving and Storage IncMoving from Boston to Charleston
Charleston is the largest city in the U.S. state of South Carolina. The city is the county seat of Charleston County, and the principal city in the Charleston–North Charleston–Summerville Metropolitan Statistical Area. The city lies just south of the geographical midpoint of South Carolina's coastline and is located on Charleston Harbor, an inlet of the Atlantic Ocean formed by the confluence of the Ashley, Cooper, and Wando rivers. Charleston had an estimated population of 136,208 in 2018. The estimated population of the Charleston metropolitan area, comprising Berkeley, Charleston, and Dorchester counties, was 802,122 residents as of July 1, 2019, the third-largest in the state and the 74th-largest metropolitan statistical area in the United States.
Charleston was founded in 1670 as Charles Town, honoring King Charles II of England. Its initial location at Albemarle Point on the west bank of the Ashley River (now Charles Towne Landing) was abandoned in 1680 for its present site, which became the fifth-largest city in North America within ten years. One of the key cities in the British colonization of the Americas, Charles Town played a major role in the slave trade, which laid the foundation for the city's size and wealth, and was dominated by a slavocracy of plantation owners and slave traders. Independent Charleston slave traders like Joseph Wragg were the first to break through the monopoly of the Royal African Company, pioneering the large-scale slave trade of the 18th century. Historians estimate that "nearly half of all Africans brought to America arrived in Charleston", most at Gadsden's Wharf. Despite its size, it remained unincorporated throughout the colonial period; its government was handled directly by a colonial legislature and a governor sent by London, England. Election districts were organized according to Anglican parishes, and some social services were managed by Anglican wardens and vestries. Charleston adopted its present spelling with its incorporation as a city in 1783 at the close of the Revolutionary War. Population growth in the interior of South Carolina influenced the removal of the state government to Columbia in 1788, but the port city remained among the ten largest cities in the United States through the 1840 census. The only major antebellum American city to have a majority-enslaved population, Charleston was controlled by an oligarchy of white planters and merchants who successfully forced the federal government to revise its 1828 and 1832 tariffs during the Nullification Crisis and launched the Civil War in 1861 by seizing the Arsenal, Castle Pinckney, and Fort Sumter from their federal garrisons. In 2018, the city formally apologized for its role in the American Slave trade after CNN noted that slavery "riddles the history" of Charleston.
STAGES OF ORDERING AND RECEIVING SERVICES
You can use our moving cost calculator or online request form to get an approximate estimate for your move.
Give us a call at (800) 654-7575, or submit a request form online.
Use the moving calculator
Provide details such as desired relocation date, location, and a list of items you're planning to move.
Based on the provided info, receive a free, no-obligation quote via phone or email (your choice).
STARK MOVING is your moving expert, providing top quality, hassle-free service at competitive rates.
Get Your Quote Call Us (800) 654-7575
We are the best at what we do. We have helped our customers relocate from Boston to Washington, Detroit, Chicago, and more.
We are the packing experts who know the best practices to efficiently secure your stuff for transportation.
We offer custom boxes for your antiques, collectibles, fragile items, and more.
If searching for short and long-distance professional piano movers in Boston area, or require a no-obligation piano moving quote, please give us a call today.
INTERSTATE MOVING TIPS & GUIDES
See what's new with our expert movers below.
How to have a garage sale
One major challenge many people face when planning to relocate is getting rid of extra stuff they don't need. From books, toys, and clothes to machines, kitchenware, work tools, etc. Those rarely or fairly used items in your house that are still in good condition but have little or no intrinsic value to you may just be someone else's treasure.
How to make friends in a new city
The feeling of moving to a new city is usually a mix of excitement, intimidation, and fear. But as you get accustomed to the terrain and begin to find acquaintances, it becomes more fun. Making friends in a new city is not always easy, but we best believe it is worth the effort. Hostels, tours, and bar crawls make it simple for tourists to meet people. More so, other travelers are always willing to mingle. It's pretty different when you move to a new city.
How much to tip movers
Movers or loaders are people who assist with packing your stuff, arranging them, and moving them when you are relocating to a new home. But, worrying about much to tip movers after a very busy moving day is not something you want to stress on, so you need to be prepared.
Our History Contact Get a quote Blog Resources FAQ
Local moving Long Distance Moving Furniture Movers Commercial moving Small Moving Piano Moving
SERTIFICATIONS
Seo services by Webernetic Family


Future broadcaster Mike Leonard grew up with his family in Glencoe, Illinois – a pleasant suburb north of Chicago. Their next door neighbors and good friends were the Minow family – an attorney and his wife and three daughters. The family patriarch, Newton N. Minow, later became chairman of the Federal Communications Commission in the John F. Kennedy administration…and changed the course of broadcasting history forever.
The 60-minute documentary NEWTON MINOW: AN AMERICAN STORY tells the inspiring story, as told to award-winning journalist and documentarian Mike Leonard, of a man whose principled engagement in public life elevates the common good and advances the American ideals of liberty and justice for all. The documentary, produced by Picture Show Films, presented nationally by WTTW Chicago, and distributed by PBS Plus, is available to public television stations beginning August 5, 2016 (check local listings).
A son of immigrants, Newton Minow's journey traverses two centuries as he plays a pivotal role in events from World War II to the Cuban Missile Crisis to the Civil Rights struggles; from the advent of television (including his famous 1961 "vast wasteland" speech) and the creation of the public broadcasting service to the cyber-connected current day -- all the while collaborating across political, cultural, and ideological lines -- with the most recognized and unrecognized people of our time.
Minow, his wife Jo, and daughters Martha, Mary, and Nell – all highly accomplished in their own right – are interviewed by Leonard, with whom they share rare images, fascinating insights, and priceless reminiscences of what it was like to be a part of such a loving and influential family. Minow himself brings his considerable skills as a raconteur to the story of a life filled with achievement, hope, and compassion. Along the way, he shares his unique memories of the space race, the Cold War, satellite communication, the Cuban Missile Crisis ("I thought it was going to be the end of all of us," he recalls), the Vietnam War, and much more.
This is a story of what is possible when aiming high, and of a man who had the strength of his convictions and stood his ground through resistance, criticism, and worse.
NEWTON MINOW: AN AMERICAN STORY is a production of Picture Show, LLC/Leonard Films. Co-Executive Producers are John O'Brien, Pat O'Brien, Mike Leonard, and Mary Kay Wall. Director: James Fleischel. Producers: Brian Gailey and Katie Prentiss. Camera: Corey Lillard, Brendan Leonard. Editors: James Fleischel and Brendan Leonard.


text:
Anjuman-I-Islam
A.R. Kalsekar Polytechnic
Our Best Practices
Board of Governers for ARKP
Board of Institution in Navi Mumbai
Local Management Committee
Committees of ARKP
Founder's Desk
President's Desk
General Secretary's Desk
Exe. Chairman's Desk
First Shift (0569)
Electronics & Telecomm Engineering
Humanities & Science
Second Shift (1608)
Facilities & Quality
OSA Book Bank
Boy's Common Room
Girl's Common Room
Kalsekar Peace & Spirituality Center
Bus Facility
NBA Requisite
AICTE Requisite
Outcome Base Education (O.B.E)
M.S.B.T.E Academic Audit Report
Anti - Ragging
Grievance & Discipline
Women's Redressal Committee
Institute Cells
Alumni Cell
IT Cell
Institute Academic Calendar
MSBTE Academic Calendar
ARKP Portals
Knowledge Resorce Center
E.R.P
C.M.S
Events News ARKP Today ARKP video
Toll Free No.: 1800 22 3278
NBA Accredited NBA Accredited Admission 2019-20 Inquiry Form Admission 2019-20
ARKP Today
21 CE
6 EX
26 MEII
0 COII
18 CEII
Activity Name
MEII
COII
CEII
1 Any Other 4 2 0 0 1 0 0 1 8
2 Carrer Fair 0 1 0 0 0 0 0 0 1
3 Faculty Trainings deputations e.g Orientation workshop for Scheme , Content updating etc. 2 1 0 2 3 13 0 1 22
4 Faculty Tranings Organised 0 0 0 0 1 0 0 0 1
5 Industrial Trainings deputations 1 3 0 0 0 0 0 11 15
6 Industrial Visits 16 4 4 1 6 1 0 1 33
7 Industry Experts Lectures 9 7 5 1 3 2 0 3 30
8 Inplant Traning 2 0 0 0 6 0 0 0 8
9 ISTE 0 0 0 0 1 0 0 0 1
10 Learning Resources Development 1 0 0 0 0 0 0 0 1
11 MOUs with Industry for Participation in Academic Development of the Institute 0 0 0 0 0 2 0 1 3
12 Number of CEP Programs/Trainings 0 0 0 0 2 0 0 0 2
13 Organization in Technical Quiz / Seminar/ Paper Presentation Competition event per year 1 0 0 0 1 0 0 0 2
14 Paper Presentation Competetion 1 0 0 0 0 0 0 0 1
15 Paper Publish/ Presented By Staff 3 0 0 0 0 0 0 0 3
16 Participation in Sports 0 0 0 0 2 1 0 0 3
17 Placement Record 0 0 0 2 2 2 0 0 6
18 Programs conducted for Personality Development 0 1 0 0 7 0 0 0 8
19 Project Paper Presentation 0 0 0 0 9 0 0 0 9
20 Short Term Traning Program (STTP) 2 3 12 0 0 0 0 0 17
21 Students participation In Project 0 2 0 0 0 0 0 0 2
22 Technical Quiz Participations 0 0 0 0 18 5 0 0 23
Plot # 2 & 3, near Thana naka,
Khanda Gaon, New Panvel, Navi Mumbai, 410206
Toll-free: 1800223278
principal.aiarkp@gmail.com
A.R. Kalsekar Polytechnic Code's
M.S.B.T.E Code Ist Shift - 0569
M.S.B.T.E Code IInd Shift - 1608
D.T.E Code - 3278
Anjuman-I-Islam A.I. Kalsekar Technical Campus M.S.B.T.E A.I.C.T.E A.I.C.T.E Requisite D.T.E N.B.A
ARKP Portal's
Knowledge Resorce Center E.R.P C.M.S
© All rights reserved by A. R. Kalsekar Polytechnic, 2016 | Developed and maintained by IT Cell, A.R.K.P


text:
A word of thanks
June 2017 June 2017
Staff of The New Criterion with the Kissingers and de Montebellos at the 2017 Edmund Burke Award Gala.
Notes & Comments June 2017
Acknowledging the support of our circle of friends
With this issue, we bring Volume 35 of The New Criterion to a close. It is not quite, however, the end of our thirty-fifth anniversary celebrations. We intend to prolong that holiday into the autumn and beyond with a number of commemorative events, including the publication of Vox Populi: The Perils and Promises of Populism, which will gather the ten essays, revised and expanded, that have composed our special series this year. Look for it at bookstores this fall. Still, this issue, which carries our final essay on the phenomenon of populism, does mark the end of an important chapter in the history of The New Criterion. When we look back over the course of these three and a half decades, we find ourselves beset by sharply conflicting impressions. On the one hand, 1982, when Hilton Kramer and Samuel Lipman got together to start The New Criterion, seems a long time ago. Some of us at the World Headquarters were not yet born. And yet for those of us around in the early years of the magazine, it seems almost like yesterday—well, the week before last—that a brash new cultural monthly arrived on the scene to disturb the complacent equanimity of the art world and the world of academia. One thing that has been borne in upon us all is the recognition that The New Criterion could never have persisted and thrived without the help of its friends. It is a pleasure to take a moment to celebrate those enlightened individuals and institutions that have made our work possible over the years and, especially, have helped make our thirty-fifth anniversary such a success. It is a long list, longer every year, and we wish to extend a hearty "Thank you!" to everyone who contributed to The Cause. Thirty-five years is an astonishing anniversary for a small, pugnacious magazine devoted to serious cultural criticism. We could never have achieved this milestone if it were not for you, our readers and co-collaborators who understand the importance of robust cultural criticism to the health of a democratic society. We wish to pay particular homage to the late, great John M. Olin Foundation, which was there at the creation of The New Criterion and which supported our work for decades. The Sarah Scaife Foundation and the Lynde and Harry Bradley Foundation have likewise been essential partners in our endeavors. We are more grateful than we can say for their stalwart support. In recent years, Olin, Scaife, and Bradley have been joined by other partisans of permanent things. The late Donald Kahn intervened at a critical moment to provide generous and essential support for more than a decade. This year, in addition to acknowledging the key support of a few anonymous donors—you know who you are—we want to mention our Editors' Circle donors Cliff & Laurel Asness, The Blavatnik Family Foundation, The Gale Foundation, The Carson-Myre Charitable Foundation, Arthur Cinader, The Richard H. Driehaus Foundation, Marina Kellen French, Richard Gilder, Paul Isaac, The J. M. Foundation, Virginia James, Thomas D. Klingenstein, The Marcus Foundation, The Fred Maytag Family Foundation, James Piereson, The Pinkerton Foundation, Annette de la Renta, The Thomas W. Smith Foundation, Edward Studzinski, The Triad Foundation, Alan D. White, George Yeager, and Helen Zell. We thank you all for your continued support. The New Criterion could not exist without you.
This article originally appeared in The New Criterion, Volume 35 Number 10, on page 3
Copyright © 2021 The New Criterion | www.newcriterion.com
https://newcriterion.com/issues/2017/6/-i-a-word-of-thanks-i--8699
Topics:New Criterion, Culture
E-mail A word of thanks


text:
Cinema Signal:
The Off-Hollywood Film Guide:
The Definitive Guide to Independent and Foreign Films on Video and DVD
by Tom Weiner
. "Primer"
The "Blair Witch Project" meets reality TV in this adventure in weird science. This time it's captured on super 16mm film, and its cigarette package-sized budget ($7,000 purportedly) prompts a high level of resourcefulness in a low concept vision of time travel.
The lads involved do a good job of creating a select group of smart talking and quick thinking engineers exploring new concepts on the theoretical horizon. They talk so much and so off-handedly about possibilities in quantum mechanics and physical phenomena as they go about their business in a garage-laboratory, that you can scarcely understand them. But, that's the idea. The impression of brilliance and dedication to science is all you have to take home at first. Confusion is part of the packaging.
So, it's credible that when Aaron (Shane Carruth--also writer and director) puts together a superconductive mechanism and when he and partner Abe (David Sullivan) cover it with a box and turn it on, that an object within it is changed in some drastic and never before seen way. But, is it a breakthrough?
The change in the object placed inside their machine is represented as a reduction in its apparent mass achieved by blocking gravitational pull. Understanding that much is one thing. Moving to a pragmatic or commercial use for it is another. The engineers proceed to experiment some more.
Jumping through several stages, they ultimately construct a time capsule which is capable of creating a version of the person within it to emerge in future time. That version can then determine what stocks moved the most so that the person in real time can place huge money-making stock market orders in time for the resulting gains to make them wealthy.
But, here's where the drama ends and a certain ineptness in story telling takes hold. The people versions in real time can see their alter egos of a prior time but dare not approach them. Why not? Does madness ensue? Since everything's so "scientific," what's the equation for two versions of a person meeting? Such questions not only leaves us baffled, they lead to pointlessness and the feeling that the writer was as confused as any of us.
Carruth, who also edited and scored the flick, seems to have gotten too lost in the dimensions of time to bring the narrative to a clear and meaningful climax. In the last act --or what serves as one-- he seems to be wandering in search of a way out of his box and enters the space warp of sci-fi breakdown. In the end, intelligence can't cap the too clever caper.
Count this good festival fare for like-minded and funded filmmakers and something with far less promise for the ticket-buying mainstream that will probably demand more manageable conceptualizing.
~~  Jules Brenner
Release order
Alphabetical order To Jbmovies
(sample frames from movies photographed
by Jules Brenner)
Books, DVDs, Music, Restaurants
Shane Carruth and team
A money-making machine in the works
Help us to continue
bringing you these reviews...
visit our sponsors (just a click will do it)
Best selling DVDs!


text:
Electric Race News
Home | Electric Race News Wiki | Electric Race News Snippets
Toyota electric race car sets EV lap record at Nürburgring
Toyota's mission in life isn't just making wildly popular sedans for the masses. Another division, Toyota Motorsports, exists to build fast cars. Toyota announced today they just set a record lap time on the Nürburgring Nordschleife for an electric vehicle.
The Nürburgring (or Nürburg Ring) is a famous race track in Germany built around the village of Nürburg. The Nordschleife ("Northern Loop") at the track is frequently used for testing, and that's what Toyota has done with their purpose-built electric race car.
Their new electric car lap record of 7 mins 47.794 secs beat the previous record, 9 mins 1.338 secs, by a large margin. The track is 20.8 kilometers (12.92 miles), which makes the lap time roughly equate to 100 miles/hr averaged over the course.
The car, the EV P001, is based on a chassis from Radical, a boutique sports-car chassis manufacturer in Britain. The drive train has two EVO Electric motors, and was integrated into a working vehicle by Rational Motion, a powertrain development consultancy. Toyota claims the car has a 160 miles/hr top speed and the two motors working together produce 800 Nm torque.
Toyota had several goals in mind. One was to go faster than an 8 minute lap, thereby convincingly breaking the lap record. They also wanted to learn more about their powertrain, especially in extreme conditions. They see this as having demonstrated the TMG electric drive train as "ideal to power any future single-make electric motorsport series," and they intend to begin selling drive trains in 2012. They are continuing to research and develop electric motorsport vehicle capacity, and are exploring alternative chassis.
There are several ongoing efforts to develop electric car racing series in addition to the electric motorcycle racing going on inside the TTXGP and e-Power series. TMG would appear to have their eyes on participating in electric car racing.
TMG has posted pictures of the EV P001 on their flikr account (see link below) and a video on youtube.
New EV lap record for TMG
TMG Electric Vehicle Lap Record (flikr picture set)
Nürburgring (Wikipedia)
Originally posted on examiner.com on Aug 30, 2011
Labels: EV P001, Toyota Motorsports
David Herron
Electric Race News from around the Web
24 Hours of Le Mans (6) Aerodynamics (3) Air Fuel Synthesis (1) Amarok (1) American Le Mans (2) Audi (4) Be-EV.com (3) Brammo (22) Brutus Electric Motorcycles (2) Buckeye Electric Motorcycle Race Team (1) Chip Yates (1) Darvill Racing (2) Distance Record (9) Drag Racing (5) Drayson Racing (8) Electric Cars (16) Electric Supercar (3) eMotoRacing (6) Empulse TTX (5) Endurance Racing (5) eRoadRacing World Cup (30) EV West (2) evGrandPrix (1) FIA World Endurance Championship (4) FIM (2) FIM e-Power (12) Formula E (33) Fuel Cells (2) Hollywood Electrics (2) Honda (2) Hybrids (6) Hydrogen (3) Jeremiah Johnson (4) KillaCycle Racing (4) KillaJoule (9) KleenSpeed (5) Laguna Seca (2) Land Speed Racing (20) Lawless Industries (2) Lightning Motorcycles (16) M1GP (1) Meunch (3) Mission Motors (2) Mitsubishi (3) Moto-Electra Racing (3) MotoCzysz (14) Motorcycles (19) Mugen (8) Münch Racing (1) NASCAR (2) NEDRA (4) Nissan (2) Nissan Leaf (2) Nissan LEAF NISMO RC (2) Nissan ZEOD RC (3) Nürburgring (4) OSU Buckeye Current (1) Pikes Peak Hill Climb (27) PPIHC (5) Qualcomm Halo (1) Quimera (4) REFUEL Races (3) Sarolea Racing (1) Southern 100 (2) Terry Hershner (8) Tesla Model S (4) Tesla Roadster (3) Toyota (2) Toyota Motorsports (4) Toyota TS030 (2) TT Zero (46) TTXGP (32) TTXGP 2012 (46) TTXGP 2013 (5) TTXGP/eFXC (4) Virginia Tech BOLT (1) VOLAR-E (1) World Solar Challenge (1) Yamaha (1) YASA Motors (1) Zero Motorcycles (10) Zongshen (2)


text:
You are here: Home / Home / Carousel / Community groups take lead to address DOJ recommendations
Community groups take lead to address DOJ recommendations
October 31, 2017 by Jabril Faraj Leave a Comment
Markasa Tucker speaks during a news conference as representatives from the ACLU and Coalition for Justice look on. (Photo by Jabril Faraj)
Community groups are taking the lead in addressing recommendations of a draft Department of Justice Report — leaked in August — that focuses on the Milwaukee Police Department.
According to the report, MPD lacks racial and gender diversity, has inconsistent body camera policies, does a poor job of documenting and processing citizen complaints and practices a traffic enforcement strategy that disproportionately affects African-Americans. It also said officers do not understand community policing, which the department claims it has practiced for years.
At a Sept. 14 Steering and Rules Committee meeting, MPD Chief Ed Flynn attacked the credibility of the draft report on the grounds it was created by consultants — a practice Flynn acknowledged is not out of the ordinary — and is oversaturated with "anonymous personal anecdotes." At the hearing, Common Council President Ashanti Hamilton called on MPD and the Fire and Police Commission (FPC) to work with the Common Council and community to create a community-led public discussion regarding the report's recommendations and how to move forward.
Hamilton framed this process as an opportunity to build trust in a community-police relationship that has been strained by high-profile police killings of black men and allegations of misconduct. He said, "From the side of the community it's just feeling like many of their stories, many of their experiences, have not necessarily been a focal point."
A week after the hearing, the FPC decided to continue the reform process, which had been dropped by the DOJ Office of Community Oriented Policing Services (COPS). Days after that decision, Flynn struck a different tone, saying it was up to the police and community to work together to address crime.
But more than a month later, prominent community groups have heard little from the FPC, MPD, Mayor Tom Barrett or the Common Council. September letters — one from the Dominican Center for Women and another from the African American Roundtable went unanswered for weeks, according to representatives of the organizations.
In response, a coalition of organizations — including the ACLU, Milwaukee NAACP, UBLAC, Coalition for Justice and more — announced at a recent news conference that it has scheduled two town hall meetings. The goal of the meetings — on Nov. 30 and Dec. 2 — are to make sure the community "gets the information that they need" and that the recommendations aren't "swept under the rug," according to Markasa Tucker, director of the African American Roundtable.
Ashanti Hamilton (left) addresses FPC Executive Director MaryNell Regan during a September Hearing & Rules Committee hearing. (Photo by Jabril Faraj)
"We're used to this," she said. "Everybody knows that we constantly have to push forward and we have to come and speak up when we want to see change. We can't expect, or wait, for city officials to come and do that for us."
Executive Director MaryNell Regan said the FPC plans to announce a process to engage the community later this week. She said a lot of planning has happened so far, but, "The process isn't completed yet." She added that the FPC has been in touch with some groups, but did not name them specifically. When asked if the FPC will help publicize the town halls and take the feedback from those sessions into account, Regan said, "Of course."
Hamilton, who met with Tucker late last week after the news conference, said the African American Roundtable has already taken a leadership role in the process, adding that it will have "100 percent cooperation" from the Common Council in publicizing and staffing the town halls. He acknowledged that some of the organizations and people "who have been involved from the beginning" have not been properly engaged.
"It [is] my intention … that they be at the table," Hamilton said.
Patricia Rogers, executive director of the Dominican Center, called the lack of communication typical.
The Dominican Center, in Amani, has partnered on two recent grants with MPD, the Building Neighborhood Capacity Program (from 2012 through 2015) and the Edward Byrne Memorial Justice Assistance Grant Program, still in progress. MPD administers the Byrne Grant, and partners meet every two weeks. But, according to Rogers, in the three meetings since the Common Council hearing, the DOJ report has not been addressed with the group, either by Flynn or the District 5 captain who attends partner meetings.
She expressed disappointment about the lack of initiative, saying, "They have not been true partners to the community."
For things to change, she said it is important for police to sit down with people and listen to what they think will work. "None of them think that we're going to police our way out of this craziness that's going on," said Rogers.
Nate Gilliam, part of the People's Progressive Organizing Committee, called the city budget "out of whack," noting 47 percent of the city's almost $633 million 2017 general budget goes toward funding MPD. He said it is simplistic to equate public safety with police and that more money should be invested in youth programming, job creation and social services, areas that could "tangibly help improve the situation within the city." He suggested that kind of investment would lead to less crime and a better quality of life for people.
"In our eyes, that's public safety — taking care of the actual citizens," Gilliam said.
The Milwaukee Police Department did not respond to specific questions regarding city funding or Rogers' criticisms. Sgt. Timothy Gauerke provided an email statement, writing that MPD "looks forward to collaborating with elected and community stakeholders to prioritize and move forward with implementation of recommendations in the report." He added that Flynn is still committed to the process.
State Rep. David Bowen said it's essential to have an authentic conversation about how to get everyone on the same page and start working together.
"There are really no sides to having a police department that's accountable to its community," Bowen added.
The town hall meetings will be held at Dr. Martin Luther King Jr. Elementary School, 3275 N. 3rd St., on Thursday, Nov. 30, from 6 to 8:30 p.m. and Saturday, Dec. 2, from 2 to 4:30 p.m.
Filed Under: Carousel, Home, Neighborhoods, News, Public Safety


text:
using Susanoo.Mapping;
using Susanoo.Mapping.Properties;
using Susanoo.Processing;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Reflection;

namespace Susanoo.Deserialization
{
    /// <summary>
    /// Performs deserialization of KeyValuePairs
    /// </summary>
    public class KeyValuePairDeserializer
        : IDeserializer
    {
        private readonly IDictionary<string, IPropertyMapping> _props;

        /// <summary>
        /// Initializes a new instance of the <see cref="KeyValuePairDeserializer" /> class.
        /// </summary>
        /// <param name="mappings">The mappings.</param>
        /// <param name="type">The type.</param>
        public KeyValuePairDeserializer(IMappingExport mappings, Type type)
        {
            DeserializationType = type;
            _props = mappings.Export();
        }

        /// <summary>
        /// Deserializes into a KeyValuePair from a data reader.
        /// </summary>
        /// <typeparam name="TResult">The type of the result.</typeparam>
        /// <param name="reader">The data reader.</param>
        /// <param name="checker">The column object.</param>
        /// <returns>IEnumerable<TResult>.</returns>
        public IEnumerable<TResult> Deserialize<TResult>(DbDataReader reader, ColumnChecker checker)
        {
            return Deserialize(reader, checker).Cast<TResult>();
        }

        /// <summary>
        /// Gets the type of the deserialization target.
        /// </summary>
        /// <value>The type of the deserialization.</value>
        public Type DeserializationType { get; }

        /// <summary>
        /// Deserializes into a KeyValuePair from a data reader.
        /// </summary>
        /// <param name="reader">The data reader.</param>
        /// <param name="checker">The column object.</param>
        /// <returns>IEnumerable<TResult>.</returns>
        public IEnumerable Deserialize(DbDataReader reader, ColumnChecker checker)
        {
            var keyAlias = "Key";
            IPropertyMapping keyMapping;
            var valueAlias = "Value";
            IPropertyMapping valueMapping;

            if (_props.TryGetValue("Key", out keyMapping))
                keyAlias = keyMapping.ActiveAlias;
            if (_props.TryGetValue("Value", out valueMapping))
                valueAlias = valueMapping.ActiveAlias;

            var resultType = DeserializationType;

            var genericTypeArguments = resultType.GetTypeInfo().GetGenericArguments();

            checker = checker ?? new ColumnChecker(reader.FieldCount);

            while (reader.Read())
            {
                yield return Activator.CreateInstance(resultType,
                    Convert.ChangeType(reader.GetValue(checker.HasColumn(reader, keyAlias)), genericTypeArguments[0]),
                    Convert.ChangeType(reader.GetValue(checker.HasColumn(reader, valueAlias)), genericTypeArguments[1]));

            }
        }
    }

    /// <summary>
    /// Performs deserialization of KeyValuePairs
    /// </summary>
    public class KeyValuePairDeserializer<TResult>
        : IDeserializer<TResult>
    {
        private readonly KeyValuePairDeserializer baseDeserializer;

        /// <summary>
        /// Initializes a new instance of the <see cref="KeyValuePairDeserializer" /> class.
        /// </summary>
        /// <param name="mappings">The mappings.</param>
        public KeyValuePairDeserializer(IMappingExport mappings)
        {
            baseDeserializer = new KeyValuePairDeserializer(mappings, typeof(TResult));
        }

        /// <summary>
        /// Gets the type of the deserialization target.
        /// </summary>
        /// <value>The type of the deserialization.</value>
        public Type DeserializationType => baseDeserializer.DeserializationType;

        /// <summary>
        /// Deserializes the reader into a collection of objects.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="columnReport">The column report.</param>
        /// <returns>IEnumerable<TResult>.</returns>
        public IEnumerable<TResult> Deserialize(DbDataReader reader, ColumnChecker columnReport)
        {
            return baseDeserializer.Deserialize(reader, columnReport)
                .Cast<TResult>();
        }
    }
}