#emc-devel | Logs for 2009-07-02

[00:13:36] <jepler> mozmck: git draws a distinction between "local" and "remote" branches. The "git branch --track ..." created a local branch from a remote one, and then "git checkout" switched to it.
[00:13:51] <jepler> you already had the information for all the remote branches, you just had to make it useful by creating a local branch
[00:14:01] <jepler> now, git branch will show you two (local) branches
[00:14:06] <jepler> git branch -r will show you remote branches
[00:14:09] <mozmck> yes it does
[00:14:34] <mozmck> so I had the code for the branch but it just didn't show it because it was not tracking?
[00:14:48] <jepler> basically, yeah
[00:15:08] <mozmck> it didn't seem to have time to download anything when I told it to track.
[00:15:12] <mozmck> interesting.
[00:15:15] <jepler> nope, it didn't use the network at all
[00:15:47] <mozmck> I see. I figured it would show all the branches in my repository, tracking or not.
[00:17:20] <jepler> I think the idea is to not clutter up "git branch" with stuff you haven't said you cared about
[00:17:46] <jepler> use git branch -a or -r
[00:17:58] <jepler> to see all or remote branches
[00:21:36] <mozmck> yeah, I looked at that. makes sense.
[00:22:16] <mozmck> I'm looking at bzr right now because I need to use it on windows and linux
[00:22:46] <mozmck> to keep track of projects I'm working on between home and work and different computers.
[00:23:37] <mozmck> looks like it can be used the same way as git, but with different terminology
[00:24:44] <cradek> is this no good? http://code.google.com/p/msysgit/
[00:29:43] <mozmck> downloading it now - I'll find out.
[00:30:15] <cradek> cool, I'd like to know, even though I don't have a use for it
[00:30:15] <mozmck> I started to use bzr a while back, and I don't think that was available then.
[00:30:27] <jepler> I don't ever develop code on windows, so I haven't had cause to try it
[00:30:33] <cradek> they're both awfully new - progress (or change) is still fast
[00:30:39] <mozmck> haven't kept up with it though so I forgot what I knew.
[00:31:20] <mozmck> only windows stuff I do is Mach3 plugins
[00:31:30] <jepler> let's not speak of that
[00:31:38] <mozmck> :) ok
[00:32:18] <mozmck> not my choice for sure...
[00:33:14] <mozmck> I have to use windows to debug with my avr JTAGICE MK2 also - but I don't do that much.
[00:35:07] <jepler> oh my, they changed sourceforge again
[00:35:49] <cradek> oh is it wednesday already?
[00:36:20] <jepler> mozmck: It looks like the latest version of avarice has (some?) jtagice mk2 support -- http://sourceforge.net/projects/avarice/
[00:37:42] <mozmck> hmm, I may have to update. I mostly toggle extra pins and read them with the scope though.
[00:38:10] <jepler> the avarice package on hardy mentions mkii support as well
[03:17:07] <CIA-1> EMC: 03cradek 07joints_axes3 * r10e45d309c9e 10/debian/configure: is this what seb meant?
[03:17:08] <CIA-1> EMC: 03cradek 07joints_axes3 * r824c8550eb4c 10/docs/src/ (Master_Integrator.lyx drivers/m5i20.lyx): Revert "Remove 5i20 from the manual"
[03:17:08] <CIA-1> EMC: 03cradek 07joints_axes3 * r166b6ae836e4 10/src/po/de.po: some more updates and fixes
[03:17:09] <CIA-1> EMC: 03cradek 07joints_axes3 * rab153ba58023 10/src/hal/utils/meter.c: Fix halmeter command line options
[03:17:10] <CIA-1> EMC: 03cradek 07joints_axes3 * rf4f0ed834856 10/src/emc/ (4 files in 3 dirs): Move task delayLeft value to correct place
[03:17:13] <CIA-1> EMC: 03cradek 07joints_axes3 * r0c71683e6490 10/src/emc/ (4 files in 3 dirs): Change all boolean fields of TRAJ_STAT to have bool type
[03:17:16] <CIA-1> EMC: 03cradek 07joints_axes3 * rd51be1e96537 10/share/axis/tcl/cb.tcl: a less sledgehammer fix for the "open file" checkbox lockup bug
[03:17:19] <CIA-1> EMC: 03cradek 07joints_axes3 * rd905e4fe4a4d 10/share/axis/tcl/ (cb.tcl rb.tcl): don't enable radiobutton / checkbutton appearance hacks on tk8.5
[03:17:22] <CIA-1> EMC: 03cradek 07joints_axes3 * r313f7046e982 10/src/emc/ (20 files in 3 dirs): split the interpreter class into its own header file
[03:17:25] <CIA-1> EMC: 03cradek 07joints_axes3 * r7fbe202ebbc5 10/src/emc/rs274ngc/rs274ngc_pre.cc: lazy close is now the (unchangeable) default
[03:17:30] <CIA-1> EMC: 03cradek 07joints_axes3 * r4129eb61ab22 10/src/emc/usr_intf/ (Submakefile emcsh.cc): add a way to query the configuration of multiple montiors
[03:17:33] <CIA-1> EMC: 03cradek 07joints_axes3 * re655c7cab8a8 10/tcl/bin/popimage: center the splash screen on the primary monitor
[03:17:36] <CIA-1> EMC: 03cradek 07joints_axes3 * rff7fb59c5d9b 10/tcl/bin/popimage: slightly more bulletproof way of referring to the image
[03:17:41] <CIA-1> EMC: 03cradek 07joints_axes3 * r69ca1cf32c19 10/configs/5axis/5axis.ini: specifying machine geometry makes the preview look right
[03:18:29] <jepler> that confused me for a minute!
[03:18:42] <cradek> I think it's right...
[03:18:56] <cradek> not that I necessarily wanted to generate all those messages...
[03:19:39] <cradek> I don't understand how gitk shows this 3diff
[03:19:44] <cradek> (the conflict I had to fix)
[03:20:25] <jepler> one column of +/-/(space) is from each side of the merge
[03:20:38] <jepler> - int joint;
[03:20:38] <jepler> - int axis, enables;
[03:20:38] <jepler> ++ int joint, enables;
[03:20:40] <cradek> I see there's a red and blue parent
[03:21:11] <jepler> I think this shows that the line removed from one parent was 'int joint' and the line removed from the other parent was 'int axis, enables;'
[03:21:17] <jepler> and in both cases, the added line was 'int joint, enables;'
[03:21:46] <cradek> that I get - but what is the other block?
[03:21:49] <jepler> but the second part I don't understand
[03:21:51] <cradek> (maybe I screwed up?)
[03:23:10] <jepler> no, I think it's right
[03:23:22] <jepler> the colors are confusing to me
[03:23:39] <jepler> in the first parent, nothing changed
[03:23:48] <jepler> in the second parent, the shown changes were made
[03:24:03] <jepler> the use of blue and red there is what confuses me
[03:24:36] <jepler> time to call it a night
[03:25:21] <cradek> me too - goodnight
[05:35:39] <CIA-1> EMC: 03cmorley 07master * r0737558561d8 10/src/hal/user_comps/pyvcp.py: Add usage info to / cleanup of changes to pyvcp
[06:47:00] <CIA-1> EMC: 03micges 07master * r74d5e3f2bdba 10/src/emc/usr_intf/axis/extensions/emcmodule.cc: Remove more unused fields from emc.stat
[07:03:41] <micges> alexs_joni: around?
[07:04:02] <micges> sorry
[07:04:08] <micges> alex_joni: around?
[07:05:23] <micges> alex_joni: Is it in TODO list make analog output from gcode ?
[07:05:30] <micges> line M64/M65?
[07:06:25] <micges> like*
[07:12:56] <alex_joni> hi
[07:13:05] <alex_joni> micges: it could/should be done
[07:14:19] <micges> very simmilar to dio is done (thru motion and/or tp )?
[07:15:37] <alex_joni> yes, it probably will be quite similar
[07:15:59] <alex_joni> cradek: I use msysgit and it works perfectly
[07:16:07] <alex_joni> cradek: even gitk and git-gui work
[07:19:13] <alex_joni> bbl
[07:37:18] <CIA-1> EMC: 03micges 07master * r5cfc9cc48a95 10/src/emc/ (4 files in 2 dirs): Remove old AUX io code
[08:05:35] <CIA-1> EMC: 03micges 07master * r730ea6ebfa33 10/src/emc/ (6 files in 5 dirs): Add analog_input and digital i/o to emctop
[11:18:49] <micges> what gcode can be to set analog output value from gcode program?
[11:29:56] <micges> m64.1 ?
[11:59:50] <jepler> -static PyObject *Stat_ain(pyStatChannel *s) {
[11:59:50] <jepler> - return double_array(s->status.io.aux.ain, EMC_AUX_MAX_AIN);
[11:59:50] <jepler> -}
[11:59:50] <jepler> +//static PyObject *Stat_ain(pyStatChannel *s) {
[11:59:50] <jepler> +// return double_array(s->status.io.aux.ain, EMC_AUX_MAX_AIN);
[11:59:53] <jepler> +//}
[11:59:58] <jepler> micges: ^^^ don't do this. the code is always there in the history. just remove it.
[12:01:09] <micges> my bad
[12:01:56] <skunkworks> I thought it was the m62- m65 but that just seems to be digital. You can make a custom m100-m199 and send it p and q to run hal command..
[12:02:27] <skunkworks> http://linuxcnc.org/docs/2.3/html/gcode_main.html#sec:M100-to-M199:
[12:17:15] <jepler> skunkworks: I think micges is working on implementing it, so needs to choose a code
[12:30:24] <Lerman_> jepler: I have a tkinter question -- are you still here?
[12:31:27] <jepler> Lerman_: for the moment
[12:32:10] <jepler> Lerman_: oh by the way did you see the guy who has a patch to allow N- O- ?
[12:34:19] <Lerman_> I'm trying to send a mdi command from gwiz to axis. So, I added the command send_mdi_command to axis. When I do: t.tk.call("send", "axis", "send_mdi_command", line) where line is something like: "o<boltholes> CALL (xxxx) [0.0] [0.0] ..." I tet an error: tkinter.TclError: invalid command name "0.0"
[12:34:21] <Lerman_> (yes I did see the patch -- but didn't look at it)
[12:34:41] <Lerman_> I assume I have a quoting problem.
[12:35:51] <jepler> hmm
[12:36:27] <jepler> what makes you think that this should work?
[12:36:30] <Lerman_> I tried putting the whole line in quotes; but that didn't help.
[12:36:49] <jepler> there's a command "send_mdi" but it's not what you want
[12:37:17] <jepler> or did you add send_mdi_command?
[12:37:36] <Lerman_> I modified send_mdi to call a new routine send_mdi_command. Then I added send_mdi_command. It works from within axis.
[12:37:40] <jepler> ok
[12:37:56] <jepler> in Tk, things in square brackets are taken to be commands, so it is a quoting problem
[12:39:00] <Lerman_> So how do I quote it. And can I quote the whole line at once or do I have to escape each [ and ] ?
[12:40:41] <jepler> there's always a way to make Tcl's parsing rules work for you instead of against you
[12:40:49] <jepler> but I'm afraid it's a bit too early in the morning for me to see it yet
[12:41:56] <jepler> >>> t.tk.call("send", "wish", ("puts", "[buh]"))
[12:42:06] <jepler> in this case, you want to turn the command to send into a tuple
[12:42:52] <jepler> bbl
[13:27:44] <SWPadnos> hmmm. I wonder why the source_file field in status isn't used
[13:29:57] <micges> it seems that .file field hold that value
[13:30:21] <Lerman_> jepler: I got it working. Thanks.
[13:31:09] <micges> SWPadnos: source_file and source_line are never used only inited in some part of NML init code
[13:32:00] <SWPadnos> they're supposed to be used though. a remote GUI has no other way of finding out what files is being run
[13:32:19] <SWPadnos> unless there's a duplicate field somewhere
[13:34:09] <micges> remote GUI like emcrsh ?
[13:34:24] <SWPadnos> no, like using any of the GUIs with remote NML
[13:34:57] <micges> ah ok
[13:35:13] <SWPadnos> the idea (unused at the moment) is also that a management application can remotely monitor multiple EMC machines. keeping track of what the machines are doing is critical in that scenario
[13:36:50] <micges> I've never been able to run remote GUI via NML
[13:37:14] <micges> but that was long way ago, then I didn't know much of emc2
[13:37:42] <SWPadnos> I've done it, but forgotten exactly how :)
[13:38:09] <SWPadnos> there are server.nml and client.nml files in the configs/common/ dir, which might be close to what's needed
[13:38:55] <micges> SWPadnos: interesting, thanks
[13:39:13] <SWPadnos> sure
[13:42:52] <CIA-1> EMC: 03micges 07master * rdf5c85a65c92 10/src/emc/motion/ (command.c control.c mot_priv.h motion.c motion.h): Enable analog_input code in motion
[13:42:53] <CIA-1> EMC: 03micges 07master * r8665663b5a8d 10/src/emc/ (4 files in 2 dirs): Remove unused EMC_AUX_AIO_WRITE
[13:42:53] <CIA-1> EMC: 03micges 07master * rd6266fd4b92f 10/src/emc/ (5 files in 4 dirs): Add analog_input to EMC_MOTION_STAT and emctop
[13:42:54] <CIA-1> EMC: 03micges 07master * r99db5d2e7d40 10/src/emc/ (task/emctaskmain.cc usr_intf/axis/extensions/emcmodule.cc): Add ability to change digital/analog output from python code
[13:43:23] <skunkworks_> that is neat
[13:46:47] <jepler> hmmm unless it's just a step along the way, I am not sure I like that change either
[13:46:55] <jepler> they should be set by gcodes, and only by gcodes
[13:47:06] <jepler> if you want to set them direct from user interface, have it mdi'd
[13:47:17] <SWPadnos> or use hal directly
[13:47:31] <jepler> what I don't want is something that can get out of synch because you can set it in the interpreter and directly in nml
[13:50:59] <micges> spindle, lube and coolants are the same way controlled
[13:51:43] <micges> without this you are very limited way of controlling machine between stops
[13:52:00] <jepler> no, you have mdi
[13:52:52] <micges> yes you have mdi for one part making 15 min
[13:53:32] <micges> for 24h work you choose machine with switch instead of many lines of gcode typed every restart of program
[13:54:09] <jepler> if certain settings are required for a part program, they go IN THE PART PROGRAM
[13:55:09] <micges> yes but if you must stop program 50 times, where did you put these settings ?
[13:57:14] <jepler> I don't understand what you mean
[13:57:14] <SWPadnos> huh?
[13:57:32] <jepler> if you mean that stopping the program will destroy the settings, then you either put it in the part program or you force the operator to make the large number of settings every time
[13:57:44] <jepler> the latter sucks, no matter whether it's 16 sliders to precisely set or 16 mdi to key in
[13:58:12] <SWPadnos> it would be better to work on making run from line do what you want
[13:58:21] <jepler> that's precisely why it belongs in the part program
[13:58:47] <SWPadnos> ie, make the machine state what it would be if the program had run to that line, then resume motion
[14:02:26] <Lerman_> jepler: I got it running. The only problem is that the word "puts" is passed as the first argument and the command line as the second. I haven't been able to get rid of the first argument; so I just wrote a helper function to remove it. :-( -- not very nice; but it works.
[14:02:29] <micges> bbl
[14:09:08] <jepler> Lerman_: errr, "puts" was just for my example which didn't require axis at all
[14:09:41] <jepler> in my example I was executing the command "puts" with the argument "[buh]", you want command "send_mdi_command" and argument "o<...> ..."
[14:09:42] <Lerman_> But if I left out the "puts", I would up with the same illegal command error.
[14:10:28] <jepler> t.tk.call("send", "axis", ("send_mdi_command", "o<...> [0.0] ..."))
[14:10:49] <jepler> ^^ this is what I meant
[14:10:53] <jepler> it doesn't work for you?
[14:10:56] <Lerman_> I'll try it now.
[14:12:28] <SWPadnos> in the original statement you posted, "t.tk.call("send", "axis", "send_mdi_command", line)", is line a variable or is it the actual quoted text you mentioned ("O<whatever> blah [blah]...")
[14:12:57] <jepler> I assumed it was a Python variable
[14:13:03] <Lerman_> Yup. That fixed it. Thanks.
[14:13:19] <SWPadnos> oh right,this is python
[14:13:21] <SWPadnos> and tk
[14:13:23] <SWPadnos> all in one
[14:13:25] <Lerman_> line is a variable containing the text.
[14:13:40] <jepler> for additional fun, add more interpreted languages
[14:13:56] <SWPadnos> sorry if I'm a little slow, my experiment with cold-brewed coffee turned out less than spectacular
[14:14:46] <SWPadnos> let's combine bash brainfuck haskell python and tk with a perl+APL wrapper
[14:15:23] <SWPadnos> oh. I forgot moo
[14:17:00] <CIA-1> wizards: 03lerman 07master * r528745dd5c99 10/GWiz/gwiz.py: Added conversational mode.
[14:17:00] <CIA-1> wizards: 03lerman 07master * rc19ab7a17d65 10/GWiz/WIZARDS/Conversational Mode.wiz: Fixed the need to use an intermediate function when doing send_mdi_command.
[14:17:18] <jepler> Lerman_: you should probably commit send_mdi_command to emc2 master as well
[14:18:16] <Lerman_> Yes. I commited it, but didn't push it. How do I uncommit it so I can commit just the change I want?
[14:18:29] <CIA-1> EMC: 03jepler 07v2_3_branch * r53526cc460eb 10/ (3 files in 3 dirs): add option to set intial position and/or size of root window when loading a pyvcp panel
[14:18:35] <jepler> Lerman_: oh, you have other changes as well?
[14:18:48] <Lerman_> Just the change to axis.
[14:20:20] <Lerman_> Split send_mdi into to parts. send_mdi now calls send_mdi_command.
[14:20:39] <jepler> but you only want to push part of it?
[14:21:26] <Lerman_> Well, I did a commit (local) that included stuff I don't need. I'd like to undo the commit, then fix it, then commit, then push.
[14:22:15] <jepler> so you have just one local commit and you want to modify it before you push it?
[14:22:28] <Lerman_> Yup.
[14:22:55] <jepler> so if you look at gitk the top line is master and below that is origin/master?
[14:23:17] <Lerman_> I haven't figured out gitk yet.
[14:23:26] <jepler> if it's installed, just run it at the commandline
[14:23:38] <Lerman_> Did that now.
[14:23:41] <SWPadnos> ... from within the source tree
[14:24:28] <Lerman_> I see it with a yellow dot.
[14:24:28] <jepler> Lerman_: "newest" commits are at the top, the past is towards the bottom
[14:24:54] <jepler> unless you've been using branches, you're working with "master". "remotes/origin/master" is where git.linuxcnc.org was the last time pulled
[14:25:20] <Lerman_> Yes. ... master. Now how do I "fix" it.
[14:26:11] <Lerman_> Right clicking will let me check out this branch. Is that what I need to do to undo the commit?
[14:26:17] <jepler> no, don't do that
[14:26:38] <Lerman_> Ok. I won't do that.
[14:26:41] <jepler> in the simple case where you've got one local commit that you want to improve a little bit, here's what you do: edit some more, and then use "git commit --amend" instead of "git commit"
[14:27:25] <jepler> "git commit --amend" basically changes the last commit to include the newly-made changes, and lets you change the message
[14:27:41] <jepler> *but you can only do it sometimes*, if you haven't pushed your changes yet, and if you haven't done a "git pull" that created a merge commit
[14:27:59] <jepler> that's why I was making you go through gitk to see whether it was the right situation to use --amend
[14:29:00] <Lerman_> I did it. Seems to be OK. (I restarted gitk and it is there).
[14:30:16] <CIA-1> EMC: 03lerman 07master * ra5c7ab2f5ffa 10/src/emc/usr_intf/axis/scripts/axis.py: Added send_mdi_command to provide ability to send mdi commands remotely.
[14:35:33] <jepler> hmm did I steer you wrong?
[14:35:45] <jepler> it looks like you committed the version that required the extra argument ..
[14:40:04] <Lerman_> OK. When I do a git diff, I see that they are different. The one I have in my ...usr_intf/axis/scripts/axis.py is correct.
[14:41:22] <jepler> my fault, I should have probably told you to "git commit -a --amend", or "git add" the again-edited file
[14:41:38] <jepler> now you're stuck doing it in two halves and having the world see that you didn't get it perfect the first time
[14:42:50] <Lerman_> I'm getting an error -- [rejected] master -> master (non-fast forward)
[14:43:13] <Lerman_> error: failed to push some refs to 'ssh://lerman@git.linuxcnc.org/git/emc2.git'
[14:43:43] <jepler> that usually means that someone else has pushed in the meantime, but I don't see an irc message that anyone did
[14:44:02] <jepler> did you "git commit --amend" again?
[14:44:12] <Lerman_> Now when I do a git diff axis.py I don't see any diffs.
[14:44:36] <Lerman_> No.
[14:45:14] <jepler> do you have an easy way to put a screenshot of gitk up?
[14:45:46] <jepler> or if not, can you tell me where the origin/master and master labels point in relation to each other?
[14:46:50] <Lerman_> I'm on a network. What's the easiest way to get a shot up. (Linux in a wondows VM).?
[14:46:55] <jepler> there are two main cases where you get that "non-fast forward" message. In one case, someone else pushed since you last pulled. In the other case, you pushed, and then you changed your local history to be different than what you pushed (for instance with --amend)
[14:47:13] <jepler> imagebin.ca lets you post images. in gnome, you can take a screenshot with alt-printscreen or something like that
[14:47:15] <SWPadnos> Lerman_, http://imagebin.ca/
[14:48:32] <Lerman_> yellow dot master Fix the previous commit
[14:48:34] <Lerman_> blue dot Added send_mdi_command to provide ability to send mdi commands.
[14:48:36] <Lerman_> There are no branches between them.
[14:48:49] <Lerman_> SWPadnos -- what tool to get a screen shot?
[14:49:06] <jepler> alt-printscreen ? some-other-modifier-printscreen ?
[14:49:08] <SWPadnos> like jepler said, alt-printscreen will gt the current window
[14:49:12] <SWPadnos> get
[14:49:19] <SWPadnos> printscreen does the whole screen
[14:49:20] <jepler> no "origin/master"?
[14:50:41] <Lerman_> See: http://imagebin.ca/view/tdObuv.html
[14:51:23] <jepler> wow do the fonts really look like that!
[14:51:25] <jepler> ?
[14:51:40] <cradek> that's hideous
[14:52:07] <Lerman_> On Ubuntu, Applications/Accessories/Take Screenshot.
[14:52:36] <Lerman_> Yes. They look like that. (That's a liveCD with the latest release.)
[14:52:59] <jepler> run gitk again with args: gitk master origin/master
[14:53:12] <jepler> and screenshot it again
[14:54:45] <cradek> probably your dpi is detected wrong.
[14:54:53] <Lerman_> http://imagebin.ca/view/BKFhR5ji.html
[14:54:58] <SWPadnos> it's a VM
[14:55:00] <cradek> also I always change my font path to put the 75dpi fonts ahead of the 100dpi
[14:55:19] <jepler> OK, this is enlightening
[14:55:34] <jepler> see how origin/master is not an ancestor of master?
[14:55:43] <jepler> I'm not sure how you did that, but that's why your push is rejected
[14:56:01] <Lerman_> And I can fix it by...
[14:56:19] <jepler> this command will move your changes on "mster" to be "on top of" origin/master: git rebase origin/master
[14:56:26] <jepler> "master"
[14:57:58] <CIA-1> EMC: 03lerman 07master * r8ef53f36ce7d 10/src/emc/usr_intf/axis/scripts/axis.py: Fix the previous commit.
[14:58:42] <jepler> doing a 'git commit --amend', even if it doesn't change anything, is enough to cause this. It it a new commit, because the CommitDate is different and that is part of the hash that identifies the commit
[15:00:05] <Lerman_> Thank you jepler. I think I'm all committed.
[15:00:16] <SWPadnos> you should be
[15:00:18] <jepler> thanks for bearing with me through the hiccoughs
[15:01:25] <Lerman_> Heck. It's good working with you. Not everyone can spell hiccoughs correctly. :-)
[15:01:32] <jepler> hick cups
[15:03:28] <cradek> it's not nice to conspicuously flaunt your 20th century education
[15:03:49] <cradek> so be sure to remember "hickups" and "loosing"
[15:04:58] <jepler> * jepler has been caught typing "loosing" a number of times recently
[15:05:14] <jepler> * jepler burns with shame
[15:05:54] <cradek> how does that happen? where have you gone wrong?
[15:06:26] <jepler> I dunno
[15:06:31] <jepler> I assume I'm loosing my self of steam
[15:08:17] <skunkworks_> I feel you guys making fun of me... ;)
[15:09:10] <Lerman_> Hey. You picked the name. Don't be surprised to see people looking for a white stripe on a black background. :-)
[15:10:45] <skunkworks_> jepler: the tracking number tracks now.
[15:11:00] <skunkworks_> Jepler: how is your project?
[15:11:16] <skunkworks_> * skunkworks_ started puting siding on his garages.
[15:11:31] <skunkworks_> Jeeze
[15:11:50] <skunkworks_> * skunkworks_ started putting siding on his garage
[15:29:29] <jepler> skunkworks_: haven't worked any more on it
[15:39:49] <jepler> skunkworks_: I think the rest is perfectly straightforward, but a big imposition on cradek for his time
[15:40:30] <skunkworks_> cradek needs to make the last 2 mounts yet?
[15:40:43] <jepler> yeah
[15:40:56] <skunkworks_> he should get on that ;)
[15:41:31] <jepler> I'll let him get in some free time before I ask again
[15:41:44] <jepler> (you don't wanna know how many hours he spent on his stupid cable internet this week..)
[15:42:01] <cradek> maybe this weekend... it's a long one, which will be great
[15:42:02] <skunkworks_> I can imagine
[15:46:15] <SWPadnos> did the dumb cablemodem fix the problem?
[15:48:51] <cradek> yes
[15:49:03] <SWPadnos> cool
[15:49:18] <SWPadnos> I'm glad that's over (but not half as glad as you, I imagine :) )
[15:49:52] <cradek> yep, I hope it works for a while.
[15:49:58] <SWPadnos> indeed
[15:50:31] <SWPadnos> actually, I have a network setup question that you might be able to help with
[15:50:55] <SWPadnos> I'm planning on getting some service with multiple fixed IPs, served by the ISP like your setup
[15:51:37] <SWPadnos> I will want at least one server with its own IP, and of course accessible to machines behind a NAT/firewall
[15:52:21] <SWPadnos> I'd like to have gigabit ethernet between that machine and the local clients, but I don't have a gigabit NAT/router
[15:52:42] <SWPadnos> I'm thinking the only solution is to put a second NIC in the server and use that on the local net
[15:52:58] <SWPadnos> the local gigabit net that is
[15:53:25] <SWPadnos> or get a gigabit-capable NAT/firewall
[15:54:27] <cradek> sure, that's the easy way
[15:54:28] <CIA-1> EMC: 03jepler 07master * ref2d09cca6b9 10/src/emc/usr_intf/axis/scripts/axis-remote.py: add axis-remote --mdi
[15:54:33] <cradek> just do nat on the server machine
[15:54:45] <SWPadnos> yeah, I could do that too
[15:55:21] <cradek> doing nat/firewall/routing on the machine is the most flexible and least plug-n-play
[15:55:29] <SWPadnos> heh
[15:55:48] <SWPadnos> I have a NAT/router thingie that's pretty low power and also does wifi
[15:56:02] <SWPadnos> but I guess if the server will be on all the time, it might as well do NAT too
[15:56:09] <cradek> yeah easy wifi is the advantage to using one of those consumer devices
[15:56:44] <SWPadnos> hopefully my new DSL modem will arrive soon so I can make sure it works with my ISP
[15:57:29] <SWPadnos> what's your cable connection speed again?
[15:57:35] <SWPadnos> (10/3 or something?)
[15:57:54] <cradek> 10/1.5
[15:57:56] <SWPadnos> hmmm
[15:58:07] <skunkworks_> cradek: are you hosting the servers now?
[15:58:16] <skunkworks_> (instead of jeff)
[15:58:29] <SWPadnos> git is at cradeks, cvs is at jeplers
[15:58:37] <skunkworks_> ah
[15:58:48] <cradek> because my business class service is so much more reliable
[15:58:54] <skunkworks_> heh
[15:59:05] <cradek> sure is faster too
[15:59:29] <SWPadnos> heh
[16:01:59] <SWPadnos> Comcast actually has 30/7 available for $62.95/mo
[16:02:45] <cradek> how many statics?
[16:02:46] <SWPadnos> but this troubles me in the description: "This starting price is for customers that currently subscribe to Comcast Cable or Comcast Digital Voice service."
[16:02:54] <cradek> ha
[16:02:57] <SWPadnos> and I can't find the "non-starting" price anywhere
[16:03:03] <cradek> comes with scam for no extra cost
[16:03:14] <SWPadnos> I don't know. this is consumer class
[16:03:25] <SWPadnos> you can get statics for a charge, I don't know how bad it is
[16:03:29] <cradek> oh, fast consumer is easy, I thought you said you wanted statics
[16:03:53] <SWPadnos> and I don't know that this is available here, even though I entered my address and zip code to get the list of plans/pricing
[16:05:34] <cradek> I don't know why all those web sites are so useless - you have to call to get any real information.
[16:05:39] <SWPadnos> yes
[16:05:42] <SWPadnos> it's very annoying
[16:05:45] <cradek> and call back a few times, you'll get a different price each time
[16:06:04] <SWPadnos> my ISP/phone service was a locally-owned/operated comnapy until a year or two ago (they got bought)
[16:06:16] <SWPadnos> and the website changed to be almost completely non-informative
[16:10:16] <SWPadnos> gah
[16:10:33] <SWPadnos> the only way to get the comparison chart PDF is to enter your name and email address and have them mail it to you
[16:10:35] <SWPadnos> bastards
[16:42:45] <SWPadnos> gah. and then they don't even send it to you. they send you a link
[16:51:38] <jepler> I'm not the brightest bulb out of a box of chocolates, but I can see a way to short-circuit this whole process..
[16:51:53] <SWPadnos> how's that?
[16:52:11] <jepler> seems to me it's entirely possible for them to link to the pdf in the first place
[16:52:16] <SWPadnos> hmmm
[16:52:18] <jepler> maybe there's a wrinkle to this I haven't considered..
[16:52:22] <SWPadnos> too bad I'd have to call to suggest that
[16:52:39] <SWPadnos> well, it is a special, clicky-linky-tracking, URL
[16:53:04] <SWPadnos> see if it works for you: http://experience.comcastbiz.com/?elqPURLPage=30&elq=FE79A093E39C44948723ABF888744F73&CMP=EMC-PDWZ-20090423-DWNLOAD-001
[16:53:29] <jepler> yep
[16:53:40] <SWPadnos> cool. maybe I should plaster that all over the internet
[16:53:43] <SWPadnos> like I just did :)
[16:54:07] <jepler> you could try this URL instead: http://business.comcast.com/pdfs/CompetitiveMatrix.pdf
[16:54:37] <SWPadnos> oh. I failed to notice that was the redirect target
[16:54:54] <jepler> the redirect target offered had the CMP= on it, but it's apparently not needed
[16:55:55] <cradek> their unitless speeds are baffling
[16:56:14] <jepler> yet they're careful to label each storage-related figure in Mb and Gb when doubtless they're MB and GB
[16:56:16] <cradek> is 1.5/896 better than 6/1?
[16:56:25] <SWPadnos> heh
[16:57:05] <jepler> I dunno, but I'd sure buy 20Mb/20Mb for $99/month
[16:58:04] <cradek> and it comes with one license for vizion intarweb security sweat
[16:58:15] <jepler> I dunno what that's worth, but it must be something
[16:58:36] <cradek> yeah, it has sweet right in the name
[16:59:11] <cradek> mine comes with "copy all your most critical data to us and pretend it's like a backup" service, among other useless things
[16:59:44] <jepler> "call to have a representative explain availability"
[16:59:56] <cradek> hey a windows sharepoint site!
[17:00:06] <jepler> I have no idea what that is
[17:00:11] <cradek> and your internet connection supports the iphone or something
[17:00:11] <jepler> is it like pastebin?
[17:00:50] <SWPadnos> it is surprising that a fixed IP is $15 extra
[17:00:58] <cradek> it is?
[17:00:58] <SWPadnos> but nice that 5 are only $20
[17:01:00] <SWPadnos> yes
[17:01:04] <cradek> not to me
[17:01:09] <SWPadnos> I'd expect at least one fixed IP with a businessclass offering
[17:01:44] <SWPadnos> or it should be cheap, like the $5.95 Qwest charges
[17:02:35] <SWPadnos> (FWIW, my ISP gives you one static, and additional IPs are $5/mo)
[17:03:27] <cradek> $5 each?
[17:03:32] <SWPadnos> yes
[17:03:44] <cradek> weird, since 1/5/13 are the only easy numbers to get
[17:03:44] <SWPadnos> so it ends up being $20 for 5, like ComCast
[17:03:55] <SWPadnos> 5?
[17:04:04] <cradek> 2^n - 3
[17:04:19] <SWPadnos> ok, you're subtracting a router from the mix?
[17:04:22] <jepler> $10 of my monthly bill is for my 6 static IPs + 10GB additional transfer per month
[17:04:30] <jepler> 6 in my case because my dsl modem can operate in bridge mode
[17:04:45] <SWPadnos> right, so you have a /29 network
[17:04:47] <jepler> $10 more per month for one more bit of address space
[17:04:59] <jepler> $5/mo for 1 static address
[17:05:39] <SWPadnos> I guess I can probably get by with only 1 static IP - I'd just have to use the server as the NAT box as cradek suggested
[17:05:55] <SWPadnos> and that's probably enough for me
[17:06:03] <cradek> one is enough for a lot of things if you're creative
[17:06:12] <jepler> http://www.inebraska.com/dsl/windstream/pricing.html
[17:06:44] <jepler> unfortunately 12Mb/768kb isn't available in my area, so I'm stuck at 3Mb/384kb
[17:06:56] <jepler> (and 6/384 turned out to be unreliable)
[17:07:14] <SWPadnos> bummer
[17:07:26] <jepler> with cvs out of the picture, my outgoing speed is somewhat less important
[17:07:30] <SWPadnos> 8/1 is available here, and the ISP has 16/2, but not here yet
[17:08:00] <SWPadnos> and 5/1 consumer class is only $50/mo, so I might just up my connection to that and see what happens
[17:08:14] <jepler> I've upped my connection .. so up yours
[17:08:27] <SWPadnos> that can be done in a day, but they always install a new circuit for business class, so it's a 3-week or so wait
[17:08:29] <SWPadnos> heh
[17:08:33] <SWPadnos> up them all
[17:49:31] <SWPadnos_> SWPadnos_ is now known as SWPadnos
[17:53:28] <SWPadnos> hmmm. I wonder how long it'll take before my ISP notices I have several IP addresses assigned
[18:37:33] <cradek> jepler: on another note, I get a useless "mymill.desktop" icon on my desktop. when I click it, it opens in a text editor
[18:47:27] <CIA-1> EMC: 03jepler 07v2_3_branch * r67c11b874c72 10/src/emc/usr_intf/stepconf/stepconf.py: create a desktop entry in the right Desktop directory
[18:47:44] <CIA-1> EMC: 03jepler 07v2_3_branch * r238ff2cb4fac 10/debian/changelog: note new fix
[18:49:06] <cradek> jepler: your comment says post-Hardy but that can't be what you meant
[18:49:17] <jepler> cradek: ah, oops
[18:49:26] <jepler> cherry-pick retains the original commit message, and I didn't think to revise it
[18:49:36] <jepler> and the change itself, of course
[18:49:59] <cradek> oh this was already in trunk?
[18:50:06] <jepler> right
[18:50:23] <jepler> Date: Thu Jun 18 02:59:23 2009 +0000
[19:00:52] <micges> jepler: SWPadnos: with reference to earlier discussion, how operator can stop and resume that plasma gcode: http://www.pastebin.ca/1482065
[19:01:46] <micges> without help of gui/task clean resume that program is impossible
[19:06:01] <SWPadnos> I think the G-code shouldn't be waiting for the arc to be stable, that should be a HAL function, which either signals spinddle at speed or activates feedhold until the arc is stable
[19:06:05] <jepler> I don't understand what that code does. Are you saying that what you want is for emc to always run those lines before the line you select as "run from line"? Because plainly that's nuts.
[19:07:22] <jepler> (I'm sorry, "nuts" is inflamatory and I shouldn't have said it)
[19:07:43] <SWPadnos> but you bring up an interesting idea
[19:08:02] <SWPadnos> allow run from line to run a "macro" or some O-call
[19:08:21] <jepler> you have that -- it's called mdi
[19:08:49] <SWPadnos> ok, if you can MDI something as simple as O<RFLResume> call
[19:08:55] <cradek> to me this just looks like the usual case where you need the operator to pick a smart place to restart
[19:09:02] <jepler> your "super restart interrupted cycle" vcp button could kick off the mdi o-call and then use the very dumb rfl code that is common to everyone
[19:09:56] <SWPadnos> yes, that's what I'm saying, but I'm thinking that some sort of automatic hook would be generically useful
[19:10:24] <jepler> I'm far from convinced of that
[19:10:34] <SWPadnos> apparently :)
[19:10:51] <jepler> one of the classic problems of resuming a traditional milling program was the spindle speed
[19:11:06] <jepler> but different parts of the program have different spindle speeds
[19:11:21] <jepler> so how do you structure O<RFLResume> so that it sets the right spindle speed?
[19:11:34] <jepler> (of course, this is a problem for the "super restart interrupted cycle" vcp button as well)
[19:11:48] <SWPadnos> sure
[19:12:07] <SWPadnos> you need a smarter RFL function, and/or better introspection
[19:12:51] <SWPadnos> a relatively simple fix (simple-sounding anyway) is to have RFL set certain values into some specific parameters
[19:13:09] <SWPadnos> like setting #5999 to the S word whenever it encounters one
[19:13:09] <cradek> I know I've said this before but I have the solution to this: do what the operator says and stay out of his way
[19:13:24] <jepler> SWPadnos: nah, that doesn't work with readahead
[19:13:24] <cradek> if he says run from line, start executing the gcode on that line
[19:13:25] <SWPadnos> you're thinking about smart operators again
[19:13:39] <cradek> there is no other kind of useful operator
[19:13:44] <SWPadnos> nothing I've said would impact a smart operator
[19:14:08] <micges> with smart operator there is no problem at all
[19:14:11] <SWPadnos> there are levels
[19:14:18] <skunkworks_> how come you cannot just run through the program and set all the modal codes up to the point of the line picked? Then the spindle would be the right speed and on. Or am I just thinking too simple?
[19:14:20] <SWPadnos> and there is also operator error
[19:14:38] <SWPadnos> skunkworks_, that would work in a large percentage of cases, I think
[19:14:44] <jepler> skunkworks_: well, before 2.3 (?) there was a problem: the spindle would turn off going from MDI to Auto
[19:14:59] <cradek> you still are screwed if you have loops etc.
[19:15:13] <SWPadnos> there are some where it wouldn't though (such as micges' example, where a certain procedure has to be run before restarting the run)
[19:15:19] <cradek> or probing, or reading digital ins earlier in the program, ...
[19:15:26] <SWPadnos> yes, loops, input, probing - all are issues
[19:15:29] <skunkworks_> right - I see
[19:15:45] <skunkworks_> I was thinking too simple
[19:16:10] <jepler> yeah. if you really want to hurt, load up flowsnake.ngc and now contemplate what it would really take to "resume" that program
[19:16:35] <SWPadnos> resuming inside a loop will almost assuredly lead to madness
[19:16:43] <SWPadnos> just contemplating it makes me run for more coffee
[19:16:46] <SWPadnos> * SWPadnos runs for more coffee
[19:18:00] <cradek> overly-complex gcode leads to madness (<- controversial opinion)
[19:18:22] <jepler> nah, the gcode is fine. the desire to restart it is the problem
[19:18:51] <cradek> flowsnake, where all the motion comes from one line, is fairly mad IMO
[19:20:08] <jepler> but it's a possible way to write gcode
[19:20:28] <jepler> any gcode that uses flow control will show that problem to some degree
[19:20:44] <cradek> yep
[19:22:13] <jepler> and it's not just a problem of flow control. Consider what an operator really wants to do when faced with a tool breakage inside a canned cycle with an L-word (repeat) specified...
[19:22:26] <jepler> one physical line of gcode source, but "run from line" sure doesn't capture what the operator wants
[19:22:33] <SWPadnos> considering the problem, there are a lot of options as to how you would want to resume a program
[19:22:46] <SWPadnos> and some of them are quite hard to implement
[19:22:54] <cradek> jepler: yep
[19:23:17] <SWPadnos> though a lot of it can be accomplished with just two modes: smart (ish) mode and dumb mode
[19:23:17] <jepler> yes, uniformly and without exception, people who want resume / run from line want it to do exactly what they want, no more and no less
[19:24:00] <SWPadnos> in dumb mode, you probably don't even have to interpret anything up to the start line (except maybe keeping track of motion mode and feed rate)
[19:24:13] <cradek> not true - some people don't know what they want it to do, except they want it to do what they want when they want it to do that in the future
[19:24:33] <SWPadnos> nothing else changes, just start executing from wherever the operator put the machine, changing no other state
[19:24:45] <cradek> SWPadnos: in dumb mode you skip preceding lines, no exception
[19:25:20] <SWPadnos> that was my first thought as well, but it would require the operator to be able to change the motion mode before restarting, depending on the restart line
[19:25:22] <cradek> the whole point is to not make the operate guess what the control will do - instead, do what he says.
[19:25:30] <SWPadnos> which could be hard with G2/G3
[19:25:35] <cradek> yes, exactly
[19:26:13] <SWPadnos> that's a problem though, an operator would probably jog and use G0/G1 moves before restarting
[19:26:49] <SWPadnos> so a line that's supposed to be G2 (based on a prior G2 move) would be hard to set up manually
[19:27:01] <cradek> then we could make a lone G2 accepted
[19:27:08] <SWPadnos> that would solve the problem
[19:27:19] <cradek> if you want your gcode to be restart-friendly, you'd put G2 (and even F) on each line.
[19:27:25] <SWPadnos> sure
[19:27:34] <SWPadnos> not everyone runs their own code though :)
[19:27:47] <cradek> slightly less friendly is to have safe restart points where modal things are set
[19:28:02] <SWPadnos> actually, it might make sense to allow G1/G2/G3 (and maybe others) to be specified alone, and just set the motion mode
[19:28:04] <cradek> my HNC's control talks about that in the user manual
[19:28:08] <SWPadnos> yep
[19:28:16] <cradek> G1/G0 are already that way
[19:28:19] <SWPadnos> manually inserting checkpoints has no downside
[19:28:22] <SWPadnos> ok
[19:28:22] <jepler> the postscript language is a full real language, but it includes metadata to say what is "prologue", and what constitutes each page
[19:28:31] <micges> cradek: I've tested that if I issue correct message to motion on breaked G3 code it will resume correcly
[19:28:33] <jepler> .. in order that you can perform these kinds of manipulations
[19:28:59] <jepler> (of course, there's no other sensible restart boundary but "page" in postscript.,..)
[19:29:06] <SWPadnos> micges, we're talking about a mode which isn't currently implemented
[19:29:29] <micges> oh ok
[19:29:30] <SWPadnos> jepler, hmmm. I'd hate to think of PS machine controls, but then again there is scaling and rotation and ... :)
[19:29:56] <Lerman__> And reverse polish notation.
[19:30:01] <jepler> 0 0 moveto 100 0 lineto 100 100 lineto 0 100 lineto closepath stroke
[19:30:11] <SWPadnos> Logo!
[19:30:23] <jepler> repeat 4 [ g1 forward 1 right 90 ]
[19:30:23] <SWPadnos> (except the stroke part)
[19:30:29] <SWPadnos> heh
[19:30:46] <jepler> 10 print "t1 m6" 20 print "m2" 30 goto 10
[19:30:50] <SWPadnos> I wrote a little turtle graphics interpreter / plotter for a 10-th grade geometry project
[19:31:09] <SWPadnos> on a PET computer that only had 6-pixel character graphics available
[19:31:17] <Lerman__> Turtles hadn't been invented when I was in tenth grade.
[19:31:28] <SWPadnos> Darwin had a turtle
[19:31:33] <SWPadnos> or was that a tortoise
[19:31:46] <Lerman__> (Well, they had been -- but only in the Galapagos.) Yes a tortoise.
[19:31:52] <SWPadnos> heh
[19:31:52] <jepler> hmm, wikipedia says LOGO is from 1967
[19:31:57] <SWPadnos> wow
[19:32:02] <SWPadnos> older than me
[19:32:19] <Lerman__> I graduated from college in 1966.
[19:32:25] <SWPadnos> older than me
[19:33:24] <SWPadnos> hmmm. I think cold-brewed coffee is significantly stronger than normal
[19:33:32] <cradek> yep
[19:33:35] <jepler> and you were calling it a failed experiment earlier..
[19:33:43] <cradek> you're supposed to dilute it to drink it
[19:33:51] <SWPadnos> I think I'm having the caffeiene of 2-3 pots of coffee at the moment
[19:34:01] <SWPadnos> well of course, I diluted it 2-3x
[19:34:09] <SWPadnos> I think it's still stronger
[19:34:14] <SWPadnos> or I need food
[19:35:06] <skunkworks_> heh - pound of coffee - 8 cups of water - 10 hours. (yes it is a concentrate)
[19:35:11] <SWPadnos> yeah
[19:35:26] <SWPadnos> I used a cup or so of beans + ~3.5 cups of water and brewed overnight
[19:35:38] <skunkworks_> you listened to the splendid table.. ;)
[19:35:54] <SWPadnos> that's making about 4 mugs of coffee for me, but it's about 2-3 pots worth of beans
[19:36:00] <SWPadnos> yes, but they talked about tea
[19:36:08] <SWPadnos> my wife's tea experiment went very well :)
[19:36:13] <skunkworks_> last weekend they talked about coffee.
[19:36:43] <SWPadnos> in one of those strange coincidences, there's a local cafe that serves cold-brewed coffee, and they were at the "Chew Chew" festival last weekend
[19:36:47] <SWPadnos> oh. I missed that one
[19:38:16] <cradek> how do you filter it then? I love the taste but I don't make it that way because of the filtering problem.
[19:38:29] <SWPadnos> well, that's the problem, isn't it?
[19:38:37] <SWPadnos> I used my normal gold filter for the first pass
[19:38:44] <SWPadnos> then used a paper filter in a funnel
[19:38:49] <SWPadnos> then did that again
[19:38:52] <cradek> that's a huge huge pain
[19:38:55] <SWPadnos> and it's still got sediment
[19:38:56] <SWPadnos> yeah
[19:39:03] <jepler> more sediment than french press?
[19:39:06] <SWPadnos> I'd needa burr mill if I wanted to do this much
[19:39:10] <SWPadnos> no, probably now
[19:39:12] <SWPadnos> not
[19:39:17] <Lerman__> It should be pretty easy to write a version of the interpreter that runs through the code and generates a linearized version of the gcode. That would get rid of all of the loops, subroutines, if statements, etc.
[19:39:20] <SWPadnos> and a french press is probably a good way of cold-brewing
[19:39:37] <SWPadnos> just stick the thing in the fridge, then push it down the next morning
[19:39:39] <cradek> hey that's smart
[19:39:45] <jepler> Lerman__: yeah, but then the gcode can't rely on external inputs
[19:39:58] <Lerman__> Correct.
[19:40:24] <jepler> well that's no good
[19:40:33] <Lerman__> Or more precisely, the looping and testing can't rely on them. (You could still do probing.)
[19:40:35] <SWPadnos> and if you get a Melitta-style single-cup filter, you can just pour it straight into a cup (for dilution)
[19:41:25] <SWPadnos> Lerman__, not really. probing is also input
[19:41:28] <Lerman__> SWP/
[19:41:53] <SWPadnos> (doesn't probing set some parameters to the probed point?)
[19:41:57] <jepler> view flow control as a preprocessing step
[19:42:07] <Lerman__> Yes. But since there would be no looping, the program wouldn't depend on them.
[19:42:23] <Lerman__> jepler: exactly.
[19:42:58] <SWPadnos> consider a loop that depends on the results of a probe operation
[19:43:00] <jepler> it still excludes many possible (and even useful) programs from the running
[19:43:18] <jepler> SWPadnos: Lerman__ is saying you forbid those..
[19:43:27] <SWPadnos> oh
[19:43:34] <Lerman__> SWP -- correct. You couldn't do that. Such programs would be forbidden.
[19:43:43] <SWPadnos> that seems like a bad plan
[19:44:05] <jepler> so if you have a routine that spirals out from the center to make a hole of a given radius (variable number of spirals), you couldn't probe one hole and then make a second matching hole
[19:44:28] <Lerman__> At fest, someone, I think Stuart, made a comment about not liking operators having to deal with programs that loop, etc.
[19:44:37] <Lerman__> jepler: correct.
[19:45:05] <SWPadnos> one of the complexities of solving problems in EMC is that we have several very different use cases
[19:46:00] <Lerman__> We need to keep the easy stuff easy and make the hard stuff possible (or even easy).
[19:46:21] <jepler> we've done that, for suitable defintions of "hard" and "possible"
[19:46:32] <SWPadnos> and "easy"
[19:46:49] <jepler> "the complement of the set 'easy'"
[19:47:01] <jepler> I think that's how I'll define 'easy'
[19:48:01] <Lerman__> HAL makes a whole slew of things possible.
[19:49:01] <Lerman__> And some might say "straightforward". Others might argue that only twisted people find it straightforward. :-)
[19:50:05] <Lerman__> HAL is easy if you think like a logic designer. O-words are easy if you think like a programmer.
[19:50:23] <cradek> gcode is easy if you think like ... someone who knows gcode
[19:51:24] <Lerman__> So, there I was writing a program to generate arbitrary gears. I figured the new cutter compensation would take care of the gouging problem.
[19:51:43] <cradek> * cradek hides
[19:51:56] <cradek> no speak-a english-a
[19:52:46] <Lerman__> Wrong. If one of the lines describing the involute is smaller than the cutter radius, you are screwed because the previous line might cause a gouge.
[19:54:15] <cradek> I don't quite follow what you mean yet
[19:54:24] <Lerman__> (My goal was to write a gear wizard.) That is on hold for now.
[19:54:31] <cradek> there is no requirement that all lines are longer than the cutter radius.
[19:55:43] <SWPadnos> he's needing look-ahead
[19:56:10] <SWPadnos> which the new comp has, at least for one segment
[19:56:15] <SWPadnos> (?)
[19:56:17] <cradek> you're guessing :-)
[19:56:18] <Lerman__> Suppose I'm cutting an internal square pocket. The cutter compensation logic will now let me just cut it as four lines (ignoring the entry and exit moves). If instead, I tried to cut the one inch sides as 100 lines .01 inch long, I would wind up gouging the corners. -- Well, not quite because I get an error.
[19:56:54] <cradek> yes it will error in that case, because there are some lines it can't get the cutter to touch without gouging
[19:57:13] <Lerman__> SWP guessed right, I think.
[19:57:32] <cradek> but if you're on the outside of a silly square like that, it's fine
[19:58:14] <Lerman__> So, here I am trying to approximate an involute by lines (all in gcode) and I have that problem. Note that in the longer run I plan to do the approximation in biarcs.
[19:58:22] <cradek> if I understand right, you're needing it to throw out big parts of the program that it can't get to, after analyzing the whole (?) program
[19:58:49] <Lerman__> Yes. But it's hard to "analyze" the program in gcode.
[19:59:10] <cradek> I think that is a relatively impossible task to get right - since all you have is a path, you can't guess where the part is intended to be
[19:59:34] <micges> SWPadnos: thanks for at-speed tip
[19:59:56] <cradek> emc2's comp now considers something like two corners (therefore three moves) at a time and uses only that limited information
[20:00:07] <cradek> doing any more seems very complex to me
[20:00:24] <cradek> (and quickly you get into the realm of guessing)
[20:00:43] <cradek> I already do a bit of guessing in some cases (like the "h" shape)
[20:01:43] <micges> thanks for all critics
[20:01:47] <Lerman__> I'm not complaining. I just have to think smarter. I'll probably stop the approximation to the involute a cutter radius away from the base circle.
[20:01:47] <micges> good night all
[20:01:53] <SWPadnos> night
[20:06:40] <cradek> Lerman__: this is an interesting case I had to handle: these are various "h" shapes. the round part is a semicircle. you can see that the meaning of "left of the path" changes somewhere in this progression of angles of the vertical part
[20:07:49] <cradek> the one just left of center actually has a self-intersecting path, and technically I think "left" of it should go down and around the corner because of that. but there's a numeric instability problem here so I tweaked it toward the "stay up above" option.
[20:08:36] <Lerman__> I don't see it. Is there a picture I should be looking at?
[20:08:59] <cradek> haha, I didn't paste the URL
[20:09:04] <cradek> http://timeguy.com/cradek-files/emc/guess-what-the-user-wanted.png
[20:09:06] <cradek> jeez
[20:12:28] <Lerman__> Ah. At the point where the line is tangent to the arc going in the opposite direction things change.
[20:12:46] <cradek> yes, because the line and arc cross
[20:13:48] <Lerman__> To me, the two leftmost ones are wrong.
[20:13:52] <cradek> same thing happens with two semicircles like on a "B" (and I made the same decision - bias it toward not looping around the end)
[20:14:21] <cradek> Lerman__: you do see that the original path intersects itself in the left ones?
[20:14:41] <Lerman__> You never want the compensated path to cross the uncompensated path.
[20:14:58] <cradek> imagine rotating the | much further, including past where it points right, until it starts pointing down
[20:15:15] <cradek> at SOME point you need to start going around that corner, right?
[20:15:26] <Lerman__> No. I didn't. You are saying that they are not tangent. The line intersects the arc in two places.
[20:16:03] <cradek> yeah, they all share endpoints, but the left ones also intersect at another point
[20:17:46] <Lerman__> If they intersect in two places, it is bogus in the sense that no one should specify such a part by using that path. So, all bets are off.
[20:17:58] <cradek> it's not a part
[20:18:10] <cradek> it's a path, and the control is directed to put the tool along the left side of it
[20:18:30] <cradek> here's the root of the problem
[20:18:45] <cradek> IMO, there is nothing wrong with the *path*
[20:19:24] <cradek> the control still needs to make the tool go along the "left" of it
[20:19:28] <Lerman__> As a path, what you did is correct. But that path should never be in a "part" program.
[20:20:18] <cradek> paths include moves (such as entry/exit) that are not along the part.
[20:20:30] <Lerman__> Aside from the left two, are the others also self intersecting?
[20:20:42] <cradek> the left three definitely are
[20:20:52] <cradek> the center one is exactly the boundary case
[20:21:22] <Lerman__> So why doesn't the third one also loop around?
[20:21:24] <cradek> the one just left of center is the result of me having to bias it toward staying atop
[20:21:47] <cradek> this was a test to guesstimate how much bias was reasonable
[20:22:13] <Lerman__> Why do you "have" to bias it?
[20:22:59] <cradek> because the middle case is where numeric instability would cause you to sometimes get "atop" and sometimes "down and around". I thought it was important for the boundary case to always give "atop"
[20:23:12] <Lerman__> The transition should be at the point where the line and the circle are tangent. If the tangent to the circle is to the right of the line use the non looping case.
[20:24:19] <Lerman__> If the tangent is coincident with the line, use the non-looping case. If the tangent is to the left of the line, use the looping case.
[20:24:53] <Lerman__> Of course, the definition of coincident is subject to some numerical issues.
[20:24:55] <cradek> you can not reliably determine what is coincident
[20:24:58] <cradek> exactly
[20:25:23] <cradek> so you have to choose between biasing it one way or the other, or having it be unpredictable
[20:26:00] <cradek> I wonder why I brought this up
[20:26:07] <Lerman__> The real problem is that a small difference causes a large jump in the path.
[20:26:42] <cradek> I bet that's often the case
[20:26:44] <Lerman__> To show me that the code is complex enough as it is and that adding more lookahead is not trivial.
[20:27:02] <cradek> heh, ok then :-)
[20:27:29] <Lerman__> I didn't need convincing. I was suitably impressed before. (And that was before I saw your bus.) :-)
[20:27:31] <cradek> yeah, it's complex, but I think it does what it does *correctly* (i.e. gives an error if it can't work)
[20:28:30] <Lerman__> bbl.
[20:28:34] <cradek> another fun case is move right a foot, left .001 inches, right another foot
[20:28:42] <cradek> what is "left" of that path?
[20:29:18] <Lerman__> Go around the end.
[20:29:41] <Lerman__> In a clockwise direction.
[20:29:42] <cradek> yep a big loopy thing around the .001 inch long segment's two ends
[20:29:59] <cradek> (I've seen cam generate this kind of path)
[20:30:13] <Lerman__> Staying to the left means going clockwise around the path assuming it is closed.
[20:30:36] <Lerman__> If it isn't closed, you can't tell that until the end of time.
[20:31:14] <cradek> brb
[20:31:25] <Lerman__> But, again, you have the issue of telling if two lines are coincident.
[20:31:30] <Lerman__> bbl
[20:52:51] <jepler> Lerman__: the old LAZY_CLOSE=1 setting is now the default on master, and can't be changed ..
[20:52:58] <jepler> if problems turn up and we can't fix them, we'll revisit it
[20:53:52] <Lerman__> Do you mean that it was put into all of the .ini files or that the code now acts as if LAZY_CLOSE is always set?
[20:54:04] <Lerman__> It sounds like the latter.
[21:00:16] <cradek> http://git.linuxcnc.org/gitweb?p=emc2.git;a=commitdiff;h=313f7046e
[21:00:25] <cradek> Lerman__: hidden at the very bottom of ^ is the change
[21:00:38] <cradek> he meant for it to be a separate commit, I bet
[21:00:46] <cradek> bbl
[21:39:32] <jepler> yeah I screwed up
[21:39:42] <jepler> If I were me, I'd criticise myself on the mailing list for it
[21:42:17] <cradek> anybody see anything wrong with maximilian's patch to allow Nxxx Oxxx ?
[21:43:46] <cradek> well, his mailer messed it up, but I mean other than that
[21:45:17] <cradek> holy crap git diff is fast
[22:00:41] <jepler> cradek: I glanced at it and it looks to-the-point
[22:00:47] <jepler> I didn't test it
[22:04:29] <jepler> hm, fopen(probefilename, "wt")
[22:04:40] <jepler> t is a nonstandard flag, but w means "truncate or create" ...
[22:14:17] <CIA-1> EMC: 03cradek 07master * r4b145e62eed3 10/src/emc/rs274ngc/interp_read.cc: Allow N words before O words