Implements an image recognition captcha.

"; break; case 'admin/modules#description': case 'admin/modules/textimage': case 'admin/textimage': $output = t('Implements an image recognition captcha.'); break; } return $output; } function textimage_captchachallenge(&$form) { $form['captcha_response'] = array ( '#type' => 'textfield', '#title' => t('Captcha Validation'), '#default_value' => '', '#required' => TRUE, '#validate' => array('_captcha_validate' => array()), '#description' => t('Please type in the letters/numbers that are shown in the image above.'), '#prefix' => 'Captcha Image: you will need to recognize the text in it.', ); return $form; } function textimage_captchavalidate(&$captcha_word, &$correct) { $captcha_word = drupal_strtolower($captcha_word); if (($_SESSION['captcha'] != '') && $captcha_word == $_SESSION['captcha']) { $correct = true; } else { $correct = false; form_set_error('captcha_response', t('The image verification code you entered is incorrect.')); } } /** * Implementation of hook_menu(). */ function textimage_menu($may_cache) { $items = array(); $suffix = ''; if (arg(2)!=null) $suffix='/'.arg(2); $items[] = array( 'path' => '_textimage/image'.$suffix, 'title' => t('textimage'), 'callback' => '_textimage_image', 'access' => user_access('access textimages'), 'type' => MENU_CALLBACK ); return $items; } function textimage_perm() { return array('access textimages'); } function textimage_settings() { $fonts_path = variable_get("textimage_fonts_path", ""); $images_path = variable_get("textimage_images_path", ""); //check for GD if (!function_exists(imagecreate)) drupal_set_message(t('Image library not available. Textimage needs the GD library extension to be installed. Please install GD.')); //check for TTF support elseif (!function_exists(imagettftext)) drupal_set_message(t('Your image library does not seem to have TrueType font support. Textimage will work, but will use the default inbuilt font.'),'status'); //check for valid font path elseif ($fonts_path!="" && !is_dir($fonts_path)) drupal_set_message(t('The current font path is invalid. The default font will be used.')); //check for valid image path if ($images_path!="" && !is_dir($images_path)) drupal_set_message(t('The current images path is invalid. No images will be used.')); //Fonts settings $form['fonts'] = array( '#type' => 'fieldset', '#title' => t('Fonts settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['fonts']['textimage_use_only_upper'] = array( '#type' => 'checkbox', '#title' => t('Use only Uppercase'), '#default_value' => variable_get('textimage_use_only_upper',0) ); $form['fonts']['textimage_fonts_path'] = array( '#type' => 'textfield', '#title' => t('TrueType Fonts Path'), '#default_value' => $fonts_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the Truetype (.ttf) fonts are stored. If you do not provide any fonts, the module will use the default font for text. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['fonts']['textimage_font_size'] = array( '#type' => 'textfield', '#title' => t('Font Size'), '#default_value' => variable_get('textimage_font_size',24), '#size' => 5, '#maxlength' => 2, '#description' => t('Font size of Captcha text (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_font_size")), ); $form['fonts']['textimage_char_spacing_max'] = array( '#type' => 'textfield', '#title' => t('Character Spacing'), '#default_value' => variable_get('textimage_char_spacing_max',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the kerning between letters in Captcha. Higher numbers indicate more spacing.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_spacing_max")), ); $form['fonts']['textimage_char_jiggle_amount'] = array( '#type' => 'textfield', '#title' => t('Character Jiggle'), '#default_value' => variable_get('textimage_char_jiggle_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of up and down movement in the Captcha letters. Higher numbers indicate more jiggling.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_jiggle_amount")), ); $form['fonts']['textimage_char_rotate_amount'] = array( '#type' => 'textfield', '#title' => t('Character Rotation'), '#default_value' => variable_get('textimage_char_rotate_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of rotation in the Captcha letters (in degrees, only works with non-default fonts).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_rotate_amount")), ); $form['fonts']['textimage_char_size_amount'] = array( '#type' => 'textfield', '#title' => t('Character Size Adjustment'), '#default_value' => variable_get('textimage_char_size_amount',2), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of variation in size between the different letters in the Captcha (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_size_amount")), ); //Image settings $form['images'] = array( '#type' => 'fieldset', '#title' => t('Image settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['images']['textimage_images_path'] = array( '#type' => 'textfield', '#title' => t('Background Images Path'), '#default_value' => $images_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the background images are stored. If you do not provide a directory, solid colors will be used. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['images']['textimage_image_noise'] = array( '#type' => 'textfield', '#title' => t('Image Noise (pixels)'), '#default_value' => variable_get('textimage_image_noise',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random pixels) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_noise")), ); $form['images']['textimage_image_lines'] = array( '#type' => 'textfield', '#title' => t('Image Noise (lines)'), '#default_value' => variable_get('textimage_image_lines',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random lines) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_lines")), ); $form['images']['textimage_image_margin'] = array( '#type' => 'textfield', '#title' => t('Image Margin'), '#default_value' => variable_get('textimage_image_margin',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Set a distance between the Captcha letters and the edges of the image.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_margin")), ); $form['info'] = array( '#type' => 'fieldset', '#title' => t('Image and font information'), '#collapsible' => TRUE, '#collapsed' => FALSE ); if (isset($fonts_path)) { $imagefontinfo .= t('Number of fonts found: ').count(_textimage_font_list()); } if (isset($images_path)) { $imagefontinfo .= '
'.t('Number of background images found: ').count(_textimage_image_list()); } $gdinfo = gd_info(); $imagefontinfo .= '
'.t('GD Version: ').$gdinfo["GD Version"]; $imagefontinfo .= '
'.t(' FreeType Support: '); $imagefontinfo .= ($gdinfo["FreeType Support"]==true) ? 'True' : 'False'; $imagefontinfo .= '
'; $form['info']['captcha_info'] = array ( '#type' => 'item', '#value' => $imagefontinfo, ); return $form; } function textimage_settings_form_validate ($form_id,$form) { //check for valid font path if ($form['textimage_fonts_path'] !="" && !is_dir($form['textimage_fonts_path'])) form_set_error('textimage_fonts_path', t('The entered font path is invalid')); //check for valid image path if ($form['textimage_images_path'] !="" && !is_dir($form['textimage_images_path'])) form_set_error('textimage_images_path', t('The entered image path is invalid')); } function _textimage_number_validate ($field,$fieldName) { if (!is_numeric($field['#value'])) { form_set_error($fieldName,t("The value for")." ".t($field['#title'])." ".t("must be a number")); } } /** * Prints an image containing a textimage code. */ function _textimage_image() { //if we don't have GD2 functions, we can't generate the image if (!function_exists('imagecreatetruecolor')) return; // Set headers header('Expires: Mon, 01 Jan 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); header('Content-type: image/png'); $string = _textimage_code(); // Get truetype font list $fonts = _textimage_font_list(); // Get the background images list $images = _textimage_image_list(); // Randomization amounts: $charSpacingMax = variable_get('textimage_char_spacing_max',10); // Letter spacing max (pixels) $charSpacingMin = max($charSpacingMax*.5,0); // Letter spacing minimum (pixels) $charJiggleAmount = variable_get('textimage_char_jiggle_amount',5); // Up and down randomization (pixels) $charRotateAmount = variable_get('textimage_char_rotate_amount',5); // Character rotation amount (degrees) $charSizeAmount = variable_get('textimage_char_size_amount',2); // Character size amount (pixels) $imageRotateAmount = variable_get('captcha_image_rotate_amount',12); // Image rotation amount (degrees) // Static amounts: $charInitialSize = variable_get('textimage_font_size',24); // Initial Font $imageNoise = variable_get('textimage_image_noise',4); // Amount of noise added to image $imageLines = variable_get('textimage_image_lines',4); // Amount of noise added to image $imageMargin = variable_get('textimage_image_margin',10); // Margin around image (pixels) // write text using a truetype font if (function_exists(imagettftext) && count($fonts) > 0) { // Initialize variables for the loop $characterDetails = array(); // contains the final info about each character // Build a list of character settings for the captcha string for ($i=0;$i $charSize, "angle" => $charAngle, "x" => $x, "y" => $y, "color" => $foreground, "font" => $font, "char" => $char ); // Increment the image size $imageWidth = $x + $charWidth; $imageHeight = max($imageHeight,$y+$charJiggleAmount); } // Create the image based off the string length and margin if (count($images) > 0) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Specify colors to be used in the image $foreground = imagecolorallocate($im, rand(0, 80), rand(0, 80), rand(0, 80)); foreach($characterDetails as $char) { // draw character imagettftext($im,$char['size'],$char['angle'],$char['x']+$imageMargin,$char['y']+$imageMargin,$foreground,$char['font'],$char['char']); } } else { // write text using a built-in font $x = 0; $y = 0; $imageWidth = 60 + drupal_strlen($string)*$charSpacingMax*.35; $imageHeight = 30 + $charJiggleAmount; // Create the image if (count($images) > 0 && function_exists(imagecolorallocatealpha)) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth, $imageHeight); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth, $imageHeight); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Add the text for ($i=0;$i 0) { // Prepare a larger image with a background image $im2 = _textimage_create_transparent_image($imageWidth, $imageHeight); } else { // Prepare a larger image with a solid color $im2 = imagecreatetruecolor($imageWidth, $imageHeight); imagefill($im2, 0, 0, $background); } $result = imagecopyresampled ($im2, $im, $imageMargin, $imageMargin, 0, 0, $imageWidth, $imageHeight, imagesx($im), imagesy($im)); $im = $im2; } // strikethrough imageline($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $foreground); // Add Noise for ($x=0; $x<$imageWidth; $x++) { for ($row=0; $row<$imageNoise;$row++) { $y = rand(0,$imageHeight); imagesetpixel($im, $x, $y, $noisecolor); } } // Add Lines and Ellipses for ($x=0; $x<$imageLines;$x++) { imageline($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); imageellipse($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); } // Fill image with a random background image if available if (count($images) > 0) { $image = $images[rand(0,count($images)-1)]; _textimage_apply_background_image($im,$image); } //output to browser imagepng($im); imagedestroy($im); } /** * Returns a random string for use in a captcha */ function _textimage_code() { $consts='bcdgjxvmnprst'; $vowels='aeiou'; for ($x=0; $x < 6; $x++) { mt_srand ((double) microtime() * 1000000); $const[$x] = drupal_substr($consts,mt_rand(0,drupal_strlen($consts)-1),1); $vow[$x] = drupal_substr($vowels,mt_rand(0,drupal_strlen($vowels)-1),1); } $string = $const[0] . $vow[0] .$const[2] . $const[1] . $vow[1] . $const[3] . $vow[3] . $const[4]; $string = drupal_substr($string,0,rand(4,6)); //everytime we create a new code, we write it to session $_SESSION['captcha'] = drupal_strtolower($string); if(variable_get('textimage_use_only_upper',0)) $string = drupal_strtoupper($string); return $string; } /** * Returns an array of files with TTF extensions in the specified directory. */ function _textimage_font_list() { $fontdir = variable_get("textimage_fonts_path", ""); $filelist = array(); if (is_dir($fontdir) && $handle = opendir($fontdir)) { while ($file = readdir($handle)) { if (preg_match("/\.ttf$/i",$file) == 1) $filelist[] = $fontdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Returns an array of files with jpg, png, and gif extensions in the specified directory. */ function _textimage_image_list() { $imagesdir = variable_get("textimage_images_path", ""); $filelist = array(); if (is_dir($imagesdir) && $handle = opendir($imagesdir)) { while ($file = readdir($handle)) { if (preg_match("/\.gif|\.png|\.jpg$/i",$file) == 1) $filelist[] = $imagesdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Overlays an image to the supplied image resource */ function _textimage_apply_background_image (&$imageResource,$imageFile) { $backgroundResource = image_gd_open($imageFile,substr($imageFile,-3)); // Copy the text onto the background $backX = imagesx($backgroundResource); $backY = imagesy($backgroundResource); $textX = imagesx($imageResource); $textY = imagesy($imageResource); $randomBackX = rand(0,$backX-$textX); $randomBackY = rand(0,$backY-$textY); // Place the text onto a random location of the background image imagecopyresampled($backgroundResource,$imageResource,$randomBackX,$randomBackY,0,0,$textX,$textY,$textX,$textY); // Crop the background image to the original image size imagecopyresampled($imageResource,$backgroundResource,0,0,$randomBackX,$randomBackY,$textX,$textY,$textX,$textY); } /** * Creates transparent image resources for images with graphic backgrounds */ function _textimage_create_transparent_image($x, $y) { $i = imagecreatetruecolor($x, $y); $b = imagecreatefromstring(base64_decode(_text_image_blankpng())); imagealphablending($i, false); imagesavealpha($i, true); imagecopyresized($i, $b ,0 ,0 ,0 ,0 ,$x, $y, imagesx($b), imagesy($b)); return $i; } function _text_image_blankpng() { $c = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m"; $c .= "dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADqSURBVHjaYvz//z/DYAYAAcTEMMgBQAANegcCBNCg"; $c .= "dyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAAN"; $c .= "egcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQ"; $c .= "oHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAA"; $c .= "DXoHAgTQoHcgQAANegcCBNCgdyBAgAEAMpcDTTQWJVEAAAAASUVORK5CYII="; return $c; } ?> oellermann.com

  • warning: Creating default object from empty value in /var/www/oellermann/modules/spam/spam.module on line 488.
  • : preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/oellermann/includes/unicode.inc on line 291.

Walking in the Spirit, Living by Faith

I mentioned last week that we'd be discussing the topic of predictability this evening. As everybody knows, Christians are boring, predictable people, and we should clearly strive to stamp out any spark of creativity or individuality in our lives. <duck tomatoes>.

Well, no, that's not quite the effect I wanted to achieve. Nonetheless, it is one of my life ambitions to achieve predictability. You see, life is like a really big freeway interchange. You're faced with a whole bunch of turnoffs, forks and off-ramps. Each will take you to a completely different destination; only one will take you to the destination you want. Obviously, to navigate this whole mess of roads, you need to know where you're going. Christianity gives us an answer: we're going to a life of eternal glory with God. I am doubtful that one can ask for a better destination - and the more I head down that road, the better the destination appears - just like the hot, sweaty road to the holiday resort!

So we have our destination firmly in our mind's eye. I've been reading Pilgrim's Progress recently, and Bunyan relates an event in the life of Christian, who's headed for the Celestial Gates of Heaven. Let me read you the passage: (pg 13 "I know what I would obtain" - pg 14 "So Christian turned out of his way")

Something similar happened to me. Mere days after I passed my drivers' license, I had to drop my dad off at the airport. I was organised for the way home: I knew my destination and had plotted my route. But the 7th Edition Witwatersrand Street Guide has a small inaccuracy in its representation of the N3/R24/N12 interchange (commonly called Gilooly's). I was so confident that I knew the turns, that I didn't watch the signs. I got lost, and it was only by dint of great effort that I regained the N3 north.

Let's get back to the predictability, then. Imagine 702's "Eye in the Sky" helicopter hovering above the intersection. Aki Anastasiou looks down at Daphne, my car, and he recognises that I'm going home. From his vantage point, he'll be able to spot the turns I should make: if I get everything right, my journey will be predictable. Sure, it doesn't really make a difference what clothes I wear or what radio station I listen to or who calls me on my cellphone, but if my journey is predictable in the essentials, I'll reach my goal.

Fair enough, you say; but if the map book is fighting with the road signs and the passengers each disagree with everything else, how do you know which turns to make? Isn't the answer easy? Grab the cell, call Aki, and ask him! From his vantage point, it's easy to see the right path. In life, God has the broader viewpoint. He can see every part of my life, every twist, turn and convolution, and he can tell me which way to go. To get to my destination, I need to immerse myself in God. I need to walk in the Spirit.

Just a second - I can't let myself get away with that. Not so long ago, I would have condemned this "walking in the Spirit" as MEGO (Mine Eyes Glazeth Over) Christianese. After all, what is walking in the Spirit? And why don't I use my grammar checker and say "walking with the spirit"?

OK, let's investigate it. "Walking" is an analogy for life. It implies moving from one point to another, and suggests the idea of reaching a final destination. The "Spirit" is none other than the Holy Spirit of God, who lives in all believers. "In" is a preposition implying immersion or envelopment. Putting it all together, then, "walking in the Spirit" is living one's life immersed in God to reach one's goal. Maybe it is grammatical, after all.

Walking in the spirit, then, implies a relationship with God which is interactive and which touches all aspects of life. Being immersed in God gives the Christian two big advantages in life: firstly, knowledge of God's will, and secondly, ability and strength to do that will. If I walk continually in the Spirit, the basic decisions I make at each fork in the path will be predictable. That doesn't mean that I'm a robot, though. I have free will; even if Aki tells me which turn-off to take, I must decide for myself whether or not to trust him, or whether I like his radio station enough to listen to him. To walk continually in the Spirit is to continually remember our destination and stay on the right path. As Robert showed last week, we have to "do truth", and we have to do it faithfully and consistently. Walking in the Spirit empowers us to do truth, and to keep on walking in the Spirit.

So how exactly does one go about walking in the Spirit? Let me tell you a story I once heard. A noted English philosopher (Bertrand Russell, I think it was) was discoursing at a public function in one of the big industrial cities. As part of his presentation, he explained our current scientific worldview, debunking geocentricity and heliocentricity. As soon as he fell silent for a moment, an aged lady stood up near the back of the hall and said "You're quite wrong, you know!" Bertrand was amused, and smiling benignly, asked the venerable woman to kindly explain herself. She immediately replied that the world was a flat disk resting on the backs of four elephants. "Ah," says our Bertrand, grinning slightly at the absurdity of the debate he has joined, "And what are the elephants standing on?". The woman remains unflustered, and reveals that they stand on the shell of a giant turtle. Bertrand now smells blood, and his next query is delivered with a rhetorical flourish: "And, pray tell, upon what does the turtle venture to stand?" At this point our dogmatic old champion fixes Bertrand in the eye and says "You're very clever, young man; very clever indeed - but it's turtles all the way down!" And now I have the elegant task of relating walking in the Spirit to an infinite tower of turtles!

For this purpose, I need 6 volunteers. (Note to Preacher: You'll also need 7 boxes, from small to large)

1
Romans 8:16-17: "The Spirit himself testifies with our spirit that we are God's children. Now if we are children, then we are heirs - heirs of God and co-heirs with Christ, if indeed we share in his sufferings in order that we may also share in his glory." If you will, fix your mind, then, on the statement "I am a child of God, born of His spirit". I have a matchbox here. The box itself has no special significance, nor does its content, but I want you to identify the statement with the box. The box, if you will, represents the statement. <give box to 1st volunteer>. You need to hold the box up (about chest height), as being a child of God is an elevated position. Great. Now leave the box there where it is, and go and sit down. What? It won't stay there? It'll fall? Clearly, then, the proposition isn't self-supporting.

2.
If, then, I am born of God's Spirit, then my spirit is one with his, and the purpose of my life is his. Please identify this box with the second statement. <hand boxes to 2nd volunteer> Note how neatly the first box rests on the second, not teetering or wobbling. OK, just leave the boxes there and take your seat. Groan. Still not a rigid structure of logic.

3.
Well, my next statement comes from Colossians 1: 9-12. "For this reason, since the day we heard about you, we have not stopped praying for you and asking God to fill you with the knowledge of his will through all spiritual wisdom and understanding. And we pray this in order that you may live a life worthy of the Lord and may please him in every way; bearing fruit in every good work, growing in the knowledge of God, being strengthened with all power according to his glorious might so that you may have great endurance and patience, and joyfully giving thanks to the Father, who has qualified you to share in the inheritance of the saints in the kingdom of light."

In summary, then, (hold up third box) God's purpose for my life is to glorify him by bearing good fruit and growing in the Lord. (pass boxes to third sucker). Righty-ho, just park those right there and sit down. Sigh. Well, I guess we've achieved one thing: my sermon has at least become predictable!

4.
In John 15:1-6, Jesus says "I am the true vine, and my Father is the gardener. He cuts off every branch in me that bears no fruit, while every branch that does bear fruit he prunes so that it will be even more fruitful. You are already clean because of the word I have spoken to you. Remain in me, and I will remain in you. No branch can bear fruit by itself; it must remain in the vine. Neither can you bear fruit unless you remain in me. I am the vine; you are the branches. If a man remains in me and I in him, he will bear much fruit; apart from me, you can do nothing. If anyone does not remain in me, he is like a branch that is thrown away and withers; such branches are picked up, thrown into the fire and burned."

Let's stack them up again (handing to 4th volunteer):

  • I am a child of God, born of His spirit
  • My spirit became on with His spirit; my life's purpose is his.
  • His purpose for my life is to glorify him by bearing fruit and growing in him
  • I cannot bear fruit without abiding in Christ.

5.
Is this going to stand up? No? John 14:15 says "If you love me, you will obey what I command." And again in verses 23-24 "Jesus replied, 'If anyone loves me, he will obey my teaching. My father will love him, and we will come to him and make our home with him.'" Clearly (give box to 5th volunteer) we cannot abide in Christ without loving him and obeying his commands. (put other boxes onto 5).

6.
(indicate space) Clearly, there is still something missing. 1 John 1:5-6: "This is the message we have heard from him and declare to you: God is light, in him there is no darkness at all. If we claim to have fellowship with him yet walk in the darkness, we lie and do not live by truth." And Romans 8:4-5 reads "And so he condemned sin in sinful man, in order that the righteous requirements of the law might be fully met in us, who do not live according to the sinful nature but according to the Spirit. Those who live according to the sinful nature have their minds set on what that nature desires; but those who live in accordance with the Spirit have their minds set on what the Spirit desires."

 
We cannot love and obey Christ while walking in the flesh; we must therefore walk in the spirit. (give 6th box to 6th person, transfer boxes, thank 5th person).

7.
We've come a long way, and still our structure won't support us at the stature of a Child of God. My next reading is from 2 Corinthians 5:5-7 "Now it is God who made us for this very purpose and has given us the Spirit as a deposit, guaranteeing what is to come. Therefore we are always confident and know that as long as we are home in the body we are away from the Lord. We live by faith, not by sight."

We cannot walk in the Spirit without faith (kick last box underneath). And faith is like those turtles, all the way down. Faith cannot let us fall, because faith is from God, and faith rests on God, who sustains all things. Faith comes from God, and faith is safe placed in God; and an everlasting cycle is formed which eats up the emptiness in our lives with godliness as we walk.

Hebrews 11:1-3 has this to say about faith:

"Now faith is being sure of what we hope for and certain of what we do not see. This is what the ancients were commended for. By faith we understand that the Universe was formed at God's command, so that what is seen was not made out of what was visible".

Faith is a supernatural quality. As humans, we find it easy to believe in self-evident truths: I have faith that the sun will rise tomorrow. When I planned this sermon, I had faith that the boxes would fall as expected - but walking in the Spirit requires faith in things "we do not see". In 1 Timothy 1:14, Paul explains that though he was a sinner, "the grace of the Lord was poured out on me abundantly, along with the faith and love that are in Christ Jesus." And this faith can only come from knowing God; from spending time and interacting with God. Look at the faith and boldness which the disciples received from their relationship with Jesus! We, too, need to seek God, and to find him in His word, in our circumstances, in His church and in His people, and in prayer.

Therefore let us pray.

Lord, you know that if we rely on our own strength, our lives will tumble and fall, like those boxes. You know that as we walk through this lifetime it is easy to get so caught up in the struggle not to fall, that we forget that you are the one who is able to keep us from falling. Dear Lord, please strengthen each one of us: show us how we may come to know you better, so that our faith in you may grow ever stronger, so that we may always abide in you and bear good fruit for you, our beloved master. We ask these things, confident that as we ask them they are ours already, in the precious name of Jesus Christ our Saviour. Amen.

  


Reply

  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <br> <h1> <h2> <h3>
  • Lines and paragraphs break automatically.
  • You may use [acidfree:xx] tags to display acidfree videos or images inline.
  • Images can be added to this post.
More information about formatting options