Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

knock knock: my self-documenting code pursuit

157 views
Skip to first unread message

Charles J. Daniels

unread,
Oct 4, 2014, 12:58:58 PM10/4/14
to
So I've been playing with my coding style, aiming to make things more meaningful, a la "self documenting code". I'm enjoying it.

Over and over I find myself adding or subtracting string positions (from string.find() or whatnot), and often either adding or subtracting a 1. Every time I have to figure it out in my head, and then any time I read it I would have to do it again to verify, or figure it out later.

I have a handful of "meaningfulness" constructs around now. I was documenting one after being up all time, and tickled myself, twice!



/**
* A meaningful way to indicate an active position beyond a
* starting position, specifically due to stepping just past
* the given string.
* @code
* wstring joke(L"knock knock abracadabra");
* wstring whosThere(L"abra");
* auto punchlinePosition = joke.find(whosThere) + After(whosThere);
* wstring whosThereWho = joke.substr(punchlinePosition);
* @endcode
* @param string The string being stepped over, or at minimum
a string of equivalent length
* @return The number of positions moved to step over the string
*/
template <class charT>
typename basic_string<charT>::size_type After(basic_string<charT> string) {
return string.length();
}


/**
* A meaningful way to actively consider a position beyond a starting
* position, specifically the end character of some string under
* consideration.
* @code
* wstring dangling(L"sentences shouldn't end with the word of");
* wstring preposition(L"of");
* bool badGrammer =
* dangling.find(preposition) + Through(preposition)
* == dangling.lastPosition();
* @endcode
* @param string The string to look at the end of, or at minimum
* a string of equivalent length
* @return The number of positions moved to step to the end
* of the string
*/
template <class charT>
typename basic_string<charT>::size_type Through(basic_string<charT> string) {
return string.length() - 1;
}

:-p lol

I'll be curious to see if this coding style sticks, or goes fad for me. But the idea of having position manipulations readily apparent seems like a keeper for me.

(If you try to run those doc examples, lastPosition() is just length() - 1)

Rick C. Hodgin

unread,
Oct 4, 2014, 2:15:02 PM10/4/14
to
On Saturday, October 4, 2014 12:58:58 PM UTC-4, Charles J. Daniels wrote:
> [snip]

Jesus Christ is the way, the truth, and the life. He commands all men
everywhere to repent. No one will enter into Heaven unless they come
to Him, humble themselves, ask forgiveness, and be saved.

There is a way which seems right unto a man, Charles, but the ends
thereof are the ways of death.

Choose life. Learn of Jesus Christ and let the truth set you free.

Best regards,
Rick C. Hodgin

Mr Flibble

unread,
Oct 4, 2014, 3:11:32 PM10/4/14
to
Such functions which simply duplicate other functionality just add noise
in my opinion .. str.length() means more to me than After(str) given
that I understand the *Standard* Library and not your code.

/Flibble

jacob navia

unread,
Oct 4, 2014, 4:05:41 PM10/4/14
to
This is a wondeful example of a religious person.

When asked about a good naming convention, he will answer his religious
babble without trying to address the question at all.

Question:
What time is it please?

Answer:
> Jesus Christ is the way, the truth, and the life. He commands all men
> everywhere to repent. No one will enter into Heaven unless they come
> to Him, humble themselves, ask forgiveness, and be saved.

Q: What is the standard C++ function to calculate the cubic root?

A: Jesus Christ is the way, the truth, and the life. He commands all
men everywhere to repent. No one will enter into Heaven unless they
come to Him, humble themselves, ask forgiveness, and be saved.

Wat a bunch of morons!


Rick C. Hodgin

unread,
Oct 4, 2014, 4:35:45 PM10/4/14
to
You have value, very special value. You are
important and your life means something.
You are a beautiful creation of God, endowed
with unique and special traits.

Jesus teaches us who we are. He shows us
the unique and special creations we are.
All of us. All who will hear.

The love in store for those who overcome is
worth all the ridicule, all the scorn. It is toward
Him, and His goals for all of us (loving one
another, helping one another, lifting and
encouraging one another) that we strive. He
guides the way, and He is the epitome of all such
efforts and endeavors.

Jesus teaches us all things. The closer you
pursue that knowledge, the more He gives
you. It never ceases to increase with pursuit.

I love people too much to not share this most
wonderful revelation, and free gift of unending,
eternal life, with Him, because of Him.

Do you want to enter into Heaven? Do you
care about your eternal soul? All I ask is that
you learn of Jesus Christ. I testify that He is
real, alive, and is more amazing than anything
you've ever encountered, or ever will ever
encounter.

Eternal life is a free gift from God, one made
possible by Jesus alone because of His atoning
death on the cross.

Öö Tiib

unread,
Oct 4, 2014, 5:01:26 PM10/4/14
to
On Saturday, 4 October 2014 19:58:58 UTC+3, Charles J. Daniels wrote:
> So I've been playing with my coding style, aiming to make things
> more meaningful, a la "self documenting code". I'm enjoying it.

It is most important ... that you yourself enjoy it.

> Over and over I find myself adding or subtracting string positions
> (from string.find() or whatnot), and often either adding or
> subtracting a 1. Every time I have to figure it out in my head, and
> then any time I read it I would have to do it again to verify, or
> figure it out later.
>
> I have a handful of "meaningfulness" constructs around now.
> I was documenting one after being up all time, and tickled
> myself, twice!
>
> /**
> * A meaningful way to indicate an active position beyond a
> * starting position, specifically due to stepping just past
> * the given string.
> * @code
> * wstring joke(L"knock knock abracadabra");
> * wstring whosThere(L"abra");
> * auto punchlinePosition = joke.find(whosThere) + After(whosThere);
> * wstring whosThereWho = joke.substr(punchlinePosition);
> * @endcode

If to try last two lines of your example with various different values
of 'joke' and 'whosThere' then we see that punchlinePosition has
most of the time value 'whosthere.length()-1'. That is because
'some_string.find(other_string)' returns most of the time
'string::npos' (that is required to be 'SIZE_MAX').

> * @param string The string being stepped over, or at minimum
> a string of equivalent length
> * @return The number of positions moved to step over the string
> */
>
> template <class charT>
> typename basic_string<charT>::size_type After(basic_string<charT> string) {
> return string.length();
> }

Since example of its usage was broken I suspect that it is not good
idea to use it. Same with your other function whose example does not
even compile for that 'lastPosition'.

> I'll be curious to see if this coding style sticks, or goes fad for
> me. But the idea of having position manipulations readily apparent
> seems like a keeper for me.

In practice we can't throw aside error handling for sake of
readability. So write realistic examples of usage first and measure
the "meaningfulness" from those.

Aliasing lengthy constructs is often good idea but purpose of
aliasing 'str.size()' with 'After(str)' and 'str.size()-1' with
'Through(str)' is confusing for me.

With years I have also found that code that contains
some pointer, iterator or position math may be complex
to read. I add either comment or move the whole arithmetic
to separate little function.

Mr Flibble

unread,
Oct 4, 2014, 5:47:23 PM10/4/14
to
On 04/10/2014 21:35, Rick C. Hodgin wrote:
> You have value, very special value. You are
> important and your life means something.
> You are a beautiful creation of God, endowed
> with unique and special traits.

[snip]

Evolution is proof that your god doesn't exist and that you are a
deluded idiot.

/Flibble


Rick C. Hodgin

unread,
Oct 4, 2014, 6:20:11 PM10/4/14
to
On Saturday, October 4, 2014 5:47:23 PM UTC-4, Mr Flibble wrote:
> [snip]

Mr Flibble, you're running full-speed into a brick wall. I would
save you from that end by warning you of the existence of the wall.

What is it that you're offended by? Is it that Jesus teaches, and
even commands us, to love one another? Is that He teaches us to
help one another? That if we have two of something, we should give
one of them to the one who has none? That we should seek peace and
not fighting? That we should look out for our neighbor as ourself?

Which part of Jesus' teachings are so offensive and obtuse that the
person following them would be considered anything other than someone
in pursuit of all of those things that any person seeking a right
relationship with those around them would pursue?

It is because we say the name Jesus that you are offended. You know
that He is God Almighty and that He has the power of Life and Death
in His hand. And you are angry because you do not want that life,
and yet you know it is real.

He will save you too. All you have to do is believe, and ask.
There are no barriers between you and eternal life except for
those you personally erect yourself. Jesus has done everything
else to make it happen. He's reaching out with both arms to draw
you to His free offer. He is ready, willing, and able to receive
you.

I urge you, Mr Flibble ... do not delay. You will find a peace
you never knew was possible. A love within yourself that brings
you to tears. And a desire for those around you to also experience
that which you will then experience for the first time. It is
more profound than any thing which has come to you at any point
prior in your life.

The lyrics were penned for a reason:

"Amazing Grace, how sweet the sound, that saved a
wretch like me. I once was lost, but now I'm found.
Was blind, but now I see."

We are all wretches, Mr Flibble. It is Jesus who restores us,
and makes us whole. Seek to learn of Him. You will be forever
grateful that you did.

Mr Flibble

unread,
Oct 4, 2014, 6:51:03 PM10/4/14
to
On 04/10/2014 23:20, Rick C. Hodgin wrote:

[snip]

> We are all wretches, Mr Flibble. It is Jesus who restores us,
> and makes us whole. Seek to learn of Him. You will be forever
> grateful that you did.

Evolution is proof that Jesus doesn't exist and that you are a deluded
idiot.

/Flibble


Charles J. Daniels

unread,
Oct 4, 2014, 7:07:31 PM10/4/14
to
I definitely understand the perspective. I can't help but notice the foreignness myself, not because the code I'm producing is unreadable, in many ways it's very very readable, but it doesn't have the "how we usually do it " pop. I do think there is something to be said for constructs that specify the why and not the what. I somewhat suspect that I'll throw out a million constructs and then some will stick.

Something like this is very straight-forward due to commonness:

int max;
If (a > b) {
max = a;
} else {
max = b;
}

But when using an if-else to select between two possible values for a variable to take on, I'm liking this lately:

int max = Choose(a, b, a > b);

I recognize I could use

int max = a > b ? a : b

but every time I see Choose(), it screams to me "one or the other", and I'm looking to make my code scream more :-p

Mr Flibble

unread,
Oct 4, 2014, 7:17:13 PM10/4/14
to
No, again you use the Standard Library that everyone understands: std::max.

Only create new functions that add to or change semantics of already
existing functions; if the only difference is the NAME of the function
then what you think is a good name others might think is just
non-standard noise.

/Flibble

Charles J. Daniels

unread,
Oct 4, 2014, 7:45:45 PM10/4/14
to
On Saturday, October 4, 2014 2:01:26 PM UTC-7, Öö Tiib wrote:
> On Saturday, 4 October 2014 19:58:58 UTC+3, Charles J. Daniels wrote:
>
> > So I've been playing with my coding style, aiming to make things
>
> > more meaningful, a la "self documenting code". I'm enjoying it.
>
>
>
> It is most important ... that you yourself enjoy it.
>

I certainly agree =)

>
> > Over and over I find myself adding or subtracting string positions
>
> > (from string.find() or whatnot), and often either adding or
>
> > subtracting a 1. Every time I have to figure it out in my head, and
>
> > then any time I read it I would have to do it again to verify, or
>
> > figure it out later.
>
> >
>
> > I have a handful of "meaningfulness" constructs around now.
>
> > I was documenting one after being up all time, and tickled
>
> > myself, twice!
>
> >
>
> > /**
>
> > * A meaningful way to indicate an active position beyond a
>
> > * starting position, specifically due to stepping just past
>
> > * the given string.
>
> > * @code
>
> > * wstring joke(L"knock knock abracadabra");
>
> > * wstring whosThere(L"abra");
>
> > * auto punchlinePosition = joke.find(whosThere) + After(whosThere);
>
> > * wstring whosThereWho = joke.substr(punchlinePosition);
>
> > * @endcode
>
>
>
> If to try last two lines of your example with various different values
>
> of 'joke' and 'whosThere' then we see that punchlinePosition has
>
> most of the time value 'whosthere.length()-1'. That is because
>
> 'some_string.find(other_string)' returns most of the time
>
> 'string::npos' (that is required to be 'SIZE_MAX').
>

I see your point about what happens when whosThere is not found. The coder is not given the luxury of assuming a find occurs with this construct. The example has the luxury of knowing a find occurs in the case given, so it focuses on the effect of After. In my personal code, I only use After starting from a valid position (not npos), and additionally, I only ever pass After a string that literally represents what is sitting at that starting position.

>
> > * @param string The string being stepped over, or at minimum
>
> > a string of equivalent length
>
> > * @return The number of positions moved to step over the string
>
> > */
>
> >
>
> > template <class charT>
>
> > typename basic_string<charT>::size_type After(basic_string<charT> string) {
>
> > return string.length();
>
> > }
>
>
>
> Since example of its usage was broken I suspect that it is not good
>
> idea to use it. Same with your other function whose example does not
>
> even compile for that 'lastPosition'.

I added a note about "lastPosition" to my original post. My custom string class, which is a std::basic_string, exposes a lastPosition() -- but I now realize since After is generic to basic_strings and not specific to my custom strings, I should genericize the example. Thanks =)

>
>
>
> > I'll be curious to see if this coding style sticks, or goes fad for
>
> > me. But the idea of having position manipulations readily apparent
>
> > seems like a keeper for me.
>
>
>
> In practice we can't throw aside error handling for sake of
>
> readability. So write realistic examples of usage first and measure
>
> the "meaningfulness" from those.
>
>
>
> Aliasing lengthy constructs is often good idea but purpose of
>
> aliasing 'str.size()' with 'After(str)' and 'str.size()-1' with
>
> 'Through(str)' is confusing for me.
>
>

The thing I find appealing about them is that, from a starting position that contains str, After makes it clear the result position is the character that follows, and Through, as I interpret the word, is up to the very end but not beyond. So After and Through make it entirely clear which position I'm advancing to, in english words.

I have another function span() that may make it more clear what I like about this kind of construct.

string src("Grab the fifth word from here.");
int startPos = 15;
int endPos = 18;
string fifthWordNormal(src, startPos, endPos - startPos + 1);
string fifthWordMeaningful(src, startPos, span(startPos, endPos));

Span, which I won't make explicit, just means the inclusive length, but without this span concept, notice I have to add 1 in fifthWordNormal. What I'm saying is that in my code, in so many places these little changes, +1 or -1, happen or don't happen, and for a million different reasons, such that in each case, I have to repetitively do mental processing to make sure my indexes all make sense for the purpose at hand. With fifhWordMeaningful above and span, I just have to make sure my positions are valid, but then span keeps me from every having to point to my fingers, assign the 0 index to my thumb, and make sure I'm not one off somehow. It's clear, it's quick, and I can trust it. =)

If After, Through, span, and others take root in my general vocabulary, they answer a lot of questions right up front, just like we already benefit from when using things like iterators that setup clear boundaries.

>
> With years I have also found that code that contains
>
> some pointer, iterator or position math may be complex
>
> to read. I add either comment or move the whole arithmetic
>
> to separate little function.


So then you see my point. Arithmetic upon an index position often becomes abstract. My goal is make the why of the operation explict (After, Through), and hide the various incantations of +1 -1, behind that call. Rather than seeing +1 or -1 and then trying to figure out if I was doing a Through or an After, which is the type of code rediscovery thing I'm all to used to doing.

Charles J. Daniels

unread,
Oct 4, 2014, 8:33:22 PM10/4/14
to
I absolute see your point, but 1) I have the luxury to be talking about my own personal code that others need not see, and that I don't require assistance with. So if writing it in Chinese helps me, I don't have to worry about the standard library, standard anything, or intelligibility to others.

I do agree std::max is perfect for the max Choose scenario above, and I do agree it's the superior solution -- it's explicit and compact, just what I most prefer. Hard to make code scream better than std::max! Unfortunate example in that respect. Choose is meant to be explicit about the sourcing of the variable, "a choice between two options", but is generic to the how. It keeps me from having if-else branches than I later re-understand to be making such a choice. My current line of thinking is that, I use if-else for many reasons, but if I make explicit the contextual basis/purpose for an if-else, I won't need to digest the branches to glean that information. Choose can also serve to make code compact, which to me is a help to readability so long as it's not information dense.

I have a ChooseOp which is indentical to Choose in it's implementation, whose only purpose is to prime the reader to look for a chained call operator:

char properCase = ChooseOp(towupper, towlower, conditionOrFunctor)(inputChar);

I'm looking to rename ChooseOp, because the name implies an operation is chosen, but the true intent in my mind is to prepare myself for a chained call to an operation. It's a step up from

char properCase = Choose(towupper, towlower, conditionOrFunctor)(inputChar);

which looks like a normal Choose but then switches it up on you by inserting an expecting feature to the a place you might not look.

If I could usefully call ChooseOp something like "ChooseResultFromAChainedFunctionCallFromOperationChoice" I'd be happy. But just know Mr Flibble, even I have my limits. I'm goal oriented with all of this. Any construct I use should somehow be more explicit and readily incorporated by a ~familiar~ user. The standard library requires familiarity to be incorporated so easily, as no doubt you understand. Again, in my own personal "no one else needs to be able to read it" code, I again agree std::max is the best in the original scenario, to make my intentions for my code explicit. =) Here, explicit will have get me targeted feedback to my purpose =) Knowing my code has problems with foreignness to others is rather essential, and you brought that up right away.

Öö Tiib

unread,
Oct 4, 2014, 10:05:10 PM10/4/14
to
That constrains valid usage of 'After' into narrow context
and then it feels more reasonable to have functions that
implement the narrow case itself and enforce the constraints too:

string substr_after(string from, string other)
{
string::size_type p = from.find(other);
// enforce constraints:
if (p == string::npos)
{
throw "bad parameters";
}
p += other.size();
return from.substr(p);
}

> > Aliasing lengthy constructs is often good idea but purpose of
> > aliasing 'str.size()' with 'After(str)' and 'str.size()-1' with
> > 'Through(str)' is confusing for me.
>
> The thing I find appealing about them is that, from a starting
> position that contains str, After makes it clear the result position
> is the character that follows, and Through, as I interpret the word,
> is up to the very end but not beyond. So After and Through make it
> entirely clear which position I'm advancing to, in english words.

Might be, for me neither name indicates returning a position in
string.

> I have another function span() that may make it more clear
> what I like about this kind of construct.
>
> string src("Grab the fifth word from here.");
> int startPos = 15;
> int endPos = 18;
> string fifthWordNormal(src, startPos, endPos - startPos + 1);
> string fifthWordMeaningful(src, startPos, span(startPos, endPos));

I have overcame that problem by accepting that "end" means
"one past last" in C++. Similarly as "first"/"start"/"begin"
is at position 0 in C++ (not at 1). So 'endPos = 18' is wrong
in mine code; it should be '19' (or if it is '18' it should
be called "lastPos" or "backPos" that I rarely use).
Btw: what you extract looks like fourth word not fifth. ;)

> > With years I have also found that code that contains
> > some pointer, iterator or position math may be complex
> > to read. I add either comment or move the whole arithmetic
> > to separate little function.
>
> So then you see my point. Arithmetic upon an index position often
> becomes abstract. My goal is make the why of the operation explict
> (After, Through), and hide the various incantations of +1 -1, behind
> that call. Rather than seeing +1 or -1 and then trying to figure out
> if I was doing a Through or an After, which is the type of code
> rediscovery thing I'm all to used to doing.

Yes I see your point, but for me "end" is same as your "After" and
if positions "begin" from zero the "size" or "length" gives me
position of "end". I use "end" mostly since I need the position of
"last" or "back" very rarely for anything. As result I rarely have
those +1 or -1 in my code. Additional benefit is that empty sequence
is where "start" and "end" are equal but "last" or "back" is logic
error in empty sequence. Your 'Through' returns 'string::npos' to
empty string.

Charles J. Daniels

unread,
Oct 5, 2014, 1:02:13 AM10/5/14
to
I agree there is certainly said to be said for enforcing constraints, but so far I don't see the need given the intend use of After and Through. I only use these in a context where I have the constraints met in the first place, so for anyway.

>
> > > Aliasing lengthy constructs is often good idea but purpose of
>
> > > aliasing 'str.size()' with 'After(str)' and 'str.size()-1' with
>
> > > 'Through(str)' is confusing for me.
>
> >
>
> > The thing I find appealing about them is that, from a starting
>
> > position that contains str, After makes it clear the result position
>
> > is the character that follows, and Through, as I interpret the word,
>
> > is up to the very end but not beyond. So After and Through make it
>
> > entirely clear which position I'm advancing to, in english words.
>
>
>
> Might be, for me neither name indicates returning a position in
>
> string.
>

I understand. The way I see After and Through is as a part of a standard "positions" library. So I'll get very used to them, just like wstring::npos, std::endl, etc. Those mean very little, but we toss them around with accustomed ease.

The names After and Through aren't the perfect ideal names to me either, but they are one word English words, so they're good enough for me. After used to be Beyond, but that has too strong an implication of well after, and not just after. After could be called Past, PositionBeyond, or whatever. If anyone were to want to do the same thing, they could certainly substitute names that translate move vividly to them.

>
> > I have another function span() that may make it more clear
>
> > what I like about this kind of construct.
>
> >
>
> > string src("Grab the fifth word from here.");
>
> > int startPos = 15;
>
> > int endPos = 18;
>
> > string fifthWordNormal(src, startPos, endPos - startPos + 1);
>
> > string fifthWordMeaningful(src, startPos, span(startPos, endPos));
>
>
>
> I have overcame that problem by accepting that "end" means
>
> "one past last" in C++. Similarly as "first"/"start"/"begin"
>
> is at position 0 in C++ (not at 1). So 'endPos = 18' is wrong
>
> in mine code; it should be '19' (or if it is '18' it should
>
> be called "lastPos" or "backPos" that I rarely use).
>
> Btw: what you extract looks like fourth word not fifth. ;)
>
>

Yes, funny, I did pull the 4th word :-p

I haven't taken a generalized meaning of "end" as one past, except in the context of an iterator. My positions "library" doesn't interpret to me conceptually like iterators, it's just arithmetic of indexes in my perception.

>
> > > With years I have also found that code that contains
>
> > > some pointer, iterator or position math may be complex
>
> > > to read. I add either comment or move the whole arithmetic
>
> > > to separate little function.
>
> >
>
> > So then you see my point. Arithmetic upon an index position often
>
> > becomes abstract. My goal is make the why of the operation explict
>
> > (After, Through), and hide the various incantations of +1 -1, behind
>
> > that call. Rather than seeing +1 or -1 and then trying to figure out
>
> > if I was doing a Through or an After, which is the type of code
>
> > rediscovery thing I'm all to used to doing.
>
>
>
> Yes I see your point, but for me "end" is same as your "After" and
>
> if positions "begin" from zero the "size" or "length" gives me
>
> position of "end". I use "end" mostly since I need the position of
>
> "last" or "back" very rarely for anything. As result I rarely have
>
> those +1 or -1 in my code.

I get a decent amount of them. And like I said I always have to mentally run through my indexing to make sure it's right, even if there is no +1 or -1 because I don't have clear expectations that I know for sure apply in the multitudinous situations they come up in.

> Additional benefit is that empty sequence
>
> is where "start" and "end" are equal but "last" or "back" is logic
>
> error in empty sequence. Your 'Through' returns 'string::npos' to
>
> empty string.

Through, while not very clearly documented to this effect, is literally expecting to be used when you are on the starting position of some specific value within a string, so you wouldn't pass it an empty string or you wouldn't be on a valid position in the first place. You can go through the end of the fourth/fifth word if you're not at it's starting position. Through to me is a very very context sensitive choice, and in that context Through makes my intent, ~and~ the result, very clear, and valid. Keeps me from having to off-by-one-validate over and over as I tend to my code -- is the goal anyway. I just wrote the things last night. I've been using other "meaningful" constructs longer, and I tend to like them. In fact, recently my code has been becoming quite a piece of art to me: clean, obvious, direct, transparent, uncluttered. Pretty crazy. It's certainly the goal I've been working on.

You know, some people balk at even using meaningful variable names, or fume at the suggestion to abbreviate less :-p

Charles J. Daniels

unread,
Oct 5, 2014, 1:05:14 AM10/5/14
to
>
> I have a handful of "meaningfulness" constructs around now. I was documenting one after being up all time, and tickled myself, twice!
>
>

And just to be specific, my original intention was to share the humor of my examples :-p The got me laughing so hard I just had to post. See that "being up all time" comment up there, I meant be up all night, but it's why I couldn't type. :-p

The feedback is much appreciated though, certainly.

Dombo

unread,
Oct 5, 2014, 9:00:12 AM10/5/14
to
Op 05-Oct-14 0:20, Rick C. Hodgin schreef:
> On Saturday, October 4, 2014 5:47:23 PM UTC-4, Mr Flibble wrote:
>> [snip]
>
> Mr Flibble, you're running full-speed into a brick wall. I would
> save you from that end by warning you of the existence of the wall.
>
> What is it that you're offended by? Is it that Jesus teaches, and
> even commands us, to love one another? Is that He teaches us to
> help one another? That if we have two of something, we should give
> one of them to the one who has none? That we should seek peace and
> not fighting? That we should look out for our neighbor as ourself?
>
> Which part of Jesus' teachings are so offensive and obtuse that the
> person following them would be considered anything other than someone
> in pursuit of all of those things that any person seeking a right
> relationship with those around them would pursue?
>
> It is because we say the name Jesus that you are offended. You know
> that He is God Almighty and that He has the power of Life and Death
> in His hand. And you are angry because you do not want that life,
> and yet you know it is real.
>
> He will save you too. All you have to do is believe, and ask.
> There are no barriers between you and eternal life except for
> those you personally erect yourself. Jesus has done everything
> else to make it happen. He's reaching out with both arms to draw
> you to His free offer. He is ready, willing, and able to receive
> you.

The idea that life comes to an end is much more appealing to me than
worshiping god for eternity.

> I urge you, Mr Flibble ... do not delay. You will find a peace
> you never knew was possible. A love within yourself that brings
> you to tears. And a desire for those around you to also experience
> that which you will then experience for the first time. It is
> more profound than any thing which has come to you at any point
> prior in your life.

You are more likely to find peace if you give up religion. Religion is
is the source of war and unjustified fears standing in the way of
wellbeing of humans and animals far too often.

> The lyrics were penned for a reason:
>
> "Amazing Grace, how sweet the sound, that saved a
> wretch like me. I once was lost, but now I'm found.
> Was blind, but now I see."
>
> We are all wretches, Mr Flibble. It is Jesus who restores us,
> and makes us whole. Seek to learn of Him. You will be forever
> grateful that you did.
>
> Best regards,
> Rick C. Hodgin

You make a lot of assertions but provide zero proof to support those
assertions. Insisting that others should believe what you are saying
just because you say so is rather arrogant.

Given the reasoning displayed by the christian nutcases in this
newsgroup I'm inclined to believe that software engineering is not for
them and that they and the world would be better of doing something else.



Rick C. Hodgin

unread,
Oct 5, 2014, 12:15:12 PM10/5/14
to
Dombo wrote:
> Insisting that others should believe what you
> are saying just because you say so is rather
> arrogant.

I ask you to see for yourself. I testify to what I
have experienced. For each person they too
will come to Him, being drawn to do so from
within. Everybody who is perishing will never
do so, for if they did they too would be saved.

Taste and see for yourself, Dombo. All Jesus
offers is total forgiveness for your sins, and
eternal life in a way whereby we are restored
to God. No more sin. No evil. No hate. No
pain.

This is what Jesus offers. It is free, and it is
extended to everyone. All who come to Him
will be saved. Everyone else will perish. And
since He extends the offer to everyone, only
those who blatantly, and purposefully reject
His free offer, reject Him (reject Truth, and all
that is good, right, true, lovely), will enter into
Hell. It will be each person who condemns
their fate.

My posts are to teach you what awaits. You,
and all of us, are already there. The only way
to be saved is to come out, and the only way
to come out from this fate is through the One
with the power and authority to take away
your sin. Jesus is the only way.

You are right that religion has caused much
death, much pain, wars, hate, etc. Jesus is not
religion. He is a living Savior, and His followers
are not religious, they have been born again of
His Spirit, the spirit of Life, and are moved from
the inside toward His teachings: love, help,
teaching, guidance, and knowledge of the
Gospel.

Jesus restores what was lost, and makes all
things new.

Taste and see for yourself. Learn of Him and
be forever changed. I testify that this has
happened to me, and that it blew my mind
the overwhelming extent of His gift, of the
deception I was under, and the Power of His
Kingdom. Amazingly astoundingly beyond all
comprehension prior to being born again.
Unlike anything else I could have ever thought.

Mr Flibble

unread,
Oct 5, 2014, 2:23:22 PM10/5/14
to
On 05/10/2014 17:14, Rick C. Hodgin wrote:
> Dombo wrote:
>> Insisting that others should believe what you
>> are saying just because you say so is rather
>> arrogant.
>
> I ask you to see for yourself. I testify to what I
> have experienced. For each person they too

What you have experienced is delusion mate; go see your doctor for some
anti-psychotic medication.

Evolution = no Abrahamic god (which includes Jesus).

/Fibble

Geoff

unread,
Oct 5, 2014, 4:06:11 PM10/5/14
to
On Sun, 5 Oct 2014 09:14:58 -0700 (PDT), "Rick C. Hodgin"
<rick.c...@gmail.com> wrote:

>I testify to what I have experienced.

There comes a time when the release of endorphins in the brain causes
a mystical experience and a feeling of having touched God. This is a
very often sought-after experience, especially in humans who have
found chemicals that substitute for or enhance this release. Mankind
has been doing this for millennia.

Substitution of God for chemicals often facilitates recovery from drug
or alcohol addiction where the subject can acquiesce to his weakness
and hand over his recovery to a "higher power", thus laying the blame
for his addition on that weakness and creating an endorphin cycle
which supplants the addiction. Good if it works, bad when that person
crosses over into psychosis and believes God talks to or through him.

History is filled with stories psychotic individuals who thought or
claimed God spoke to them.

One favorite method in the Old Testament for entering this state is to
go out alone into the desert and nearly starve to death or dehydrate
enough to enter the fugue state and commune with God, then go back to
civilization and command them to repent their evil ways.

Rick C. Hodgin

unread,
Oct 5, 2014, 4:12:45 PM10/5/14
to
Only those the Father draws to His Son will be
able to receive this gospel message. It is given
for them and they will know on the inside that
it is for them. It is not given for those who will
not hear the message.

Not hearing is an exceedingly fearful place to be. My prayer is that each of you will hear, and
come out, and be saved.

Mr Flibble

unread,
Oct 5, 2014, 7:56:22 PM10/5/14
to
Have you had a stroke mate?

/Flibble

Rick C. Hodgin

unread,
Oct 6, 2014, 5:39:17 AM10/6/14
to
Mr Flibble, I will reveal to you the character of
God: He is of such a love that even though you
continually deny Him, and criticize in various
ways people like me who teach about who He
is, the moment you cry out to Him, the very
second you call upon His name, "Jesus, save me!"
... He will do so. Even if it is the last thing you do
before being killed upon this Earth.

Jesus came to save men's eternal souls from
Hell, from the wrath of God which He demands
for all disobedience. His love is revealed in that
while we were yet sinners, while we were actively
denying Him, while we ourselves would've been
the ones to drive the nails through His arms and
legs, while we walked in such hatred toward Him,
He still came here to die on the cross to save us.

The One you mock, Mr Flibble, is the same one
who will have angels dancing in Heaven if you
ever call upon His name. The angels will rejoice
as Jesus takes your sin upon Himself, and pays
the price of your iniquity for you. It is why He
came to the Earth ... to save individuals, whomever
will hear Him, and call out to Him. Even you.
Even me.

"And it shall come to pass that whosoever calls
upon the name of the Lord shall be saved."

http://biblehub.com/acts/2-21.htm

The reason I reach out to you, Mr Flibble, is
because His love is in me -- the born again nature.

I love you, Mr Flibble. But Jesus loves you more.

Mr Flibble

unread,
Oct 6, 2014, 12:54:57 PM10/6/14
to
On 06/10/2014 10:39, Rick C. Hodgin wrote:
> Mr Flibble, I will reveal to you the character of
> God: He is of such a love that even though you

[snip]

Evolution is proof that your god, Jesus, doesn't exist and also that you
are deluded, mate.

/Flibble

Christopher Pisz

unread,
Oct 6, 2014, 3:40:27 PM10/6/14
to
Someone had mentioned a kill file at some point. How do I set one up in
Thunderbird, so I don't have to read the religious arguments between
Fibble and Rick Hodgin?




Ian Collins

unread,
Oct 6, 2014, 4:03:14 PM10/6/14
to
Christopher Pisz wrote:
>
> Someone had mentioned a kill file at some point. How do I set one up in
> Thunderbird, so I don't have to read the religious arguments between
> Fibble and Rick Hodgin?

Tools->Message Filters

--
Ian Collins

Christopher Pisz

unread,
Oct 6, 2014, 4:58:50 PM10/6/14
to
Sweet! I can also get rid of all those "the quaran says" spams too! You
made my day Ian.



Drew Lawson

unread,
Oct 8, 2014, 8:31:39 AM10/8/14
to
In article <fd595372-d00f-4229...@googlegroups.com>
"Rick C. Hodgin" <rick.c...@gmail.com> writes:
>On Saturday, October 4, 2014 12:58:58 PM UTC-4, Charles J. Daniels wrote:
>> [snip]
>
>Jesus Christ is the way, the truth, and the life.

Bacchus is the way, the juice, and the life of the party.
He commands all men to BYOB and give themselves fully to the orgy.


--
|Drew Lawson | Mrs. Tweedy! |
| | The chickens are revolting! |
0 new messages