Tillbaka till svenska Fidonet
English   Information   Debug  
ENET.LINGUISTIC   0/13
ENET.POLITICS   0/4
ENET.SOFT   0/11701
ENET.SYSOP   33903
ENET.TALKS   0/32
ENGLISH_TUTOR   0/2000
EVOLUTION   0/1335
FDECHO   0/217
FDN_ANNOUNCE   0/7068
FIDONEWS   24126
FIDONEWS_OLD1   48118/49742
FIDONEWS_OLD2   0/35949
FIDONEWS_OLD3   0/30874
FIDONEWS_OLD4   0/37224
FIDO_SYSOP   12852
FIDO_UTIL   0/180
FILEFIND   0/209
FILEGATE   0/212
FILM   0/18
FNEWS_PUBLISH   4408
FN_SYSOP   41678
FN_SYSOP_OLD1   71952
FTP_FIDO   0/2
FTSC_PUBLIC   0/13599
FUNNY   0/4886
GENEALOGY.EUR   0/71
GET_INFO   105
GOLDED   0/408
HAM   0/16070
HOLYSMOKE   0/6791
HOT_SITES   0/1
HTMLEDIT   0/71
HUB203   466
HUB_100   264
HUB_400   39
HUMOR   0/29
IC   0/2851
INTERNET   0/424
INTERUSER   0/3
IP_CONNECT   719
JAMNNTPD   0/233
JAMTLAND   0/47
KATTY_KORNER   0/41
LAN   0/16
LINUX-USER   0/19
LINUXHELP   0/1155
LINUX   0/22092
LINUX_BBS   0/957
mail   18.68
mail_fore_ok   249
MENSA   0/341
MODERATOR   0/102
MONTE   0/992
MOSCOW_OKLAHOMA   0/1245
MUFFIN   0/783
MUSIC   0/321
N203_STAT   926
N203_SYSCHAT   313
NET203   321
NET204   69
NET_DEV   0/10
NORD.ADMIN   0/101
NORD.CHAT   0/2572
NORD.FIDONET   189
NORD.HARDWARE   0/28
NORD.KULTUR   0/114
NORD.PROG   0/32
NORD.SOFTWARE   0/88
NORD.TEKNIK   0/58
NORD   0/453
OCCULT_CHAT   0/93
OS2BBS   0/787
OS2DOSBBS   0/580
OS2HW   0/42
OS2INET   0/37
OS2LAN   0/134
OS2PROG   0/36
OS2REXX   0/113
OS2USER-L   207
OS2   0/4786
OSDEBATE   0/18996
PASCAL   0/490
PERL   0/457
PHP   0/45
POINTS   0/405
POLITICS   0/29554
POL_INC   0/14731
PSION   103
R20_ADMIN   1121
R20_AMATORRADIO   0/2
R20_BEST_OF_FIDONET   13
R20_CHAT   0/893
R20_DEPP   0/3
R20_DEV   399
R20_ECHO2   1379
R20_ECHOPRES   0/35
R20_ESTAT   0/719
R20_FIDONETPROG...
...RAM.MYPOINT
  0/2
R20_FIDONETPROGRAM   0/22
R20_FIDONET   0/248
R20_FILEFIND   0/24
R20_FILEFOUND   0/22
R20_HIFI   0/3
R20_INFO2   3218
R20_INTERNET   0/12940
R20_INTRESSE   0/60
R20_INTR_KOM   0/99
R20_KANDIDAT.CHAT   42
R20_KANDIDAT   28
R20_KOM_DEV   112
R20_KONTROLL   0/13271
R20_KORSET   0/18
R20_LOKALTRAFIK   0/24
R20_MODERATOR   0/1852
R20_NC   76
R20_NET200   245
R20_NETWORK.OTH...
...ERNETS
  0/13
R20_OPERATIVSYS...
...TEM.LINUX
  0/44
R20_PROGRAMVAROR   0/1
R20_REC2NEC   534
R20_SFOSM   0/340
R20_SF   0/108
R20_SPRAK.ENGLISH   0/1
R20_SQUISH   107
R20_TEST   2
R20_WORST_OF_FIDONET   12
RAR   0/9
RA_MULTI   106
RA_UTIL   0/162
REGCON.EUR   0/2056
REGCON   0/13
SCIENCE   0/1206
SF   0/239
SHAREWARE_SUPPORT   0/5146
SHAREWRE   0/14
SIMPSONS   0/169
STATS_OLD1   0/2539.065
STATS_OLD2   0/2530
STATS_OLD3   0/2395.095
STATS_OLD4   0/1692.25
SURVIVOR   0/495
SYSOPS_CORNER   0/3
SYSOP   0/84
TAGLINES   0/112
TEAMOS2   0/4530
TECH   0/2617
TEST.444   0/105
TRAPDOOR   0/19
TREK   0/755
TUB   0/290
UFO   0/40
UNIX   0/1316
USA_EURLINK   0/102
USR_MODEMS   0/1
VATICAN   0/2740
VIETNAM_VETS   0/14
VIRUS   0/378
VIRUS_INFO   0/201
VISUAL_BASIC   0/473
WHITEHOUSE   0/5187
WIN2000   0/101
WIN32   0/30
WIN95   0/4288
WIN95_OLD1   0/70272
WINDOWS   0/1517
WWB_SYSOP   0/419
WWB_TECH   0/810
ZCC-PUBLIC   0/1
ZEC   4

 
4DOS   0/134
ABORTION   0/7
ALASKA_CHAT   0/506
ALLFIX_FILE   0/1313
ALLFIX_FILE_OLD1   0/7997
ALT_DOS   0/152
AMATEUR_RADIO   0/1039
AMIGASALE   0/14
AMIGA   0/331
AMIGA_INT   0/1
AMIGA_PROG   0/20
AMIGA_SYSOP   0/26
ANIME   0/15
ARGUS   0/924
ASCII_ART   0/340
ASIAN_LINK   0/651
ASTRONOMY   0/417
AUDIO   0/92
AUTOMOBILE_RACING   0/105
BABYLON5   0/17862
BAG   135
BATPOWER   0/361
BBBS.ENGLISH   0/382
BBSLAW   0/109
BBS_ADS   0/5290
BBS_INTERNET   0/507
BIBLE   0/3563
BINKD   0/1119
BINKLEY   0/215
BLUEWAVE   0/2173
CABLE_MODEMS   0/25
CBM   0/46
CDRECORD   0/66
CDROM   0/20
CLASSIC_COMPUTER   0/378
COMICS   0/15
CONSPRCY   0/899
COOKING   32896
COOKING_OLD1   0/24719
COOKING_OLD2   0/40862
COOKING_OLD3   0/37489
COOKING_OLD4   0/35496
COOKING_OLD5   9370
C_ECHO   0/189
C_PLUSPLUS   0/31
DIRTY_DOZEN   0/201
DOORGAMES   0/2057
DOS_INTERNET   0/196
duplikat   6002
ECHOLIST   0/18295
EC_SUPPORT   0/318
ELECTRONICS   0/359
ELEKTRONIK.GER   1534
Möte FIDONEWS_OLD1, 49742 texter
 lista första sista föregående nästa
Text 47892, 215 rader
Skriven 2007-01-29 01:21:01 av FidoNews Robot (2:2/2.0)
Ärende: FidoNews 24:05 [02/05]: General Articles
================================================
=================================================================
                        GENERAL ARTICLES
=================================================================

                 Frustrations of a FidoNet programmer
                 By Michiel van der Vlist, 2:280/5555

Most of us who have at some point in their career had job descriptions
that included "writing computer programmes" will be familiar with the
frustrations of having to meet with the demands of customers and
management. What customers and managers usually have in common is that
they can not program themselves out of a wet paper bag even if their
lives depend on it, but who nevertheless have firm perceptions on the
ease by which their demands can be met. "I am not a programmer myself,
but this should be easy to add" is heard too often.

All the more frustrating is that ever so often the customer's wish
would have been relatively easy to meet, had the customer come up with
it in an early stage of the project instead of when it is 99%
finished. Honesty compels me to admit that the opposite also happens:
a customer coming up with a wish that just needs a few key strokes to
fulfil, but him/her believing it is major alteration. (And willing to
pay according to his/her beliefs...)

When writing as a volunteer for a non profit organisation such as
FidoNet, one would hope and maybe even expect to be free of such
frustrations and to just be allowed to program for fun. Unfortunately
this is not true. Not any more I am afraid. Let me give you an example
of something I came across while programming for FidoNet.

When I became R28 pointlist keeper over a decade ago now, I felt the
need for a programme that could not only assemble pointlists from
segments, but that would also check things like flags for correct use
as well. There was MakeNl and there was ERRFLAGS, but the latter would
not work on pointlists and I found it too limited as well. MakeNl was
abanonware at the time and I was not satisfied that either. So I
decided to write my own programme.

Part of this programme was to be the flag checker. Of course the flags
that it recognised should not be hard coded, but be configurable. We
have seen too much problems with hard coding, I did not want to saddle
the users of my programme with the the burden of having to nag for an
update every time a new flag was added to the nodelist. Flags should
be configurable.

Sounds easy. Just make the user enter in the config, a list of flags
he would like to have recognised as valid and if the flag is in the
list, it is ok, and if it is not, generate a warning or an error.
Something like:

FLAGS V22,V32,V32B,V90C,V90S,VFC,V34

But wait, there are userflags and normal flags, so we should have two
classes of flags:

FLAGS XA,XB,XC,XP,XR,XW,XX,CM,MO,MN,LO,V42,V42B,MNP,V22,V32,V32B,
V32T,ZYX,Z19,HST,H14,H16,MAX,PEP,CSP,VFC,V34,V110L,V110H,
V120H,V120L,X75,ISDN,X2S,X2C,V90S,V90C

USERFLAGS NC,REC,NEC,ZEC,ENC,RPK,NPK,CDP,SDS,SMH

All pretty straightforward. Oh, well, there are the Tyz flags. We do
not want the user to have to enter all 2256 valid permutations all by
himself, so we define wildcards for the flags. The Tyz flags are
added:

USERFLAGS NC,REC,NEC,ZEC,ENC,RPK,NPK,CDP,SDS,SMH,T$$

But only a-x and A-X are actually allowed as substitutes for the
wildcards. And permutations with the same letter in the second and
third position are also invalid. Ok, no problem, exclude those
combinations:

EXCLUDEFLAGS TY$,Ty$,TZ$,Tz$,T$Y,T$y,T$Z,T$z,T$<

It started to get a little complicated by now, but still pretty
straightforward. There was one thing still missing though. Flags can
have parameters. Up until the coming of Fido over IP this was not a
big issue as although flags can have parameters, this was hardly used
until the flags for IP and E-mail protocols came into use. The new
flags however van have one or two optional parameters: an address,
host name or e-mail address and or a port number. A decent flag
checker programme should of course check the validity of the
parameters as well. And not just their validity if present, but also
if the required information to make a connection is present. A line
with a lone IBN flag and no hostname or IP address in the system name
field or another field holding a default value should be flagged as an
error.

My first step was to write a subroutine that could determine if a
strings is:
1) a valid IP quad or:
2) a valid fqdn (Fully Qualified Domain Name) or:
3) a valid IPv6 address or:
4) A valid e-mail address or:
5) a valid port number.

Two more classes of flags entered the scene. IPGLAGS end EMAILFLAGS.
The syntax for an IPFFLAG is
FLAG[:<hostname|ip-quad|ipv6address>][:portnumber] and for an
EMAILFLAG: FLAG[:emailaddress][:portnumber].

So in the config this was added:

IPGLAGS IBN,IFC,IFT,ITN,IVM,IP
EMAILFLAGS IMI,ISE,ITX,IUC,IEM,EVY,EMA

Implementing all this was a major operation that required a complete
overhaul of the flag check routines. Not only the flag fields
themselves had to be checked, but also other fields that can contain
default values for the parameters. To show some initiative I added the
feature of letting flags inherit parameters from previous flags in the
same class.

So IBN:fido.vlist.eu,IFC,IFT:fido2.vlist.eu would mean the same as
IBN:fido.vlist,IFC:fido.vlist.eu,IFT:fido2.vlist.eu

Summarising, I had now defined five classes of flags:

1) Normal class flags, no parameters used
2) User class flags, no parameters.
3) Ip class flags, two optional defaultable inheritable parameters
4) email class flags, two optional defaultable inheritable parameters.
5) Flags that are explicitly excluded although defined by implemantion
by one of the other four.

Default port number is of course the default port for the protocol in
question and default parameter # 1 is inherited from the system name
field, or the telephone number field.

Then someone who said "I am not a programmer but..." proposed to put
the default connection information not in the system name field, but
in the field destined for the location, separated from the location
itself by a # character. And it found its way into the nodelist.
Sigh..

I felt uncomfortable about it - Yet Another Method of listing IP
nodes- and the use of the '#' character conflicted with a recently
submitted proposal for listing IPv6 information of the nodelist, but
alas, it was not too hard, so a few more lines were added to my flag
checker routines. But I was getting a bit tired of it. Also my
programme was getting a bit too big for my taste. I was a bit worried
it would become top heavy...

But still the concept of different classes of configurable flags that
each had their own specific syntax and things to check remained. As it
turned out, my efforts to implement that particular way of listing IP
nodes was a wasted effort. It is no longer in use. Not an incentive
really...

And then someone invented the INA flag. Again a politician, not a
programmer. The INA flag should hold the default value for the connect
info for IP flags. It should end all discussion about where to put it
and appease those who refused to give up the BBS name in field 3.

I tried to fit it in, but found I could not without almost starting
all over again and without sacrificing the concept of configurable
classes of flags. I could not fit it in in any of the existing
classes. The INA flag requires one and only one parameter. The other
flags have either none, or two optional parameters. Also, the INA flag
does not stand on its own, if there is no IBN flag or other IP flag,
the presence of the INA flag is an error condition. So I would have to
add a new class just for this flag alone. Adding a class for a single
case almost boils down to hard coding a flag, something I wanted to
avoid.

Top it off with the added complication that there is no requirement
that the INA flag be listed before any other IP protocol flags, so
that in my particular case, I would have to add a separate pass while
parsing the line to extract info from the INA flag, before parsing the
other flags. All the more frustrating is that had it been proposed
five years earlier, I would have started on a different track and
implemented it without much problems. As it is, it just does not fit
in with what I already have. That annoys me.

In the old days, it would go like this: a programmer would write
something into his programme and when people started to use is, the
nodelist clerks would enter the flags needed to support it, into the
nodelist. Programming was fun. It also ensured that by the time a flag
or another feature reached the nodelist, it was always clearly and
unambiguously documented what it was supposed to do. Nothing is as
nitpicking as a computer when it comes to being told what something is
supposed to do. Any ambiguity will be severely punished.

Now, it is the other way around: FidoNet has been taken over by the
politicians. People who by their own admission "are not programmers,
but..." invent nodelist flags. With no regards whatsoever for the few
remaining programmers. How the programmers implement it, is their
problem. No matter how illogical it is or how ill if fits into what
already exists. Programmers are not consulted. The FTSC is not
consulted. When programmers speak up to vent their objections, they
are ignored.  With the result that programmers who have retired from
programming for a living, and who now do it for the fun of it, find
themselves in the same position as when they were still paid for it.
They have to dance to the tune of the customers and the managers. With
the difference of course that they do not get paid any more.

People are afraid that with the few participants we have, changes will
drive people away. If people are forced to change node number, they
will leave they say. But nobody is concerned about an even smaller
group: the programmers. What about them? Should it not be an even
greater concern not to piss off and drive away the programmers by
political decisions that force them to do major rewrites or just throw
in the towel?


(c) 2007, Michiel van der Vlist. All rights reserved.
Permission to distribute via the Fidonews file echo
and the FidoNews echomail conference.


-----------------------------------------------------------------

--- Azure/NewsPrep 3.0
 * Origin: Home of the Fidonews (2:2/2.0)