text:
Solis Tractor
Rice transplanter
Agricultural Utility Equipment
Net Cleaning Robot
Diesel Generators(Over 500kw)
HIMOINSA Generators
Maintenance Support
VISION03
Bio-composter
VISION01We offer highly efficient yet environmentally friendly energy.
VISION01 TOPWe offer highly efficient yet environmentally friendly energy.
Engine compliant with Tier 4 Regulations
Zero Emissions Building
Energy Network System
Hydrogen Fuel Cell System
VISION02We offer a comfortable working environment through automation and mechanical operations.
VISION02 TOPWe offer a comfortable working environment through automation and mechanical operations.
Robot Tractor
Auto Navigation and Docking System
VISION03We offer total support in the food value chain.
VISION03 TOPWe offer total support in the food value chain.
Smart Greenhouse
Yanmar Smart Agriculture
VISION04Yanmar strives to enrich everyday life through its business.
VISION04 TOPYanmar strives to enrich everyday life through its business.
Yanmar's Composter Recycles Food Waste for a Sustainable Society
YANMAR HOLDINGS CO., LTD INNOVATION & TECHNOLOGY DIVISION
YANMAR E-STIR CO., LTD
Faced with the growing problem of food waste disposal, Yanmar has developed a composter that utilizes proprietary technology to efficiently break down waste food.
The compost left after processing is reused for crop cultivation, contributing to a resource recycling system.
Effective utilization of food waste
The problem of food waste is attracting more and more attention as an area where progress can be made in enriching people's lives. Food waste is both a familiar part of daily life and an important cause of environmental pollution. Broadly speaking, food waste falls into two categories: food loss where food is still edible but is discarded, and food processing residue which is the waste produced during food processing. Japan produces about 25 million tons* of food waste annually with more than 1.3 billion tons of food waste produced globally, every year. Currently, most food waste is treated as industrial waste, but because it contains a lot of water it cannot be incinerated efficiently and a lot of CO2 is emitted with processing costs increasing every year.
Yanmar looked at a resource recycling system to tackle these issues and focused on developing a composter that could reduce the amount and volume of food waste and create an environmentally friendly resource cycle. In addition to reducing the amount of waste, the system has the advantage that the primary products that remain after processing can be reused as compost. The YC100 Bio-composter was developed for the effective use of food waste would towards realizing Yanmar's goal of a sustainable society.* Estimated amount of food waste generated in 2018 (Ministry of the Environment press release, April 27, 2021)
Yanmar's unique technology delivers optimal waste processing.
The YC100 Bio-composter development project started in 2019. The development team surveyed the current state of the composter market and were able to identify the problem of material forming balls in the compost and not decomposing. Research focused on this problem with the team succeeding in developing two new technologies.
The first of these was the Air Direct Injection (ADI). Most conventional mechanical composters employ a system that draws air into the reaction chamber. In the YC100, ambient air is heated and forced into the tank under pressure. Compared to natural aspiration models, in the YC100, the air has greater contact with the agitated material, improving drying efficiency. This required specialized solutions to ensure that the reaction chamber was airtight and free from leaks. Developers were able to reduce the size of the machine to a width of 2,500 mm, a depth of 1,400 mm, and a height of 1,940 mm for more compact installation.
The second technology was Yanmar's original automatic control and stirring technology. Yanmar's proprietary stirring claws are based on the shape and arrangement of the claws used in tractor implements. By applying rotary tiller technology to the Bio-composter's rotary stirrer, developers were able to achieve an even stirring to maintain a stable environment inside the tank. Yanmar also developed a system to optimally control the inside of the tank by automatically weighing material added to the tank and analyzing and controlling factors such as temperature, air volume, stirring speed, and the elapsed time of processing. The program can instruct users to increase the power to encourage drying if the material is heavy, or reduce the power if the material is light. Not only is it easy to use, but it also reduces power consumption.
In addition to these new technologies, hygiene is improved by equipping an activated carbon adsorption type deodorizer that suppresses the odor of food waste during processing. Operation is simple and automatic and users can start the processing cycle with the push of a button.
YC100 stirring claws incorporate tractor implement technology
In the field of food resources,
Yanmar embodies "A SUSTAINABLE FUTURE".
The YC100 can reduce 100 kg of food residue by approximately 80%* in 24 hours. After treatment, the product can be returned to the soil as a soil activator or as compost after further maturation, reducing disposal cost while considering the environment.
The system is expected to form a crucial component of circular resource recycling in the food industry with food waste from supermarkets and food processing factories transported to recycling centers where it is processed by the YC100. After recycled materials are processed and adjusted at the recycling center, they can be resold as compost and fertilizer products at DIY stores for use in agricultural land as an activator to improve soil and for crop cultivation.
Yanmar exhibited the YC100 at the first FOODtech Japan food factory, restaurant and kitchen automation technology expo, in Osaka March 2022, where it drew widespread attention. The developer will continue to monitor customer use of the YC100, gathering customer feedback and operational data for further development.
With this first step, the YC100 sets Yanmar on the road to building a resource recycling model that will create a sustainable future by effectively utilizing food.
* Value using Yanmar's testing machine and ordinary food waste.
Yanmar's YC100 for a sustainable society.
* Affiliation is as of March 2022.
Yanmar's YC100 Bio-composter has been brought to fruition, not only through the development and application of advanced technologies, but also through the selection materials such as bacterial feedstocks, together with business processes such as quality checks, and customer sales. Yanmar's strength is in implementing a working style in which professionals from multiple departments come together to complete a project.
Project members talked about the challenges in developing the YC100.
RIKAKO MAKISHIMA
(Oversaw selection of bacterial feedstock materials.)
"We need to add a good feedstock consisting of materials like sawdust and wood chips into the composter as a place to live for the bacteria. Until now, there was no standard for judging whether this was good or bad, so we tested each option one by one. It was a steady study, but I was able to make it a convincing level."
TOMOYA YAMASHITA
(Oversaw technology implementation and quality checks.)
"There are many items to with the implementation of new technology, and it was a battle against time, but it is all wasted things seem ok at first, only to have errors and problems occur later. I carefully checked them so that we could release it to the world with confidence."
SHINGO KAJI
(Oversaw sales activities and future expansion.)
"We will promote sales by fostering a better understanding of the various way in which the YC100 can be used and focusing on the unique selling point of this equipment. With this knowledge, we can make confident and authoritative proposals to customers that optimally meet their needs."
Smart Greenhouse a new way of comfortable and reliable farming
Yanmar Smart Agriculture supporting the agricultural business with efficiency
VISION01An energy-saving society.
VISION02A society where people can work and live with peace of mind.
VISION03A society where people can enjoy safe and plentiful food.
VISION04A society that offers an exciting life filled with rich and fulfilling experiences.
Propulsion Engine(High Speed)
Propulsion Engine(Medium Speed)
Auxiliary Engine
Diesel Generators (over 500kw)
Yanmar Hotline : 0804-1111-777
Email: info-yadin@yanmar.com


Kőszegi Testvérvárosi Egyesület acting on behalf of Kőszeg Town, Hungary is the coordinator of the project. Besides the coordination and general participants' role they will organize workshop and study visit dedicated to the cleanness of the water and its saving.
Douzelage Association in Chojna is the Polish partner in the project. Besides the general questions discussed everywhere they show the attitude of the local participants and foreign visitors towards work abroad, and involvement of students in international apprenticeship, as a small step towards being European.
Marsaskala Local Council is our partner from Malta. Besides the general questions they summarize the attitude of the local participants and foreign visitors towards the importance of a very small, isolated country and the importance of a small, almost forgotten language.
Tratti, representing Velletri, Italy is a typical cultural and social association with many young members, trained in several international projects. Their special task is to point out the question: How many European have been refugees in the past?
Stadt Bad Kötzting, Germany is located within the Nature Recreation Park "Upper Bavarian Forest" on the border to the Czech Republic. Besides the general discussions their special topic will be bee-keeping. This will allow them to present how important the international cooperation is to protect these small animals from epidemic illnesses.


The green is now open for roll ups. Barry Shaw is again running his very succesful coaching sessions. All members welcome, not just beginners. Wednesday mornings at 0930. Non-members who may be interested in starting bowling are very welcome to come along, with no charge or obligation to join the club. The Friday morning friendy competition has started again. Beginning at 10.30. Just come along from 10.00am onwards with partners / opponents decided by draw. All members / abilities welcome.
MEMBERSHIP - Our membership is now open again for the 2017 season . Anyone wanting more information about the club, or a membership form posted to them, should contact the secretary ( details below).
A membership form can be printed off below or or apply online.
Print off an application form.
Or fill in an application online - click on button below.


Thank you for joining us for the 9th Annual Celebration!
Celebrate DC Public Schools at the ninth annual Standing Ovation!
On Thursday, February 7, 2019, the DC community recognized the contributions of DCPS' incredible teachers, leaders, and school communities at The Anthem.


text:
Jane Austen gets a makeover in 'Pride and Prejudice and Zombies'
Romance of the Living Dead?
Jeffrey M. Anderson
Wed, Feb 3, 2016 (4:30 p.m.)
Pride and Prejudice and Zombies Lily James, Sam Riley, Lena Headey. Directed by Burr Steers. Rated PG-13. Opens Friday citywide.
Based on Seth Grahame-Smith's mashup novel, Pride and Prejudice and Zombies is, unsurprisingly, a fairly poor zombie film, but, surprisingly, a pretty good Jane Austen film. Director Burr Steers once made the literate coming-of-age film Igby Goes Down (2002), about smart, well-read people, and he enters Austen's world, telling the tale of Elizabeth Bennet (Lily James) and Mr. Darcy (Sam Riley) with springy enthusiasm, confident ease and even humor. The old familiar characters—last seen on the big screen in Joe Wright's 2005 adaptation of Austen's 1813 novel—generate genuine chemistry and love pangs, while leather boots creak and bosoms heave. Matt Smith (of Doctor Who) absolutely kills in his hilarious scenes as the ineffectual pest Mr. Collins (now Parson Collins).
But the zombie stuff and martial arts fighting feels tacked on, as if by committee. It's too bad that Steers couldn't have hired a co-director who actually cared about undead lore. These are ill-chosen fast zombies, better suited for exercising than for nightmares; the gore is deliberately avoided to secure a box office-friendly PG-13 rating, and what gore is shown is stuck on with smeary, third-rate computer effects. The choreographed fighting is lazily shot, stopping every now and then for a cursory chest-kick or head-butt. For a while, the enjoyable human aspect of the plot is enough to keep the movie pulsing, but as the third act comes around, it begins lumbering through more and more frequent dead spots. Even the ending is an indecisive split, attempting to please both sets of fans and dissatisfying all.

redpajama_set_name: RedPajamaCommonCrawl


Yue Zhang, Professor and Deputy Chair of the Department of Urban Planning at the School of Architecture, Tsinghua University, in Beijing, China.
Holcim Awards Gold 2008 Asia Pacific presentation (l-r): award-winner Yue Zhang congratulated by CEO Huaxin Cement, Yeqing Li.
Holcim Awards Gold 2008 winner: Yue Zhang, academic, Tsinghua University, School of Architecture, Beijing, China.
Holcim Awards Gold 2008 Asia Pacific presentation (l-r): CEO Huaxin Cement, Yeqing Li; award-winner Yue Zhang; CEO Holcim Ltd and Chairman Holcim Foundation, Markus Akermann.
Zhang Yue is Professor & Deputy Chair of the Department of Urban Planning at the School of Architecture, Tsinghua University, in Beijing, China.
He holds a Bachelor of Architecture (1996) and PhD in Engineering in Urban Planning (2003) from Tsinghua University.
He received the Chinese National Urban Planning & Design Award 3rd prize (2009), Finalist Prize of the 2nd Living Steel Housing Competition of UIA and IISI (2007), 2nd prize of "La Manufacture Des Paysages", France (2004), and the Grand Prix of the 3rd DBEW International Design Competition of Korea (2003).
He co-authored Foodscape Beijing (2004) with Shan Jun and has been published in journals including Proceedings of the National China Urban Planning Education Network (CUPEN), China City Planning Review, and Stadt Bauwelt.
He presented a paper in the workshop Retained diversity - Maintaining strengths while upgrading informal habitats at the 4th Holcim Forum (2013) in Mumbai, and was a member of the LafargeHolcim Awards jury for region Asia Pacific in 2014.
Zhang Yue was winner of the Global LafargeHolcim Awards Bronze 2009 and LafargeHolcim Awards Gold 2008 Asia Pacific for Sustainable planning for a rural community, Beijing, China. He also won a LafargeHolcim Awards Acknowledgement 2017 for Maximize the Minimum: Baitasi urban regeneration in Beijing, China.


During my time at IDEO, I worked within a team of designers to help redesign Wilsonart's sample wallboard, which lives in the workspaces of interior designers and architects worldwide. These wallboards act as salesmen for Wilsonart and are used to compare and choose laminates from Wilsonart and its competitors.
While I can't share further details, you can read more about the project and its outcomes in the press release and in IDEO Stories.


A 更多 Accurate Obama Twitter 个人资料. A 更多 accurate Twitter 个人资料 for Barack Obama. (Look closely!). HD Wallpaper and background images in the U.S. Republican Party club tagged: photo barack obama twitter anti-obama humor republican democrat sheep executive orders.


Enjoy the harmonizing energy of this amazing Sodalite bracelet with inspirational pewter charms. Sodalite promotes synergy between head & heart & helps to alleviate fears. Slip-on style with 8mm beads on strong elastic cord is 18cm & can also be custom sized. Choose your silver plated pewter charm below.
Enjoy the harmonizing energy of this amazing Sodalite bracelet with inspirational pewter charms & white coconut. Sodalite promotes synergy between head & heart & helps to alleviate fears. Slip-on style with 8mm beads on strong elastic cord is 18cm & can also be custom sized. Choose your silver plated pewter charm below.
This powerful synergy of gemstone energies is designed to raise your vibration to help you manifest abundance in your life. White Howlite helps you to remain calm & centered, Blue Sodalite promotes synergy between head & heart & alleviate fears, Pyrite promotes self worth & attracts money & success & Clear Quartz amplifies the energies of these stones & energizes your intentions & desires.....what a powerful combination !
Wear this high energy quantum activated support tool to maintain a high vibration that attracts abundance.
Choose from Love Much/Laugh Lots or Follow your Heart charms.


text:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Data List Helpers
 *
 * @package		CodeIgniter
 * @subpackage	Helpers
 * @category	Helpers
 * @author		Jeff Fox
 * @description	Various helpers for handling data lists
 * @version		1.0.1
 */
// ------------------------------------------------------------------------
/**
 * loadSimpleDataList.
 * Provides a simple method for retrieving the index and values of the
 * many basic data lists used by the site.
 * @param	$list	The list id. See usage for tips
 * @param	$column	(OPTIONAL) Specifiy a column (other than id) to sort the list on
 * @param	$order	(OPTIONAL) Specify a SQL sort order other than ASC
 * @return			A key/value pair array of data items
 * @since			1.0
 */
if ( ! function_exists('loadSimpleDataList')) {
	function loadSimpleDataList($list,$column = '', $order = "ASC", $label = '') {
		$ci =& get_instance();
		$table = '';
		switch ($list) {
			case 'username':
				$table = USER_CORE_TABLE;
				break;
			case 'StateName':
				$table = 'states_us';
				break;
			case 'cntryName':
				$table = 'countries';
				break;
			case 'userLevel':
				$table = 'list_user_levels';
				break;
			case 'accessLevel':
				$table = 'list_access_levels';
				break;
			case 'userType':
				$table = 'list_user_types';
				break;
			case 'availableOOTPLeagues':
				$table = 'leagues';
				$list = "name";
				$label = "OOTP League";
				$identifier = 'league_id';
				break;
			case 'availableOOTPLeaguesAbbr':
				$table = 'leagues';
				$list = "abbr";
				$label = "OOTP League";
				$identifier = 'league_id';
				break;
			case 'accessType':
				$table = 'fantasy_leagues_access';
				break;
			case 'leagueStatus':
				$table = 'fantasy_leagues_status';
				break;
			case 'leagueType':
				$table = 'fantasy_leagues_types';
				break;
			case 'bugCategory':
				$table = 'admin_list_bug_categories';
				break;
			case 'bugStatus':
				$table = 'admin_list_status';
				break;
			case 'priority':
				$table = 'admin_list_priorities';
				break;
			case 'severity':
				$table = 'admin_list_severities';
				break;
			case 'os':
				$table = 'qa_list_os';
				break;
			case 'browser':
				$table = 'qa_list_browsers';
				break;
			case 'project':
				$table = 'admin_projects';
				$list = 'name';
				break;
			case 'newsType':
				$table = 'fantasy_news_type';
				break;
			case 'tradeStatus':
				$table = 'fantasy_teams_trades_status';
				break;
			case 'tradeApprovalType':
				$table = 'fantasy_teams_trades_approvals';
				break;
			case 'activationType':
				$table = 'users_activation_types';
				break;
			default:
				break;
		} // END switch

		// ADD Default FIRST ITEM
		if (empty($identifier)) { $identifier = 'id'; }
		if (empty($column)) { $column = $identifier; }
		if (empty($label)) { $label = $list; }

		$datalist = array(''=>'Choose '.$label);

		// ADD LIST RESULTS
		if ($ci->db->table_exists($table) && !empty($table)) {
            $query = $ci->db->query('SELECT '.$identifier.', '.$list.' FROM '.$table.' ORDER BY '.$column .' '.$order);
            if ($query->num_rows() > 0) {
                foreach ($query->result() as $row) {
                    $datalist = $datalist + array($row->$identifier=>$row->$list);
                } // END foreach
            } // END if
            $query->free_result();
		} else {
            redirect('media/nodb.php');
        }
		return $datalist;
	} // END function
} // END if

// ------------------------------------------------------------------------

if ( ! function_exists('loadLimitedBugStatusList')) {
	function loadLimitedBugStatusList($threshold = 2) {
		$retrunList = array();
		$dataList = loadSimpleDataList('bugStatus');
		foreach($dataList as $key => $value) {
			if ($key < $threshold) {
				$retrunList = $retrunList + array($key => $value);
			} // END if
		} // END foreach
		return $retrunList;
	} // END function
} // END if

// ------------------------------------------------------------------------

if ( ! function_exists('resolveUsername')) {
	function resolveUsername($userId = false) {
	    if ($userId === false) {
	        return false;
	    }
	    $username = '';
	    $userList = loadSimpleDataList('username');
	    foreach($userList as $key => $value) {
	        if ($key == $userId) {
	           $username = $value;
	           break;
	        } // END if
		} // END foreach
	    return $username;
	} // END function
} // END if
// ------------------------------------------------------------------------

if ( ! function_exists('resolveOwnerName')) {
	function resolveOwnerName($ownerId = false) {
	  	if ($ownerId === false) {
	        return false;
	    }
	    $ci =& get_instance();
	  	$ownerName = '';
		$query = $ci->db->query('SELECT firstName, lastName FROM users_meta WHERE userId = '.$ownerId);
		if ($query->num_rows() > 0) {
			$row = $query->row();
			$ownerName = $row->firstName." ".$row->lastName;
		} // END if
		$query->free_result();

	    return $ownerName;
	} // END function
} // END if
// ------------------------------------------------------------------------

if ( ! function_exists('getInjuryName')) {
	function getInjuryName($injuryId = false) {
	  	if ($injuryId === false) {
	        return false;
	    }
	    $ci =& get_instance();
	  	$injuryName = '';
		$query = $ci->db->query('SELECT injury_text FROM list_injuries WHERE id = '.$injuryId);
		if ($query->num_rows() > 0) {
			$row = $query->row();
			$injuryName = $row->injury_text;
		} // END if
		$query->free_result();

	    return $injuryName;
	} // END function
} // END if
// ------------------------------------------------------------------------

if ( ! function_exists('getRandomTeamNickname')) {
	function getRandomTeamNickname() {

		$nick = "";
	    $ci =& get_instance();

	    $query = $ci->db->query('SELECT nickname FROM list_team_nicknames');
		if ($query->num_rows() > 0) {

			$randId = rand(1, $query->num_rows());
			$query->free_result();
			$query = $ci->db->query('SELECT nickname FROM list_team_nicknames WHERE id = '.$randId);
			$row = $query->row();
			$nick = $row->nickname;
		} // END if
		$query->free_result();

	    return $nick;
	} // END function
} // END if

// ------------------------------------------------------------------------

if ( ! function_exists('resolveTeamName')) {
	function resolveTeamName($teamId = false) {
	  	if ($teamId === false) {
	        return false;
	    }
	    $ci =& get_instance();
	  	$name = '';
	    $query = $ci->db->query('SELECT teamname,teamnick FROM fantasy_teams WHERE id = '.$teamId);
		if ($query->num_rows() > 0) {
			$row = $query->row();
			$name = $row->teamname." ". $row->teamnick;
		} // END if
		$query->free_result();

	    return $name;
	} // END function
} // END if

// ------------------------------------------------------------------------

if ( ! function_exists('listLeagueDivisions')) {
	function listLeagueDivisions($league_id,$selectBox = true) {
		if ($selectBox)
			$result = array(' '=>'Select Division');
		else
			$result = array();

		$ci =& get_instance();
		// LOAD CHARACTERS
		$ci->db->select('id, division_name')
				 ->from('fantasy_divisions')
				 ->where('league_id',$league_id)
				 ->order_by('division_name','asc');
		$query = $ci->db->get();
		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$result = $result + array($row->id=>$row->division_name);
			}
		} // END if
		$query->free_result();
		if (($selectBox && sizeof($result) == 1)) {
			$result = $result + array(' '=>'No divisions found');
		}
		return $result;
	}
}
// ------------------------------------------------------------------------

if ( ! function_exists('listLeagueTypes')) {
	function listLeagueTypes($onlyActive = false, $selectBox = true) {
		if ($selectBox)
			$result = array(' '=>'Select Type');
		else
			$result = array();

		$ci =& get_instance();
		// LOAD CHARACTERS
		$ci->db->select('id, leagueType');
		$ci->db->from('fantasy_leagues_types');
		if ($onlyActive) {
			$ci->db->where('active',1);
		}
		$ci->db->order_by('id','asc');
		$query = $ci->db->get();
		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$result = $result + array($row->id=>$row->leagueType);
			}
		} // END if
		$query->free_result();
		if (($selectBox && sizeof($result) == 1)) {
			$result = $result + array(' '=>'No league types found');
		}
		return $result;
	}
}
// ------------------------------------------------------------------------

if ( ! function_exists('getOOTPLeagueDetails')) {
	function getOOTPLeagueDetails($league_id = -1) {
		//$date = date('Y-m-d');
		if ($league_id == -1) return;
		$details = false;
		$ci =& get_instance();
		// LOAD CHARACTERS
		$ci->db->select('start_date, current_date, league_state, league_level');
		$ci->db->from('leagues');
		$ci->db->where('league_id',$league_id);
		$query = $ci->db->get();
		if ($query->num_rows() > 0) {
			$details = $query->row();
		} // END if
		$query->free_result();
		return $details;
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('getLeagueStartDate')) {
	function getLeagueStartDate($league_id = -1) {
		//$date = date('Y-m-d');
		if ($league_id == -1) return;

		$ci =& get_instance();
		// LOAD CHARACTERS
		$ci->db->select('start_date');
		$ci->db->from('leagues');
		$ci->db->where('league_id',$league_id);
		$query = $ci->db->get();
		if ($query->num_rows() > 0) {
			$row = $query->row();
			$date = $row->start_date;
		} // END if
		$query->free_result();
		return $date;
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('getVisibleDays')) {
	function getVisibleDays($league_date, $sim_length) {

		//echo("getVisibleDays: league_date = ".$league_date."
");
		//echo("sim_length = ".$sim_length."
");
		if (!isset($league_date)) return;
		$days = array($league_date);
		$d = strtotime($league_date);
		$days_added = 1;
		while ($days_added < $sim_length) {
			array_push($days,date('Y-m-d',$d+($days_added*60*60*24)));
			$days_added++;
		}
		//echo("days_added = ".$days_added."
");
		//echo("days = ".sizeof($days)."
");
		return $days;
	}
}
if ( ! function_exists('getOOTPTeamAbbrs')) {
	function getOOTPTeamAbbrs($ootp_league_id,$year) {
		$teams = array();
		$ci =& get_instance();
		$query=$ci->db->query("SELECT team_id,year,abbr,name,nickname FROM team_history UNION SELECT team_id,'$year',abbr,name,nickname FROM teams ORDER BY team_id,year;");
		$prevTid=-1;
		if ($query->num_rows() > 0) {
			foreach($query->result_array() as $row) {
				$tid=$row['team_id'];
				$yr=$row['year'];
				$teams[$tid][$yr]=$row['abbr'];
				$tname=$row['name']." ".$row['nickname'];
				$teamnames[$tid][$yr]=$tname;
				if ($prevTid!=$tid) {$teamnames[$tid]['ing']=$tname;}
				$prevTid=$tid;
			}
		}
		return $teams;
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('getLeagueAwardsNames')) {
	function getLeagueAwardsNames($ootp_league_id) {

		$awardName = array();
		$ci =& get_instance();
		$ci->db->select('mvp_award_name,pitcher_award_name,rookie_award_name,defense_award_name');
		$ci->db->where("league_id",$ootp_league_id);
		$query = $ci->db->get('leagues');
		if ($query->num_rows() > 0) {
			$row = $query->row_array();
			$awardName[5]=$row['mvp_award_name'];
			$awardName[4]=$row['pitcher_award_name'];
			$awardName[6]=$row['rookie_award_name'];
			$awardName[7]=$row['defense_award_name'];
			$awardName[9]='All-Star';
		}
		$query->free_result();
		return $awardName;
	}
}
/**----------------------------------------------------------
/
/	GET PLAYERS OOTP TEAM
/	Returns the OOTP Team ID for the passed player_id
/
/	@param	$player_id 		(int)	The OOTP Player_id
/	@return					(int)	Team id or -1
/
/	@since	1.0.3 PROD
/
/-----------------------------------------------------------*/
if ( ! function_exists('getPlayerOOTPTeam')) {
	function getPlayerOOTPTeam($player_id) {

		if (!isset($ci)) $ci =& get_instance();
		/**
		 * GET PROJECTED PITCHING  STARTS
		 */
		$team_id = -1;
		$ci->db->flush_cache();
		$ci->db->select('team_id');
		$ci->db->where('player_id', $player_id);
		$query = $ci->db->get('players');
		if ($query->num_rows() > 0) {
			$row = $query->row();
			$team_id = $row->team_id;
		}
		$query->free_result();
		return $team_id;
	}
}

/**----------------------------------------------------------
/
/	GET PITCHERS STARTS
/	Returns an array of starters for an OOTP team if the passed
/	player id is present in that teams starters list.
/
/	@param	$player_id 		(int)	The OOTP Player_id
/	@return					(Array)	Array of player ids
/
/	@since	1.0.3 PROD
/
/-----------------------------------------------------------*/
if ( ! function_exists('getPitcherStarts')) {
	function getPitcherStarts($player_id) {

		if (!isset($ci)) $ci =& get_instance();
		/**
		 * GET PROJECTED PITCHING  STARTS
		 */
		$startsArr = array();
		$ci->db->flush_cache();
		$ci->db->select();
		$where =  '(starter_0 = '.$player_id.' OR starter_1 = '.$player_id;
		$where .= ' OR starter_2 = '.$player_id.' OR starter_3 = '.$player_id;
		$where .= ' OR starter_4 = '.$player_id.' OR starter_5 = '.$player_id;
		$where .= ' OR starter_6 = '.$player_id.' OR starter_7 = '.$player_id.')';
		$ci->db->where($where);
		$query = $ci->db->get('projected_starting_pitchers');
		//echo($ci->db->last_query()."
");
		if ($query->num_rows() > 0) {
			$startsArr = $query->result_array();
		}
		$query->free_result();
		return $startsArr;
	}
}
/**----------------------------------------------------------
/
/	GET PITCHERS SCHEDULE
/	Returns an array of upcomiong games for the passed
/	player based ont he teams schedule. If the player
/	is a pitcher, the function calls getPitcherStarts() and
/	will set 'start' to 1 if the pitcher is prohjected to start
/	for a given game.
/
/	@param	$players 		(Array)			Array of layer information
/	@param	$start_date		(Date String)	Starting date for scheudle
/	@param	$simLen			(int)			Number of days of games to return
/	@return					(Array)			Array of schedule for Team->Lineup page
/
/	@since	0.1 BETA
/	@changelog				1.0.3 PROD - Added call to getPitcherStarts()
/							Also fixed handling of off days and doubleheaders in schedule
/
/-----------------------------------------------------------*/
if ( ! function_exists('getPlayerSchedules')) {
	function getPlayerSchedules($players,$start_date,$simLen) {

		$daysInPeriod = getVisibleDays($start_date,$simLen);
		$schedules = array('players_active'=>array(),'players_reserve'=>array(),'players_injured'=>array());
		$ci =& get_instance();
		// LOAD PLAYERS
		if (is_array($players) && sizeof($players) > 0) {
			foreach ($players as $arr_id => $players_arr) {
				if ($arr_id == 0) { $list = 'players_active'; } else if ($arr_id == 1) { $list = 'players_reserve'; } else { $list = 'players_injured'; }
				if (is_array($players_arr) && sizeof($players_arr) > 0) {
					foreach ($players_arr as $id => $data) {
						// GET START PROJECTIONS for pitchers
						$projStarts = array();
						if ($data['position'] == 1 && ($data['role'] == 11 || $data['role'] == 12)) {
							$projStarts = getPitcherStarts($id);
						}
						$ci->db->flush_cache();
						$ci->db->select('game_id,home_team,away_team,games.date AS game_date,time AS game_time');
						$ci->db->where("DATEDIFF('".$start_date."',games.date)<=",0);
						$ci->db->where("DATEDIFF('".$start_date."',games.date)>-",$simLen);
						$ci->db->where('(home_team = '.$data['team_id'].' OR away_team = '.$data['team_id'].')');
						$ci->db->order_by('games.date','asc');
						$query = $ci->db->get('games');
						//echo($ci->db->last_query()."
");
						$player_schedule = array();
						$offDay = 0;
						$startDay = 0;
						if ($query->num_rows() > 0) {
							$dateCount = 0;
							$prevDate = -1;
							$results = $query->result_array();
							while ($dateCount < 7) {
							//foreach ($query->result() as $row) {
								$start = -1;
								$calendar_date = strtotime($daysInPeriod[$dateCount]);
								$games = array();
								foreach($results as $game_data) {
									$game_date = strtotime($game_data['game_date']);
									if ($game_date == $calendar_date) {
										array_push($games, $game_data);
									}
								}
								if (sizeof($games) > 0) {
									if ($data['position'] == 1 && ($data['role'] == 11 || $data['role'] == 12))
										if ($projStarts[0]['starter_'.$startDay] == $id) $start = 1;
									foreach($games as $game_data) {
										$player_schedule = $player_schedule + array($game_data['game_id']=>array('home_team'=>$game_data['home_team'],
															   'away_team'=>$game_data['away_team'],'game_date'=>$game_data['game_date'],
															   'game_time'=>$game_data['game_time'],'start'=>$start));
									}
									$startDay++;
								} else {
									$player_schedule = $player_schedule + array(($offDay-=1)=>array('game_date'=>$daysInPeriod[$dateCount],'home_team'=>-1,
															   'away_team'=>-1));
								}
								$dateCount++;
							} // END foreach
							if (sizeof($player_schedule) < intval($simLen)) {
								$player_schedule = $player_schedule + array(($offDay-=1)=>array('home_team'=>-1,
												   'away_team'=>-1));
							}
						} // END if
						$query->free_result();
						$schedules[$list] = $schedules[$list] + array($id=>$player_schedule);
					} // END foreach
				} // END if
			} // END foreach
		} // END if
		return $schedules;
	}
}
// ------------------------------------------------------------------------

if ( ! function_exists('getOOTPTeams')) {
	function getOOTPTeams($league_id,$selectBox = true) {
		if ($selectBox)
			$result = array(' '=>'Select Team');
		else
			$result = array();

		$ci =& get_instance();
		// LOAD TEAMS

		$ci->db->select('team_id,abbr,name,nickname,logo_file_name')
				 ->from('teams')
				 ->where('league_id',$league_id)
				 ->where('allstar_team',0)
				 ->order_by('name,nickname','asc');
		$query = $ci->db->get();
		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$tname=$row->name." ".$row->nickname;
      			$tname=str_replace(".","",$tname);
				if (!$selectBox) {
					$result = $result + array($row->team_id=>array('name'=>$tname,'nickname'=>$row->nickname,
					'abbr'=>$row->abbr,'logo_file_name'=>$row->logo_file_name));
				} else {
					$result = $result + array($row->team_id=>$tname);
				}
			}
		} // END if
		$query->free_result();
		if (($selectBox && sizeof($result) == 1)) {
			$result = $result + array(' '=>'No teams found');
		}
		return $result;
	}
}
// ------------------------------------------------------------------------

if ( ! function_exists('getDaysInBetween')) {
	function getDaysInBetween($start, $end) {
		// Vars
		$day = 86400; // Day in seconds
		$format = 'Y-m-d'; // Output format (see PHP date funciton)
		$sTime = strtotime($start); // Start as time
		$eTime = strtotime($end); // End as time
		$numDays = round(($eTime - $sTime) / $day) + 1;
		$days = array();

		// Get days
		for ($d = 0; $d < $numDays; $d++) {
			$days[] = date($format, ($sTime + ($d * $day)));
		}

		// Return days
		return $days;
	}
}
// ------------------------------------------------------------------------

if ( ! function_exists('getFantasyTeams')) {
	function getFantasyTeams($league_id,$selectBox = true) {
		if ($selectBox)
			$result = array(' '=>'Select Team');
		else
			$result = array();
		$ci =& get_instance();
		// LOAD TEAMS
		$ci->db->select('id,teamname, teamnick')
				 ->from('fantasy_teams')
				 ->where('league_id',$league_id)
				 ->order_by('teamname,teamnick','asc');
		$query = $ci->db->get();
		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$teamname=$row->teamname." ".$row->teamnick;
      			$teamname=str_replace(".","",$teamname);
				$result = $result + array($row->id=>$teamname);
			}
		} // END if
		$query->free_result();
		if (($selectBox && sizeof($result) == 1)) {
			$result = $result + array(' '=>'No teams found');
		}
		return $result;
	}
}
// ------------------------------------------------------------------------

if ( ! function_exists('getMonths')) {
	function getMonths() {
		return array('0'=>'Select Month',
			  '1'=>'January',
			  '2'=>'February',
			  '3'=>'March',
			  '4'=>'April',
			  '5'=>'May',
			  '6'=>'June',
			  '7'=>'July',
			  '8'=>'August',
			  '9'=>'September',
			  '10'=>'October',
			  '11'=>'Novemeber',
			  '12'=>'December');
	} // END function
} // END if

// ------------------------------------------------------------------------

if ( ! function_exists('getDays')) {
	function getDays() {
		$days = array('0'=>'Select Day');
		for ($i = 1; $i < 32; $i++) {
			$days = $days + array($i=>$i);
		}
		return $days;
	} // END function
} // END if

// ------------------------------------------------------------------------

if ( ! function_exists('getYears')) {
	function getYears($startYear = false,$endYear = false) {
		if ($startYear === false)
			$startYear = date('Y');
		if ($endYear === false)
			$endYear = $startYear - 100;
		$years = array('0'=>'Select Year');
		for ($j = $startYear ; $j >= $endYear; $j--) {
			$years = $years + array($j=>$j);
		}
		return $years;
	} // END function
} // END if

// ------------------------------------------------------------------------

if ( ! function_exists('getHours')) {
	function getHours() {
		$retArray = array();
		for ($c=1;$c<=12;$c++) {
			$x = str_pad( strval($c), 2, '0', STR_PAD_LEFT);
			$retArray = $retArray + array($x=>$x);
		}
		return $retArray;
	} // END function
} // END if

// ------------------------------------------------------------------------

if ( ! function_exists('getMinutes')) {
	function getMinutes($limit = false) {
		$retArray = array();
		if ($limit) {
			$retArray = $retArray + array('00'=>'00');
			$retArray = $retArray + array('15'=>'15');
			$retArray = $retArray + array('30'=>'30');
			$retArray = $retArray + array('45'=>'45');
		} else {
			for ($c=0;$c<=60;$c++) {
				$x = str_pad( strval($c), 2, '0', STR_PAD_LEFT);
				$retArray = $retArray + array($x=>$x);
			}
		}
		return $retArray;
	} // END function
} // END if

// ------------------------------------------------------------------------

if ( ! function_exists('getAMPM')) {
	function getAMPM() {
		return array('AM'=>'AM','PM'=>'PM');
	} // END function
} // END if

// ------------------------------------------------------------------------

if ( ! function_exists('loadStates')) {
	function loadStates() {
		$states = array();
		$ci =& get_instance();
		$ci->db->select('stateCode, stateName')
						->from('states_us')
						->order_by('stateName','asc');

		$query = $ci->db->get();
		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$states = $states + array($row->stateCode=>$row->stateName);
			}
		}
		$query->free_result();
		return $states;

	}
}
// ------------------------------------------------------------------------

if ( ! function_exists('loadCountries')) {
    function loadCountries($selectBox = true) {

        if ($selectBox) {
            $result = array(' '=>'Select Country');
        } else {
            $result = array();
        }
        $ci =& get_instance();
        $ci->db->select('id, cntryName')
            ->from('countries')
            ->order_by('id','asc');
        $query = $ci->db->get();
        if ($query->num_rows() > 0) {
            foreach ($query->result() as $row) {
                $result = $result + array($row->id=>$row->cntryName);
            }
        }
        $query->free_result();
        return $result;

    }
}

// ------------------------------------------------------------------------
/**
 * 	LOAD TIMEZONES.
 * 	Loads a list of timezone identifers for selection by the user.
 *
 * 	@param	$selectBox	(Boolean)	TRUE if the list will populate a select box, FALSE otherwise
 * 	@return				array		Array of timezones
 * 	@since				1.0.6
 */
if ( ! function_exists('loadTimezones')) {
	function loadTimezones($selectBox = true) {

		if ($selectBox) {
			$result = array(' '=>'Select Timezone');
		} else {
			$result = array();
		}
		$continent = '';
	    $timezone_identifiers = DateTimeZone::listIdentifiers();
	    foreach( $timezone_identifiers as $value ){
	        if ( preg_match( '/^(America|Antartica|Arctic|Asia|Atlantic|Europe|Indian|Pacific)\//', $value ) ){
	            $ex=explode("/",$value);//obtain continent,city
	            //if ($continent!=$ex[0]){
	            //    $result = $result + array('X'=>$ex[0]);
	           // }
	            $city=$ex[1];
	            $continent=$ex[0];
	            $result = $result + array($value=>$continent."/".$city);
	        }
	    }
		return $result;
	}
}

// ------------------------------------------------------------------------
if ( ! function_exists('loadProjectsBugs')) {
	function loadProjectsBugs($projectId,$selectBox = true) {
		if ($selectBox)
			$result = array(' '=>'Select Bug');
		else
			$result = array();

		$ci =& get_instance();
		// LOAD CHARACTERS
		//echo("Event ID = ".$eventId."
");
		$ci->db->select('admin_bugs.id, admin_bugs.summary, bugStatus,severity, priority')
				 ->from('admin_bugs')
				 ->join('admin_list_status','admin_list_status.id = admin_bugs.bugStatusId','right outer')
				 ->join('admin_list_severities','admin_list_severities.id = admin_bugs.severityId','right outer')
				 ->join('admin_list_priorities','admin_list_priorities.id = admin_bugs.priorityId','right outer')
				 ->where('projectId',$projectId)
				 //->where('regStatus',1)
				 ->order_by('admin_bugs.bugStatusId, admin_bugs.priorityId','asc');
		$query = $ci->db->get();
		//echo("Num rows = ".$query->num_rows()."
");
		//echo("Query = ".$ci->db->last_query()."
");
		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$result = $result + array($row->id=>array('summary'=>$row->summary,
														  'bugStatus'=>$row->bugStatus,
														  'severity'=>$row->severity,
														  'priority'=>$row->priority));
			}
		} // END if
		$query->free_result();
		if (($selectBox && sizeof($result) == 1)) {
			$result = $result + array(' '=>'No bugs were found');
		}
		return $result;
	}
}
// ------------------------------------------------------------------------
if ( ! function_exists('loadOOTPVersions')) {
	function loadOOTPVersions($selectBox = true) {

		return array("17"=>"OOTP 17",
					 "18"=>"OOTP 18",
					 "19"=>"OOTP 19",
					 "20"=>"OOTP 20",
					 "21"=>"OOTP 21"
					 );
	}
}
// ------------------------------------------------------------------------
if ( ! function_exists('getOOTPGameVersion')) {
	function getOOTPGameVersion($version = -1) {

		$outVer = -1;
		$versions = loadOOTPVersions();
		foreach ($versions as $ver => $label) {
			if ($ver == $version) {
				$outVer = $label;
				brek;
			}
		}
		return $outVer;
	}
}

// ------------------------------------------------------------------------
if ( ! function_exists('loadSecurityClasses')) {
	function loadSecurityClasses($selectBox = true) {

		return array("=1"=>"None",
					 "1"=>"Critical (Registration, Contact Pages Only)",
					 "2"=>"Public (All Public Forms)",
					 "3"=>"Complete (All Public Forms, Login, Team Requests)");
	}
}
// ------------------------------------------------------------------------
if ( ! function_exists('loadRecaptchaThemes')) {
	function loadRecaptchaThemes($selectBox = true) {

		return array("red"=>"Red",
					 "white"=>"White",
					 "blackglass"=>"Black Glass",
					 "clean"=>"Clean");
	}
}

// ------------------------------------------------------------------------
if ( ! function_exists('loadRecaptchaLangs')) {
	function loadRecaptchaLangs($selectBox = true) {

		return array("en"=>"English",
					 "nl"=>"Dutch",
					 "fr"=>"French",
					 "de"=>"German",
					 "pt"=>"Portuguese",
					 "ru"=>"Russian",
					 "es"=>"Spanish",
					 "tr"=>"Turkish");
	}
}
/* End of file dataList_helper.php */
/* Location: ./system/helpers/dataList_helper.php */

redpajama_set_name: RedPajamaGithub


This DVD also contains footage of the Tangerine Dream from the legendary music programme, All You Need is Love. It will be welcomed by the massive Tangerine Dream fan base, and also seen for what it is – a meeting of cultures and for a brief moment in time, a time where the past met both the present and the future.
Filmed Live at Coventry Cathedral – signed by Tony Palmer.


Holy Ghost ipomopsis is an attractive plant with clusters of flowers on stalks about 2 feet tall. Photo by Bob Sivinski, New Mexico State Forestry Division.
A flat of young Holy Ghost ipomopsis ready for planting. Photo by Bob Sivinski, New Mexico State Forestry Division.
A volunteer plants Holy Ghost ipomopsis in natural habitat. Photo by Phil Tonne, University of New Mexico.
Volunteers dig holes and plant Holy Ghost Ipomopsis at one of the three hillside locations on the Santa Fe National Forest. Photo by Phil Tonne, University of New Mexico.
The worldwide distribution of Holy Ghost ipomopsis (Ipomopsis sancti-spiritus), a federally endangered plant, is limited to a 2-mile stretch of Holy Ghost Canyon on the Santa Fe National Forest in north-central New Mexico. Concerns that a catastrophic forest fire might wipe out the species stimulated efforts to establish new populations in nearby canyons. In addition, plants grow best in bare mineral soils. Natural disturbances have been excluded from Holy Ghost Canyon for decades. Competing plants are moving in, shade is increasing, and leaf litter is building up, all of which are bad for Holy Ghost ipomopsis growing conditions, as well as increasing the fire risk. So botanists are thinning the forest and doing mechanical ground disturbance in Holy Ghost Canyon to improve the habitat for this endangered plant. Partners in these recovery efforts are the Forest Service, U.S. Fish and Wildlife Service, New Mexico State Forestry Division, University of New Mexico, and local volunteers.
In 2005, Botanists selected three locations to start new Holy Ghost ipomopsis populations. All of the sites were similar to the occupied habitat but far enough apart that the same wildfire or other catastrophe would not hit all of them.
Plants were germinated and grown at the University of New Mexico greenhouse to maximize the number of plants that could be coaxed through the sensitive seedling stage. Planting was done in early July at the beginning of the summer rainy season. In 2005, the normal summer rains did not come and the plants had to be hand watered for more than a month. Watering duties were shared among the partners. Rainfall was abundant in 2006 during and after the plantings. More than a thousand plants were put in the ground and survival exceeded 80 percent. Most of the plants flowered during the summers of 2007 and 2008. New plants will start coming up from seeds in 2009 and later. Phil Tonne of the Natural Heritage Program at the University of New Mexico will monitor the new populations for at least 5 years.
In 2009, a project was initiated to improve the habitat in Holy Ghost Canyon. Two New Mexico inmate forestry crews cut down all the trees that were less than 10 inches in diameter in two plots that totaled about 2 acres. All of the wood and small limbs were removed from the area. Additional ground disturbance will be done with rakes to expose more of the bare mineral soil that Holy Ghost ipomopsis prefers. Monitoring plots were set up in both treated and untreated areas to determine how Holy Ghost ipomopsis responds to its new habitat. If the response is positive, the treatments will be expanded to other nearby areas.
The forest before thinning. The tape marks a tree to be removed. All of the trees smaller than the one marked will also be removed. Notice the thick layer of pine needle thatch and the general absence of herbaceous plants in this closed canopy forest. Photo by Charlie McDonald.
These flags mark Holy Ghost ipomopsis plants growing along the roadside just downhill from one of the treatment areas. Notice that Holy Ghost ipomopsis is growing on a rocky eroding slope that has little ground cover. Photo by Charlie McDonald.
The New Mexico inmate forestry crew is felling trees and hauling them out of the treatment area. Photo by Charlie McDonald.
All of the small limbs were chipped and hauled away. Photo by Charlie McDonald.
The forest after thinning. More sunlight can now reach the forest floor. Hand raking will be done to expose the mineral soils that Holy Ghost ipomopsis prefers. Photo by Charlie McDonald.


text:
South Tel Avivians Push Back Against Asylum-Seekers
'Now I live in a ghetto,' says a longtime resident as neighborhood changes.
By Michele Chabin	February 7, 2018, 9:10 am 1 Edit
Most Israel-based African asylum-seekers live in South Tel Aviv in squalid conditions. Michele Chabin/JW
Tel Aviv — Sophie Menashe, who is in her 70s, rarely leaves her fifth-floor walk-up apartment these days, but she insists it's not because the six-story building lacks an elevator.
The reason, she said, is fear.
"I've lived here 40 years. I raised my three children here and I love to walk to the sea. But now I live in a ghetto. I can't leave my home because this building is full of infiltrators," said Menashe, a resident of South Tel Aviv, which has the highest concentration of African asylum-seekers (or, depending on who you talk to, "migrants") in Israel.
When Menashe, who immigrated to Israel from India as a child, wants to leave her apartment, "I often call the police," for an escort. "Women I know have been attacked. One was murdered. The Africans knock on my door and try to force their way into my apartment," she said.
"The police have given me a call button so I can call in case of emergency," she said during an interview in her dilapidated building, whose hallway is dark and littered with cigarette butts and trash. Of the 24 apartments in the building, 21 are rented by asylum-seekers, she said.
Menashe said she has no plans to leave the area despite feeling unsafe.
"This has been my home for four decades. I like the neighborhood. And where would I move? This is my home, this is my country and I can live wherever I want to," she said.
Menashe is one of the many residents of South Tel Aviv who are pressing for the removal — if not the outright deportation — of the roughly 38,000 Africans who entered Israel illegally.
Prime Minister Netanyahu, who calls the Eritreans and Sudanese "infiltrators," has vowed to deport or imprison any male asylum-seeker who is not a father unless he accepts $3,500 and a one-way plane ticket to an African country, believed to be either Rwanda or Uganda, possibly both.
On Sunday the government began handing out deportation letters to the asylum-seekers, who were told they would be sent to an African nation with a "stable government."
Sophie Menashe, a longtime resident of South Tel Aviv, with Shlomo Maslawi, a Tel Aviv councilman. Both say the Africans who entered Israel illegally are hurting the neighborhood and should be deported. photos by Michele Chabin/JW
Residents of South Tel Aviv say media outlets and the humanitarian organizations that are fighting the deportations have ignored their plight, and have instead focused on the Africans' rights.
Shlomo Maslawi, a Tel Aviv councilman, acknowledged that South Tel Aviv has always been economically depressed, but said young students and professionals began to move here a couple of decades ago. They have since fled, he said, due to the presence of asylum-seekers.
"In recent years the stronger populations have left the neighborhood and only the weak remain."
Maslawi said the asylum-seekers have brought crime to the neighborhood, despite the fact that a controversial police report found that the foreigners commit fewer crimes than Israelis.
"I'm not here permanently," says Eritrean asylum-seeker Teklit Michael. "I'm here only until my country becomes safe enough to return home."
"Take a walk around here at 8 or 9 p.m. and you'll see hundreds of them drunk, using drugs. They're working with the Bedouin to sell drugs."
Yaakov Omrad, who owns a printing press in the area, said he was forced to eliminate the press' overnight shift "because customers are afraid to come after dark."
Despite what he considers a problematic situation, Omrad said he isn't in favor of a mass deportation.
"Israel should help law-abiding, genuine asylum-seekers," he said. "At the same time, it's easy for the [humanitarian] NGOs to talk about Israel absorbing tens of thousands of people. They aren't the ones living here."
Mohammed Ali, the owner of a nearby souvenir shop who immigrated — legally — to Israel from Egypt, said female foreign workers who are in the country legally fear the "Africans."
"I'm married to a Filipina, and she was attacked twice, the second time by two women," Ali said. "They they sell drugs. I've seen soldiers and teenagers selling their electric bikes to them to pay for drugs."
Ali insisted that his complaints "are not about color."
"Many of my clients work at African embassies and we are friends. But migrant workers who entered the country illegally and for financial reasons are taking away jobs and don't respect Israeli sovereignty," Ali said.
Cristina Billar, a Filipina who is living in Israel legally, had harsh words for the asylum-seekers who, she said, sometimes prey on the Filipina workers who share apartments in South Tel Aviv.
"Several Filipinas I know have been sexually assaulted or actually raped, but we don't complain. We go home to our employers and take a bath and don't speak about it again," Billar said.
Many of the assault victims don't report the attacks to the police because they have overstayed their work visas, or lost their visas because they have given birth to children in Israel — something that invalidates the visa.
The asylum-seekers do not deny that some Eritreans and other foreigners have committed crimes, but insist that the vast majority are law-abiding and simply want a place to live until they do not fear for their lives back home.
"I am not pro-criminal but at the same time it's important to remember that many of our young people are living with trauma. Many were tortured on their way here. Nine-nine percent are Christians. Most obey the law," said Teklit Michael, 29, an activist for the asylum-seekers.
"I myself left Eritrea when I was 17 because they wanted to draft me into the army indefinitely. They sent me to prison for a while and some of my relatives are still in prison." He made his way to Sudan, then to Egypt, and finally arrived in Israel nearly a decade ago.
"I'm not here permanently," Michael, who is Christian, said. "I receive no government benefits, no health coverage, no education. I'm here only until my country becomes safe enough to return home."
African immigrants
African asylum seekers


The Fall Clothing Co does not provide refunds.
However if you would like to exchange an item in regards to sizing issues or a faulty item we are happy to help.
Contact us within 7 days of purchase via our contact form.
Cover the return shipping cost of your item.
Return the item in a new and unused condition.
If we feel the items have been worn or have not been returned in satisfactory condition you will not qualify for an exchange.


The magic of watching something being created from scratch right in front of your eyes never gets old. 3D Printing is one such magical technology that has quickly gained a foothold in all manner of industries. From industrial design, healthcare, prototyping to even unexpected places like construction. Our courseware is designed to introduce learners of all age groups to the fundamentals of 3D Printing and what makes it work.
3D Printing is an innovative new technology that has quickly gained a foothold in all manner of industries. From industrial design, healthcare, prototyping to even unexpected places like construction. Learn about the science behind it and the inner workings of a 3D Printer.


As a member of the Knowledge Technology group in Hamburg, I work on various problems concerning neuro-symbolic integration, intelligent cognitive robotics and language understanding. In a recent project, we have integrated object detection- and tracking system based on convolutional networks with a deep network for grasping. Our implementation platform is the Neurally Inspired COmpanion (NICO) robot, which uses the method to distinguish and grasp a specific object in sparsely cluttered environments.
We use the same robot also to realize interactive perception, i.e., the execution of an action with the purpose of generating a signal that the robot can analyze. In this edutainment video, the robot shakes visually indistinguishable objects to generate an audio signal that it can classify.


text:
1353: "Heartbleed"
Re: 1353: "Heartbleed"
Postby speising » Thu Apr 10, 2014 10:36 pm UTC
how, exactly, does the use of stl affect a user of the binary?
KarenRei
Postby KarenRei » Fri Apr 11, 2014 2:27 am UTC
PhoenixRising wrote: The problem with STL, and C++ in general, is the lack of a well-defined ABI (application binary interface; basically an agreement on the size, layout, etc. of data in memory).
So? The API is well defined, that's all that should matter. It's to be *expected*, if only for performance reasons, that implementations won't be identical between platforms. C structures aren't guaranteed to be aligned identically either. At least there's a standard way in C++11 to force identical alignment; in C, it's only compiler-dependent extensions.
If you're sharing data between platforms, you need to align it and manage endianness yourself. And if you're using a language where that's done for you automatically, your performance probably sucks.
Even more importantly, using C++ STL containers means only C++ apps can use OpenSSL.
What's wrong with having a C wrapper, like pretty much everyone else does in this situation? And let's take your argument further - should everyone who programs C libraries have to stick to C89 so that people writing programs in C89 don't have to switch? Backwards compatibility shouldn't a suicide pact. The world moves on. Libraries get written in C++. And people deal.
Postby PhoenixRising » Fri Apr 11, 2014 4:31 am UTC
speising wrote: how, exactly, does the use of stl affect a user of the binary?
Anyone who picks up a an app using an OpenSSL implementation built with, say, MSVC will have tremendous compatibility issues if the server's OpenSSL is built with, say, GCC or clang.
KarenRei wrote:
Out of curiosity, did you actually read the threads I linked? It's not just alignment issues and it's not just different implementations between platforms. It's different implementations between different builds on the same platform, too. An OpenSSL implementation built with MSVC 2008 is not guaranteed to be compatible with an implementation built with MSVC 2013. An implementation built with any version of MSVC is not guaranteed compatibility with an implementation built with GCC. An implementation built with GCC is not guaranteed compatibility with an implementation built with clang. And so forth, and so on. Even if the human-readable code is precisely the same, the compiled version will not be, and I feel this is a much bigger issue than you seem to think it is.
If we have a C wrapper, there will have to be some form of translation from the C++ STL back into raw C, and that defeats the entire point of using C++. This is all the more true because, to avoid cross-compiler compatibility issues, the actual sending and receiving of data would be done into the raw C wrapper, with the C++ code acting purely as a backend. There will be plenty of room for bugs in such a setup.
riverssong wrote: I step away for ten minutes and y'all are creating a new civilization?!
This is getting out of hand. Stop that right this minute.
justvisiting
Joined: Fri May 17, 2013 10:21 am UTC
Postby justvisiting » Fri Apr 11, 2014 5:09 am UTC
PhoenixRising wrote: Anyone who picks up a an app using an OpenSSL implementation built with, say, MSVC will have tremendous compatibility issues if the server's OpenSSL is built with, say, GCC or clang.
Sorry, but that's not how it works. The SSL/TLS protocol specifies the format of data to be exchanged, which the client and server must follow regardless of what they are written in. Think about it: there are already several different SSL/TLS implementations (of which OpenSSL is just one), written in different languages and they all interoperate just fine.
jareds
Postby jareds » Fri Apr 11, 2014 6:17 am UTC
[EDIT: The following assumes that KarenRei was advocating a C++ interface for the OpenSSL library. In context, that was not a reasonable assumption, but my post accurately outlines the problems with that approach. There is of course no ABI compatibility impediment to a library that uses C++, or any other language, internally, but provides a C interface.]
This is confused. ABIs have nothing to do with cross-platform compatibility, but rather with link-time compatibility (and therefore library compatibility) between compilers on a single platform. That is, the ability to take a .so or .a or .lib or .dll built with compiler A and use it with code built with compiler B.
It is true that neither the C nor the C++ standard define an ABI. But it is not really plausible not to acknowledge that C ABIs are much better standardized than C++ ABIs. Basically every modern OS has a well-defined C ABI for every architecture that it supports. Most modern architectures even have a well-defined C ABI (e.g., by the processor vendor) for embedded use without an OS, but a few do not. Even the basic core language C++ ABI situation is well below this bar, although the Itanium C++ ABI is pretty popular. However, when you factor in the languages' standard libraries, the ABI compatibility difference is off the charts. Typically FILE is the only C standard library type that is left opaque by a C ABI, but code outside the library itself only deals with FILE * values, not FILE values, so you're fine unless you manage to use two different C libraries in one program, which would be unusual. With C++, there are a plethora of opaque standard library types that are intended to be used by value outside the standard library itself, and there simply is not any real cross-compiler ABI that defines the implementation of them all. For example, std::string values cannot cross compiler boundaries unless the compilers have the same implementation of std::string, even if the compilers use the same core language C++ ABI, whereas FILE * values can cross compiler boundaries (unless, as I said, you use two different copies of the C library in one program). [Edit: This is a bit oversimplified, but I don't think that it's misleadingly so.]
Nor is it plausible to claim that API compatibility is all that matters. Shared libraries are not an obscure thing that no one uses.
The situation is intended to improve starting with C++17, but the current reality is that C is dramatically better for shared libraries if you care about compatibility between compilers. There is a reason why a C foreign function interface is the FFI of choice for most non-C languages. (And, arguably, 'extern "C"' is C++'s FFI.)
Last edited by jareds on Fri Apr 11, 2014 9:57 am UTC, edited 1 time in total.
justvisiting wrote:
If C++ STL containers are being passed back and forth, yes, this becomes very relevant. And my post was only about writing an OpenSSL version in C++.
Furthermore, if data is internally handled via C++ and passed from client to server and back via a C wrapper - not unlike the current situation - there's no reason to be using those C++ STL containers in the first place, because the extra layer is just slowing things down. There will still be plenty of room for bugs to show up in the wrapper.
jareds wrote: It is true that neither the C nor the C++ standard define an ABI. But it is not really plausible not to acknowledge that C ABIs are much better standardized than C++ ABIs. Basically every modern OS has a well-defined C ABI for every architecture that it supports. Most modern architectures even have a well-defined C ABI (e.g., by the processor vendor) for embedded use without an OS, but a few do not. Even the basic core language C++ ABI situation is well below this bar, although the Itanium C++ ABI is pretty popular.
Exactly. Your entire post is exactly what I've been trying to say.
In a nutshell, the API becomes irrelevant if the ABI isn't well-defined. It doesn't matter whether the client and server agree that X data will be sent as std::string if they can't agree on what exactly a std::string looks like. And there are so many facets of this that vary from one STL implementation to another.
PhoenixRising wrote:
But the point is that passing STL containers between client and server is never ever an option in this case because the protocol specification already tells you exactly how to format the data being passed around. When you implement a TLS library you don't get any choice on that matter, you need to follow the protocol or it will simply not work. This applies to every standard protocol, not just TLS and the whole point of having these standard protocols is precisely so that one implementation does not have to worry about platform-specific issues of the other implementations.
Furthermore, if data is internally handled via C++ and passed from client to server and back via a C wrapper - not unlike the current situation -
I'm not sure what you mean by this. Are you saying that every non-C implementation of a binary protocol (like TLS) uses C wrapper to send/receive data? Because that is very far from reality.
My understanding of KarenRei's arguments is that STL containers should be exposed and worked with. Such behavior would be extremely non-portable from one system to another or even within the same system.
No, what I'm saying is that if we're pulling data out of the C++ STL containers and converting it into raw C data, that's not that unlike doing the entire implementation in C. Take the heartbeat code, for example. I'm tired so it's possible I'm misremembering something, but from my look at the patch it looks like the received buffer was being unpacked, then a new buffer immediately allocated and repacked. This would still happen with a raw C wrapper around a C++ lib. The results might be somewhat less disastrous ("just" a crash) depending on how the code is written, but there would still be an invalid buffer floating around C code, which means there's still plenty of opportunity for it to wreak havoc before it gets to the C++ code. There would be some additional breathing room once all the data actually makes it safely into the C++ library, no doubt, but claiming that C++ is the panacea for invalid buffers when a C wrapper has to go around that library anyway seems rather illogical. There are still all the same problems with having to check inputs for validity and having to ensure outputs are properly set up. All that's protected is the backend processing the C++ code is doing.
I'm writing a C wrapper around a C++ library of my own right now, and it's something of a pain. Every input parameter has to be checked for validity within the C code before I feed it to the actual C++ library, and when you look at a wrapper like that in a program like OpenSSL, missing a validity check can have some major consequences.
It's not just alignment issues and it's not just different implementations between platforms. It's different implementations between different builds on the same platform, too.
And? If you can't guarantee it between different platforms, then what good does it do to mandate that different compilers on a given platform have to use the same internal structures? Either you have an ABI guarantee or you don't. As stated, at least C++ gives you standardized ways to align your data structures. C does not. This is a problem, I work in my job with C data structures that have to be aligned on different platforms, and it's a pain.
If we have a C wrapper, there will have to be some form of translation from the C++ STL back into raw C
Yes, a single-stage one-step translation between char* and std::string. Not exactly a deal-breaker. If you can't avoid catastrophic failure while writing a simple wrapper between char* and std::string, you don't deserve to call yourself a programmer.
Oops. I missed your original post because it was at the end of the page, and didn't realize that KarenRei only quoted your sentences that, standing alone, are correct. You are confused yourself.
It was not reasonable to think that KarenRei was talking about rewriting the SSL/TLS protocol to be based on C++; my response was only assuming that she was talking about rewriting the OpenSSL library to be based on C++ in its API. Standardized network protocols are basically never based on sending binary copies of some particular language's data structures over the network. If nothing else, this would have byte order (endianness) issues. Consequently, neither language APIs nor language ABIs are relevant to network protocols.
Here is what the ABI issue means for a library like OpenSSL:
I have an OpenSSL shared library, libssl.so.1.0.0, on my machine.
Say I build a program, apache2, that uses that library.
Right now, it doesn't matter if libssl.so.1.0.0 is built with GCC and I build apache2 with Clang. The C ABI for my machine is very well-standardized.
However, if OpenSSL were a C++ library that involved the passing of complex C++ data types across the library boundary, I would potentially have trouble (and I would very likely have trouble if, say, I had LIBSSL.DLL built with MinGW and built an application to use it with MS Visual Studio, whereas trouble would be unlikely with a pure C interface). It wouldn't really relate to the network communication--a straight-up crash is more likely.
Postby KarenRei » Fri Apr 11, 2014 10:00 am UTC
My understanding of KarenRei's arguments is that STL containers should be exposed and worked with.
They should be exposed and worked with... *internally*. Data passed *between* processes, however, needs to follow a protocol. You have to have serialized data out and in. It's the only reliable way without operating in an environment which ensures alignment and endianness is always identical on all platforms, and any such environment would have such a huge performance penalty that you wouldn't want to use it. Align and endian-correct it however you want, but you *have* to do it.
Once OpenSSL gets plain data, it should be switched to STL. It should not be switched back to plain data until it gets sent out. Doesn't matter whether it gets plain data from a packet reader or an API wrapper call, the first step is to put it into a reliable, bug-reducing format like STL objects.
Take the heartbeat code, for example. I'm tired so it's possible I'm misremembering something, but from my look at the patch it looks like the received buffer was being unpacked, then a new buffer immediately allocated and repacked.
The bug was of course at the steps *in-between* that do the actual packet building when you're doing the actual risky ops (data manipulation, memory handling, etc).
Any wrapper is literally just:
std::string SomeSTDString(SomeCString);
What is so bloody hard or risk prone about that? The only potential screwup is if SomeCString is malformed, but if they're passing a malformed C string, then it would be broken in any possible implementation of the code.
And once again, I ask you to take your logic and apply it elsewhere. Should everyone have to program their libraries in C89 so that people who don't want to use C99 don't have to upgrade? Who ever uses long long ints, inline functions, inline variable declaration and one-line comments, right? Don't like wrappers? Fine, demand people use a compiler for their programs (C++) that doesn't mandate that they program in risky manners. They can still program just the same, C code with a C++ compiler. We don't mandate libraries have to use C89 because we expect at some point people will learn to move on from inferior, outdated ways of doing things or at least get themselves a compiler that's capable of it.
Last edited by KarenRei on Fri Apr 11, 2014 10:07 am UTC, edited 2 times in total.
jareds wrote: It was not reasonable to think that KarenRei was talking about rewriting the SSL/TLS protocol to be based on C++; my response was only assuming that she was talking about rewriting the OpenSSL library to be based on C++ in its API. Standardized network protocols are basically never based on sending binary copies of some particular language's data structures over the network.
You are absolutely correct, and I have no idea why they were talking as if one would send raw C++ objects over the net, at least without guaranteeing alignment and endianness first. You don't do that in C and you don't do that in C++ either.
Postby jareds » Fri Apr 11, 2014 10:10 am UTC
For the record, you managed to overstate the effect of C++ ABI issues.
PhoenixRising wrote: For a security library which is as widely used as OpenSSL, this could be disastrous - how do you guarantee your server's STL-based version of OpenSSL is compatible with a given client's STL-based OpenSSL?
Everyone has explained that this is wrong. There's not even any requirement that both the client and server are both using OpenSSL in the first place. In fact, NSS is more common than OpenSSL as a client TLS library.
PhoenixRising wrote: Additionally, anyone who wanted to work with the OpenSSL source would need to use exactly the same version of the same compiler as the official OpenSSL lib.
This is also wrong; if you're working with the source of a library you're presumably building it completely from source and can use absolutely any compiler you like.
KarenRei wrote: You are absolutely correct, and I have no idea why they were talking as if one would send raw C++ objects over the net, at least without guaranteeing alignment and endianness first. You don't do that in C and you don't do that in C++ either.
Right, I assumed that I was jumping into a discussion about the merits of changing OpenSSL's API to C++ because the concept of changing the SSL/TLS protocol to "C++" would never have occurred to me. My bad.
Philbert
Joined: Mon Jan 05, 2009 12:32 pm UTC
Postby Philbert » Fri Apr 11, 2014 12:10 pm UTC
stankyjim wrote:
Philbert wrote: wouldn't an attacker still need command line access on the web server? Getting such access should be hard, right? Doesn't that make this problem less severe than it is drummed up to be?
Security expert here!
Nope command line access is not needed, after a connection is established and TLS encryption negotiated the client requests a heart beat keep alive to take place. If the client requests an oversized keep alive reply, the server will respond with data which due to a bug contains a portion of the server's operational memory.
This process is repeated over and over again until the attacker has however much memory as they desire.
This vulnerablity is likely the most devastating that we have seen in the past decade.
Cool Thanks! Great to see that Randall made your explanation into the next strip!
Postby Random832 » Fri Apr 11, 2014 12:51 pm UTC
Ken_g6 wrote: If they'd used a secure malloc that wipes the memory it allocates
Would that help? I thought it was going into the next block, not reading uninitialized data that's still technically part of the same proper block. Wiping when freed could help, but not if the memory next to it is still live.
Mazzula
Postby Mazzula » Fri Apr 11, 2014 2:25 pm UTC
KarenRei wrote: I was copying straight from the patch that introduced the bug, although your version makes more sense - perhaps the original patch contained a different bug that was quickly patched?
The bug first went into the wild with version 1.0.1, on March 14, 2012. The source tarball is here...
http://www.openssl.org/source/openssl-1.0.1.tar.gz
That has the code that I saw.
KarenRei wrote: That's part of the problem of having only a partial implementation here, I wasn't about to go back and rework the entire openssl stack for a discussion on xkcd. My assumption was that the std::string length is taken as the buffer length everywhere in the program, which is the only thing that makes sense here.
The protocol requires the payload length to be inserted, and it has to be done as two bytes, high byte first. That is different from the buffer length, which is 3 + payload + padding.
Mazzula wrote: Perhaps crashing OpenSSL is better than a buffer overflow
"Perhaps"? Is there any remote question that it's the better option? The order of preferability of bugs is of the order:
1) Compiletime error
2) Runtime error
3) Silent error
As stated in my earlier post on the subject, C++/STL takes much of what would be in the third category and moves them to the first two categories. This is a Very Good Thing(TM).
Of course, in this case, the undetected error is extremely serious and I agree that crashing would have been better, but it isn't as hard and fast a rule as you make it out to be. Do you really want your car to stop running because your clock is set to the wrong time?
The fact of the matter is that the code, as written, is basically valid even within C++/STL. That is, there is nothing about C++/STL that requires the abandonment of C/non-STL code, because the additional features are not enforced.
In this case, the buffers are all counted, so there really shouldn't have been a problem creating a counted buffer object in C, with access methods that would have assured there were no buffer overruns—which you get "for free" with std::string.
But I continue to agree that C++ is a good choice for such projects, although there were valid reasons for choosing C in 1998, when OpenSSL was written. My concern here is whether the benefit of re-implementing in C++ is worth the cost, and the risks associated with any major change.
Of course there is no mandate to use OpenSSL. Webmasters are free to use an alternative that is written in C++. Likely the best answer is to let the market decide.
Mazzula wrote: The increase in overhead doesn't come from the buffer checking, but from maintaining the std:string structure and accessing the bytes of that string using array operations rather than operations like *bp++ in the original code.
As stated, in any *reasonable* implementation they would have just had a structure and assigned structurename.bp = ....; instead of assigning it by pointer dererence (or copying into a string), and it would have been even faster.
I believe that is the way it used to be done in the old days, for performance, but in this case I must disagree with you, the structure approach would be improper as a coding practice. The semantics of a structure don't match the concept of "sequence of bytes", which is what the buffer is supposed to represent.
But they could have assigned to buffer[0], and initially assigned bp to be buffer + 1. That would have avoided the postincrement (although I am not sure that the postincrement actually takes any time, given the tricks processors can do nowadays with parallelism).
Where would you put the "padding" component in your structure? It doesn't appear in a consistent offset within the buffer as sent on the wire.
KarenRei wrote: Perhaps they did that because they experienced trouble because C has such crappy support for data alignment (*cough* std::aligned_storage *cough*)? Also, as stated, C++ lets you do the exact same potentially dangerous operations as the un-bounds-checked, potentially-null-destroying *bp++ example above. But you have to do your dangerous behavior *explicitly*, preferably by extending std::string, less preferably by const casting c_str().
"aligned_storage" is a nice feature of the language, but you would be misusing it here. The code wouldn't be portable across all possible correct compilers. This is apart from the fact that we are not trying to create a structure, we are trying to create a string of bytes
The problem with using "aligned_storage" that way arises because the compiler is free to align more strictly than the alignment you give, providing extra padding that you don't expect. So the aligned_storage approach wouldn't be portable. For example, on a Motorola 68000 processor, it is quite possible that aligned_storage<2,1> will actually be aligned on the next even byte boundary, so that assignments of aligned_storage<2,1> values can be optimized to a single instruction. The purpose of "aligned_storage" is to specify a minimum alignment constraint.
C bit fields don't really work either, because different compilers are not required to number bits within storage units consistently. I seem to recall that on the Motorola 68000 series processors they went in kind of a wacky sequence, because it was big-endian with respect to words but little-endian with respect bits within a byte. (Big endian machines are strange, in general.)
So I think your original code was correct in that respect. The data structure here is supposed to represent a sequence of bytes to be sent on the wire. We are trying to figure out the sequence. An array of char (or of unsigned char) represents that very nicely (provided that the range of char is at least an 8-bit range, and both C and C++ require that as a minimum).
Of course, there is nothing stopping you from writing classes in C++ that would do the alignment you are going for. But the underlying storage would still likely be an array of unsigned char. That would be acceptable.
Mazzula wrote: The loops are also likely to take much longer, because the size of the payload is likely to be small
Not if you take a look at the actual data structure, and factor in all of the time to make the padding and send the message (or to receive it in the first place).
I suspect the encryption cost is likely the largest cost. One of the advantages of C++, however, is that you don't have to abandon the speed of C for those few inner loops that tend to make all the difference. I would agree that it is far better to have 95% of the code in a safer paradigm, allowing very strict and close attention to any of that 5% that was written using a less inherently safe paradigm for the sake of efficiency.
The Apache web server itself is also written (mostly) in C. Would you consider this a good argument for switching to IIS, which was (reportedly, I don't have access to the source) written in C++?
Postby ahammel » Fri Apr 11, 2014 2:29 pm UTC
Mazzula wrote: Of course, in this case, the undetected error is extremely serious and I agree that crashing would have been better, but it isn't as hard and fast a rule as you make it out to be. Do you really want your car to stop running because your clock is set to the wrong time?
No, but I have a hard time imagining a situation where a crash isn't better than a buffer overwrite. Refusing to compile code that might result in buffer overwrites is even better.
Postby addams » Fri Apr 11, 2014 2:37 pm UTC
Is this like listening to MD's discuss Surgery vs Medical Management?
Manage if you can.
If that does not do it;
Tear it apart and fix it.
Try not to kill it in the process?
If you kill it, You have Back-Up.
Your profession is difficult and important.
I hope you have the internet backed up.
ericgrau
Postby ericgrau » Fri Apr 11, 2014 2:41 pm UTC
This is why you don't use C or similar languages for most applications. And with text data there is no performance excuse.
I'm quite surprised that such irresponsible coding is still going on at all. After 30 years we should know better. Or at least have languages or libraries so lazy programmmers can default to those.
A game I've been playing recently has been having memory leaks. They need performance so I fully expect them to use C, but I still find them irresponsible for being so careless in this day and age. Especially since they never fixed the memory leaks and don't seem to care.
I don't really take "bad programmers can screwup anything" as an excuse either. The time saved on debugging is worth using the appropriate language. And likewise for keeping code organized with well structured functions to handle data. I blame both the language and the coders, not one or the other.
ahammel wrote: <tinfoil hat on>
So, what's known about Heartbleed's provenance? By which I mean, how do we know the NSA didn't plant it intentionally?
<tinfoil hat off>
There's news on that front.
Heartbleed was checked in by one Robin Segglemann, a German security researcher who is presumably not an NSA stooge. Interestingly, he claims that the patch was in fact reviewed before it made it into production, and that the reviewer missed the bug as well.
So there you have it: the compiler, not the reviewer, should be taking care of memory safety.


text:
Home » Speakers » Ira Mellman
Ira Mellman is Vice President of Research Oncology at Genentech. Ira is a cell biologist with a long standing interest in membrane traffic. His lab is reponsible for key observations leading to the initial discovery of endosomes, the mechanisms of epithelial cell polarity, and the cellular basis of dendritic cell function. Until 2007, Ira was Chair of the Department of Cell Biology at Yale University School of Medicine where he also served as Sterling Professor of Cell Biology and Immunobiology and part of the Ludwig Institute for Cancer Research.
Ira is an elected member of the European Molecular Biology Organization and the American Academy of Arts & Sciences, Fellow of Lincoln College (Oxford), and the recipient of numerous named lectureships and awards. He was also Editor in Chief of the Journal of Cell Biology for many years. Ira received his AB from Oberlin College, his PhD from Yale in Genetics, and performed postdoctoral work at Rockefeller (with Zanvil Cohn and Ralph Steinman).
Ira Mellman explains that the immune system is made up of specialized cells that protect us from the huge number and diverstiy of pathogens we encounter. (Talk recorded in February 2013)
Ira Mellman talks about the organization of the immune response, including the innate and adaptive immune responses and the dendritc cells that link them. (Talk recorded in September 2008)


Each year there are a range of opportunities on offer to get involved in Council Events. We would love to have you a part of our 2018/2019 event season. We get a number of applications for these events and as such all applications will be assessed and ranked as part of our selection criteria.
Location: Preference is given to applicants who are based in and around the Frankston City Council municipality.
Prior performance: If you have been involved in Frankston City Council events before, prior performance is taken into consideration.
Relevance to the event: A breakdown of each event vendor requirements is below.
Benefit and interactivity to the community at the event.
Distribution of opportunities across providers and provider types. We will share the opportunities throughout the community.
The 2018-2019 fee schedules will be endorsed by Council in the coming month.
Application Categories: This event is seeking musical performers for the main stage, food vendors, beverage and snack stalls (coffee, ice-cream, desserts etc.), and market stalls.
Criteria: Performers are to be musical (bands, soloists, duos, DJs) that are suited to playing on the main stage. Food vendors and beverage & snack stalls must be capable of managing large crowds and volumes. Market stalls must fit into the category of home-made/baked or grown. Local community groups, dance schools, commercial market providers will not be considered.
Application Categories and Criteria: This event is seeking Latin American, Portuguese and Spanish cultures for; performers, food and beverage and craft stalls vendors.
Applications for this event are now open, to apply please click here.
Application Categories: This event is seeking performer, beverage and snack stalls (coffee, ice-cream, desserts etc.) local businesses, local community groups and local stalls. Food Vendors are not required for this event.
Criteria: Applicants must be based within Frankston's municipality. Vendors outside of Frankston will not be considered.
Frankston City Council is working towards having a wider range of healthier food and drink options available at Council run events. The Healthy Eating Advisory Service provides information on why Vendors should consider offering healthier options and specific actions on how to achieve this. In future, Frankston City Council will look favourably on Vendors who are willing to include healthier choices on their menus.
Register to the Frankston City Council Major Event supplier mailing list and be updated with upcoming event opportunities.
This application is an opportunity for local Community Groups to run a fundraising sausage sizzle at one of Council's major events.
Applications will be open 1 June 2018 and close on 1 July 2018.


New property listed at 1105 9255 Jane ST in Vaughan.
Come See This Stunning 2 Bedroom Suite At Magnificent Bellaria Tower 4! Beautiful, Bright & Spacious Corner Suite W/1100 Sq/Ft Of Luxury W/Spectacular Northwest Views * Open Concept Design Loaded W/Upgrades Including Upgraded Kitchen W/Breakfast Bar, Granite Counters, Marble Backsplash, B'fast Bar & U/C Valance/Lighting * Beautiful Baths W/Glass Showers & Marble Stone Counters * Hardwood Floors, Potlights, 9' Ceilings & Wow Windows Everywhere!! Don't Miss It!


text:
3D Imaging of Decapitated Woman May Help Police Solve Bizarre Crime
December 28, 2015 by Debra Thimmesch 3D Design
In one of the more bizarre and gruesome 3D printed-related stories, the 3D modeled decapitated head of an unknown woman is the most recent attempt by Pennsylvania police to determine the victim's identity.
Professor Vitali's sketch of the unidentified female [Image: AP]
Thanks to forensic artist and art professor Michelle Vitali, who teaches at Edinboro University in Pennsylvania, police now have an incredibly realistic, detailed bust of the as-yet unidentified woman that they could make public in the hopes of someone recognizing this anonymous victim. According to Professor Vitali's bio on the Edinboro University website, she "has worked on high-profile criminal cases in the United States and performed facial reconstructions on historical cases in the U.S. and in Spain." She is working to improve "the efficacy of 2D and 3D reconstruction," which has generally been, at least to an extent, a combination of science and educated guesswork.
This case, however, may be one of the more peculiar ones on which she has worked. The decapitated head of the woman, whose age has been estimated at 50 and possibly even 60, was found in the woods in Economy, a small borough about 15 miles away from Pittsburgh a year ago on December 12, 2014. A young boy out for a walk in the woods spotted the head, which inexplicably had red rubber balls in place of eyes.
Economy Borough Chief of Police Michael O'Brien suggested to the media that the balls suggest that the "the mystery…may be linked to the black market for organs," which is an undeniably sinister thought. Aside from the ghastly obvious — that the woman's head was decapitated — there was an additional discovery: the head had been embalmed. However, evidently, the embalming fluids weren't of the kind used by medical schools but, rather, by funeral homes so it's thought, according to the Associated Press, that the body or at least the head was at some point taken from a funeral home.
[Image: AP Photo/Michelle Vitali via Economy Borough Police]
According to police, the person who separated the head from the body "knew what he or she was doing." That said, the police do not think the woman died as the result of a homicide as she was clearly dead, possibly from a heart attack, when she was decapitated. So, while criminal charges could be filed against a perpetrator should he or she be found, they would not be murder charges.
The effort to create a realistic likeness of the unknown woman was for the purposes of identifying her, although in doing so police might also find clues as to who might have perpetrated such an abhorrent act. Indeed, according one police official, there's a somewhat thriving black market on body parts that "is pretty extensive."
That's chilling news. In the meantime, however, the 3D model of the figure created by Professor Vitali provides the case and the victim with a bit of much-needed dignity as police try to solve this most peculiar of mysteries. A year after having been found, the mystery woman's head was given a proper burial — attended by Professor Vitali — and will receive a "Jane Doe" headstone if she remains unidentified by the spring.
3D technologies have been invaluable in several cases tied to forensics, reconstruction, evidence, and victim identification around the US and around the world recently. The level of detail possible with 3D design can lead to incredibly accurate views of the deceased — even those from very long ago.
Tagged with: 3D printed portrait bust • economy • Edinboro University • forensic artist • forensic facial reconstruction • forensics • pennsylvania • Police Chief Michael O'Brien • Professor Michelle Vitali


Sunday is Family Day at the Origins Game Fair!
Family Day Passes will be available only for Sunday, June 16. Family Day Pass attendance to the show is $25 for the day.
Family Day Passes can only be purchased for Sunday. Family Day Pass Attendees will be able to purchase generics to participate in events.


text:
The Way We Do Business
OBS Newsletter
All Products A - Z
TECHNICAL OPERATIONS
Trial Management
OBS Kids
FESF Brochure
AGP PHARMA
Pakistan Offices
Speak Up Program
Adverse Event (Side Effects)
Careers - Banner
OBS offers exciting careers in the following functional areas:
Our sales force is the most vital part of our value chain and constitutes a major portion of our workforce. We aim to make our sales force the best trained, well-groomed and most knowledgeable in the pharmaceutical industry. Any person joining our sales force will have the opportunity to promote a product portfolio of global repute, work with professionals with high integrity, and work in a target oriented and rewarding work environment.
Sales and marketing is a result driven segment, where we provide swift career progression to sales management. This involves initially team development and later its management resulting in the development of managerial capability in our sales managers.
In Marketing we provide exposure to product management where you are expected to develop the brand and influence sales for international pharmaceutical brands. Enhancing the brand awareness and its positioning is the most vital responsibility for our product management staff. Whilst doing so, the exposure prepares you for a focused career in sales management and later for a general management role.
We have the most sophisticated and state of the art technical facilities with the best in class technology. This gives an opportunity to our technical staff to have the exposure of the best global technology and work under the guidance of experienced and internationally trained senior professionals.
We continually look for enthusiastic and highly qualified engineers and pharmacists to strengthen our workforce. This provides an opportunity for young graduates to come and work for a great technical team. In turn, it provides energy, enthusiasm, diversity and a stream of innovative ideas.
In our support functions we provide a challenging career in finance, where we look to recruit senior professionals, middle managers and fresh graduates to work on financial and management reporting and standard accounting. We work in a system based environment under global standards of accounting, giving our human resource a chance to work in a professional and challenging environment accentuating their learning.
We aim to have a high performing and strategic human resources function. We endeavor for achieving transparency in our performance management system, a culture of training & development, and excellence in HR operations. This provides our HR team an opportunity to work on the development of structure, systems, processes and its implementation across the group's companies.
Our Business Development team is looking to expand our operations in the export markets and is working on developing the feasibility for expanding our operations in respective countries. We plan on expanding our existing portfolio of products in the local market and our Business Development team will prove to be critical in the expansion of business in the blue oceans.
OBS Album
Copyrights © 2011-2014 All Rights Reserved OBS.


Happy National Book Lovers Day!!! Wow, so exciting! So tell me, what have you been doing to celebrate Today? Are you re-reading a favorite book? Or maybe you're reading something that's been on your TBR for a long time? How about celebrating by making a new book purchase?
"The last thing FBI agent Will Brody remembers is the explosion—a thousand shards of glass surfing a lethal shock wave.
From the author of the million-copy bestselling Brilliance Trilogy comes a mind-bending thriller that explores our most haunting and fundamental question: What if death is just the beginning?".
I'd also like to read a little more of In the Time of the Butterflies by Julia Alvarez, as next weekend I'll need to talk about it at book club. Maybe I'll even get a few pages of my current Thriller, Mister Tender's Girl by Carter Wilson read. So many books, so little time! Happy Reading!