Re: readable source code [Re: OVC-discuss Digest, Vol 37, Issue 6]

From: Fred McLain <mclain_at_zipcon_dot_net>
Date: Sun Nov 04 2007 - 16:27:41 CST

Hi RIchard,

I agree that code reviews are brutal. I have to go through these on a
regular basis. I'd be happy to rewrite this module but the approach
indicates the entire subsystem needs a rewrite - it's an architectural
issue. As I understand it we don't yet have the underlying
requirements, so trying to come up with an architecture is putting the
cart before the horse.

Let me know when you have fleshed out the specific requirements for
each subsystem and we can discuss design and coding roles. As I
mentioned the other day to Danny on the phone, I strongly recommend a
Wiki (with limited write access) to help with the requirements writing
process.

FYI, I've been writing Java since early 1996, with some
experimentation earlier then that.

        -Fred-

On Nov 4, 2007, at 7:53 AM, Richard C. Johnson wrote:

> Danny, Fred,
>
> The custom in Open Source is to voluntarily fix the posted code you
> find defective. That is what is done in every other Open Source
> project, and that is what should happen to OpenScan. It may be
> easier to play the critic than to fix code, but the Open Source
> endeavor depends on both. Now that we know something is broken, who
> will volunteer to fix it?
>
> Seriously, that is the reason David Webber and I founded Open Voting
> Solutions over two years ago. We believed that the Open Source
> community contained sufficient volunteer talent to build a voting
> system around the standards of OASIS' Election Markup Language. Why
> not build one on the Open Source model? Why not use EML as a basis,
> with JAVA and XML?
>
> The choice is very simple: either help out in creating an Open
> Source voting system or bow low to the Secret Proprietary Election
> Lords, the Diebold (Premier Election Systems), ES&S, Sequoia, and
> Harts of the world. You who have the ability, now is the time to
> lend pro bono support. Speak up or hold your peace.
>
> There has been much cursing of the darkness...how about we now light
> a candle?
>
> -- Dick
>
> Danny Swarzman <danny@stowlake.com> wrote:
> Fred,
>
> I didn't write that code. Don't blame me. I won't defend it.
>
> -Danny
>
>
> On Nov 3, 2007, at 12:17 PM, Fred McLain wrote:
>
> > As it turns out, I can read that code.
> >
> > Danny, you are using a bloody web service to load the configuration
> > for a voting system?!? Why would you possibly implement this as a
> > servlet? What the heck are you thinking?
> >
> > Please stick to your promise to not allow that code "in any system
> > running an election".
> >
> > By the way, commenting the code is a good idea.
> >
> > -Fred-
> >
> > On Nov 2, 2007, at 3:06 PM, Danny Swarzman wrote:
> >
> >> I promise you that code will not appear in any system running in an
> >> election. We recognize the problem. We are working on a new
> product.
> >> It will reflect a fanatic devotion to legibility.
> >>
> >> -Danny Swarzman, VP Software Engineering, OVS
> >>
> >> On Nov 2, 2007, at 2:45 PM, Hamilton Richards wrote:
> >>
> >>> At 10:45 AM -0700 2007/11/2, ovc-discuss-request@listman.sonic.net
> >>> wrote:
> >>>>
> >>>> Message: 2
> >>>> Date: Fri, 2 Nov 2007 10:45:52 -0700 (PDT)
> >>>> From: "Richard C. Johnson"
> >>>> Subject: Re: [OVC-discuss] Representative Holt's OWN WORDS [Re:
> >>>> OVC-discuss Digest, Vol 36, Issue 9]
> >>>> To: Open Voting Consortium discussion list
> >>>>
> >>>> Message-ID: <479430.49366.qm@web408.biz.mail.mud.yahoo.com>
> >>>> Content-Type: text/plain; charset="iso-8859-1"
> >>>>
> >>>> Stuart,
> >>>>
> >>>> Here is some example Open Source code from the OpenScan system.
> >>>> See
> >>>> how difficult you think it would be to figure out. My own thought
> >>>> is that most people could correctly understand what is being
> coded
> >>>> and could also see that no subroutine doing nasty things was
> hidden
> >>>> in the code:
> >>>>
> >>>>
> >>>> OK-2007-09-1
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> Brad Henry
> >>>> John Wayne
> >>>> Bill Okapi
> >>>> Jane Smith
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> ***************************
> >>>>
> >>>> I do believe that there are enough people who could read such
> code
> >>>> to make such Open Source a reasonable approach to increased
> >>>> transparency of elections. How many people can read the above and
> >>>> understand it? Quite a few, I would think. I admit, Open Source
> >>>> drivers for a scanner are more difficult, but I can read them
> even
> >>>> if it would be hard for me to write them myself.
> >>>>
> >>>> -- Dick
> >>>>
> >>>
> >>> Sure, many people could read code like that, if by "read" you mean
> >>> "recognize most of the words." But how many people could explain
> how
> >>> one could determine whether that code is correct?
> >>>
> >>> For a more realistic example, spend a minute perusing the Java
> code
> >>> appended below
> >>>
> >>> action/CountingAction.java?revision=1.1&view=markup>.
> >>> Then give us an estimate of the fraction of the population that
> >>> could
> >>> formulate a coherent argument for its correctness. How many could
> >>> even give a coherent definition of "correctness"?
> >>>
> >>> Thanks,
> >>>
> >>> --Ham
> >>>
> >>>
> >>> public ActionForward execute(ActionMapping actionmapping,
> ActionForm
> >>> actionform, HttpServletRequest httpservletrequest,
> >>> HttpServletResponse httpservletresponse)
> >>> 70 throws Exception
> >>> 71 {
> >>> 72 String forwardName = "defaultPage";
> >>> 73 try {
> >>> 74
> >>> 75 //pl = new PropertyLoader
> >>> ("http://localhost:8080/connecticutVotingDemo/properties/
> >>> application.properties");
> >>> 76 pl = new PropertyLoader
> >>> ("http://localhost:8080/connecticutVotingDemo/properties/
> >>> application.properties");
> >>> 77 prop = pl.getCache();
> >>> 78 } catch (Exception e) {
> >>> 79 e.printStackTrace();
> >>> 80 }
> >>> 81
> >>> 82 try
> >>> 83 {
> >>> 84 CountingForm countingform = (CountingForm)actionform;
> >>> 85 HashMap hashmap = new HashMap();
> >>> 86 BallotVO ballotvo = new BallotVO();
> >>> 87 MessageBean messagebean = new MessageBean();
> >>> 88 httpservletrequest.setAttribute("messageBean",
> >>> messagebean);
> >>> 89 makeWarning(httpservletrequest, "Welcome to Counting!
> >>> Please click on the given below enabled button to process the
> >>> counting...! ");
> >>> 90 String countingType = countingform.getCountingType();
> >>> 91 logSB.append("CountingType "+countingType+"\r\n");
> >>> 92 if(countingType.equals("ballotToEML440")) {
> >>> 93 System.out.print("ballotToEML440");
> >>> 94 String ballotLookupFolder =
> >>> prop.getProperty("ballotLookupFolder");
> >>> 95 System.out.println("ballotLookupFolder
> >>> "+ballotLookupFolder);
> >>> 96 //parse and map ballot look up
> >>> 97 parseBallotLookup(ballotLookupFolder);
> >>> 98
> >>> 99 try {
> >>> 100 // Ballot XML Parser
> >>> 101 HashMap listOfBallotMap = new HashMap();
> >>> 102 String ballotFolder =
> >>> prop.getProperty("ballotFolder");
> >>> 103 // Reading list of BALLOT XML file
> >>> 104 listOfBallotMap =
> >>> readListofFiles(ballotFolder);
> >>> 105 if (listOfBallotMap != null) {
> >>> 106
> >>> System.out.println("listOfEMLXMLs " +
> >>> listOfBallotMap.size());
> >>> 107 Set keySet = listOfBallotMap.keySet();
> >>> 108 if (keySet != null) {
> >>> 109 Iterator bIt =
> >>> keySet.iterator();
> >>> 110 while (bIt.hasNext()) {
> >>> 111 String key =
> >>> (String) bIt.next();
> >>> 112 xmlString =
> >>> (String) listOfBallotMap.get(key);
> >>> 113 //
> >>> System.out.println("Ballot XML size "+ xmlString.toString());
> >>> 114 BallotXMLMap
> >>> ballotMap = new BallotXMLMap();
> >>> 115 HashMap
> >>> ballotXMLMap = ballotMap.getXMLMap(xmlString.toString().trim());
> >>> 116
> >>> System.out.println("\r\n\r\nballotXMLMap Size
> >>> "+ballotXMLMap.size()
> >>> 117
> >>> +" ballotLookupXMLMap "+ballotLookupXMLMap.size());
> >>> 118
> >>> logSB.append("\r\n\r\nballotXMLMap Size "+ballotXMLMap.size()
> >>> 119
> >>> +" ballotLookupXMLMap "+ballotLookupXMLMap.size());
> >>> 120
> >>> writeFile(logSB.toString());
> >>> 121
> >>> //ballotVO.setBallotData(ballotXMLMap);
> >>> 122 xmlString = null;
> >>> 123 // Generate
> >>> EML440 XML file
> >>> 124
> >>> generateEML440(ballotXMLMap, ballotLookupXMLMap);
> >>> 125
> >>> ballotXMLMap=new HashMap();
> >>> 126
> >>> //System.out.println("\r\n\r\nballotXMLMap Size
> >>> "+ballotXMLMap.size());
> >>> 127
> >>> 128 }
> >>> 129 }
> >>> 130 }
> >>> 131
> >>> ballotvo.setTransactionDetails("Ballot to EML440 has been
> >>> converted successfully...!");
> >>> 132 countingform.setCountingType("eml440To510");
> >>> 133 } catch (Exception e) {
> >>> 134 System.out.println("Exception in
> >>> Ballot..." + e.getMessage());
> >>> 135 ballotvo.setTransactionDetails(e.toString());
> >>> 136
> >>> 137 }
> >>> 138 }
> >>> 139
> >>> 140 if(countingType.equals("eml440To510"))
> >>> 141 {
> >>> 142 System.out.println("eml440To510?");
> >>> 143 logSB.append("inside the eml440To510 if
> >>> condition\r\n");
> >>> 144 countingform.setCountingType("eml510To520");
> >>> 145 HashMap emlXMLMap = new HashMap();
> >>> 146 emlXMLMap = getEMLXMLCountingDataMap();
> >>> 147 System.out.println("emlXMLMap "+emlXMLMap.size
> >>> ());
> >>> 148 generateEML510(emlXMLMap);
> >>> 149 logSB.append("EML440 to EML510 has been converted
> >>> successfully...!");
> >>> 150 writeFile(logSB.toString());
> >>> 151 ballotvo.setTransactionDetails("EML440 to EML510
> >>> has been converted successfully...!");
> >>> 152 doRankedChoice();
> >>> 153 }
> >>> 154 if(countingType.equals("eml510To520"))
> >>> 155 {
> >>> 156 System.out.print("eml510To520");
> >>> 157 countingform.setCountingType("done");
> >>> 158 forwardName = "success";
> >>> 159 parseCounting410Lookup();
> >>> 160 parse510XML();
> >>> 161 generateEML520();
> >>> 162 makeWarning(httpservletrequest, "");
> >>> 163 }
> >>> 164 if(httpservletrequest.getParameter("countingType") !=
> >>> null &&
> >>> httpservletrequest.getParameter("countingType").equals("done"))
> >>> 165 {
> >>> 166 makeWarning(httpservletrequest, "");
> >>> 167 System.out.print("Inside done...!!!");
> >>> 168 countingform.setCountingType("done");
> >>> 169 }
> >>> 170 System.out.println("countingType " + countingType);
> >>> 171 System.out.println("Forward Status " + forwardName);
> >>> 172 writeFile(logSB.toString());
> >>> 173 }
> >>> 174 catch(Exception exception1)
> >>> 175 {
> >>> 176 exception1.printStackTrace();
> >>> 177 writeFile(logSB.toString());
> >>> 178 }
> >>> 179 return actionmapping.findForward(forwardName);
> >>> 180 }
> >>> --
> >>> ------------------------------------------------------------------
> >>> Hamilton Richards, PhD Department of Computer Sciences
> >>> Senior Lecturer (retired) The University of Texas at Austin
> >>> ham@cs.utexas.edu hrichrds@swbell.net
> >>> http://www.cs.utexas.edu/users/ham/richards
> >>> ------------------------------------------------------------------
> >>> _______________________________________________
> >>> OVC-discuss mailing list
> >>> OVC-discuss@listman.sonic.net
> >>> http://lists.sonic.net/mailman/listinfo/ovc-discuss
> >>> By sending email to the OVC-discuss list, you thereby agree to
> >>> release the content of your posts to the Public Domain--with the
> >>> exception of copyrighted material quoted according to fair use,
> >>> including publicly archiving at http://gnosis.python-hosting.com/
> >>> voting-project/
> >>>
> >>>
> >>
> >> _______________________________________________
> >> OVC-discuss mailing list
> >> OVC-discuss@listman.sonic.net
> >> http://lists.sonic.net/mailman/listinfo/ovc-discuss
> >> By sending email to the OVC-discuss list, you thereby agree to
> >> release the content of your posts to the Public Domain--with the
> >> exception of copyrighted material quoted according to fair use,
> >> including publicly archiving at http://gnosis.python-hosting.com/
> >> voting-project/
> >>
> >
> > Instant Messaging (IM) Addresses:
> > Jabber: mclain@jabber.org
> > Yahoo: appworx_fred, schemalogic_fred
> > MSN: appworx_fred@hotmail.com, schemalogic_fred@hotmail.com
> > AIM: mclain98021
> > ICQ: 6947005
> > GTalk (Jabber): mclain98021@gmail.com
> > Skype: fmclain
> >
> >
> >
> > _______________________________________________
> > OVC-discuss mailing list
> > OVC-discuss@listman.sonic.net
> > http://lists.sonic.net/mailman/listinfo/ovc-discuss
> > By sending email to the OVC-discuss list, you thereby agree to
> > release the content of your posts to the Public Domain--with the
> > exception of copyrighted material quoted according to fair use,
> > including publicly archiving at http://gnosis.python-hosting.com/
> > voting-project/
> >
> >
>
> _______________________________________________
> OVC-discuss mailing list
> OVC-discuss@listman.sonic.net
> http://lists.sonic.net/mailman/listinfo/ovc-discuss
> By sending email to the OVC-discuss list, you thereby agree to
> release the content of your posts to the Public Domain--with the
> exception of copyrighted material quoted according to fair use,
> including publicly archiving at http://gnosis.python-hosting.com/voting-project/
>
> _______________________________________________
> OVC-discuss mailing list
> OVC-discuss@listman.sonic.net
> http://lists.sonic.net/mailman/listinfo/ovc-discuss
> By sending email to the OVC-discuss list, you thereby agree to
> release the content of your posts to the Public Domain--with the
> exception of copyrighted material quoted according to fair use,
> including publicly archiving at http://gnosis.python-hosting.com/voting-project/

Instant Messaging (IM) Addresses:
Jabber: mclain@jabber.org
Yahoo: appworx_fred, schemalogic_fred
MSN: appworx_fred@hotmail.com, schemalogic_fred@hotmail.com
AIM: mclain98021
ICQ: 6947005
GTalk (Jabber): mclain98021@gmail.com
Skype: fmclain

_______________________________________________
OVC-discuss mailing list
OVC-discuss@listman.sonic.net
http://lists.sonic.net/mailman/listinfo/ovc-discuss
By sending email to the OVC-discuss list, you thereby agree to release the content of your posts to the Public Domain--with the exception of copyrighted material quoted according to fair use, including publicly archiving at http://gnosis.python-hosting.com/voting-project/
==================================================================
= The content of this message, with the exception of any external
= quotations under fair use, are released to the Public Domain
==================================================================
Received on Fri Nov 30 23:17:09 2007

This archive was generated by hypermail 2.1.8 : Fri Nov 30 2007 - 23:17:31 CST