Loading ...
Sorry, an error occurred while loading the content.

Re: [XP] Digest Number 1292

Expand Messages
  • Wrong Address
    Could you please stop sending these emails! Thank you. ... From: To: Sent: Tuesday,
    Message 1 of 1 , Aug 1, 2001
    • 0 Attachment
      Could you please stop sending these emails! Thank you.

      ----- Original Message -----
      From: <extremeprogramming@yahoogroups.com>
      To: <extremeprogramming@yahoogroups.com>
      Sent: Tuesday, July 31, 2001 11:08 PM
      Subject: [XP] Digest Number 1292


      To Post a message, send it to: extremeprogramming@...

      To Unsubscribe, send a blank message to:
      extremeprogramming-unsubscribe@...

      Don't miss XP UNIVERSE, the first US conference on XP and Agile Methods.
      see www.xpuniverse.com for details and registration.
      ------------------------------------------------------------------------

      There are 25 messages in this issue.

      Topics in this digest:

      1. RE: two keyboards
      From: Ivan Tomek <ivan.tomek@...>
      2. RE: Continuous Integration for C++ on Windows
      From: "Nick Southwell" <NSouthwell@...>
      3. RE: Continuous Integration for C++ on Windows
      From: Robert Sartin <sartin@...>
      4. Re: Continuous Integration for C++ on Windows
      From: "Scott McCaskill" <scott@...>
      5. The ant algorithm
      From: Ivan Tomek <ivan.tomek@...>
      6. Re: 2 questions!
      From: GH <gh@...>
      7. Re: Kent's One Team Paper
      From: Mark Derricutt <mark@...>
      8. RE: Smalltalk discussion group
      From: "Ricardo Munhoz Santiago" <rsantiago@...>
      9. Re: The ant algorithm
      From: Andrew Hunt <andy@...>
      10. Re: 2 questions!
      From: Andrew Hunt <andy@...>
      11. Light bulb (was Re: Removing dead code)
      From: azami@...
      12. Re: Continuous Integration for C++ on Windows
      From: azami@...
      13. RE: Smalltalk discussion group
      From: Rex_Jolliff@...
      14. Re: FW: TWiki ( was RE: is the wiki open source and if so, wheredo
      I get it?)
      From: Tony Bowden <tony-xpire@...>
      15. Re: Smalltalk discussion group
      From: Reg Krock <rkrock@...>
      16. Re: Continuous Integration for C++ on Windows
      From: "Scott McCaskill" <scott@...>
      17. Re: The ant algorithm
      From: afuqua_egroups@...
      18. Re: FW: TWiki ( was RE: is the wiki open source and if so, wheredo
      I get it?)
      From: Tony Bowden <tony-xpire@...>
      19. Re: FW: TWiki ( was RE: is the wiki open source and if so, wheredo
      I get it?)
      From: Tony Bowden <tony-xpire@...>
      20. XPU Papers
      From: shankar.ganesh@...
      21. Quality
      From: "Matthew Davis" <azami@...>
      22. RE: Quality
      From: Robert Watkins <robertw@...>
      23. Re: Quality
      From: Paulo Motta <prmottajr@...>
      24. RE: Quality
      From: Robert Watkins <robertw@...>
      25. Re: Mac or Metrowerks test units
      From: "C. Keith Ray" <ckeithray@...>


      ________________________________________________________________________
      ________________________________________________________________________

      Message: 1
      Date: Tue, 31 Jul 2001 16:50:45 -0300
      From: Ivan Tomek <ivan.tomek@...>
      Subject: RE: two keyboards

      Thanks Andy.

      Ivan


      -----Original Message-----
      From: Glew, Andy [mailto:andy.glew@...]
      Sent: Tuesday, July 31, 2001 4:25 PM
      To: 'extremeprogramming@yahoogroups.com'
      Subject: RE: [XP] two keyboards


      > > I would like to use IBM ThinkPad laptops in an XP course with an extra
      > > keyboard attached for the second student in the pair. Has anybody done
      that?

      I am typing this at an IBM Thinkpad A21P,
      with a "Y-key key" dual keyboard adapter
      plugged into the keyboard port of the port
      replicator.

      I currently have only a single external keyboard,
      a DSi Modular Pro (configured to move the pointer
      keys to the left hand side, to reduce the amount of
      typing my painful right hand must do). I can use
      both this keyboard and the laptop keyboard
      interchangeably.

      In the past I have had a second external keyboard,
      typically a Dvorak board or one of the radically sculpted
      keyboards. Again, all three keyboards can be used
      interchangeably.

      As someone has already noticed, you need to use
      only one keyboard at a time. But, multiple keyboards
      and voice is faster than passing a physical keyboard around.


      To Post a message, send it to: extremeprogramming@...

      To Unsubscribe, send a blank message to:
      extremeprogramming-unsubscribe@...

      Don't miss XP UNIVERSE, the first US conference on XP and Agile Methods.
      see www.xpuniverse.com for details and registration.

      Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/



      [Non-text portions of this message have been removed]



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 2
      Date: Tue, 31 Jul 2001 15:04:04 -0500
      From: "Nick Southwell" <NSouthwell@...>
      Subject: RE: Continuous Integration for C++ on Windows

      Sure Fedder,

      Here's the new code:

      stream << (e ? e->fileName () : "")
      << "(" << (e ? estring (e->lineNumber ()) : "") << ")"
      << " : error - Test assertion failed: "
      << "\"" << failure->thrownException ()->what () << "\""
      << endl;

      Replace the corresponding code in TextTestResult::PrintFailures. Make a
      similar change in TextTestResult::PrintErrors (you'll want a different
      message).

      It's important to have the string "error" somewhere in the output in order
      to get DevStudio to recognize the output as an error.

      When DevStudio runs the unit test command line app as a post build step, all
      the output is captured by the Build pane, so the test errors look like build
      errors.

      Nick


      > From: fsk@... [mailto:fsk@...]
      > Sent: Tuesday, July 31, 2001 2:40 PM
      > To: extremeprogramming@yahoogroups.com
      > Subject: RE: [XP] Continuous Integration for C++ on Windows
      >
      >
      >
      > Hi,
      >
      > > The unit test application is based on the CppUnit framework, but we
      > modified
      > > the output to conform with the DevStudio convention for displaying
      > errors.
      > > This makes it possible to hit F4 to go to source code for the failing
      > test.
      > Do you use OutputDebugString or ?
      > -Would you mind sharing your changes ?
      > I don't actually mind whether or not there is a GUI front end to
      > the tests,
      > but hitting F4 to go to the source line for an failing test would
      > be really
      > beneficial.
      >
      > Best regards,
      > Fedder
      >
      >
      > To Post a message, send it to: extremeprogramming@...
      >
      > To Unsubscribe, send a blank message to:
      > extremeprogramming-unsubscribe@...
      >
      > Don't miss XP UNIVERSE, the first US conference on XP and Agile
      > Methods. see www.xpuniverse.com for details and registration.
      >
      > Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
      >
      >
      >



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 3
      Date: Tue, 31 Jul 2001 13:14:51 -0700 (PDT)
      From: Robert Sartin <sartin@...>
      Subject: RE: Continuous Integration for C++ on Windows


      --- fsk@... wrote:
      > Do you use OutputDebugString or ?
      > -Would you mind sharing your changes ?
      > I don't actually mind whether or not there is a GUI front end to the
      > tests,
      > but hitting F4 to go to the source line for an failing test would be
      > really
      > beneficial.

      Trivial change, made by an author unaware of OutputDebugString follows.
      The strange comment is a copy of an error message generated to reverse
      engineer the message format. This is all against the textui
      TextTestResult.cpp from code about 9 months old. Haven't been using C++
      since then. Please pardon the OAOO violation. I was shooting for
      minimal change to the code and thought Extract Method would introduce
      too much delta for a later merge. I was young and didn't know any
      better.

      Regards,

      Rob


      In printErrors:
      #if 0
      stream << i
      << ") "
      << "line: " << (e ? estring (e->lineNumber ()) : "")
      << " "
      << (e ? e->fileName () : "") << " "
      << "\"" << failure->thrownException ()->what () <<
      "\""
      << endl;
      #else
      // MS error format:
      D:\sartin\projects\prototype-core\tests\EventTest.cpp(35) : error
      C2065: 'falsxe' : undeclared identifier
      stream << (e ? e->fileName () : "")
      << "(" << (e ? estring (e->lineNumber ()) : "") << ") :
      error Z0000:"
      << "'" << failure->thrownException ()->what () << "'"
      << endl;
      #endif

      In printFailures:

      #if 0
      stream << i
      << ") "
      << "line: " << (e ? estring (e->lineNumber ()) : "")
      << " "
      << (e ? e->fileName () : "") << " "
      << "\"" << failure->thrownException ()->what () <<
      "\""
      << endl;
      #else
      // MS error format:
      D:\sartin\projects\prototype-core\tests\EventTest.cpp(35) : error
      C2065: 'falsxe' : undeclared identifier
      stream << (e ? e->fileName () : "")
      << "(" << (e ? estring (e->lineNumber ()) : "") << ") :
      error Z0000 (" << i << "):"
      << "'" << failure->thrownException ()->what () << "'"
      << endl;
      #endif


      __________________________________________________
      Do You Yahoo!?
      Make international calls for as low as $.04/minute with Yahoo! Messenger
      http://phonecard.yahoo.com/


      ________________________________________________________________________
      ________________________________________________________________________

      Message: 4
      Date: Tue, 31 Jul 2001 15:33:08 -0500
      From: "Scott McCaskill" <scott@...>
      Subject: Re: Continuous Integration for C++ on Windows

      You don't have to use ODS, stdout and stderr automatically go to the output
      window if you run the executable via a post build step (or via F5 or
      ctrl+F5).

      ----- Original Message -----
      From: <fsk@...>
      To: <extremeprogramming@yahoogroups.com>
      Sent: Tuesday, July 31, 2001 2:39 PM
      Subject: RE: [XP] Continuous Integration for C++ on Windows


      >
      > Hi,
      >
      > > The unit test application is based on the CppUnit framework, but we
      > modified
      > > the output to conform with the DevStudio convention for displaying
      > errors.
      > > This makes it possible to hit F4 to go to source code for the failing
      > test.
      > Do you use OutputDebugString or ?
      > -Would you mind sharing your changes ?
      > I don't actually mind whether or not there is a GUI front end to the
      tests,
      > but hitting F4 to go to the source line for an failing test would be
      really
      > beneficial.
      >
      > Best regards,
      > Fedder
      >
      >
      > To Post a message, send it to: extremeprogramming@...
      >
      > To Unsubscribe, send a blank message to:
      extremeprogramming-unsubscribe@...
      >
      > Don't miss XP UNIVERSE, the first US conference on XP and Agile Methods.
      see www.xpuniverse.com for details and registration.
      >
      > Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
      >
      >
      >



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 5
      Date: Tue, 31 Jul 2001 17:37:30 -0300
      From: Ivan Tomek <ivan.tomek@...>
      Subject: The ant algorithm

      Hi,

      I wasn't watching when Kent showed the ant algorithm for the pattern that he
      was running during his talk at XP universe. Does somebody remember it?

      Ivan


      [Non-text portions of this message have been removed]



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 6
      Date: Tue, 31 Jul 2001 15:49:23 -0500
      From: GH <gh@...>
      Subject: Re: 2 questions!

      On Mon, Jul 30, 2001 at 08:04:46PM -0400, some SMTP stream spewed forth:
      [...]

      > Can *your* methodology do that? :-) (Hey, maybe that
      > should be a bumber sticker...)
      >

      Have you hugged your methodology today?

      > /\ndy
      >
      > --
      > Andrew Hunt, The Pragmatic Programmers, LLC.

      gh
      --
      What, no one sings along with Ricky Martin anymore?
      My kid sister does (but then, she prefers pico to vi ...)
      -- Suresh Ramasubramanian, alt.sysadmin.recovery


      ________________________________________________________________________
      ________________________________________________________________________

      Message: 7
      Date: Wed, 01 Aug 2001 08:57:04 +1200
      From: Mark Derricutt <mark@...>
      Subject: Re: Kent's One Team Paper

      Does anyone have this in PDF format so us *nix users to read?

      --On Thursday, July 19, 2001 21:05:15 +0000 jeff621@... wrote:

      > I must have not been paying attention... did a conversation already
      > occur on this?
      >
      > http://groups.yahoo.com/group/extremeprogramming/files/One%20Team.doc

      --
      Vi de udødelige inviterer dere til å slå dere sammen med oss


      ________________________________________________________________________
      ________________________________________________________________________

      Message: 8
      Date: Tue, 31 Jul 2001 18:04:59 -0300
      From: "Ricardo Munhoz Santiago" <rsantiago@...>
      Subject: RE: Smalltalk discussion group

      Nothing wrong, except the fact that I dont know what server I should connect
      to.
      Can you tell me the server name and port (if it is not the default 119).
      Thanks for your help.


      > On Monday 30 July 2001 14:20, Phlip wrote:
      > > Hi smalltalkers on the list.
      > > Can you point me a smalltalk discussion group?
      >
      > What's wrong with news:comp.lang.smalltalk ?
      >
      > --
      > Phlip



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 9
      Date: Tue, 31 Jul 2001 17:11:48 -0400
      From: Andrew Hunt <andy@...>
      Subject: Re: The ant algorithm

      >Hi,
      >
      >I wasn't watching when Kent showed the ant algorithm for the pattern
      that he
      >was running during his talk at XP universe. Does somebody remember it?

      >From memory, so YMMV:

      1. If the pixel is white, change it to black and turn left
      2. If the pixel is black, change it to white and turn right
      3. Advance one step
      4. Repeat

      /\ndy

      --
      Andrew Hunt, The Pragmatic Programmers, LLC.
      Innovative Object-Oriented Software Development and
      Mentoring for Agile Methods.
      web: http://www.pragmaticprogrammer.com email:
      andy@...
      --
      Books by Andrew Hunt and David Thomas:
      "The Pragmatic Programmer" (Addison-Wesley 2000)
      "Programming Ruby" (Addison-Wesley 2001)
      --


      ________________________________________________________________________
      ________________________________________________________________________

      Message: 10
      Date: Tue, 31 Jul 2001 17:12:48 -0400
      From: Andrew Hunt <andy@...>
      Subject: Re: 2 questions!


      On the sibject of bumper stickers, gh asks:

      >Have you hugged your methodology today?

      Or, for the RUP crowd,

      "Have you been UML-ed by your methodology today?"

      (Should rhyme with "pummeled")

      :-)

      /\ndy



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 11
      Date: Tue, 31 Jul 2001 21:40:39 -0000
      From: azami@...
      Subject: Light bulb (was Re: Removing dead code)

      --- In extremeprogramming@y..., "Arrizza, John" <john.arrizza@m...>
      wrote:
      > > -----Original Message-----
      > > From: azami@s... [mailto:azami@s...]
      > > Nevertheless, is there anything more you can do than sow the
      > > seeds and hope they land on fertile soil? Any tips for
      fertilizing the
      > > infertile soil?
      > ...
      > Check out "Secrets of Consulting : A Guide to Giving and Getting
      Advice
      > Successfully" by Gerald Weinberg. This book is more about the advice
      part of
      > the substitle than the secrets or consulting part.

      Thanks, I'll check it out.

      -Matthew
      azami@...





      ________________________________________________________________________
      ________________________________________________________________________

      Message: 12
      Date: Tue, 31 Jul 2001 21:46:28 -0000
      From: azami@...
      Subject: Re: Continuous Integration for C++ on Windows

      --- In extremeprogramming@y..., "Nick Southwell" <NSouthwell@a...>
      wrote:
      > The unit test application is based on the CppUnit framework, but we
      modified
      > the output to conform with the DevStudio convention for displaying
      errors.
      > This makes it possible to hit F4 to go to source code for the
      failing test.

      Is this something you can share with us?

      -Matthew
      azami@...




      ________________________________________________________________________
      ________________________________________________________________________

      Message: 13
      Date: Tue, 31 Jul 2001 15:07:18 -0700
      From: Rex_Jolliff@...
      Subject: RE: Smalltalk discussion group








      Ricardo Munhoz Santiago <rsantiago@...> on 07/31/2001
      02:04:59 PM

      Please respond to extremeprogramming@yahoogroups.com








      To: extremeprogramming@yahoogroups.com

      cc: (bcc: Rex Jolliff/YM/RWDOE)



      Subject: RE: [XP] Smalltalk discussion group





      Federal Record Status Not
      Determined



      > Nothing wrong, except the fact that I dont know what server I
      > should connect to. Can you tell me the server name and port (if
      > it is not the default 119). Thanks for your help.

      comp.lang.smalltalk is a widely distributed group. Your ISP should
      provide a newsfeed which should contain this group. If not there are
      many free Usenet outlets that available that will supply this group.





      ________________________________________________________________________
      ________________________________________________________________________

      Message: 14
      Date: Tue, 31 Jul 2001 23:10:40 +0100
      From: Tony Bowden <tony-xpire@...>
      Subject: Re: FW: TWiki ( was RE: is the wiki open source and if so, wheredo
      I get it?)

      On Mon, Jul 30, 2001 at 06:30:35PM -0700, Peter Thoeny wrote:
      > A primary goal when enhancing the TWiki source
      > is quality, and production releases usually run
      > without any glitches for large user bases.
      > Having a clean code is important, and we will
      > work on that over time, but quality and speed
      > have higher priority.

      By the way, I was thinking some more about the way the statistical report
      that I refactored here yesterday actually worked, and I realised there was
      a also bug in it.

      When you create your intermediate array of munged strings to sort:
      while( ( $key, $value ) = each( %hash ) ) {
      $tmp = " $value";
      $tmp =~ s/\s*(.{5})$/$1/go;
      $list[@list] = "$tmp $key";
      }
      @list = reverse( sort( @list ) );

      If a user appears in the log more than 99,999 times, your pattern match
      will fail, and that user will not get appear in the resulting report
      at all. I'm guessing that hasn't been an issue (and, as I'm still not
      entirely sure how this report gets called, I don't know if it'll ever
      become one), but you may as well fix it, no?

      I also performed some rudimentary benchmarks, and even though I only
      optimised my code for programmer efficiency rather then execution
      efficiency, I'm clocking my code at an average of 2.2 times faster
      (not varying greatly with the size of the original list).

      I've made another few tweaks to make it slightly more readable, and
      also to return exactly the same values as your previous example[1] - my
      last version had a missing space at the start of each string (although
      I don't think that would really matter in the resulting HTML).

      Feel free to incorporate my patch ... (I'm not sure of your preferred
      patch format, so as I've rewritten the entire sub, I'll just list them
      in turn).

      Thanks,

      Tony

      [1] Names which occur exactly the same number of times may come out
      in a slightly different order, but I don't believe that 2nd degree ordering
      was an explicit feature of the original (and if there was implicit behaviour
      I'm not sure you could rely on a different version of perl not to break
      it)..
      If you want to a rule for it, it's fairly easy - e.g. if you want it
      ordered numerically by occurences, and then alphabetically by name,
      just change the sort to:
      sort { $count{$b} <=> $count{$a} || $a cmp $b } } keys %count

      --
      --------------------------------------------------------------------------
      Tony Bowden | tony@... | http://www.tmtm.com/
      make me laugh make me cry enrage me don't try to disengage me
      --------------------------------------------------------------------------

      # =========================================================== old version
      sub getTopList
      {
      my( $doUser, $theMaxNum, @theList ) = @_;

      my %hash = ();
      my $tmp;
      foreach( @theList ) {
      $tmp = $_;
      if( $doUser ) {
      $tmp =~ s/^\|[^\|]*\|\s([^\.]*\.\S*).*/$1/go;
      } else {
      $tmp =~ s/^\|[^\|]*\|[^\|]*\|[^\|]*\|\s([^\.]*\.\S*).*/$1/go;
      }
      if( $hash{ $tmp } ) {
      $hash{ $tmp } = $hash{ $tmp } + 1;
      } else {
      %hash = ( %hash, $tmp, 1 );
      }
      }

      my @list = ();
      while( ( $key, $value ) = each( %hash ) ) {
      $tmp = " $value";
      $tmp =~ s/\s*(.{5})$/$1/go;
      $list[@list] = "$tmp $key";
      }
      @list = reverse( sort( @list ) );

      my @returnList = ();
      my $idx = 0;
      for( $x = 0; $x < @list; $x++ )
      {
      if( $x >= $theMaxNum ) {
      return @returnList;
      }
      $tmp = $list[$x];
      $tmp =~ s/^\s*(.*)/ $1/go;
      $returnList[$x] = $tmp;
      }

      return @returnList;
      }


      # =========================================================== new version
      sub getTopList
      my( $doUser, $theMaxNum, @theList ) = @_;

      my $re = $doUser ? qr/^\|[^\|]*\|\s([^\.]*\.\S*).*/
      : qr/^\|[^\|]*\|[^\|]*\|[^\|]*\|\s([^\.]*\.\S*).*/;
      my %count;
      foreach (@theList) { ++$count{$1} if /$re/ }

      my @returnList = sort {$count{$b} <=> $count{$a}} keys %count;
      return map " $count{$_}: $_", splice(@returnList, 0, 5);
      }



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 15
      Date: Tue, 31 Jul 2001 18:13:51 -0400
      From: Reg Krock <rkrock@...>
      Subject: Re: Smalltalk discussion group


      >
      > Subject: RE: [XP] Smalltalk discussion group
      >
      >
      >> Nothing wrong, except the fact that I dont know what server I
      >> should connect to. Can you tell me the server name and port (if
      >> it is not the default 119). Thanks for your help.
      >
      >
      > comp.lang.smalltalk is a widely distributed group. Your ISP should
      > provide a newsfeed which should contain this group. If not there are
      > many free Usenet outlets that available that will supply this group.
      >
      If your ISP does not have it, you can check news.totallyobjects.com for
      the smalltalk groups.

      >
      >
      >
      > To Post a message, send it to: extremeprogramming@...
      >
      > To Unsubscribe, send a blank message to:
      extremeprogramming-unsubscribe@...
      >
      > Don't miss XP UNIVERSE, the first US conference on XP and Agile Methods.
      see www.xpuniverse.com for details and registration.
      >
      > Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
      >
      >
      >



      [Non-text portions of this message have been removed]



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 16
      Date: Tue, 31 Jul 2001 17:41:58 -0500
      From: "Scott McCaskill" <scott@...>
      Subject: Re: Continuous Integration for C++ on Windows

      It's very simple, just make your unit test errors look like compile errors.
      I changed our UTs to do that in about 2 minutes and it works like a charm.

      example:
      D:\some_long_path\foo.cpp(473) : assertion failed etc. etc.

      The part that seems to matter is everything up to and including the colon
      (after the line number). Granted, you will need the file name and line
      number, but if you're using an assert-like macro you probably already have
      these.

      ----- Original Message -----
      From: <azami@...>
      To: <extremeprogramming@yahoogroups.com>
      Sent: Tuesday, July 31, 2001 4:46 PM
      Subject: Re: [XP] Continuous Integration for C++ on Windows


      > --- In extremeprogramming@y..., "Nick Southwell" <NSouthwell@a...>
      > wrote:
      > > The unit test application is based on the CppUnit framework, but we
      > modified
      > > the output to conform with the DevStudio convention for displaying
      > errors.
      > > This makes it possible to hit F4 to go to source code for the
      > failing test.
      >
      > Is this something you can share with us?
      >
      > -Matthew
      > azami@...
      >
      >
      >
      > To Post a message, send it to: extremeprogramming@...
      >
      > To Unsubscribe, send a blank message to:
      extremeprogramming-unsubscribe@...
      >
      > Don't miss XP UNIVERSE, the first US conference on XP and Agile Methods.
      see www.xpuniverse.com for details and registration.
      >
      > Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
      >
      >
      >



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 17
      Date: Tue, 31 Jul 2001 22:48:21 -0000
      From: afuqua_egroups@...
      Subject: Re: The ant algorithm

      Search the Internet for "Langston's Ant". You'll find lots.

      Andrew Fuqua

      --- In extremeprogramming@y..., Ivan Tomek <ivan.tomek@a...> wrote:
      > Hi,
      >
      > I wasn't watching when Kent showed the ant algorithm for the
      pattern
      that he
      > was running during his talk at XP universe. Does somebody remember
      it?
      >
      > Ivan
      >
      >
      > [Non-text portions of this message have been removed]



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 18
      Date: Wed, 1 Aug 2001 00:05:31 +0100
      From: Tony Bowden <tony-xpire@...>
      Subject: Re: FW: TWiki ( was RE: is the wiki open source and if so, wheredo
      I get it?)

      On Tue, Jul 31, 2001 at 11:10:40PM +0100, Tony Bowden wrote:
      > return map " $count{$_}: $_", splice(@returnList, 0, 5);

      Doh!

      To match your current code, remove that colon:
      + return map " $count{$_} $_", splice(@returnList, 0, 5);

      However, I was refactoring this some more, as I saw that the function
      was only actually called twice. In processWeb, you currently do a lot
      of iterating over the logfile, using greps:

      my @list = grep( /^\|[^\|]*\|[^\|]*\| view \| $webName/, @theLogList );
      my $statViews = @list;
      my @topViews = getTopList( 0, $wiki::statsTopViews, @list );

      @list = grep( /^\|[^\|]*\|[^\|]*\| save \| $webName/, @theLogList );
      my $statSaves = @list;

      @list = grep( /^\|[^\|]*\|[^\|]*\| upload \| $webName/, @theLogList );
      my $statUploads = @list;

      @list = grep( /^\|[^\|]*\|[^\|]*\| (save|upload) \| $webName/,
      @theLogList );
      my @topContrib = getTopList( 1, $wiki::statsTopContrib, @list );

      For a long log this will be very slow, as it will have to iterate over it 4
      times, so I've changed it to only step through the log once.

      Those regular expressions, as with the ones in the function from earlier,
      are also quite difficult to read. From what I can see the logfile is
      pipe-delimited, so I've used a 'split' to extract the relevant fields[1]:

      my (%actionCount, %topView, %topContrib);
      foreach (@theLogList) {
      my @parts = split / \| /;
      my ($user, $action, $page) = @parts[1 .. 3];
      ++$actionCount{$action};

      if ($action eq "view") {
      ++$topView{$page};
      } elsif ($action eq "upload" or $action eq "save") {
      ++$topContrib{$user};
      }
      }

      This now has the added advantage that we have pre-populated 'count'
      hashes to pass to our 'getTopList' function, which doesn't need to know
      anymore whether it's getting a username or a pagename, and can become
      much simpler (and renamed to something more generic like _sortHash). Our
      old 42 line subroutine now reads:

      sub _sortHash
      {
      my( $theMaxNum, %count ) = @_;
      my @returnList = sort {$count{$b} <=> $count{$a}} keys %count;
      return map " $count{$_} $_", splice @returnList, 0, 5;
      }

      And then where you print out the resulting stats:

      printMsg( " - view: $statViews, save: $statSaves, upload:
      $statUploads" );
      my $statTopViews = "";
      my $statTopContributors = "";
      if( @topViews ) {
      printMsg( " - top view: $topViews[0]" );
      for( $x = 0; $x < @topViews; $x++ )
      {
      $statTopViews .= "$topViews[$x] <br>";
      }
      }
      if( @topContrib ) {
      printMsg( " - top contributor: $topContrib[0]" );
      for( $x = 0; $x < @topContrib; $x++ )
      {
      $statTopContributors .= "$topContrib[$x] <br>";
      }
      }

      we can drop it all to:
      my @topViews = _sortHash ( $wiki::statsTopViews, %topView );
      my @topContrib = _sortHash ( $wiki::statsTopViews, %topContrib );
      my $statTopViews = join " <br>", @topViews;
      my $statTopContributors = join " <br>", @topContrib;

      printMsg( sprintf " - view: %d, save: %d, upload: %d",
      $actionCount{'view'} || 0,
      $actionCount{'save'} || 0,
      $actionCount{'upload'} || 0
      );
      printMsg( " - top view: $topViews[0]" ) if( @topViews );
      printMsg( " - top contributor: $topContrib[0]" ) if( @topContrib );


      Although the resulting code in processWeb() isn't much shorter this time
      (although the helper function for it is considerably shorter), I think
      this is all a lot more readable, and again will be considerably faster.

      There's obviously further refactoring can happen (and there's a few more
      print statements later on in the complicated templating code that will
      need changed to the new variables), but that's fairly trivial to do now...

      Hope this is helpful,

      Tony

      [1] I'm not sure if you can have actually log lines that don't match
      $webName. If so just put a 'next unless matches' check at the top
      of this loop...

      --
      --------------------------------------------------------------------------
      Tony Bowden | tony@... | http://www.tmtm.com/
      every tool is a weapon - if you hold it right
      --------------------------------------------------------------------------


      ________________________________________________________________________
      ________________________________________________________________________

      Message: 19
      Date: Wed, 1 Aug 2001 00:05:31 +0100
      From: Tony Bowden <tony-xpire@...>
      Subject: Re: FW: TWiki ( was RE: is the wiki open source and if so, wheredo
      I get it?)

      On Tue, Jul 31, 2001 at 11:10:40PM +0100, Tony Bowden wrote:
      > return map " $count{$_}: $_", splice(@returnList, 0, 5);

      Doh!

      To match your current code, remove that colon:
      + return map " $count{$_} $_", splice(@returnList, 0, 5);

      However, I was refactoring this some more, as I saw that the function
      was only actually called twice. In processWeb, you currently do a lot
      of iterating over the logfile, using greps:

      my @list = grep( /^\|[^\|]*\|[^\|]*\| view \| $webName/, @theLogList );
      my $statViews = @list;
      my @topViews = getTopList( 0, $wiki::statsTopViews, @list );

      @list = grep( /^\|[^\|]*\|[^\|]*\| save \| $webName/, @theLogList );
      my $statSaves = @list;

      @list = grep( /^\|[^\|]*\|[^\|]*\| upload \| $webName/, @theLogList );
      my $statUploads = @list;

      @list = grep( /^\|[^\|]*\|[^\|]*\| (save|upload) \| $webName/,
      @theLogList );
      my @topContrib = getTopList( 1, $wiki::statsTopContrib, @list );

      For a long log this will be very slow, as it will have to iterate over it 4
      times, so I've changed it to only step through the log once.

      Those regular expressions, as with the ones in the function from earlier,
      are also quite difficult to read. From what I can see the logfile is
      pipe-delimited, so I've used a 'split' to extract the relevant fields[1]:

      my (%actionCount, %topView, %topContrib);
      foreach (@theLogList) {
      my @parts = split / \| /;
      my ($user, $action, $page) = @parts[1 .. 3];
      ++$actionCount{$action};

      if ($action eq "view") {
      ++$topView{$page};
      } elsif ($action eq "upload" or $action eq "save") {
      ++$topContrib{$user};
      }
      }

      This now has the added advantage that we have pre-populated 'count'
      hashes to pass to our 'getTopList' function, which doesn't need to know
      anymore whether it's getting a username or a pagename, and can become
      much simpler (and renamed to something more generic like _sortHash). Our
      old 42 line subroutine now reads:

      sub _sortHash
      {
      my( $theMaxNum, %count ) = @_;
      my @returnList = sort {$count{$b} <=> $count{$a}} keys %count;
      return map " $count{$_} $_", splice @returnList, 0, 5;
      }

      And then where you print out the resulting stats:

      printMsg( " - view: $statViews, save: $statSaves, upload:
      $statUploads" );
      my $statTopViews = "";
      my $statTopContributors = "";
      if( @topViews ) {
      printMsg( " - top view: $topViews[0]" );
      for( $x = 0; $x < @topViews; $x++ )
      {
      $statTopViews .= "$topViews[$x] <br>";
      }
      }
      if( @topContrib ) {
      printMsg( " - top contributor: $topContrib[0]" );
      for( $x = 0; $x < @topContrib; $x++ )
      {
      $statTopContributors .= "$topContrib[$x] <br>";
      }
      }

      we can drop it all to:
      my @topViews = _sortHash ( $wiki::statsTopViews, %topView );
      my @topContrib = _sortHash ( $wiki::statsTopViews, %topContrib );
      my $statTopViews = join " <br>", @topViews;
      my $statTopContributors = join " <br>", @topContrib;

      printMsg( sprintf " - view: %d, save: %d, upload: %d",
      $actionCount{'view'} || 0,
      $actionCount{'save'} || 0,
      $actionCount{'upload'} || 0
      );
      printMsg( " - top view: $topViews[0]" ) if( @topViews );
      printMsg( " - top contributor: $topContrib[0]" ) if( @topContrib );


      Although the resulting code in processWeb() isn't much shorter this time
      (although the helper function for it is considerably shorter), I think
      this is all a lot more readable, and again will be considerably faster.

      There's obviously further refactoring can happen (and there's a few more
      print statements later on in the complicated templating code that will
      need changed to the new variables), but that's fairly trivial to do now...

      Hope this is helpful,

      Tony

      [1] I'm not sure if you can have actually log lines that don't match
      $webName. If so just put a 'next unless matches' check at the top
      of this loop...

      --
      --------------------------------------------------------------------------
      Tony Bowden | tony@... | http://www.tmtm.com/
      every tool is a weapon - if you hold it right
      --------------------------------------------------------------------------


      ________________________________________________________________________
      ________________________________________________________________________

      Message: 20
      Date: Wed, 01 Aug 2001 00:51:09 -0000
      From: shankar.ganesh@...
      Subject: XPU Papers

      While reading the XPU Papers, I thought of putting forth a couple of
      questions, based on the Paper "Lessons Learned from an Outsourced XP
      Project" (http://www.xpuniverse.com/XPU03.pdf). Please let us know
      your comments...

      #1. The paper talks about "Pairing with Client Developers". But in
      many situations, we might even need to handover the system to a
      competitor's team and not just client IT team. Or it could even be
      like one company provides IT support to the entire client
      organization while a competitor gets to develop a new system (say due
      to the difference in contract rates) and then handover to the support
      team. In this situation, is Pair Programming suggested with
      developers from the 2 competitors? Has it been tried any where?

      #2. Acceptance Testing -- The paper suggests having "the same person
      to help create and to OK acceptance tests" to avoid unnecessary
      delays. Is this required? What does the experience of this group
      suggest?

      T(S)hanks.



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 21
      Date: Wed, 01 Aug 2001 01:29:46 -0000
      From: "Matthew Davis" <azami@...>
      Subject: Quality

      I had an interesting discussion with our customer regarding
      expectations/perceptions of quality, especially in the "experience" of
      going through the project.

      As we've proceeded, we've on several occasions (more than I'd have
      expected for such a small project) had the customer say something
      along the lines of "has the documentation been written?" We answer,
      of course, "No, but if you'd like some, you can write a story for
      that."

      Yesterday, our customer indicated a strong negative reaction to this
      situation. He likened it to a service industry situation, where you
      have to explicitly ask for (and pay for) every little thing. "Oh, you
      wanted a bun with your hamburger? That'll be an extra 20 cents." But
      if you've ever had a very high quality service experience, you know it
      makes a huge difference if everything you need is taken care of
      before, or just as, you need it. You know the joy and luxury of not
      having to ask for anything - your server accurately predicts your
      every need, and handles everything without being asked. At the same
      time, nothing is superfluous.

      Of course, it's also very bad if your server is bringing you (and
      charging you for) lots of things you don't want, which is precisely
      the thing XP prevents.

      He admitted that there seems to be a discrepancy between what he
      considers implicit in his stories and the things we consider implicit
      in the stories, and that making these expectations explicit is a good
      thing. This may also mark a slight difference between commercial
      product development and the consulting/internal projects in which the
      XP practices were originally practiced - in those projects, it makes a
      lot of sense to balance the costs and importance of documentation
      against the rest of the project, but in a commercial product the
      documentation might be considered so essential as to be an absolute
      requirement for every story.

      Anyway, following the restaurant analogy, it seems something like:

      Typical Development:
      "Here's your cocktail, sir. That will be $9"
      "But I don't drink!"
      "I'm sorry sir, most of our customers do. I'm afraid you'll still
      have to pay for it, as the bartender already spent the time on it."
      "What?!"
      "Oh, and here comes your lobster. We were fresh out, so we had to
      hunt one down, which is why it took so long. But I can assure you
      it's good and fresh, the best we could get. Sorry it's burned."

      XP:
      "Waiter, can I get some more water, please?"
      "Certainly, if you'd like. That will cost five cents. Would you like
      it before or after your steak?"
      "Definitely before. I'm thirsty now."
      "No problem" [short time passes] "Here you go!"
      "Hey, this water is warm!"
      "Oh, I'm sorry, did you want ice in it? That's three cents more."
      "Well, I guess I'd better... I don't want to drink this warm."

      Not-yet-invented-methodology:
      "Hmmm, I think I'd like a..."
      "Here's your martini, sir."
      "Oh! And it even has a twist instead of an olive, just as I like it!"
      "Yes, sir. And, dinner is served!"
      "How did you know I wanted filet mignon?"
      "We are professionals, sir. And the telepathy helmet helps, too."

      Any thoughts?

      -Matthew (who's gotten hungry writing this)
      azami@...




      ________________________________________________________________________
      ________________________________________________________________________

      Message: 22
      Date: Wed, 1 Aug 2001 11:48:02 +1000
      From: Robert Watkins <robertw@...>
      Subject: RE: Quality

      Matthew Davis wrote:
      > As we've proceeded, we've on several occasions (more than I'd have
      > expected for such a small project) had the customer say something
      > along the lines of "has the documentation been written?" We answer,
      > of course, "No, but if you'd like some, you can write a story for
      > that."

      The problem here is that they still haven't gotten used to the idea that in
      XP, you get what you ask for. :)

      If your customer always wants up-to-date documentation, then they should
      have that as a non-functional requirement or meta-story. It can then be
      taken into account in the estimation process. Otherwise, they should just
      assume it hasn't been done if they haven't asked for it.

      It's true that when someone reads your mind and provides you exactly what
      you really want, you go away feeling good. However, _my_ telepathy at least
      is somewhat shaky, and only works reliably during card games (when I manage
      to broadcast to everyone when I'm bluffing).

      As your customer gets used to the idea that they really only get what they
      ask for, they'll learn to ask for more. It's just part of the learning
      curve.

      OTH, after they've asked a few times "Is the documentation for this story
      ready now", _you_ should start learning to ask if they want documentation.
      I've never been to a restaurant where they now what I want the first time.
      However, when I order my second drink of the night, most will ask me if I
      want the same as before.

      Finally, remember the advice of the Pragmatic Duo: if you can put the extra
      little bit of polish onto something easily (and cheaply), go ahead and do
      it. Exceeding your customer's expectations (without blowing the budget) is
      never a bad idea.

      Robert.

      --
      "Software is too expensive to build cheaply"
      Robert Watkins Software Engineer QSI Payments Inc.
      robertdw@... robert.watkins@...



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 23
      Date: Tue, 31 Jul 2001 22:44:37 -0300
      From: Paulo Motta <prmottajr@...>
      Subject: Re: Quality

      Hello,
      I'm new to the list and to xp too, actually I didn't started
      xp yet. I'm a little afraid of it. I read this message about quality
      and I'm still not sure.
      My point is, if you have a large project and do not have the
      documentation of the modules, classes and everything else and
      part of your development team is reallocated to another project
      because those guys are the only ones who could do the other
      job. Now you receive a new team that do not know your project
      because they simply weren't there when the project started.
      How do you do ? Simply let them read the code and
      interact with the system to find out what's going on will take
      too much time !
      Well, I'm not against xp neither am I a radical who don't
      want to open my mind. I just want some help to understand
      what's going on.

      =)

      Paulo Motta



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 24
      Date: Wed, 1 Aug 2001 12:06:01 +1000
      From: Robert Watkins <robertw@...>
      Subject: RE: Quality

      Paulo Motta wrote:
      > My point is, if you have a large project and do not have the
      > documentation of the modules, classes and everything else and
      > part of your development team is reallocated to another project
      > because those guys are the only ones who could do the other
      > job. Now you receive a new team that do not know your project
      > because they simply weren't there when the project started.
      > How do you do ? Simply let them read the code and
      > interact with the system to find out what's going on will take
      > too much time !

      The problem here is that XP projects aren't meant to simply be terminated,
      or otherwise have everyone picked up and moved off it.

      If such an event is on the horizon, _then_ you spend the time doing the
      documentation work. Once the new team is up to speed, the documentation
      should be marked out-of-date, and only updated the next time you find
      there's a need for it.

      If you try to keep documentation up to date at all times, against the
      unlikely probability that you will have all the developers taken away
      without warning, then you are investing a lot of effort. The documentation
      will change and change and change, and very few of the intermediate versions
      will be used. The usual situation that occurs is that the documentation is
      _not_ maintained, and thus can become harmful (by giving false impressions
      of the system).

      XP projects deliberately take the risk of not having immediately available
      up-to-date documentation available to avoid this largely useless overhead
      cost. Using the above example, if you need to transfer a large portion of
      your developers away, you should bring the new programmers in first so that
      they can be shown around the system by working on it and pairing with the
      old developers. After a week or two of that, most of the old developers can
      be taken away, leaving just a couple to continue the education effort.

      Finally, well-factored code really is easier to understand. Given a high
      level overview (the metaphor, the program's entry points, and maybe a few
      quickly sketched UML diagrams), it's usually not too hard to get a
      big-picture view of a well-factored system. Besides, they've got a huge
      suite of unit and acceptance tests to let them know when they've broken
      things, haven't they?

      Robert.

      --
      "Software is too expensive to build cheaply"
      Robert Watkins Software Engineer QSI Payments Inc.
      robertdw@... robert.watkins@...



      ________________________________________________________________________
      ________________________________________________________________________

      Message: 25
      Date: Tue, 31 Jul 2001 20:07:21 -0700
      From: "C. Keith Ray" <ckeithray@...>
      Subject: Re: Mac or Metrowerks test units

      [...]
      > All I found were the following...
      > which can be found at www.xprogramming.com/software.htm
      >
      > C++ Ver 1.5 Michael Feathers actual filename CppUnit15.zip

      Mine is modified from this one.

      > Which is your version, where is it?
      Here: <http://homepage.mac.com/keithray/MacCppTestUnit.sit>

      > What is the ACS framework?
      It is a set of classes that can be used with or without MacApp. Apple says
      that MacApp is the oldest OO class framework other than Smalltalk's -- it
      was originally implemented in Object Pascal, it is now in C++ and still
      evolving for Carbon/MacOS X compatibility.
      <http://developer.apple.com/tools/macapp/>

      If you are doing Mac software development, sign up at
      <http://connect.apple.com>. Pay some money to get the developer CD
      subscription. The most recent "Tools" CD has the ACS framework on it.

      ----

      C. Keith Ray
      <http://homepage.mac.com/keithray/resume.html>



      ________________________________________________________________________
      ________________________________________________________________________



      Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
    Your message has been successfully submitted and would be delivered to recipients shortly.