Scunthorpe Camera Club enjoyed success at the recent LPA Print Battle Final. This took place on Sunday 19 October, at Nettleham Village Hall. 5 clubs had made it into the print battle final, with Scunthorpe winning all three of their previous battle rounds. The other clubs were that made it into the final were: RBCC, Deepings,Lincoln,Axeholme. The final results:- Scunthorpe CC 253 RBCC 249 Lincoln CC 233 Deepings CC 232 Axholme CC 227. Club members who's work was used for the winning battle entry were....:

Andrew Appleton recently visited the club, and. gave a practical demonstration on using speed lights, both on and off camera. Lincoln based photographer Andrew specialises in beauty, fashion and performance photography.He also teaches photography in his workshops, and lectures throughout the UK. Andrew demonstrated the effects that different modifiers have, and how to use reflectors and add light. Light to subject distance also affects the light quality. He also urged us to consider the best angle and height for....

// 0) { var next, prev, count; // Pre-fetch the next slide image(s) next = this.current; prev = this.current; count = 0; do { // Get the next and previous slide number // Loop past the ends of the slideshow if necessary if (++next >= this.slides.length) next = 0; if (--prev < 0) prev = this.slides.length - 1; // Preload the slide image this.slides[next].load(); this.slides[prev].load(); // Keep going until we have fetched // the designated number of slides } while (++count < this.prefetch); } } //-------------------------------------------------- this.goto_slide = function(n) { // This method jumpts to the slide number you specify. // If you use slide number -1, then it jumps to the last slide. // You can use this to make links that go to a specific slide, // or to go to the beginning or end of the slideshow. // Examples: // onClick="myslides.goto_slide(0)" // onClick="myslides.goto_slide(-1)" // onClick="myslides.goto_slide(5)" if (n == -1) { n = this.slides.length - 1; } if (n < this.slides.length && n >= 0) { this.current = n; } this.update(); } //-------------------------------------------------- this.goto_random_slide = function(include_current) { // Picks a random slide (other than the current slide) and // displays it. // If the include_current parameter is true, // then // See also: shuffle() var i; // Make sure there is more than one slide if (this.slides.length > 1) { // Generate a random slide number, // but make sure it is not the current slide do { i = Math.floor(Math.random()*this.slides.length); } while (i == this.current); // Display the slide this.goto_slide(i); } } //-------------------------------------------------- this.next = function() { // This method advances to the next slide. // Increment the image number if (this.current < this.slides.length - 1) { this.current++; } else if (this.repeat) { this.current = 0; } this.update(); } //-------------------------------------------------- this.previous = function() { // This method goes to the previous slide. // Decrement the image number if (this.current > 0) { this.current--; } else if (this.repeat) { this.current = this.slides.length - 1; } this.update(); } //-------------------------------------------------- this.shuffle = function() { // This method randomly shuffles the order of the slides. var i, i2, slides_copy, slides_randomized; // Create a copy of the array containing the slides // in sequential order slides_copy = new Array(); for (i = 0; i < this.slides.length; i++) { slides_copy[i] = this.slides[i]; } // Create a new array to contain the slides in random order slides_randomized = new Array(); // To populate the new array of slides in random order, // loop through the existing slides, picking a random // slide, removing it from the ordered list and adding it to // the random list. do { // Pick a random slide from those that remain i = Math.floor(Math.random()*slides_copy.length); // Add the slide to the end of the randomized array slides_randomized[ slides_randomized.length ] = slides_copy[i]; // Remove the slide from the sequential array, // so it cannot be chosen again for (i2 = i + 1; i2 < slides_copy.length; i2++) { slides_copy[i2 - 1] = slides_copy[i2]; } slides_copy.length--; // Keep going until we have removed all the slides } while (slides_copy.length); // Now set the slides to the randomized array this.slides = slides_randomized; } //-------------------------------------------------- this.get_text = function() { // This method returns the text of the current slide return(this.slides[ this.current ].text); } //-------------------------------------------------- this.get_all_text = function(before_slide, after_slide) { // Return the text for all of the slides. // For the text of each slide, add "before_slide" in front of the // text, and "after_slide" after the text. // For example: // document.write(" "); // document.write(s.get_all_text(" ","\n")); // document.write("<\/ul>"); all_text = ""; // Loop through all the slides in the slideshow for (i=0; i < this.slides.length; i++) { slide = this.slides[i]; if (slide.text) { all_text += before_slide + slide.text + after_slide; } } return(all_text); } //-------------------------------------------------- this.display_text = function(text) { // Display the text for the current slide // If the "text" arg was not supplied (usually it isn't), // get the text from the slideshow if (!text) { text = this.slides[ this.current ].text; } // If a textarea has been specified, // then change the text displayed in it if (this.textarea && typeof this.textarea.value != 'undefined') { this.textarea.value = text; } // If a text id has been specified, // then change the contents of the HTML element if (this.textid) { r = this.getElementById(this.textid); if (!r) { return false; } if (typeof r.innerHTML == 'undefined') { return false; } // Update the text r.innerHTML = text; } } //-------------------------------------------------- this.hotlink = function() { // This method calls the hotlink() method for the current slide. this.slides[ this.current ].hotlink(); } //-------------------------------------------------- this.save_position = function(cookiename) { // Saves the position of the slideshow in a cookie, // so when you return to this page, the position in the slideshow // won't be lost. if (!cookiename) { cookiename = this.name + '_slideshow'; } document.cookie = cookiename + '=' + this.current; } //-------------------------------------------------- this.restore_position = function(cookiename) { // If you previously called slideshow_save_position(), // returns the slideshow to the previous state. //Get cookie code by Shelley Powers if (!cookiename) { cookiename = this.name + '_slideshow'; } var search = cookiename + "="; if (document.cookie.length > 0) { offset = document.cookie.indexOf(search); // if cookie exists if (offset != -1) { offset += search.length; // set index of beginning of value end = document.cookie.indexOf(";", offset); // set index of end of cookie value if (end == -1) end = document.cookie.length; this.current = parseInt(unescape(document.cookie.substring(offset, end))); } } } //-------------------------------------------------- this.noscript = function() { // This method is not for use as part of your slideshow, // but you can call it to get a plain HTML version of the slideshow // images and text. // You should copy the HTML and put it within a NOSCRIPT element, to // give non-javascript browsers access to your slideshow information. // This also ensures that your slideshow text and images are indexed // by search engines. $html = "\n"; // Loop through all the slides in the slideshow for (i=0; i < this.slides.length; i++) { slide = this.slides[i]; $html += ' '; if (slide.link) { $html += ''; } $html += ''; if (slide.link) { $html += "<\/a>"; } if (slide.text) { $html += " \n" + slide.text; } $html += "<\/P>" + "\n\n"; } // Make the HTML browser-safe $html = $html.replace(/\&/g, "&" ); $html = $html.replace(//g, ">" ); return(' ' + $html + ' '); } //================================================== // Private methods //================================================== //-------------------------------------------------- this.loop = function() { // This method is for internal use only. // This method gets called automatically by a JavaScript timeout. // It advances to the next slide, then sets the next timeout. // If the next slide image has not completed loading yet, // then do not advance to the next slide yet. // Make sure the next slide image has finished loading if (this.current < this.slides.length - 1) { next_slide = this.slides[this.current + 1]; if (next_slide.image.complete == null || next_slide.image.complete) { this.next(); } } else { // we're at the last slide this.next(); } // Keep playing the slideshow this.play( ); } //-------------------------------------------------- this.valid_image = function() { // Returns 1 if a valid image has been set for the slideshow if (!this.image) { return false; } else { return true; } } //-------------------------------------------------- this.getElementById = function(element_id) { // This method returns the element corresponding to the id if (document.getElementById) { return document.getElementById(element_id); } else if (document.all) { return document.all[element_id]; } else if (document.layers) { return document.layers[element_id]; } else { return undefined; } } //================================================== // Deprecated methods // I don't recommend the use of the following methods, // but they are included for backward compatibility. // You can delete them if you don't need them. //================================================== //-------------------------------------------------- this.set_image = function(imageobject) { // This method is deprecated; you should use // the following code instead: // s.image = document.images.myimagename; // s.update(); if (!document.images) return; this.image = imageobject; } //-------------------------------------------------- this.set_textarea = function(textareaobject) { // This method is deprecated; you should use // the following code instead: // s.textarea = document.form.textareaname; // s.update(); this.textarea = textareaobject; this.display_text(); } //-------------------------------------------------- this.set_textid = function(textidstr) { // This method is deprecated; you should use // the following code instead: // s.textid = "mytextid"; // s.update(); this.textid = textidstr; this.display_text(); } } // ]]> // Club Member Russ Yarrow has enjoyed competition success with his water drop photography. He has given the club some tips on achieving these stunning images. Russ Yarrow writes... I have been asked by many friends what sort of gels I use in my water drop photos

// 0) { var next, prev, count; // Pre-fetch the next slide image(s) next = this.current; prev = this.current; count = 0; do { // Get the next and previous slide number // Loop past the ends of the slideshow if necessary if (++next >= this.slides.length) next = 0; if (--prev < 0) prev = this.slides.length - 1; // Preload the slide image this.slides[next].load(); this.slides[prev].load(); // Keep going until we have fetched // the designated number of slides } while (++count < this.prefetch); } } //-------------------------------------------------- this.goto_slide = function(n) { // This method jumpts to the slide number you specify. // If you use slide number -1, then it jumps to the last slide. // You can use this to make links that go to a specific slide, // or to go to the beginning or end of the slideshow. // Examples: // onClick="myslides.goto_slide(0)" // onClick="myslides.goto_slide(-1)" // onClick="myslides.goto_slide(5)" if (n == -1) { n = this.slides.length - 1; } if (n < this.slides.length && n >= 0) { this.current = n; } this.update(); } //-------------------------------------------------- this.goto_random_slide = function(include_current) { // Picks a random slide (other than the current slide) and // displays it. // If the include_current parameter is true, // then // See also: shuffle() var i; // Make sure there is more than one slide if (this.slides.length > 1) { // Generate a random slide number, // but make sure it is not the current slide do { i = Math.floor(Math.random()*this.slides.length); } while (i == this.current); // Display the slide this.goto_slide(i); } } //-------------------------------------------------- this.next = function() { // This method advances to the next slide. // Increment the image number if (this.current < this.slides.length - 1) { this.current++; } else if (this.repeat) { this.current = 0; } this.update(); } //-------------------------------------------------- this.previous = function() { // This method goes to the previous slide. // Decrement the image number if (this.current > 0) { this.current--; } else if (this.repeat) { this.current = this.slides.length - 1; } this.update(); } //-------------------------------------------------- this.shuffle = function() { // This method randomly shuffles the order of the slides. var i, i2, slides_copy, slides_randomized; // Create a copy of the array containing the slides // in sequential order slides_copy = new Array(); for (i = 0; i < this.slides.length; i++) { slides_copy[i] = this.slides[i]; } // Create a new array to contain the slides in random order slides_randomized = new Array(); // To populate the new array of slides in random order, // loop through the existing slides, picking a random // slide, removing it from the ordered list and adding it to // the random list. do { // Pick a random slide from those that remain i = Math.floor(Math.random()*slides_copy.length); // Add the slide to the end of the randomized array slides_randomized[ slides_randomized.length ] = slides_copy[i]; // Remove the slide from the sequential array, // so it cannot be chosen again for (i2 = i + 1; i2 < slides_copy.length; i2++) { slides_copy[i2 - 1] = slides_copy[i2]; } slides_copy.length--; // Keep going until we have removed all the slides } while (slides_copy.length); // Now set the slides to the randomized array this.slides = slides_randomized; } //-------------------------------------------------- this.get_text = function() { // This method returns the text of the current slide return(this.slides[ this.current ].text); } //-------------------------------------------------- this.get_all_text = function(before_slide, after_slide) { // Return the text for all of the slides. // For the text of each slide, add "before_slide" in front of the // text, and "after_slide" after the text. // For example: // document.write(" "); // document.write(s.get_all_text(" ","\n")); // document.write("<\/ul>"); all_text = ""; // Loop through all the slides in the slideshow for (i=0; i < this.slides.length; i++) { slide = this.slides[i]; if (slide.text) { all_text += before_slide + slide.text + after_slide; } } return(all_text); } //-------------------------------------------------- this.display_text = function(text) { // Display the text for the current slide // If the "text" arg was not supplied (usually it isn't), // get the text from the slideshow if (!text) { text = this.slides[ this.current ].text; } // If a textarea has been specified, // then change the text displayed in it if (this.textarea && typeof this.textarea.value != 'undefined') { this.textarea.value = text; } // If a text id has been specified, // then change the contents of the HTML element if (this.textid) { r = this.getElementById(this.textid); if (!r) { return false; } if (typeof r.innerHTML == 'undefined') { return false; } // Update the text r.innerHTML = text; } } //-------------------------------------------------- this.hotlink = function() { // This method calls the hotlink() method for the current slide. this.slides[ this.current ].hotlink(); } //-------------------------------------------------- this.save_position = function(cookiename) { // Saves the position of the slideshow in a cookie, // so when you return to this page, the position in the slideshow // won't be lost. if (!cookiename) { cookiename = this.name + '_slideshow'; } document.cookie = cookiename + '=' + this.current; } //-------------------------------------------------- this.restore_position = function(cookiename) { // If you previously called slideshow_save_position(), // returns the slideshow to the previous state. //Get cookie code by Shelley Powers if (!cookiename) { cookiename = this.name + '_slideshow'; } var search = cookiename + "="; if (document.cookie.length > 0) { offset = document.cookie.indexOf(search); // if cookie exists if (offset != -1) { offset += search.length; // set index of beginning of value end = document.cookie.indexOf(";", offset); // set index of end of cookie value if (end == -1) end = document.cookie.length; this.current = parseInt(unescape(document.cookie.substring(offset, end))); } } } //-------------------------------------------------- this.noscript = function() { // This method is not for use as part of your slideshow, // but you can call it to get a plain HTML version of the slideshow // images and text. // You should copy the HTML and put it within a NOSCRIPT element, to // give non-javascript browsers access to your slideshow information. // This also ensures that your slideshow text and images are indexed // by search engines. $html = "\n"; // Loop through all the slides in the slideshow for (i=0; i < this.slides.length; i++) { slide = this.slides[i]; $html += ' '; if (slide.link) { $html += ''; } $html += ''; if (slide.link) { $html += "<\/a>"; } if (slide.text) { $html += " \n" + slide.text; } $html += "<\/P>" + "\n\n"; } // Make the HTML browser-safe $html = $html.replace(/\&/g, "&" ); $html = $html.replace(//g, ">" ); return(' ' + $html + ' '); } //================================================== // Private methods //================================================== //-------------------------------------------------- this.loop = function() { // This method is for internal use only. // This method gets called automatically by a JavaScript timeout. // It advances to the next slide, then sets the next timeout. // If the next slide image has not completed loading yet, // then do not advance to the next slide yet. // Make sure the next slide image has finished loading if (this.current < this.slides.length - 1) { next_slide = this.slides[this.current + 1]; if (next_slide.image.complete == null || next_slide.image.complete) { this.next(); } } else { // we're at the last slide this.next(); } // Keep playing the slideshow this.play( ); } //-------------------------------------------------- this.valid_image = function() { // Returns 1 if a valid image has been set for the slideshow if (!this.image) { return false; } else { return true; } } //-------------------------------------------------- this.getElementById = function(element_id) { // This method returns the element corresponding to the id if (document.getElementById) { return document.getElementById(element_id); } else if (document.all) { return document.all[element_id]; } else if (document.layers) { return document.layers[element_id]; } else { return undefined; } } //================================================== // Deprecated methods // I don't recommend the use of the following methods, // but they are included for backward compatibility. // You can delete them if you don't need them. //================================================== //-------------------------------------------------- this.set_image = function(imageobject) { // This method is deprecated; you should use // the following code instead: // s.image = document.images.myimagename; // s.update(); if (!document.images) return; this.image = imageobject; } //-------------------------------------------------- this.set_textarea = function(textareaobject) { // This method is deprecated; you should use // the following code instead: // s.textarea = document.form.textareaname; // s.update(); this.textarea = textareaobject; this.display_text(); } //-------------------------------------------------- this.set_textid = function(textidstr) { // This method is deprecated; you should use // the following code instead: // s.textid = "mytextid"; // s.update(); this.textid = textidstr; this.display_text(); } } // ]]> // Past President Dave Boothby recenlty submitted a nunber of entries for the inclusion in the Nottingham and East Midlands Photographic Federation 2014 Exhibition. He was delighted to have 8 of them accepted, with one of them being highly commended. This was 'Chaffinch with Nest Material' was entered into Natural History Prints . Dave took this shot locally at Far Ings using a canon 500ml with tripod. Other acceptances were..

Recently the Camera Club was well entertained by talented photographer Guy Brown FRPS DPAGB. This was a return visit for Sheffield based photographer Guy who gave a fascinating lecture on Victorian photography. Guy started the evening by explaining the wet collodion process. Although this is a difficult technique to master, Guy said that it can provide some fascinating and beautiful results.....