. */ # Known/outstanding issues: # [UNCONFIRMED ISSUE] Plugin seems to keep pinging when importing an XML/WXR file even if pinging is disabled # Plugin does not seem to report any errors if it cannot write to the log file (see E2 blog for example) function SUP_add_options_page(){ if(function_exists("add_options_page")) add_options_page("UP Smart Update Pinger", "UP Smart Update Pinger", 5, basename(__FILE__), "SUP_show_options_page"); } function SUP_show_options_page(){ global $logfile; $ping = get_option("SUP_ping"); $pinglog = get_option("SUP_pinglog"); $uris = get_option("ping_sites"); $forcedpings = false; $SUP_output_log=''; $pingservicesnow = "Ping Services Now!"; $deletelogfile = "Delete Log File"; if(isset($_POST["ping"]) && $_POST["ping"] == $pingservicesnow){ $forcedpings = true; SUP_log(SUP_ping_services($forcedpings).strftime("%D %T")."\tForced pinging services (Homepage)\n\t─────\n"); }elseif(isset($_POST["submit"])){ $uris = $_POST["uris"]; $ping = 0; if($_POST["ping"] == 1) $ping = 1; $pinglog = 0; if($_POST["pinglog"] == 1) $pinglog = 1; update_option("SUP_ping", $ping); update_option("SUP_pinglog", $pinglog); update_option("ping_sites", $uris); echo '

Options saved.

'; }elseif(isset($_POST["delete"]) && $_POST["delete"] == $deletelogfile){ $fh = @fopen($logfile, "w"); if(false === @fwrite($fh, strftime("%D %T")."\tLog file deleted\n\t─────\n")){ update_option("SUP_error", 1); }else{ update_option("SUP_error", 0); } @fclose($fh); } $checked1 = ''; if($ping == 1) $checked1 = 'checked="checked"'; $checked2 = ''; if($pinglog == 1) $checked2 = 'checked="checked"'; echo '

Ultimate Plugins Smart Update Pinger

Click here for installation instructions

Click here for usage instructions

Click here for updated versions

Click here for comments and suggestions

URIs to Ping

The following services will automatically be pinged/notified when you publish normal or future timestamped posts. Not when you edit previously published posts, as WordPress does by default.

This plugin also fixes an issue with the default extended ping programming in Wordpress and pre-2.1 versions of Smart Update Pinger (it now includes the url of the new post).

NB: this list is synchronized with the original update services list.

Separate multiple service URIs with line breaks:

Ping log

These are the last 100 actions performed by the plugin. In reverse chronological order for easier reading (latest ping first).

'; SUP_get_last_log_entries(500); echo '

'; } # telling WordPress to ping if the post is new, but not if it's just been edited function SUP_ping_if_new($id){ global $wpdb, $post_title; $SUP_output_log="\t─────\n"; $SUP_ping_result=''; $forcedpings = false; if(get_option('SUP_ping') == 1 && trim(get_option('ping_sites')) != ""){ # fetches data directly from database; the function "get_post" is cached, and using it here will get the post as is was before the last save $row = mysql_fetch_array(mysql_query( // "SELECT post_date,post_modified,post_title,guid FROM $wpdb->posts WHERE id=$id")); "SELECT post_date,post_modified,post_title FROM $wpdb->posts WHERE id=$id")); # if time when created equals time when modified it is a new post, otherwise the author has edited/modified it if(!$row["post_title"]){ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (ERROR: YOU HAVE FORGOTTEN TO ENTER A POST TITLE) ...\n".$SUP_output_log; }else{ if($row["post_date"] == $row["post_modified"]){ $SUP_output_log=strftime("%D %T")."\tPinging services (New normal post: “".$row["post_title"]."”) ...\n".$SUP_output_log; $SUP_output_log=SUP_ping_services($forcedpings,get_permalink($id)).$SUP_output_log; # Try commenting the line above, and uncommenting this line below if pinging seems to be out of order. Please notify the author if it helps! # generic_ping(); }else{ // Post has been edited or it's a future post // If we have a post title it means that we are in the normal WP loop and therefore it was an edit (not a future post) if($post_title){ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (Existing post was edited: “".$row["post_title"]."”) ...\n".$SUP_output_log; }else{ $SUP_output_log=strftime("%D %T")."\tPinging services (New timestamped post: “".$row["post_title"]."”) ...\n".$SUP_output_log; $SUP_output_log=SUP_ping_services($forcedpings,get_permalink($id)).$SUP_output_log; # Try commenting the line above, and uncommenting this line below if pinging seems to be out of order. Please notify the author if it helps! # generic_ping(); } } } }else{ if (trim(get_option('ping_sites')) != ""){ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (WARNING: DISABLED BY ADMINISTRATOR)\n".$SUP_output_log; }else{ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (WARNING: EMPTY PING SERVICES LIST)\n".$SUP_output_log; } } SUP_log($SUP_output_log); } # More or less a copy of WP's "generic_ping" from functions.php, but uses another function to send the actual XML-RPC messages. function SUP_ping_services($forcedpings,$SUP_guid = ''){ $SUP_output_log=''; #$services = get_settings('ping_sites'); #UP - 17.07.07 - get_option is newer/better then get_settings $services = get_option('ping_sites'); $services = preg_replace("|(\s)+|", '$1', $services); // Kill dupe lines $services = trim($services); if ( '' != $services ) { $services = explode("\n", $services); foreach ($services as $service) $SUP_output_log=SUP_send_xmlrpc($forcedpings,$SUP_guid,$service).$SUP_output_log; } return $SUP_output_log; } # A slightly modified version of the WordPress built-in ping functionality ("weblog_ping" in functions.php). # Original version: #function weblog_ping($server = '', $path = '') { #global $wp_version; #include_once(ABSPATH . WPINC . '/class-IXR.php'); #// using a timeout of 3 seconds should be enough to cover slow servers #$client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); #$client->timeout = 3; #$client->useragent .= ' -- WordPress/'.$wp_version; #// when set to true, this outputs debug messages by itself #$client->debug = false; #$home = trailingslashit( get_option('home') ); #if ( !$client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping #$client->query('weblogUpdates.ping', get_option('blogname'), $home); #} # This one uses correct extendedPing format (WP does not), and logs response from service. function SUP_send_xmlrpc($forcedpings,$SUP_guid = '',$server = '', $path = ''){ global $wp_version; $SUP_output_log=''; include_once (ABSPATH . WPINC . '/class-IXR.php'); // using a timeout of 5 seconds should be enough to cover slow servers (changed from 3 to 5) $client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); $client->timeout = 5; $client->useragent .= ' -- WordPress/'.$wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; $home = trailingslashit( get_option('home') ); # The extendedPing format should be "blog name", "blog url", "check url" (the new URL), and "feed url". # Related Website(s) # http://www.weblogs.com/api.html # An example: # Someblog - Title # http://spaces.msn.com/someblog - Home URL # http://spaces.msn.com/someblog/PersonalSpace.aspx?something - Check/New URL # http://spaces.msn.com/someblog/feed.rss - Feed # Changed the following line therefore: # if($client->query('weblogUpdates.extendedPing', get_settings('blogname'), $home, get_bloginfo('rss2_url'), get_bloginfo('rss2_url'))) if ($forcedpings){ # If this is a forced ping it's better to use a regular ping for the homepage without an update URL (safer) if($client->query('weblogUpdates.ping', get_option('blogname'), $home)){ $SUP_output_log=strftime("%D %T")."\t► [Regular Ping] ".$server." was successfully pinged\n".$SUP_output_log; if (get_option('SUP_pinglog') == 1){ $SUP_output_log=strftime("%D %T")."\t►► Blogname: '".get_option('blogname')."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Homepage: '".$home."'\n".$SUP_output_log; } }else{ $SUP_output_log=strftime("%D %T")."\t► ".$server." could not be pinged. Error message: “".$client->error->message."”\n".$SUP_output_log; } }else{ if($client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, $SUP_guid, get_bloginfo('rss2_url'))){ $SUP_output_log=strftime("%D %T")."\t► [Extended Ping] ".$server." was successfully pinged\n".$SUP_output_log; if (get_option('SUP_pinglog') == 1){ $SUP_output_log=strftime("%D %T")."\t►► Blogname: '".get_option('blogname')."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Homepage: '".$home."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Updated : '".$SUP_guid."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► RSS URL : '".get_bloginfo('rss2_url')."'\n".$SUP_output_log; } }else{ # pinging was unsuccessful, trying regular ping format if($client->query('weblogUpdates.ping', get_option('blogname'), $home)){ $SUP_output_log=strftime("%D %T")."\t► [Regular Ping] ".$server." was successfully pinged\n".$SUP_output_log; if (get_option('SUP_pinglog') == 1){ $SUP_output_log=strftime("%D %T")."\t►► Blogname: '".get_option('blogname')."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Homepage: '".$home."'\n".$SUP_output_log; } }else{ $SUP_output_log=strftime("%D %T")."\t► ".$server." could not be pinged. Error message: “".$client->error->message."”\n".$SUP_output_log; } } } return $SUP_output_log; } $post_title = ""; # Receives the title of the post from a filter below function SUP_post_title($title){ global $post_title; $post_title = $title; return $title; } # Log $logfile = ABSPATH . 'wp-content/plugins/ultimate-plugins-smart-update-pinger/ultimate-plugins-smart-update-pinger.log'; function SUP_log($SUP_log_output){ global $logfile; $logerror = 0; $fh = @fopen($logfile, "a"); if(false === @fwrite($fh, $SUP_log_output)){ update_option("SUP_error", 1); }else{ update_option("SUP_error", 0); } @fclose($fh); } function SUP_get_last_log_entries($num){ global $logfile; $lines = @file($logfile); if(get_option("SUP_error") == 1){ $fh = @fopen($logfile, "a"); if(false === @fwrite($fh, "")){ echo "Error writing log file (".$logfile."). Most likely your logfile (".$logfile.") is write-protected and no log data can be saved (change the rights of this file to 777), or alternatively this could mean that you have manually removed the log file, or that you have changed the directory or file name of the plugin (they both should be 'ultimate-plugins-smart-update-pinger')"; }else{ // Original: $lines = array_slice($lines, count($lines) - $num); // Modified to show in reverse order (easier for reading) $lines = array_reverse(array_slice($lines, count($lines) - $num)); $msg = ""; foreach($lines as $line){ $msg.=trim($line)."
"; } echo $msg; } @fclose($fh); }else{ if($lines === false){ echo "Error reading log file (".$logfile."). Most likely you have manually removed the log file, or alternatively this could mean that the logfile (".$logfile.") is read-protected (change the rights of this file to 777), or that you have changed the directory or file name of the plugin (they both should be 'ultimate-plugins-smart-update-pinger')"; }else{ // Original: $lines = array_slice($lines, count($lines) - $num); // Modified to show in reverse order (easier for reading) $lines = array_reverse(array_slice($lines, count($lines) - $num)); $msg = ""; foreach($lines as $line){ $msg.=trim($line)."
"; } echo $msg; } } } # adds a filter to receive the title of the post before publishing add_filter("title_save_pre", "SUP_post_title"); # shows the options in the administration panel add_action("admin_menu", "SUP_add_options_page"); # calls SUP_ping whenever a post is published add_action("publish_post", "SUP_ping_if_new"); # calls SUP_ping_draft when changing the status from private/draft to published # add_action("private_to_published', 'SUP_ping_draft'); # removes the "WordPress official" pinging hook remove_action("publish_post", "generic_ping"); # activates pinging if setting doesn't exist in database yet (before the user has changed the settings the first time) if(get_option("SUP_ping") === false){update_option("SUP_ping", 1);} if(get_option("SUP_pinglog") === false){update_option("SUP_pinglog", 1);} if(get_option("SUP_error") === false){update_option("SUP_error", 0);} ?> February, 2012 | Kite 2012
Monday, September 25, 2023

Kite 2012

Kitesurfing News Year 2012-2016!

Archive for February, 2012

Kitesurfing in Brazil

Posted by kite2012 On February - 28 - 2012

Some kitesurfing dudes named Sam Medysky, Craig Cunningham, Rich Sabo, Brian Smith, Elliot Drury, David Drinkwater and Brandon Schied went to Taiba in Brazil. Loads of tricks and crashes were recorded during there trip, this is the result!

Related External Links

Lewis Crathern – The Winner of Len10 Megaloop Challenge

Posted by kite2012 On February - 26 - 2012

We´ve seen him jump over Brighton Pier and now we´ve seen him win the Len10 Megaloop Challenge! Out of 24 riders Lewis Crathern won the Len10 Megaloop Challenge. Among his competitors were Sam Light, Rick Jensen, Gianni Aragno. So of all these maniacs it was Lewis Crathern that won the megaloop challenge, congrats!

Related External Links

Super Tasty Chili Chicken in Boracay

Posted by kite2012 On February - 26 - 2012

Except kitesurfing, sunbathing, snorkling there are many other things to do on Boracay. One thing I appreciate is eating! I have a weakness for spicy asian food =P Now and then when I come across a dish that I really like, then I try to steal the recipe so that I can cook it for my friends back home. Today was the third time in a row that I ordered the same dish from a restaurant at Bulabong beach, something I normally don’t do unless the dish is extraordinary! The recipe of the dish that I´m now going to share with you is easy to make and you´ll love it! I call this dish Chili chicken with garlic and vetegables.

What you need for 2 persons is the following:

  • About 300 grams of sliced chicken
  • 1 aubergine
  • 1 red paprika
  • ½ yellow onion
  • 1 green chili (a large one). Or take a red one if you want, or why not one of each :)
  • ginger
  • garlic
  • oil
  • butter
  • oyster sauce
  • Knorr liquid seasoning
  • Sugar
  • Lime
  • Lemon grass
  • Chili oil (you can make your own by simply grinding small bird chilies and garlic. Boil it with some oil, preferable one without so much taste)

Now just follow these simple steps.
1. Cut the aubergine, paprika, onion, ginger and  chili in pieces. Put it together with the chicken in a pan. Garlic, what about the garlic? Actually when I took these photos the cook didn’t add garlic, but I’m pretty sure that should be some garlic in this dish. Perhaps did he simply not have garlic in the kitchen for the moment, or did he forget? Anyway, add some garlic, it can´t be wrong with garlic, can it!? :)


2. Add the oil, butter, oyster sauce and liquid seasoning. How much? I´d say about 1 table spoon of each, just put in some and it will probably be fine. You can always fine tune the amount next time you cook this dish (will be plenty of times if you just give it a chance)

3. Put the pan on a gas stove, medium heat. You have no gas stove? Well, put in on a hotplate instead, I´m pretty sure it will work just as fine! Let it all simmer for about 5 minutes. Add some more butter and oil if the mix starts sticking to the pan.

Starts to look like something huh? Hang on, you´re almost there!



4. Give the lemongrass some bashes, cut it in pieces, put it in the pan. Now add some sugar (approximately a table spoon).




5. Next add some lime juice and the chili oil. Squeeze the lime over a strainer and avoid the seeds. Add some more chili oil if you want it extra spicy =P






7. That´s it! I added some extra chili oil on my plate :)

Serve with rice and why not pop an cold beer, it will be the icing on the cake! By the way, I think that some roasted cashew nuts scattered over the whole thing would make this dish even better!

Bon appetit!



Related External Links

Remi Meum Snowkiting

Posted by kite2012 On February - 24 - 2012

It´s still winter and Remi Meum is a guy that understands that winter means snowkiting! Why freeze you ass of in the water when you can have some awesome snowkiting session while waiting for the warmth to come?

Related External Links

The Revolution

Posted by kite2012 On February - 23 - 2012

Thomas Paris, Forest Bakker, Louis Hutter, Adrien Dennis, Charles Tiger, Thibaut Razeyre and many other professional riders were shooting tons of kitesurfing action from different spots around the world.

Light Bros has decided to put everything together into a long action packed movie called The Revolution. This movie will be totally free and it will soon be available on the internet, so stay tuned!

Here is a little trailer of what´s coming!

Related External Links

Asia Litwin

Posted by kite2012 On February - 21 - 2012

Who the hell is Asia Litwin? Probaly a quite unknown name to most people. kite 2012 can tell you that she is a professional rider from Poland. With only 4 years of kitesurfing she already has her bag full of tricks.
Asia Litwin is sponsored by Nobile Kiteboarding.In fact Nobile is the reason to why Asia started with kiteboarding in the first case. Her uncle Dariusz Rosiak is the owner of Nobile Kiteboarding, so it´s not strange that Asia rides with Nobile gears instead of Slingshot or Cabrinha like many other riders. However, Asia’s life has not only been a bed of roses. She had problem both with her hips and is still struggling with some pain issues. Another example statuing the benefits of strength training and stretching. But this trong girl is about to recover and we look forward to a great year with Asia litwin!

Related External Links

Yapak Beach Boracay

Posted by kite2012 On February - 21 - 2012

Bulabong and White beach are not the only beaches on Boracay. There is two other beaches, one privat and one that is open for everyone, it´s called Yapak beach. Yapak Beach are located “far” from the centre of Boracay (the length of Boracay is 7 km) where all the tourists are gathering. To get there you either have to walk a few kilometers or take a tricycle for about 100 pesos. I went there today and I can tell you that it´s well worth a visit!
Yapak beach is a calm beach where you don’t have to share the sand with hundreds of other people, in fact you almost have the beach pretty much to yourself :)

The water is crystal clear just like on White beach, but it gets deep immediately and there are some strong currents to be aware of. The sand is not as powder fine as the sand on white beach, but instead there are plenty of shells and corals that make the sand more interesting :)

Behind Yapak Beach is a big wall of dense vegetation, but also hundreds of coconuts palms. Two Philippine kids that were walking along the beach decided to make a stop and refill their energy depots, simply by picking some coconuts. But how do you pick them when the coconut palms are 10 meters in height? Well, you climb!

I was learned the technique how to climb in coconut trees, but it was not as easy as it looks like on the video… I manage to get about 2 meters up before I gave up. The key is to climb fast and it helps a lot if you’re light, about 30 kg or so is good! Here are some other photos from Yapak beach.









Found a nice gym the other day btw, so if you ever visit Boracay and feel for a tough workout you might consider visiting this highly modern and well equipped gym!












Related External Links

What Is Oldschool Kitesurfing?

Posted by kite2012 On February - 19 - 2012

Oldschool a.k.a Airstyle is the original riding style that the “old” kitesurfers practiced before media and higher powers started to turn kitesurfing aginst the freestyle discipline.

Airstyle DVD is just what it sounds like, a DVD packed with 400 hundred tricks that has been overlooked behind the Freestyle kitesurfing. Here is your chance to discover what the “real” oldschool kiteaurfing is all about!

Related External Links

What is Kitesurfing?

Posted by kite2012 On February - 16 - 2012

Best KiteSurfing Video 2012

Posted by kite2012 On February - 15 - 2012

This is by far one of the best kitesurfing videos for 2012. Great music, nice editing, good variety (not just 9 minutes of unhooked handle passes) and the spots where these guys are kiting looks absolutely amazing! If you ever plan to make a kitesurfing video, use this video as a template and your video will become a success!

Related External Links

Bicol Express

Posted by kite2012 On February - 14 - 2012

Had another kick-ass meal this evening. The dish I ate is called Bicol Express (also spelled Beacol Express). A simple, yet very tasty and popular Philippine dish

You only need a handful of different ingredients, namely:

  • Pork
  • Chili
  • Red onion
  • Garlic
  • Black Pepper
  • Bagoong Alaman (shrimp paste)
  • Coconut milk
  • Salt

You pretty much just fry all ingredients except the coconut milk which you add after the other ingredients are fried a bit, then just stir it all for a couple of minutes. You can google for it and find many slightly different recipes for this delicious dish!

They have another dish here in the Philippines which I havn’t dared to try yet. It´s called “Dinuguan” and it’s made from a  pig’s intestines, snout and ears in cooked pig’s blood. I´ll try it before I leave the Philippines, I promise!


The weather here has been quite shitty lately, so no kiteboarding for me. Will probably have to wait till thursday before I take another kite session. Last time I was out in the water I stepped on a sea urchin which was quite unpleasant… As you may know there are hundreds of different sea urchins. Luckily those that gaze in the water of Boracay are harmful. Still I got about 20 spines in my foot, that wasn’t to easy to get out. Here in the Philippines the treatment against sea urchin spines is human urine and/or vinegar. I was actually told by a few different Philippinos that I should pee on my own foot. However, boiled vinegar that you add on the spines with a cotton swab works just as good. I tried the vinegar method which seemed to help a bit, but the spines were still in my foot… so I ended up buying a needle for 1 pesos, with which I could remove the spines. My foot is now fine =)


Related External Links

Snowkiting = Flying!

Posted by kite2012 On February - 11 - 2012

Talk about long hang time! This guy gets some pretty nice height as well! Don’t miss the nice grab at 0:24 :)

Related External Links

Kitesurfing in Western Australia 2012

Posted by kite2012 On February - 11 - 2012

Lots of kiteboarders that live in the colder parts of the world currently spend their holidays kitesurfing like maniacs in the Western Australia. You gotta take the chance while it lasts =P

This fact goes hand in hand with the amount kite videos that are being pumped out on the internet. Here is another cool video that was just released =)

Related External Links

Boracay – Fighting Roosters

Posted by kite2012 On February - 11 - 2012

Been sick for the last two days, or at least I caught a cold. But at least it seems to be one of the harmful colds, today is the third day since I caught the cold and I feel more or less recovered. I think it was the air condition that made me sick. Had my bed placed next to the AC and woke up cold a couple of times. Did some reshuffling in my room and turned down the cooling effect on the AC, so hopefully this was the one and only cold that I will get here on Boracay.

So, it´s been some lazy days while I had my cold. Went to a rooster farm with Japs. They had about 100 roosters, but no chickens… so what on earth are they doing with all these roosters? Well, they train them to become figthers! Rooster fighting is popular activity in the Philippines and there are apperantly lots of money to win. Japs told me that the price for a full grown fighter (a 2 years old Rooster) is 5000 pesos, that´s about $120. At this farm they had about 100 roosters.


Went to the Talipapa Market (the local market on Boracay). They sell lots of fresh fish there, many different species. Bought some White Marlin this time which were put on the grill later on, damn good! For those that do not know, the White Marlin looks like a small swordfish. It weighs about 120kg and is a super fast swimmer! They can swim 100 meters in 4 seconds, i.e. 56 mph or 90 km/h.






Found a nice little shop where they sell different kinds of cakes and buns. The store was actually called Pans & Buns. Did three visists there in 2 days, so I more or less tried their whole collection by now which includes, coconut bun, banana cake, monggo rolls, peanut rose etc… 1 bun is about 12 cent, so the price is affordable =)









I end this post with some pictures of some colorful kites, c ya!

Related External Links

Tom’s kitchen episode 4

Posted by kite2012
May-14-2016 I Comments Off on Tom’s kitchen episode 4

We Love Kiteboarding

Posted by kite2012
Apr-22-2015 I Comments Off on We Love Kiteboarding

Te Tainui Kitesurfing Video by F-One

Posted by Emma Pat
Nov-19-2014 I Comments Off on Te Tainui Kitesurfing Video by F-One

Red Bull King of the Air 2015 – Rule the Sky

Posted by Emma Pat
Nov-17-2014 I Comments Off on Red Bull King of the Air 2015 – Rule the Sky

A new video from Kite 2013

Posted by kite2012
Mar-20-2013 I Comments Off on A new video from Kite 2013

What do to when it´s not too windy

Posted by kite2012
Oct-11-2012 I Comments Off on What do to when it´s not too windy

How to film yourself while kitesurfing

Posted by kite2012
Oct-6-2012 I Comments Off on How to film yourself while kitesurfing

Kiteloop Crash

Posted by kite2012
Sep-22-2012 I Comments Off on Kiteloop Crash

Cross the Atlantic ocean by a kite!

Posted by kite2012
Sep-21-2012 I Comments Off on Cross the Atlantic ocean by a kite!