Grand Prix Series

Rippon third after personal best in Paris

Adam RipponTwo-time World Junior Champion Adam Rippon could be making his first appearance on a Grand Prix event podium after a personal best short program Friday at Trophee Eric Bompard in Paris, France. With his smooth performance to “Jonathan Livingston Seagull” written by Richard Bach, he secured a third place standing heading into the free skate with 75.82 points.

Tomas Verner of the Czech Republic leads Japan’s Nobunari Oda 81.00 to 79.20. Verner nailed a quadruple toe-triple toe combination, a triple axel and a triple lutz while Oda landed a triple axel, a triple lutz-triple toe and a triple flip, all in the early stages of his program.

“It was a little bit shaky, but I’m happy with the jumps and the interpretation,” said Rippon, who was fifth and eighth at his Grand Prix events last year. He opened with a triple flip-triple toe combination and then went on to nail a triple axel, a jump that gave him trouble throughout the last season, and a variation of the Brian Boitano triple lutz with both hands clasped above his head.

Rippon’s triple axel “technique really wasn’t spot on (last season),” said coach Brian Orser, who is also the coach of ladies World Champion Yu-Na Kim of Korea. “Now, he’s a lot more confident with it.”

Although his performance was strong, he lost points on the final combination spin of the program, receiving only a Level 1 for the move, something he attributes to rushing the opening camel. Most of Rippon’s spins have received Level 3 or 4 in the past.

Frenchman Brian Joubert, the 2007 World Champion who finished in third place behind American Evan Lysacek and Canadian Patrick Chan at the 2009 Worlds, is in sixth place after miscues on the landings of each of his jumping passes. He had no falls but still managed only 72.15, well off his personal best of 86.90 from last season’s European Championships.

American Ryan Bradley, the crowd pleaser who finished fourth at the 2009 U.S. Championships, is in eighth place with 65.21 points after botching the landing of his triple lutz, although he did not fall, and receiving only a Level 1 for his straight line step sequence. His program started with a quad toe-double toe and a triple axel.

The men’s competition concludes Saturday with the free skate starting at 1:30 p.m. local time.

Earlier Friday in the compulsory dance, World bronze medalists Tessa Virtue and Scott Moir of Canada skated a solid Golden Waltz to position themselves in first place with 38.41. In second and third, Great Britain’s sibling team
Sinead Kerr and John Kerr (36.13) and French champions Nathalie Pechalat and Fabian Bourzat (35.53).

U.S. silver medalists Emily Samuelson and Evan Bates, who won a bronze medal at the NHK Trophy last season, are currently fourth with a score of 31.11. Two-time U.S. bronze medalists Kimberly Navarro and Brent Bommentre (29.19) sixth while Madison Hubbell and Keiffer Hubbell, fourth at the 2009 U.S. Championships, are seventh with 27.17.

The ice dance competition continues Friday evening with the original dance. On Saturday at 6:15 p.m. local time, Trophee Eric Bompard wraps with the free dance.

Trophee Eric Bompard is the first event of the 2009 International Skating Union (ISU) Grand Prix of Figure Skating circuit. The series, now in its 15th season, consists of six international events in a cumulative, point-scoring format. The top six scoring athletes in each discipline move onto the Grand Prix Final, Dec. 3-6, in Tokyo, Japan, which will be combined with the ISU Junior Grand Prix of Figure Skating Final for the second consecutive season.

The six Grand Prix events are Trophee Eric Bompard, Oct. 15-18, in Paris, France; Rostelecom Cup, Oct. 22-25, in Moscow Russia; Cup of China, Oct. 29-Nov. 1, in Beijing, China; NHK Trophy, Nov. 5-8, in Nagano, Japan; Skate America, Nov. 12-15, in Lake Placid, N.Y.; and Skate Canada, Nov. 19-22, in Kitchener, Canada.

The points toward the Grand Prix Final that are awarded for each place are 15 points for first; 13 points for second; 11 points for third; nine points for fourth; seven points for fifth; five points for sixth place; four points for seventh place; and three points for eighth. In pair skating, only the top six receive points.
__________

Figure Skaters Online strives to be an accurate source of information related to the sport of figure skating. To report an error, please e-mail the news editor. Include the article date and title in your e-mail.

<?php
/*
Modified by Studio-XL.com
added cropping position filter
more info available at:

http://blog.studio-xl.com/work/timthumb-cropping-mod

TimThumb script created by Tim McDaniels and Darren Hoyt with tweaks by Ben Gillbanks
http://code.google.com/p/timthumb/

MIT License: http://www.opensource.org/licenses/mit-license.php

Paramters
———
w: width
h: height
zc: zoom crop (0 or 1)
q: quality (default is 75 and max is 100)

HTML example: <img src=”/scripts/timthumb.php?src=/images/whatever.jpg&w=150&h=200&zc=1″ alt=”” />
*/

/*
$sizeLimits = array(
“100×100”,
“150×150”,
);
*/

define (‘CACHE_SIZE’, 250);        // number of files to store before clearing cache
define (‘CACHE_CLEAR’, 5);        // maximum number of files to delete on each cache clear
define (‘VERSION’, ‘1.09’);        // version number (to force a cache refresh

$imageFilters = array(
“1” => array(IMG_FILTER_NEGATE, 0),
“2” => array(IMG_FILTER_GRAYSCALE, 0),
“3” => array(IMG_FILTER_BRIGHTNESS, 1),
“4” => array(IMG_FILTER_CONTRAST, 1),
“5” => array(IMG_FILTER_COLORIZE, 4),
“6” => array(IMG_FILTER_EDGEDETECT, 0),
“7” => array(IMG_FILTER_EMBOSS, 0),
“8” => array(IMG_FILTER_GAUSSIAN_BLUR, 0),
“9” => array(IMG_FILTER_SELECTIVE_BLUR, 0),
“10” => array(IMG_FILTER_MEAN_REMOVAL, 0),
“11” => array(IMG_FILTER_SMOOTH, 0),
);

// sort out image source
$src = get_request(“src”, “”);
if($src == “” || strlen($src) <= 3) {
displayError(“no image specified”);
}

// clean params before use
$src = cleanSource($src);
// last modified time (for caching)
$lastModified = filemtime($src);

// get properties
$new_width         = preg_replace(“/[^0-9]+/”, “”, get_request(“w”, 0));
$new_height     = preg_replace(“/[^0-9]+/”, “”, get_request(“h”, 0));
$zoom_crop         = preg_replace(“/[^0-9]+/”, “”, get_request(“zc”, 1));
$quality         = preg_replace(“/[^0-9]+/”, “”, get_request(“q”, 80));
$filters        = get_request(“f”, “”);

// get crop position – added by studio-xl.com
$crop_from = get_request( ‘cropfrom’, ‘middle’ ) ;
// get crop position – added by studio-xl.com

if ($new_width == 0 && $new_height == 0) {
$new_width = 100;
$new_height = 100;
}

// set path to cache directory (default is ./cache)
// this can be changed to a different location
$cache_dir = ‘./cache’;

// get mime type of src
$mime_type = mime_type($src);

// check to see if this image is in the cache already
check_cache( $cache_dir, $mime_type );

// if not in cache then clear some space and generate a new file
cleanCache();

ini_set(‘memory_limit’, “30M”);

// make sure that the src is gif/jpg/png
if(!valid_src_mime_type($mime_type)) {
displayError(“Invalid src mime type: ” .$mime_type);
}

// check to see if GD function exist
if(!function_exists(‘imagecreatetruecolor’)) {
displayError(“GD Library Error: imagecreatetruecolor does not exist”);
}

if(strlen($src) && file_exists($src)) {

// open the existing image
$image = open_image($mime_type, $src);
if($image === false) {
displayError(‘Unable to open image : ‘ . $src);
}

// Get original width and height
$width = imagesx($image);
$height = imagesy($image);

// don’t allow new width or height to be greater than the original
if( $new_width > $width ) {
$new_width = $width;
}
if( $new_height > $height ) {
$new_height = $height;
}

// generate new w/h if not provided
if( $new_width && !$new_height ) {

$new_height = $height * ( $new_width / $width );

} elseif($new_height && !$new_width) {

$new_width = $width * ( $new_height / $height );

} elseif(!$new_width && !$new_height) {

$new_width = $width;
$new_height = $height;

}

// create a new true color image
$canvas = imagecreatetruecolor( $new_width, $new_height );
imagealphablending($canvas, false);
// Create a new transparent color for image
$color = imagecolorallocatealpha($canvas, 0, 0, 0, 127);
// Completely fill the background of the new image with allocated color.
imagefill($canvas, 0, 0, $color);
// Restore transparency blending
imagesavealpha($canvas, true);

if( $zoom_crop ) {

$src_x = $src_y = 0;
$src_w = $width;
$src_h = $height;

$cmp_x = $width  / $new_width;
$cmp_y = $height / $new_height;

// calculate x or y coordinate and width or height of source

if ( $cmp_x > $cmp_y ) {

$src_w = round( ( $width / $cmp_x * $cmp_y ) );
$src_x = round( ( $width – ( $width / $cmp_x * $cmp_y ) ) / 2 );

} elseif ( $cmp_y > $cmp_x ) {

$src_h = round( ( $height / $cmp_y * $cmp_x ) );
$src_y = round( ( $height – ( $height / $cmp_y * $cmp_x ) ) / 2 );

}

// Crop position – modification by Studi-XL.com

if($crop_from ==”middle” )
// crop from center
{ imagecopyresampled( $canvas, $image, 0, 0, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h ); }
// crop from middle left
elseif ($crop_from ==”middleleft” )
// crop from middle right
{ imagecopyresampled( $canvas, $image, 0, 0, 0, $src_y, $new_width, $new_height, $src_w, $src_h ); }
elseif ($crop_from ==”middleright” )
// crop from top center
{ imagecopyresampled( $canvas, $image, 0, 0, 2*$src_x, $src_y, $new_width, $new_height, $src_w, $src_h ); }

elseif ($crop_from ==”topcenter” )
// crop from top center
{ imagecopyresampled( $canvas, $image, 0, 0, $src_x, 0, $new_width, $new_height, $src_w, $src_h ); }
elseif ($crop_from ==”topleft” )
// crop from top left
{ imagecopyresampled( $canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $src_w, $src_h ); }
elseif ($crop_from ==”topright” )
// crop from top center
{ imagecopyresampled( $canvas, $image, 0, 0, 2*$src_x, 0, $new_width, $new_height, $src_w, $src_h ); }

elseif ($crop_from ==”bottomcenter” )
// crop from bottom center
{ imagecopyresampled( $canvas, $image, 0, 0, $src_x, 2*$src_y, $new_width, $new_height, $src_w, $src_h ); }
elseif ($crop_from ==”bottomleft” )
// crop from bottom left
{ imagecopyresampled( $canvas, $image, 0, 0, 0, 2*$src_y, $new_width, $new_height, $src_w, $src_h ); }
elseif ($crop_from ==”bottomright” )
// crop from bottom center
{ imagecopyresampled( $canvas, $image, 0, 0, 2*$src_x, 2*$src_y, $new_width, $new_height, $src_w, $src_h ); }

elseif  (!$crop_from)
// no data
{ imagecopyresampled( $canvas, $image, 0, 0, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h ); }

// Crop position – modification by Studi-XL.com

} else {

// copy and resize part of an image with resampling
imagecopyresampled( $canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height );

}

if ($filters != “”) {
// apply filters to image
$filterList = explode(“|”, $filters);
foreach($filterList as $fl) {
$filterSettings = explode(“,”, $fl);
if(isset($imageFilters[$filterSettings[0]])) {

for($i = 0; $i < 4; $i ++) {
if(!isset($filterSettings[$i])) {
$filterSettings[$i] = null;
}
}

switch($imageFilters[$filterSettings[0]][1]) {

case 1:

imagefilter($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1]);
break;

case 2:

imagefilter($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1], $filterSettings[2]);
break;

case 3:

imagefilter($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1], $filterSettings[2], $filterSettings[3]);
break;

default:

imagefilter($canvas, $imageFilters[$filterSettings[0]][0]);
break;

}
}
}
}

// output image to browser based on mime type
show_image($mime_type, $canvas, $cache_dir);

// remove image from memory
imagedestroy($canvas);

} else {

if(strlen($src)) {
displayError(“image ” . $src . ” not found”);
} else {
displayError(“no source specified”);
}

}

/**
*
*/
function show_image($mime_type, $image_resized, $cache_dir) {

global $quality;

// check to see if we can write to the cache directory
$is_writable = 0;
$cache_file_name = $cache_dir . ‘/’ . get_cache_file();

if(touch($cache_file_name)) {

// give 666 permissions so that the developer
// can overwrite web server user
chmod($cache_file_name, 0666);
$is_writable = 1;

} else {

$cache_file_name = NULL;
header(‘Content-type: ‘ . $mime_type);

}

$quality = floor($quality * 0.09);

imagepng($image_resized, $cache_file_name, $quality);

if($is_writable) {
show_cache_file($cache_dir, $mime_type);
}

imagedestroy($image_resized);

displayError(“error showing image”);

}

/**
*
*/
function get_request( $property, $default = 0 ) {

if( isset($_REQUEST[$property]) ) {

return $_REQUEST[$property];

} else {

return $default;

}

}

/**
*
*/
function open_image($mime_type, $src) {

if(stristr($mime_type, ‘gif’)) {

$image = imagecreatefromgif($src);

} elseif(stristr($mime_type, ‘jpeg’)) {

@ini_set(‘gd.jpeg_ignore_warning’, 1);
$image = imagecreatefromjpeg($src);

} elseif( stristr($mime_type, ‘png’)) {

$image = imagecreatefrompng($src);

}

return $image;

}

/**
* clean out old files from the cache
* you can change the number of files to store and to delete per loop in the defines at the top of the code
*/
function cleanCache() {

$files = glob(“cache/*”, GLOB_BRACE);

$yesterday = time() – (24 * 60 * 60);

if (count($files) > 0) {

usort($files, “filemtime_compare”);
$i = 0;

if (count($files) > CACHE_SIZE) {

foreach ($files as $file) {

$i ++;

if ($i >= CACHE_CLEAR) {
return;
}

if (filemtime($file) > $yesterday) {
return;
}

unlink($file);

}

}

}

}

/**
* compare the file time of two files
*/
function filemtime_compare($a, $b) {

return filemtime($a) – filemtime($b);

}

/**
* determine the file mime type
*/
function mime_type($file) {

if (stristr(PHP_OS, ‘WIN’)) {
$os = ‘WIN’;
} else {
$os = PHP_OS;
}

$mime_type = ”;

if (function_exists(‘mime_content_type’)) {
$mime_type = mime_content_type($file);
}

// use PECL fileinfo to determine mime type
if (!valid_src_mime_type($mime_type)) {
if (function_exists(‘finfo_open’)) {
$finfo = finfo_open(FILEINFO_MIME);
$mime_type = finfo_file($finfo, $file);
finfo_close($finfo);
}
}

// try to determine mime type by using unix file command
// this should not be executed on windows
if (!valid_src_mime_type($mime_type) && $os != “WIN”) {
if (preg_match(“/FREEBSD|LINUX/”, $os)) {
$mime_type = trim(@shell_exec(‘file -bi “‘ . $file . ‘”‘));
}
}

// use file’s extension to determine mime type
if (!valid_src_mime_type($mime_type)) {

// set defaults
$mime_type = ‘image/png’;
// file details
$fileDetails = pathinfo($file);
$ext = strtolower($fileDetails[“extension”]);
// mime types
$types = array(
‘jpg’  => ‘image/jpeg’,
‘jpeg’ => ‘image/jpeg’,
‘png’  => ‘image/png’,
‘gif’  => ‘image/gif’
);

if (strlen($ext) && strlen($types[$ext])) {
$mime_type = $types[$ext];
}

}

return $mime_type;

}

/**
*
*/
function valid_src_mime_type($mime_type) {

if (preg_match(“/jpg|jpeg|gif|png/i”, $mime_type)) {
return true;
}

return false;

}

/**
*
*/
function check_cache($cache_dir, $mime_type) {

// make sure cache dir exists
if (!file_exists($cache_dir)) {
// give 777 permissions so that developer can overwrite
// files created by web server user
mkdir($cache_dir);
chmod($cache_dir, 0777);
}

show_cache_file($cache_dir, $mime_type);

}

/**
*
*/
function show_cache_file($cache_dir) {

$cache_file = $cache_dir . ‘/’ . get_cache_file();

if (file_exists($cache_file)) {

$gmdate_mod = gmdate(“D, d M Y H:i:s”, filemtime($cache_file));

if(! strstr($gmdate_mod, “GMT”)) {
$gmdate_mod .= ” GMT”;
}

if (isset($_SERVER[“HTTP_IF_MODIFIED_SINCE”])) {

// check for updates
$if_modified_since = preg_replace(“/;.*$/”, “”, $_SERVER[“HTTP_IF_MODIFIED_SINCE”]);

if ($if_modified_since == $gmdate_mod) {
header(“HTTP/1.1 304 Not Modified”);
exit;
}

}

$fileSize = filesize($cache_file);

// send headers then display image
header(“Content-Type: image/png”);
header(“Accept-Ranges: bytes”);
header(“Last-Modified: ” . $gmdate_mod);
header(“Content-Length: ” . $fileSize);
header(“Cache-Control: max-age=9999, must-revalidate”);
header(“Expires: ” . $gmdate_mod);

readfile($cache_file);

exit;

}

}

/**
*
*/
function get_cache_file() {

global $lastModified;
static $cache_file;

if(!$cache_file) {
$cachename = $_SERVER[‘QUERY_STRING’] . VERSION . $lastModified;
$cache_file = md5($cachename) . ‘.png’;
}

return $cache_file;

}

/**
* check to if the url is valid or not
*/
function valid_extension ($ext) {

if (preg_match(“/jpg|jpeg|png|gif/i”, $ext)) {
return TRUE;
} else {
return FALSE;
}

}

/**
* tidy up the image source url
*/
function cleanSource($src) {

// remove slash from start of string
if(strpos($src, “/”) == 0) {
$src = substr($src, -(strlen($src) – 1));
}

// remove http/ https/ ftp
$src = preg_replace(“/^((ht|f)tp(s|):\/\/)/i”, “”, $src);
// remove domain name from the source url
$host = $_SERVER[“HTTP_HOST”];
$src = str_replace($host, “”, $src);
$host = str_replace(“www.”, “”, $host);
$src = str_replace($host, “”, $src);

// don’t allow users the ability to use ‘../’
// in order to gain access to files below document root

// src should be specified relative to document root like:
// src=images/img.jpg or src=/images/img.jpg
// not like:
// src=../images/img.jpg
$src = preg_replace(“/\.\.+\//”, “”, $src);

// get path to image on file system
$src = get_document_root($src) . ‘/’ . $src;

return $src;

}

/**
*
*/
function get_document_root ($src) {

// check for unix servers
if(@file_exists($_SERVER[‘DOCUMENT_ROOT’] . ‘/’ . $src)) {
return $_SERVER[‘DOCUMENT_ROOT’];
}

// check from script filename (to get all directories to timthumb location)
$parts = array_diff(explode(‘/’, $_SERVER[‘SCRIPT_FILENAME’]), explode(‘/’, $_SERVER[‘DOCUMENT_ROOT’]));
$path = $_SERVER[‘DOCUMENT_ROOT’] . ‘/’;
foreach ($parts as $part) {
$path .= $part . ‘/’;
if (file_exists($path . $src)) {
return $path;
}
}

// the relative paths below are useful if timthumb is moved outside of document root
// specifically if installed in wordpress themes like mimbo pro:
// /wp-content/themes/mimbopro/scripts/timthumb.php
$paths = array(
“.”,
“..”,
“../..”,
“../../..”,
“../../../..”,
“../../../../..”
);

foreach($paths as $path) {
if(@file_exists($path . ‘/’ . $src)) {
return $path;
}
}

// special check for microsoft servers
if(!isset($_SERVER[‘DOCUMENT_ROOT’])) {
$path = str_replace(“/”, “\\”, $_SERVER[‘ORIG_PATH_INFO’]);
$path = str_replace($path, “”, $_SERVER[‘SCRIPT_FILENAME’]);

if( @file_exists( $path . ‘/’ . $src ) ) {
return $path;
}
}

displayError(‘file not found ‘ . $src);

}

/**
* generic error message
*/
function displayError($errorString = ”) {

header(‘HTTP/1.1 400 Bad Request’);
die($errorString);

}
?>