Re: Better variable names

2017-02-26 Thread Kirk Brooks via 4D_Tech
David,
​Thank you for pointing that out. It was insensitive of me to be so blunt. ​

I've snarked about the design of the forums for about as long as I've been
aware of them. I still don't think they are great but I certainly don't
mean that as any sort of personal criticism. As this thread was discussing
some long lived projects like this can end up with a lot of legacy code one
can't just toss out regardless of how much you want to.

It's not like I've never been in that guy either. I still have a rather
quaint web interface that's used daily and makes me cringe every time I
have to look at it. Which is rare because it works reliably. And I've been
the guy sending illustrated emails - virtual tech notes, if you will - to
users explaining how to use some feature that is so incredibly brilliant I
can't fathom why these people don't recognize it as such and educate
themselves to the level necessary to revel in such magnificent programming.
And had my feelings hurt when voices on the other side of a partition
mention it dismissively and I see no one ever uses it.

And when that's not enough I've had this conversation:

Company owner: Why can't the database do this?
Me: It does! I put that in 3 months ago when we talked about it. All you
have to do is blah blah blah.

CO: Yeah. That's too hard. Nobody understands it.

Me: (Thought balloon) OMFG I am standing in a field lecturing to the wind.

Me: (Voice) What do you think I could do to make it better?

CO: I dunno - but it's too hard right now.


A couple of years ago I was at a retrospective show for a hero of mine,
Richard Diebenkorn, an artist. I saw a short film of him talking about his
process. To paraphrase one bit, "... so, you know, I finally realized I
have never painted anything so good I can't paint over it." This resonated
with me on many levels one of them being my relationship to coding. As my
story above shows I can be a little narcissistic about the stuff I write.
So when it doesn't work or users don't get it then clearly the problem is
with them. What Diebenkorn's comment did for me was to make me realize how
incorrect that is in a way I guess I was finally ready hear. I haven't
written any piece of code that's so good it can't be re-written or
replaced. Taken to a larger meaning there's nothing sacred or immutable
about a specific database or process within that database - especially if
it doesn't work for users. The degree that I choose to ignore it inevitably
becomes a pain point for me and/or I stop being relevant in the process I
want to participate in.

On Sun, Feb 26, 2017 at 2:42 AM, David Adams via 4D_Tech <
4d_tech@lists.4d.com> wrote:

> But, really, no one responsible for the forums should take any of these
> comments or criticisms personally! I don't even know who the people are.
> That's not the point - the use of the tool is the point. If I wrote some
> software or a paper and heard these sort of comments, it would hurt. I
> understand that. It might even make me mad.



-- 
Kirk Brooks
San Francisco, CA
===
**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-26 Thread David Adams via 4D_Tech
> I use this mailing list because I like to practice my poor english and
most english contributors are here,

Your English is fine and your ideas are typiclaly really good. I My French
is limited to

La chat est sur la table

and

   Où les oiseaux?

...which are useful phrasees in only a very narrow range of situations ;-)
My compliments to you for operating at a high level in a second language.

> but if they were more on 4dbb I wouldn't. 4dbb is made with 4d by 4d
people:
> it's good for 4d-the-product we use. Censorship is inconspicuous.
> I know some of the authors, I've seen once a small part of the hidden
part of the iceberg,
> I use it daily: despite many shortcomings, they made a great job. IMHO.

I hope that whoever wrote the forums (I have no idea who they are) do not
think that the criticisms are personal. They aren't, at least from me. The
criticisms are based on the forum itself. It's crowded, it's ugly, it's
hard to get started with, and *it is very hard to learn.* Once you've
learned some things, you know how to do them. It still takes me a few
minutes to figure out how to start a thread, but I'm getting there. I now
can make things bold and I can vote. So I've made progress. But it's not a
great piece of software - I wouldn't expect anyone to show it to a customer
and expect to get work based on it.

I'm using the forums because 4D has *officially* repeated, more than once,
that anything said on the NUG is officially ignored. I think that
demonstrates an incomprehensible approach to customer relations, but I
don't run 4D. Their company, their rules. So, I'm on the forums to see if
comments and such there are better received and get some feedback. So far,
no. Nothing from Engineering on any of the threads I've followed. At all.
I've also got what looks like a really important V16 bug and I've submitted
it through "proper channels." (Complete with a simple database that
produces the problem in about a minute.) After a few weeks, here's what
I've gotten back from France:

That's an exact quote ;-)

For those of you that use the forums, do you get useful responses there?
I'm far too new to them to generalize.

But, really, no one responsible for the forums should take any of these
comments or criticisms personally! I don't even know who the people are.
That's not the point - the use of the tool is the point. If I wrote some
software or a paper and heard these sort of comments, it would hurt. I
understand that. It might even make me mad. I understand that too. But I'd
also try and see if there were some truth to the comments. There is. Forget
about the pride of authorship and move to taking pride in the product! I'm
sure that the forums can be improved. It's certainly a pretty hard job to
write a forum software. Frankly, it was always going to be a challenge to
make a good forum when what you're competing with are the existing forum
platforms that have been getting refined for *decades*. Some of that stuff
has roots older than the public Internet. You need to be *at least* that
good to hit the mark. Perhaps 4D should throw out this custom solution and
adapt one of the well-established forum softwares instead. One of the
benefits of writing your own tool is to give you a much better
understanding of how to pick an appropriate piece of off-the-shelf or
customizable software. When you've been in the guts, you understand the
issues much better. That makes it a lot easier to assess available options.
Just because you wrote something doesn't mean you need to keep it.

So, here's to hoping that the forums prove to be a useful place for
interaction with official 4D people (so far, not at all for me), and here's
to hoping that the platform improves. If it did, it wouldn't be hard to get
people to try them.
**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-26 Thread Arnaud de Montard via 4D_Tech

> Le 26 févr. 2017 à 08:25, Kirk Brooks via 4D_Tech <4d_tech@lists.4d.com> a 
> écrit :
> 
> [...] We complain about the forums and get
> told that we're just not doing it correctly. This has been going on for
> years. If it were actually true we would all be over on the forums because
> we're actually pretty smart and would figure out the forums are actually
> good[...]

I use this mailing list because I like to practice my poor english and most 
english contributors are here, but if they were more on 4dbb I wouldn't. 4dbb 
is made with 4d by 4d people: it's good for 4d-the-product we use. Censorship 
is inconspicuous. I know some of the authors, I've seen once a small part of 
the hidden part of the iceberg, I use it daily: despite many shortcomings, they 
made a great job. IMHO. 

-- 
Arnaud de Montard 


**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-25 Thread Kirk Brooks via 4D_Tech
I find the forums a throw back to - what, late '90s BBs or Compuserve. I
know a lot of you remember Compuserve. We complain about the forums and get
told that we're just not doing it correctly. This has been going on for
years. If it were actually true we would all be over on the forums because
we're actually pretty smart and would figure out the forums are actually
good. But we aren't because the forum interface isn't very good and telling
everyone it is doesn't actually make it so.

No one around here would consider such a site a success when you have to
write a tech note to explain how to use it.

I mean really.

On Sat, Feb 25, 2017 at 6:44 PM, David Adams via 4D_Tech <
4d_tech@lists.4d.com> wrote:

> On Sun, Feb 26, 2017 at 11:27 AM, Arnaud de Montard via 4D_Tech <
> 4d_tech@lists.4d.com> wrote:
>
> Thanks for the links.
>
> I've spent more than enough time criticizing the forums down the years to
> continue doing so. I was jus trying to say that it's not weird that I
> couldn't figure out how parts of it work.
>
> Since 4D officially takes no notice of the NUG, I'm trying putting comments
> and requests on the Forums. There they can be unofficially ignored ;-)
>
> --
Kirk Brooks
San Francisco, CA
===
**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

RE: Better variable names

2017-02-25 Thread Keith Goebel via 4D_Tech
> This tech tip should help explain the difference between +1 and voting:
> 
> Tech Tip: How to vote for a feature request
> http://kb.4d.com/assetid=76726 
If doesn’t explain the list of users I had to select one from in order to 
precede with the vote (it appeared after I clicked a star),
I think the users were the currently logged-in members of the forum (except my 
name was omitted).
I had no idea what that was about so gave up trying to log a vote,
:-(
**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-25 Thread David Adams via 4D_Tech
On Sun, Feb 26, 2017 at 11:27 AM, Arnaud de Montard via 4D_Tech <
4d_tech@lists.4d.com> wrote:

Thanks for the links.

I've spent more than enough time criticizing the forums down the years to
continue doing so. I was jus trying to say that it's not weird that I
couldn't figure out how parts of it work.

Since 4D officially takes no notice of the NUG, I'm trying putting comments
and requests on the Forums. There they can be unofficially ignored ;-)
**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-25 Thread Chip Scheide via 4D_Tech
is there a forum feature request for these?
:)


> 
> That said, on inug I'm very frustrated because I can't add picture, 
> show code correctly, add a link, and so on. 

Hell is other people 
 Jean-Paul Sartre
**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-25 Thread Arnaud de Montard via 4D_Tech

> Le 25 févr. 2017 à 22:58, David Adams via 4D_Tech <4d_tech@lists.4d.com> a 
> écrit :
> 
> 
> Easy: Documentation is the go to patch for software with usability problems.
> [...]


See php:

I think anyone visiting it the first time (as me) will see (not find…) that 
there is users contributions, how to add one, how to vote in a pair of minutes. 
Where to download last version. Change log of this version. Etc. 
Back to 4D:
I wonder how many 4d developers know they can contribute to the doc.  


> There's no way I'm going to try that search system, for example


Some search options are visible when you hoover the magnifying glass on the 
left of input, it "gives the idea"; it works. 


> It took me over a week to sort out how to make text bold

Be happy, it took me months. Help is here:


But most useful tools are in the yellow zone above the message. 

That said, on inug I'm very frustrated because I can't add picture, show code 
correctly, add a link, and so on. 

-- 
Arnaud de Montard 





**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-25 Thread Arnaud de Montard via 4D_Tech

> Le 24 févr. 2017 à 23:18, Timothy Penner via 4D_Tech <4d_tech@lists.4d.com> a 
> écrit :
> 
>> Does anyone know, is there an actual 'vote' mechanism, or are you just 
>> supposed to put down a +1 post?
> 
> This tech tip should help explain the difference between +1 and voting:
> 
> Tech Tip: How to vote for a feature request
> http://kb.4d.com/assetid=76726

Vote on 4DBB exists since years now. I wonder about a so obvious vote system 
than a tech tip is necessary to explain how it works. 

BTW, giving a star to mean "bad" sounds strange to me, I'd use something more 
explicit to "push up or down". Or we could have more fun using some emoticons 
like 

-- 
Arnaud de Montard 


**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

RE: Better variable names

2017-02-24 Thread Timothy Penner via 4D_Tech
> Does anyone know, is there an actual 'vote' mechanism, or are you just 
> supposed to put down a +1 post?

This tech tip should help explain the difference between +1 and voting:

Tech Tip: How to vote for a feature request
http://kb.4d.com/assetid=76726

-Tim



**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-24 Thread Kirk Brooks via 4D_Tech
Yes! And let's not overlook the ever popular series of process arrays named
aTemp1, aTemp2, aTemp3 ...  even better because they are referenced by
pointers referring to some other pointer initialized - someplace.

(Deep breath)

Ok, thanks for that moment.

On Fri, Feb 24, 2017 at 12:12 AM, Herr Alexander Heintz via 4D_Tech <
4d_tech@lists.4d.com> wrote:

> quite interesting read, thanks.
>
> The value of sensible naming never shows more strongly when you have to
> work with OPC (Other Peoples Code) and find generic variables like S_1 or
> AR1 that are used in changing roles throughout the code and are an
> incredible pain to debug, or even replace…
>

-- 
Kirk Brooks
San Francisco, CA
===
**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-24 Thread Jim Dorrance via 4D_Tech
I hate working on other developer's code where I am expected to guess the
type by its use and context. It is a waste of my time and therefore a waste
of my client's money.

It is often possible to correct/optimise code without understanding the
context. I was a photographer in a previous life, and I often look for
variations in the 'look' of code to discover anomalies.

I think Module + Descriptor + Type is perfect for method names, but not for
variables.


On Fri, Feb 24, 2017 at 4:29 AM, David Adams via 4D_Tech <
4d_tech@lists.4d.com> wrote:

> Here's one of those thoughts that I think to repost every few years.
>
>
> Of course, no one uses that particular format as it's use will later
> condemn you to the pits of perdition. Instead, people are probably using:
>
> Module + Descriptor + Type
>
> Like
>
> Customer_City_t
>
> --
Jim Dorrance
jim.dorra...@gmail.com
4...@dorrance.eu
www.4d.dorrance.eu

PS: If you know of anyone that needs an experienced 4D programmer to add
energy and experience to their team, please let me know. I have
experience in many areas. Reasonable rates. Remote or Paris only.
**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-24 Thread David Adams via 4D_Tech
> Am I insane because I start by search/replace variable names prior
> to understand some code from another?

If you're insane, I'm insane with you. I can't really "read" code. Maybe
some people can. I can read methods, but visualizing how they fit together
and work? That's harder. I like to dig in, rename things, move them around
a bit and get my hands dirty. I work on a backup and tend to throw the
results of my changes away, but that's how I come to grips with unfamiliar
code a lot of the time.

By the way, the only reason I use a module prefix is so that names sort in
the Explorer. I wouldn't use them at all if we had any sort of namespace
mechanism in 4D. Within methods, only have descriptor_type. What I was
saying earlier is that I've been very happy expanding my notion of "type"
past 4D's primitives. Sometimes, that's all I've got - it's a real of some
kind. Fine. But if it's currency, that's a better piece of information -
more specific and pretty darn helpful.

I picked the idea up from Code Complete years ago, for those that haven't
read it lately.
**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-24 Thread Arnaud de Montard via 4D_Tech

> Le 24 févr. 2017 à 09:12, Herr Alexander Heintz via 4D_Tech 
> <4d_tech@lists.4d.com> a écrit :
> 
> [...]
> Concerning the descriptor, I have found it more useful to have that up front, 
> spearated by underscore:
> 
> $t_myText
> $al_myLongArray
> o_processObject
> 
> etc.
> Why?
> 3 reasons:
> - when typing and you need a specific local text variable you already have, 
> just type the prefix and the editor will show you all text variables you 
> already have.
> - I can easily check for compiler typing errors by searching (for example) 
> all C_LONGINT in compiler declarations where the variable does not start with 
>  l_
> and, much more import as I am lazy:
> I have a macro and method that automatically declares all my locals in a 
> method and puts the block on top.
> Easier to recognize the type if you just need to match a starting pattern…

In 4d langage I consider type in the name is mandatory, some don't. In js I 
don't, BTW. 

I used to put type at start but since ~10 years I prefer at end: 
  $table_p = table pointer
  $table_l = table number
  $table_al = array of table numbers
  $table_ap = array of table pointers
  $person_o = object describing a person
  $LBsColumn_ao = object array describing columns in a selection listbox
  $csvData_a2t = 2d text array of data from a comma separated value document
  etc.
Except first, other reasons you mention are kept (I use 4d Pop to grab and 
declare variables). But most of the time during code input my "entry point" is 
the variable purpose (=humanly significant part of the name: table, person, 
csvdata, etc). And when I read i'm also concentrated on that part. The type is 
like some tail I'll look at if the head of the beast is not enough to identify 
it at first sight. 

I like short names, too: more letters=long lines, and long lines are difficult 
to read for me. 

It seems there 3 kind of 4d developers, mostImportantThingIsType vs 
purposeAtLeft vs readDeclarationsYouStupid. 

If I was born arab, reading from left to right, would I do the same?

Am I insane because I start by search/replace variable names prior to 
understand some code from another? 

...

Is order so important, finally:
  ;-)

-- 
Arnaud de Montard 


**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-24 Thread Herr Alexander Heintz via 4D_Tech
quite interesting read, thanks.

The value of sensible naming never shows more strongly when you have to work 
with OPC (Other Peoples Code) and find generic variables like S_1 or AR1 that 
are used in changing roles throughout the code and are an incredible pain to 
debug, or even replace…

Concerning the descriptor, I have found it more useful to have that up front, 
spearated by underscore:

$t_myText
$al_myLongArray
o_processObject

etc.
Why?
3 reasons:
- when typing and you need a specific local text variable you already have, 
just type the prefix and the editor will show you all text variables you 
already have.
- I can easily check for compiler typing errors by searching (for example) all 
C_LONGINT in compiler declarations where the variable does not start with  l_
and, much more import as I am lazy:
I have a macro and method that automatically declares all my locals in a method 
and puts the block on top.
Easier to recognize the type if you just need to match a starting pattern…

Cheers

Alex

> Am 24.02.2017 um 04:29 schrieb David Adams via 4D_Tech <4d_tech@lists.4d.com>:
> 
> Here's one of those thoughts that I think to repost every few years.
> 
> Many of us use variable naming conventions to carry various bits of
> information about what's in the variable/array. Like this format:
> 
> vtCity
> vlWindow
> 
> Of course, no one uses that particular format as it's use will later
> condemn you to the pits of perdition. Instead, people are probably using:
> 
> Module + Descriptor + Type
> 
> Like
> 
> Customer_City_t
> 
> "Module" being a basic language concept missing from the 4D language. It's
> helpful to group resources into pseudo-modules to prevent pathological use
> of global data. But I digress. What I wanted to say again was something
> about type names: It can really improve the meaningfulness of a name if you
> expand your concept of 'type'. Instead of limiting ourselves to 4D's
> primitives, think of larger types. This can help in a few ways, the first
> being readability:
> 
> $form_name_t
> $tFormName
> $form_name
> 
> It's a name, of course it's text, what else would it be? Why tack _t on
> there? What does it add? It spends a couple of characters without adding
> any information. "Name" carries both the base type and it's type in the
> larger context of your code. The compiler can sort out types no matter what
> their name. 4D's automatic variable being a case in point:
> 
> vRecNum
> 
> It's text. Of course it is. And it almost squeezes maximum value out of the
> 8 character name limit ;-)
> 
> Similar to form name, method name is an even better example:
> 
> $error_method_name_t
> 
> Okay, it's an error method. Well, we can validate method names - I'd prefer
> to think of it as
> 
> $error_MethodName
> 
> To the 4D Compiler, it's a string. That's it. But it isn't. Not any string
> will do, it has to be a string found in the list of project methods. Your
> code makes more sense when you see it that way.
> 
> So, when the primitive type is obvious from context, why not use a 'type'
> abbreviation that tells you more? Here are three different longints:
> 
> log_l
> log_l
> log_l
> 
> Oh. What about
> 
> log_docref
> log_hlist
> log_winref
> 
> That's a lot more information for no real cost.
> 
> I tend to use abbreviations like these as well as
> 
> _name
> 
> for internal names of stuff. Names are text in my universe, if you use
> longints or something - you're on your own.
> 
> Oh, it's helpful to have a currency abbreviation if you apply standard
> rounding to reals-that-are-currency.
> 
> I was reminded of all of this today as I'm doing some work with objects
> where know that the variable is an object tells me close to nothing. I've
> got an object that describes a 'recipient' of a callback from CALL WORKER
> or CALL FORM. So, it's type is "recipient"
> 
> $subscriber_recipient
> $callback_recipient
> 
> This is an object with a specific collection of attributes with rules.
> There's a method to create a recipient, to validate a recipient (make sure
> the window/method exists, etc.) Recipients can be passed around for various
> purposes.
> 
> Right, back to your regular discussions
> **
> 4D Internet Users Group (4D iNUG)
> FAQ:  http://lists.4d.com/faqnug.html
> Archive:  http://lists.4d.com/archives.html
> Options: http://lists.4d.com/mailman/options/4d_tech
> Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
> **

**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**

Re: Better variable names

2017-02-23 Thread Chip Scheide via 4D_Tech

it is all in the stars David  :)


> 
> Does anyone know, is there an actual 'vote' mechanism, or are you just
> supposed to put down a +1 post?

Hell is other people 
 Jean-Paul Sartre
**
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**