#linuxcnc-devel Logs

Aug 25 2020

#linuxcnc-devel Calendar

04:35 AM tstaroveski: Hello everyone. I have a question regarding mesa cards and xy2-100 protocol (xy2mod). I was hoping someone could help me with this as there is very little official documentation on this topic.
08:18 AM burklefoo: tstaroveski: I tried to answer you questions on the forum
08:23 AM tstaroveski: Thanks! I just saw your reply a minute ago.
08:24 AM tstaroveski: Just haven't had a chance to say thanks on the forum yet.
09:03 AM andypugh: buildbot help
09:05 AM andypugh: linuxcnc-build: status all
09:05 AM linuxcnc-build: 0000.checkin: building(triggered rip-and-test) [ETA 1h10m29s]
09:05 AM linuxcnc-build: 1200.rip-lucid-i386: idle, last build 20m13s ago: build successful platform-is-supported
09:05 AM linuxcnc-build: 1201.rip-lucid-rtai-i386: idle, last build 19m58s ago: build successful platform-is-supported
09:05 AM linuxcnc-build: 1202.rip-lucid-amd64: idle, last build 19m45s ago: build successful platform-is-supported
09:05 AM linuxcnc-build: 1300.rip-precise-i386: building(testing) [ETA 1m10s]
09:05 AM -!- #linuxcnc-devel mode set to +v by ChanServ
10:42 AM linuxcnc-build: build #330 of 4042.deb-buster-rtpreempt-rpi4 is complete: Failure [4failed shell_3 shell_4] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/4042.deb-buster-rtpreempt-rpi4/builds/330 blamelist: John Morris <john@zultron.com>, Norbert Schechner <nieson@web.de>, Ernesto Lo Valvo <ernesto.lovalvo@unipa.it>, andypugh
10:42 AM linuxcnc-build: <andypugh@buster.bodgesoc>, andypugh <andy@bodgesoc.org>, andy pugh <andy@bodgesoc.org>, jasen <jasenk2@gmail.com>, Chris Morley <chrisinnanaimo@hotmail.com>, Robert W. Ellenberg <rwe24g@gmail.com>, Jeff Epler <jepler@gmail.com>, Phillip Carter <phillcarter54@gmail.com>, Jeff Epler <jepler@unpythonic.net>, Hannah Lau
10:42 AM linuxcnc-build: <32850425+ttl116@users.noreply.github.com>, Markus <seebaer1976@web.de>, Phillip A Carter <phillc54@users.noreply.github.com>, j.m. garcia <jmgardeto@gmail.com>, Sebastian Kuzminsky <seb@highlab.com>, Jon Elson <elson@pico-systems.com>, Colten Edwards <cd.edwards@sasktel.net>, Dewey Garrett <dgarrett@panix.com>
11:13 AM linuxcnc-build: build #1683 of 4031.deb-stretch-rtpreempt-amd64 is complete: Failure [4failed shell_3 shell_4] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/4031.deb-stretch-rtpreempt-amd64/builds/1683 blamelist: John Morris <john@zultron.com>, Norbert Schechner <nieson@web.de>, Ernesto Lo Valvo <ernesto.lovalvo@unipa.it>, andypugh
11:13 AM linuxcnc-build: <andypugh@buster.bodgesoc>, andypugh <andy@bodgesoc.org>, andy pugh <andy@bodgesoc.org>, jasen <jasenk2@gmail.com>, Chris Morley <chrisinnanaimo@hotmail.com>, Robert W. Ellenberg <rwe24g@gmail.com>, Jeff Epler <jepler@gmail.com>, Phillip Carter <phillcarter54@gmail.com>, Jeff Epler <jepler@unpythonic.net>, Hannah Lau
11:13 AM linuxcnc-build: <32850425+ttl116@users.noreply.github.com>, Markus <seebaer1976@web.de>, Phillip A Carter <phillc54@users.noreply.github.com>, j.m. garcia <jmgardeto@gmail.com>, Sebastian Kuzminsky <seb@highlab.com>, Jon Elson <elson@pico-systems.com>, Colten Edwards <cd.edwards@sasktel.net>, Dewey Garrett <dgarrett@panix.com>
11:13 AM linuxcnc-build: build #1681 of 4030.deb-stretch-rtpreempt-i386 is complete: Failure [4failed shell_3 shell_4] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/4030.deb-stretch-rtpreempt-i386/builds/1681 blamelist: John Morris <john@zultron.com>, Norbert Schechner <nieson@web.de>, Ernesto Lo Valvo <ernesto.lovalvo@unipa.it>, andypugh
11:13 AM linuxcnc-build: <andypugh@buster.bodgesoc>, andypugh <andy@bodgesoc.org>, andy pugh <andy@bodgesoc.org>, jasen <jasenk2@gmail.com>, Chris Morley <chrisinnanaimo@hotmail.com>, Robert W. Ellenberg <rwe24g@gmail.com>, Jeff Epler <jepler@gmail.com>, Phillip Carter <phillcarter54@gmail.com>, Jeff Epler <jepler@unpythonic.net>, Hannah Lau
11:13 AM linuxcnc-build: <32850425+ttl116@users.noreply.github.com>, Markus <seebaer1976@web.de>, Phillip A Carter <phillc54@users.noreply.github.com>, j.m. garcia <jmgardeto@gmail.com>, Sebastian Kuzminsky <seb@highlab.com>, Jon Elson <elson@pico-systems.com>, Colten Edwards <cd.edwards@sasktel.net>, Dewey Garrett <dgarrett@panix.com>
11:17 AM linuxcnc-build: build #358 of 4040.deb-buster-rtpreempt-i386 is complete: Failure [4failed shell_3 shell_4] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/4040.deb-buster-rtpreempt-i386/builds/358 blamelist: John Morris <john@zultron.com>, Norbert Schechner <nieson@web.de>, Ernesto Lo Valvo <ernesto.lovalvo@unipa.it>, andypugh
11:17 AM linuxcnc-build: <andypugh@buster.bodgesoc>, andypugh <andy@bodgesoc.org>, andy pugh <andy@bodgesoc.org>, jasen <jasenk2@gmail.com>, Chris Morley <chrisinnanaimo@hotmail.com>, Robert W. Ellenberg <rwe24g@gmail.com>, Jeff Epler <jepler@gmail.com>, Phillip Carter <phillcarter54@gmail.com>, Jeff Epler <jepler@unpythonic.net>, Hannah Lau
11:17 AM linuxcnc-build: <32850425+ttl116@users.noreply.github.com>, Markus <seebaer1976@web.de>, Phillip A Carter <phillc54@users.noreply.github.com>, j.m. garcia <jmgardeto@gmail.com>, Sebastian Kuzminsky <seb@highlab.com>, Jon Elson <elson@pico-systems.com>, Colten Edwards <cd.edwards@sasktel.net>, Dewey Garrett <dgarrett@panix.com>
11:17 AM linuxcnc-build: build #438 of 4041.deb-buster-rtpreempt-amd64 is complete: Failure [4failed shell_3 shell_4] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/4041.deb-buster-rtpreempt-amd64/builds/438 blamelist: John Morris <john@zultron.com>, Norbert Schechner <nieson@web.de>, Ernesto Lo Valvo <ernesto.lovalvo@unipa.it>, andypugh
11:17 AM linuxcnc-build: <andypugh@buster.bodgesoc>, andypugh <andy@bodgesoc.org>, andy pugh <andy@bodgesoc.org>, jasen <jasenk2@gmail.com>, Chris Morley <chrisinnanaimo@hotmail.com>, Robert W. Ellenberg <rwe24g@gmail.com>, Jeff Epler <jepler@gmail.com>, Phillip Carter <phillcarter54@gmail.com>, Jeff Epler <jepler@unpythonic.net>, Hannah Lau
11:17 AM linuxcnc-build: <32850425+ttl116@users.noreply.github.com>, Markus <seebaer1976@web.de>, Phillip A Carter <phillc54@users.noreply.github.com>, j.m. garcia <jmgardeto@gmail.com>, Sebastian Kuzminsky <seb@highlab.com>, Jon Elson <elson@pico-systems.com>, Colten Edwards <cd.edwards@sasktel.net>, Dewey Garrett <dgarrett@panix.com>
11:45 AM andypugh: Well, this is confusing.
11:45 AM andypugh: http://buildbot.linuxcnc.org/buildbot/builders/1404.rip-wheezy-rtpreempt-amd64/builds/5517 all clean
11:46 AM andypugh: http://buildbot.linuxcnc.org/buildbot/builders/1404.rip-wheezy-rtpreempt-amd64/builds/5518 (should be the same, or better, but has warnings)
11:53 AM andypugh: linuxcnc-build: status all
11:53 AM linuxcnc-build: 0000.checkin: idle, last build 2h01m37s ago: build successful
11:53 AM linuxcnc-build: 1200.rip-lucid-i386: idle, last build 3h08m59s ago: build successful platform-is-supported
11:53 AM linuxcnc-build: 1201.rip-lucid-rtai-i386: idle, last build 3h08m45s ago: build successful platform-is-supported
11:53 AM linuxcnc-build: 1202.rip-lucid-amd64: idle, last build 3h08m31s ago: build successful platform-is-supported
11:53 AM linuxcnc-build: 1300.rip-precise-i386: idle, last build 2h43m28s ago: warnings compile
11:54 AM -!- #linuxcnc-devel mode set to +v by ChanServ
11:54 AM andypugh: linuxcnc-build: status
11:54 AM linuxcnc-build: 0000.checkin: idle, last build 2h02m10s ago: build successful
11:54 AM linuxcnc-build: 1200.rip-lucid-i386: idle, last build 3h09m32s ago: build successful platform-is-supported
11:54 AM linuxcnc-build: 1201.rip-lucid-rtai-i386: idle, last build 3h09m18s ago: build successful platform-is-supported
11:54 AM linuxcnc-build: 1202.rip-lucid-amd64: idle, last build 3h09m04s ago: build successful platform-is-supported
11:54 AM linuxcnc-build: 1300.rip-precise-i386: idle, last build 2h44m01s ago: warnings compile
11:54 AM andypugh: Oops
11:54 AM -!- #linuxcnc-devel mode set to +v by ChanServ
11:56 AM andypugh: linuxcnc-build: force build 4041 Testing
11:56 AM linuxcnc-build: no such builder '4041'
11:56 AM andypugh: linuxcnc-build: force build 4041.deb-buster-rtpreempt-amd64 Testing
11:56 AM linuxcnc-build: build #439 forced
11:56 AM linuxcnc-build: I'll give a shout when the build finishes
11:56 AM linuxcnc-build: Hey! build 4041.deb-buster-rtpreempt-amd64 #439 is complete: Exception [6exception shell_1]
11:56 AM linuxcnc-build: Build details are at http://buildbot.linuxcnc.org/buildbot/builders/4041.deb-buster-rtpreempt-amd64/builds/439
11:57 AM andypugh: linuxcnc-build: force build 1640.rip-buster-rtpreempt-amd64 Testing
11:57 AM linuxcnc-build: build forced [ETA 42m18s]
11:57 AM linuxcnc-build: I'll give a shout when the build finishes
12:26 PM linuxcnc-build: Hey! build 1640.rip-buster-rtpreempt-amd64 #777 is complete: Warnings [8warnings compile]
12:26 PM linuxcnc-build: Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1640.rip-buster-rtpreempt-amd64/builds/777
01:48 PM satiowadahc_work: Hunting for an error.. I think this is in Qscintilla but I can't find any references anywhere.. Suggestions?
01:48 PM satiowadahc_work: Assertion [lengthStyle == 0 || (lengthStyle > 0 && lengthStyle + position <= style.Length())] failed at ../src/CellBuffer.cpp 453
01:50 PM satiowadahc_work: It happens on loading a file, which I think is around the styletext function in gcode_editory
02:04 PM jepler: https://github.com/josephwilk/qscintilla/blob/master/src/CellBuffer.cpp#L452 It appears to be checking the precondition of calling SetStyleFor; that the style is set for 0 positions or else it is set for a positive number of positions that do not exceed the length of the cellbuffer.
02:04 PM jepler: So if you had a cellbuffer with 32 positions and you wanted to set a style of length 16 at position 24, you would encounter the assertion.
02:05 PM jepler: since linuxcnc appears not to call SetSetyleFor directly (a search in our source tree for it showed no hits) debugging will be necessary to determine exactly where it's occurring
02:06 PM jepler: similar error from 2014 https://riverbankcomputing.com/pipermail/qscintilla/2014-August/000984.html though I don't find any uses of SendScintilla with SCI_SETSTYLING in linuxcnc either
02:07 PM satiowadahc_work: sendScintilla I've found lots of
02:07 PM satiowadahc_work: in qtvcp
02:10 PM jepler: yes I guess def styleText in gcode_editor.py may be using this functionality via the QsciLexerCustom.setStyling method?
02:13 PM jepler: so you could narrow it down by making styleText do nothing instead of doing something
02:14 PM jepler: # scintilla works with encoded bytes, not decoded characters.
02:14 PM jepler: this seems dubious to me. the affected files of yours, are they purely ASCII or do they contain characters above 127?
02:15 PM satiowadahc_work: Thats smarter:P I was trying to debug with try excepts
02:15 PM satiowadahc_work: Yes it is in fact that function. I'm wondering if its an off by 1 error
02:17 PM jepler: an assertion error from C(++) code won't go through python exception handling
02:21 PM satiowadahc_work: ... and coworker unplugged my internet
02:22 PM satiowadahc_work: Off by 2 error rather it was
02:29 PM satiowadahc_work: For pull requests is there a specific branch I should request ?
02:48 PM jepler: If it's a fix for a bug that affects 2.8 then basing off that is best
02:49 PM jepler: We put Bugfixes in multiple branches by "merging up"
02:49 PM satiowadahc_work: I converted most of qtvcp to python3.. not sure if its a singular bug or not...
02:49 PM jepler: Happy you seen to have found the cause
02:50 PM satiowadahc_work: Thanks for your help!
02:50 PM jepler: Welcome
03:42 PM andypugh: That’s too “big” for 2.8 now.
03:42 PM andypugh: All the Py3 stuff is in Master
03:43 PM andypugh: In other news, I am having a baffling time as all the errors I manged to expunge seem to be creeping back despite no associated code changes that I can see.
03:45 PM andypugh: There was a relatively clean 2.8 build, then I cloned that into lintian-fix, and from there it’s been downhill all the way.
04:32 PM JT-Shop: what is lintian-fix?
04:43 PM andypugh: I am trying to reduce the quantity of lintian errors.
04:44 PM andypugh: (lintian checks for possible bugs in .deb archives)
04:44 PM andypugh: It runs as part of the build process and makes things an unsightly orange colour
04:52 PM JT-Shop: ah ok, I seem to remember something about that now
08:30 PM linuxcnc-build: build #7153 of 1300.rip-precise-i386 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1300.rip-precise-i386/builds/7153 blamelist: andypugh <andy@bodgesoc.org>
08:30 PM linuxcnc-build: build #7156 of 1306.rip-precise-amd64 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1306.rip-precise-amd64/builds/7156 blamelist: andypugh <andy@bodgesoc.org>
08:31 PM linuxcnc-build: build #6375 of 1301.rip-precise-rtai-i386 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1301.rip-precise-rtai-i386/builds/6375 blamelist: andypugh <andy@bodgesoc.org>
08:37 PM andypugh: linuxcnc-build: list builders
08:37 PM linuxcnc-build: Configured builders: 0000.checkin 1200.rip-lucid-i386 1201.rip-lucid-rtai-i386 1202.rip-lucid-amd64 1300.rip-precise-i386 1301.rip-precise-rtai-i386 1306.rip-precise-amd64 1400.rip-wheezy-i386 1401.rip-wheezy-rtai-i386 1402.rip-wheezy-rtpreempt-i386 1403.rip-wheezy-amd64 1404.rip-wheezy-rtpreempt-amd64 1500.rip-jessie-i386 1510.rip-jessie-rtpreempt-i386
08:37 PM linuxcnc-build: 1520.rip-jessie-amd64 1530.rip-jessie-rtpreempt-amd64 1610.rip-stretch-rtpreempt-i386 1630.rip-stretch-rtpreempt-amd64 1635.rip-buster-rtpreempt-i386 1640.rip-buster-rtpreempt-amd64 1650.rip-buster-rtpreempt-rpi4 1660.rip-buster-python3 1902.clang-wheezy-rtai-i386 1903.clang-wheezy-amd64 2000.docs 3001.dsc-lucid 3002.dsc-precise 3003.dsc-wheezy 3004.dsc-
08:37 PM linuxcnc-build: jessie 3101.dsc-lucid-rtai 3102.dsc-precise-rtai 3103.dsc-wheezy-rtai 3301.dsc-wheezy-rtpreempt 3302.dsc-jessie-rtpreempt 3303.dsc-stretch-rtpreempt 3304.dsc-buster-rtpreempt 4003.deb-lucid-i386 4004.deb-lucid-amd64 4006.deb-lucid-rtai-i386 4007.deb-precise-i386 4008.deb-precise-amd64 4009.deb-precise-rtai-i386 4014.deb-wheezy-rtpreempt-i386 4015.deb-
08:37 PM linuxcnc-build: wheezy-rtpreempt-amd64 4016.deb-wheezy-i386 4017.deb-wheezy-amd64 4018.deb-wheezy-rtai-i386 4019.deb-jessie-rtpreempt-i386 4020.deb-jessie-rtpreempt-amd64 4021.deb-jessie-i386 4022.deb-jessie-amd64 4030.deb-stretch-rtpreempt-i386 4031.deb-stretch-rtpreempt-amd64 4040.deb-buster-rtpreempt-i386 4041.deb-buster-rtpreempt-amd64 4042.deb-buster-rtpreempt-rpi4
08:39 PM linuxcnc-build: build #538 of 1650.rip-buster-rtpreempt-rpi4 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1650.rip-buster-rtpreempt-rpi4/builds/538 blamelist: andypugh <andy@bodgesoc.org>
08:42 PM linuxcnc-build: build #380 of 1660.rip-buster-python3 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1660.rip-buster-python3/builds/380 blamelist: andypugh <andy@bodgesoc.org>
08:42 PM linuxcnc-build: build #778 of 1640.rip-buster-rtpreempt-amd64 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1640.rip-buster-rtpreempt-amd64/builds/778 blamelist: andypugh <andy@bodgesoc.org>
08:44 PM linuxcnc-build: build #5314 of 1400.rip-wheezy-i386 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1400.rip-wheezy-i386/builds/5314 blamelist: andypugh <andy@bodgesoc.org>
08:44 PM linuxcnc-build: build #5315 of 1403.rip-wheezy-amd64 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1403.rip-wheezy-amd64/builds/5315 blamelist: andypugh <andy@bodgesoc.org>
08:46 PM linuxcnc-build: build #3780 of 1510.rip-jessie-rtpreempt-i386 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1510.rip-jessie-rtpreempt-i386/builds/3780 blamelist: andypugh <andy@bodgesoc.org>
08:46 PM linuxcnc-build: build #3780 of 1500.rip-jessie-i386 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1500.rip-jessie-i386/builds/3780 blamelist: andypugh <andy@bodgesoc.org>
08:46 PM linuxcnc-build: build #584 of 1635.rip-buster-rtpreempt-i386 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1635.rip-buster-rtpreempt-i386/builds/584 blamelist: andypugh <andy@bodgesoc.org>
08:46 PM linuxcnc-build: build #3783 of 1520.rip-jessie-amd64 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1520.rip-jessie-amd64/builds/3783 blamelist: andypugh <andy@bodgesoc.org>
08:47 PM linuxcnc-build: build #3783 of 1530.rip-jessie-rtpreempt-amd64 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1530.rip-jessie-rtpreempt-amd64/builds/3783 blamelist: andypugh <andy@bodgesoc.org>
08:47 PM linuxcnc-build: build #2170 of 1630.rip-stretch-rtpreempt-amd64 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1630.rip-stretch-rtpreempt-amd64/builds/2170 blamelist: andypugh <andy@bodgesoc.org>
08:47 PM linuxcnc-build: build #2170 of 1610.rip-stretch-rtpreempt-i386 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1610.rip-stretch-rtpreempt-i386/builds/2170 blamelist: andypugh <andy@bodgesoc.org>
08:53 PM linuxcnc-build: build #4836 of 1402.rip-wheezy-rtpreempt-i386 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1402.rip-wheezy-rtpreempt-i386/builds/4836 blamelist: andypugh <andy@bodgesoc.org>
08:54 PM linuxcnc-build: build #4988 of 1401.rip-wheezy-rtai-i386 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1401.rip-wheezy-rtai-i386/builds/4988 blamelist: andypugh <andy@bodgesoc.org>
08:55 PM linuxcnc-build: build #5519 of 1404.rip-wheezy-rtpreempt-amd64 is complete: Failure [4failed compile] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/1404.rip-wheezy-rtpreempt-amd64/builds/5519 blamelist: andypugh <andy@bodgesoc.org>
08:55 PM linuxcnc-build: build #7178 of 0000.checkin is complete: Failure [4failed] Build details are at http://buildbot.linuxcnc.org/buildbot/builders/0000.checkin/builds/7178 blamelist: andypugh <andy@bodgesoc.org>
09:07 PM andypugh: Does this make any sense to anyone?
09:07 PM andypugh: http://buildbot.linuxcnc.org/clang/scratch-rt/v2.8.0~pre3~2.8-lintian-fix~eded315/report-ipICqL.html#EndPath
09:08 PM andypugh: Why would you repeatedly run strtok on a null string?
09:11 PM Tom_L: The first call to strtok must pass the C string to tokenize, and subsequent calls must specify NULL as the first argument, which tells the function to continue tokenizing the string you passed in first. ... When there are no tokens left to retrieve, strtok returns NULL, meaning that the string has been fully tokenized.
09:11 PM Tom_L: gogle says
09:11 PM andypugh: Right, that makes more sense of it
09:13 PM andypugh: And that suggests that clang is wrong, and there is no bug
09:13 PM Tom_L: i couldn't say yay or nay
09:14 PM jepler: I ignore emclcd and emcrsh.
09:14 PM jepler: I think it's skipping over entire words though
09:15 PM jepler: I mean, to skip over words is the intent of the code. Not sure though
09:21 PM andypugh: Yes, that makes sense.
09:22 PM andypugh: And it it true that many of the values passes to pch are not used. But that’s not really a bug
09:23 PM Tom_L: can you add exceptions to clang?
09:23 PM andypugh: http://buildbot.linuxcnc.org/clang/scratch-rt/v2.8.0~pre3~2.8-lintian-fix~eded315/
09:23 PM Tom_L: i know nothing about it...
09:25 PM andypugh: A bit of experimentation shows that
09:25 PM andypugh: strtok(NULL, delim) with no left-side works to throw away words
09:26 PM andypugh: (A real programmer(tm) would know that without experiment