DesireData's TODO list, $Id: TODO,v 1.1.2.28.2.63 2007/09/09 17:45:45 matju Exp $ LEGEND: [c] client [s] server [b] both --- do those soon even though they're not in any milestone: [ ] update translation credits [s] encapsulate wires list [s] observable boxes list [s] observable wires list [s] gop filter [s] triad (which triad???) --- those should be only things that will not be in milestones 1,2,3, until the progress bar. [ ] glerm says: backspace key problem in virtual keyboard [s] rewrite [any] [ ] right-click on an [s] or [r] would have an option "Find Matching Sends & Receives" [c] split View into several classes (why?) [s] [error] [b] look into race conditions and locking [s] take advantage of the support for zero-size arrays in gcc. (how?) [s] make t_hash thread-safe (use external iterator) [c] figure out what to do about the existence of [$self look] vs ordinary attributes (pointer_sense= and such) [b] localise error messages [s] new parser for nested lists and extended symbols [s] remove more duplication of adc vs dac (see s_audio_*.c) [s] [route] should be reconfigurable and accept pointer [s] [select] should accept pointer [s] [moses] should be multi-arg (and be aliased to [range] ?) [s] get rid of stderr in server [ ] pd-extended's [tcl_version] [c] -path and -helppath listbox entries should be draggable (so that up/down buttons can be removed) [s] finish merging 0.40 (wasn't it finished?) [s] merge 0.41 (no?) [s] merge 0.42 [s] refcounted symbols [c] simplify def Dialog add [b] rewrite [image], [display], [knob], [grid], [popup], ... [s] merge martin peach's tcp externs into the core [ ] sync pd.gif with pd_32.gif [s] inheritance: [super] "instantiates" other abstraction with same $0; [self] allows sending messages to self; [declare super ...] makes the tree. [ ] cleaner parsing of [expr]... remove int type because it causes e.g. [expr 8.0 / 10.0] = 0 but [expr 8.0/10.0] = 0.8 [ ] how does [declare -stdpath] work? this is a mystery. can't get it to work in pd 0.40. [ ] tidy_up/snap to grid [c] change the order of the fields in Properties if it makes things more logical than the order of fields of savefn [b] too much duplication of inlets vs outlets in source (where?) [b] [t a] could be a very small GUI object (called "null object") [b] all the [t] could be GUI objects [b] GUI objects for [inlet] and [outlet] and [pd] ([page]) [-] make a dd-extended [s] SymbolBox could support dnd [b] http://lists.puredata.info/pipermail/pd-dev/2007-10/009581.html [s] what to do with post() in case of -nogui ? (it fills an ever-expanding buffer, does it?) ------------------8<------------------------------------progress-bar----------------------------------------------8<------------------ [ ] help files for: [parse], [unparse], etc. [s] recreate abstr instances after abstr save [s] [bng] messages get duplicated upon entering a subpatch??? [s] counter-test.pd shows [nbx] jamming the update queue if too many updates at once...? [s] queue priorities cause double call to changed() to change the expected order of updates (dangling pointer in client) [c] Ctrl+e doesn't change Edit menu entry; likewise for visual_diff [c] implement dirty flag (Save Changes? Save Changes? Save Changes? Save Changes? Save Changes? Save Changes? Save Changes?) [s] canvas_resortinlets confuses wire upload [s] should do canvas_resortinlets after moving objects [s] writesf_free has deadlock. [s] [netsend] is unreliable: buffer too full drops chunks of messages, not at message boundaries [b] colorised console with hyperlinked error messages [c] atomic undo [c] undo subpatch [c] numbox: is_log [c] [hradio] : chg -> is_log [c] [vu] props : scale should appear instead of is_log [s] update s_audio.c to support any number of devices (not just max 4) [c] new way to do View get_canvas [c] def Menuable raise {} {wm withdraw $w; wm deiconify $w [b] GOP problems are back due to recent changes in canvas_map and canvas_vis. now that abstractions don't get loaded into the client anymore, GOP can't always be drawn anymore too. i mean, because the content of GOP is not uploaded to the client, so the client can't draw anything about it.. unless def View outside_of_the_box are moved to the server side and the server only uploads what needs to be drawn for gop another side effect of not uploading the content of [pd]/abs that i just found out is that, when deleting such object, 1. the client won't be able to perform things like $wire deconstruct in def Canvas del, as the object don't exists in the client side 2. even if client don't call things like that, the server would still send -> delete message to the client, which causes the same error because the object don't exists... [s] it might make sense to always upload subpatches but upload instances only when needed [s] serial got sent too early when creating [pd] with push & #N canvas (http://pastebin.ca/318318) [s] GOP problems are back due to recent changes in canvas_map and canvas_vis [s] prevent hidden subpatches/abstraction-instances from being loaded in the client all of the time. [b] fix gop [c] reimplement View get_canvas so that it does not rely on [focus] [s] gop contains can be drawn if not uploaded to client [ ] fix deleteing/closing Canvas [ ] server sends -> x806a3b8 delete twice [ ] fix deletion order [ ] graphical array rendering optimisation [ ] fix double delete of [pd]; this is because [pd] is both an object in a patch and a patch itself, and "subscribe" doesn't distinguish. [s] added "version 2" syntax parser (optional), which has nested lists, extended quoting, extended float syntax (some ex-symbols now parsed as floats: +1 +1.0 +1e8 0x10 and so on.) [ ] atomically with multiple level [ ] PureUnity [ ] benchmark [ ] signals [ ] grids [ ] transitive, antisymmetric, predicate [ ] contracts : *-rule.pd [ ] tests for the frameworks' own components? * not finished: [glue-test] [comparators-test] [arith-test] [operator1-rule] [operator1-test] [operator2-rule] [operator2-test] [s] those are the externs that have to be recompiled if I want to trap calls to return values of getfn. ./externals/olafmatt/clone/clone.c:544: mess1(&cv->gl_pd, gensym("dsp"), sp); ./externals/grill/dynext/src/main.cpp:952: mess1((t_pd *)canvas,const_cast(sym_dsp),NULL); [s] allow helpfiles to load without having to "make install". [s] switch iemguis to using only t_atoms [s] MIDI loopback pseudo-device (inside pd) [s] audio loopback pseudo-device (inside pd) [s] use vector doubling in binbuf_add,binbuf_addv... [c] opening an already-open subpatch should just raise that subpatch [c] pixel offsets are not correct in [hsl] [vsl]: distinguish between $@w or $@h and actual size. there should be 4 extra pixels. [c] hide inlets/outlets of IEMGUI when they have receive-symbols/send-symbols [c] rightclick help doesn't work on [cnv]: tries to find help for "cnv.pd" ??? [s] creating a graph causes crash. [b] fix NumBox's height (box size follows font size) or just remove that setting [b] fix NumBox's width (missing some fudge) [b] fix std::map's apparent trouble getting exit() done properly Implement (or fix) Find: with ability to search across canvases: [ ] all canvases [ ] all subcanvases (including invisible) [ ] with regexps [ ] with replace [ ] in hsl-help.pd, [hsl] shouldn't appear as a Radio. [ ] canvas dialogue: [ ] add option for old-style GOP [ ] make hidetext work [ ] add units/pixel [c] array button doesn't work (menuarray) [c] implement timeout in def Manager call [s] proper symbol quoting [c] patching-in-tongues follow-up [c] make List objects, to manage children, visible_children, wires, selection, selection_wires. [c] skip unneeded motion events inside client (do we need this?) [b] rename pd to pd-server, desire.tk to pd-client, add new program "pd" which would launch both (will we really do this?) [b] #V test with bg color [c] kill global tooltip variable ? [c] iemprops: min,max labels broken [b] fix the [key] and [keyup] and [mouse] (?) classes [s] fix all issues with backslashes and braces. [c] devlist isn't supposed to be like a choice, rather like several choices. [c] implement def Canvas tidy [c] set tk::mac::useCGDrawing 1 [s] differential upload [c] differential download (property dialogues autoapply) [c] differential redraw [b] improved dirty_lists including proper array support [b] bang counter (instead of sending every bang message to client) [b] implement garray [c] implement a mark-and-sweep in order to find leaks... (?) [ ] this seems fishy but might have good ideas -> http://www.rebelscience.org/Cosas/Reliability.htm [c] make a statistical profiler for Tcl, if possible [c] try to use profiler.tcl (tcllib) in a sensible way [s] try C-oriented tools: [ ] oprofile (with GUI) [ ] memprof [ ] sysprof [ ] kprof [ ] gprof [ ] prospect [s] iirc, bang~ registers a timer callback. the problem is that the timer callbacks are only executed every dac block, which is 64 samples. so running bang~ in subpatch with less than 64 samples, bang~ sets the same timer several times, but it's only executed once. [b] think about this «if you are reconsidering properties panels, I strongly encourage all y'all to make them Pd patches. This is how Max/MSP does it and I think it would work very well for Pd as well. Sounds like this is a good opportunity to make the switch.» -- hcs 1. a keyboard operated cursor, a bit like Active, but one can use it like the mouse pointer 2. snap to grid feature, or similiar 3. prefix keybindings, like M-x in emacs Iohannes said about redirecting stdout/stderr: pd -verbose -stderr 2>&1 | while read line; do echo "${line};" | pdsend 6666 localhost udp; done [b] [struct], scalar, DS-array, [plot], [drawpolygon], [drawnumber], ... [c] desire.tk can be *really* loaded without Tk [c] make commandline options reloadable at runtime [x] canvas scrollbars auto-disappear when not needed. [s] use gensym2() in builtin classes and stuff. [s] fix 64-bit arrays so that carmen gets a use for DD. [s] carmen also needs strings (no symbol leakage) [c] right-click on labels for translations. [b] http://www.w3.org/DesignIssues/Diff [c] solve printing problems with GDB. use a pty (pseudo-teletype) ---> http://wiki.tcl.tk/3916 [c] try TkZinc [c] try Tcl/Gtk (Gnocl) with emulation layer [?] http://www.comparisonics.com/gallery.html [c] obiwannabe writes: it would be good to have the choice as a comandline arg of the first one launched with a way to accept patches to open in the same instance from, say a web browser. Like also when you are in a file manager and browsing some .pd files you really want them to open in the same running instance. [s] must work with ALL gridflow samples [b] objectbox argument completion [b] messagebox completion [c] tooltips on arguments/inlets/outlets [c] option to make non-gui objects appear on a GOP (?) [b] multilingual labels in objects [b] multilingual comments [b] what would be needed to be able to use gdb --pid=... ? [ ] set tk::mac::CGAntialiasLimit 2 [ ] try Doxygen's callgraphs [ ] try splint (http://www.splint.org/) [ ] try uno [ ] try CCCC [ ] try OSX Shark [ ] try http://www.drugphish.ch/~jonny/cca.html [-] do we move the trac to artengine or not? [c] remember that it's possible to use break in a bind-handler, to completely override system's behaviour. [c] try: itcl itk iwidgets (itk implements megawidgets) [c] try tkgate, a hardware sim program [ ] try libentity [c] try vtk-tcl [s] make sure $0 actually works (see canvas_realizedollar) [c] test rcv_able, snd_able [?] iem: snd/rcv problem(s) ? (what was that?) [c] [vu] have fcol in props ! [c] [vu] has snd in props ! [b] Duplicate wires? [c] Can connect object to an object that is inside a GOP (!!!!) [c] weird offset stuff when there are negative canvas coords sometimes. [s] Bug: bad quoting in sys_mgui() [b] Bug: spaces in name of vslider cause corruption of properties (devel_0_37) [b] classlist: add method signatures [c] bang flash delays should be reimplemented [c] pdrc_options radio don't load/save [c] patch window may open off-screen (all branches) [c] patch window may open too big (all branches, osx) [b] properties on objectboxes (generic dialogues tapping into method signatures) (?) [s] hooks for outsourcing the preceding stuff to a plugin (eg: GridFlow, PyExt) [b] [graph] is too slow (gui) for real big arrays [b] VT100 colours in console ? [b] freeform comments (no atom parsing) [b] preserve whitespace in textboxes? [b] inlet inspector to show what are the message types expected by an inlet that could read like "int: set left operand; bang: do it" [c] custom buttonbars (including premade objects with args like a [t b f] and such) [c] with configurable hotkeys [b] coloured wires [b] insert_object makes error with multiple selection. [c] popup_properties on multiple selection. [b] segmented patchcords: [c] a hotkey to click on the cord, and add a new segment [c] a hotkey to drag the "points" (where two lines meet) [c] a modifier key to delete a segment (actually the others should be that way too) [c] you should be able to right click on a regular wire, and press "segment" or do a hotkey with it and it automatically turns it into an straight-elbow multisegmented wire [s] symbol vs strings: Ruby is right: the Symbol vs String distinction is annoying and possibly obsolete. according to me, symbols exist mostly because LISP had them before they had strings, and because most Strings implementations aren't powerful enough to be as fast (or almost as fast) as Symbols. (well, for compatibility reasons, just like in Ruby, we can't remove symbol support completely, but at least we can reduce the difference between strings and symbols to a minimum.) [b] server-side IEMGUI could be turned into Tcl-based externs OR EVEN become abstractions. it's possible to make a DesireData GUI for any Pd class, including abstractions. to turn IEMGUI into an abstraction, what's missing is the savefn/saveargs/scanargs business. [s] I would like to know how much it is feasible to compress the t_atom structure so that even with 64-bit pointers the t_atom still stays 8 bytes instead of 16. I think it's possible, but not necessarily in a backwards-compatible way, and not necessarily in a portable way. also maybe it's not that useful. [c] splashscreen: we could make it different than other programs by inserting the splashscreen inside the main window or we could make it a separate window but no timer, just an [OK] button, so actually, this would be exactly the same as the "About" dialogue. [s] turn [makefilename] into something that doesn't suck. (alias it to [sprintf] or [format]) [b] data inspector: when this tool is enabled, it prints on the console any data coming through whatever cable you currently have selected. if you select multiple wires, it reports whats going through multiple wires. [b] you need a way to see cpu usage on individual objects or on patchers or on groups of selected objects [c] objectbox history: see whether ddrc should have a history count entry; think about saving history; matju thought that it could be turned into a dynamic button bar that you can drag from. [?] send to front, send to back [c] make windows not get auto-resized to the width of the toolbar, so that people can have tiny windows. [c] fconfigure -encoding binary ... [s] implement the stuff that is in iostreams.txt [c] Luke Iannini suggests some OSX bindings: Command-` to switch between different windows within the application. Command-, to bring up preferences (though this one is more difficult since there are multiple preference windows...) Command-m to minimize the window (this currently brings up the "send message" dialogue box) [s] Claude: Sending a message to vline~ creates a t_vseg, which are stored in a sorted linear linked list, which means the time taken to add each new line segment would be O(n), where n is the number of existing line segments. [-] look at some object sync protocols that we can think of: NFS for folders, palm sync for calendars, rsync for file contents Marius Schebella: I have a small keyboard shortcut wish: change between "entering mode" and "selected mode" with boxes. when I create a new object/message... then it would be nice to have a shortcut that switches from the mode, where the cursor is in the box to the mode, where the object is selected. I think the tab-key could be used for that. As it is now, I type something in, then I have to grab the mouse, then klick, then select, then I can adjust it (which I also do with the keyboard, because it is more precise). I know the toggeling will not be possible when more objects are selected, but maybe someone has an idea for that. [c] command for unpatcherizing a subpatch or abstraction (useful for making variants) or for turning an abstraction into a subpatch. [s] I fixed it now, but I don't know if this is not a bug in pd 0.40: "The problem is, that canvas-local search path really tread each path as local to the canvas-path ( see line 1561 in g_canvas.c). So if you add e.g. /usr/local/lib/pd/extra/iemmatrix, it will search for this path, but local to the canvas path - so if I started Pd from /home/me it will search in /home/me//usr/local/lib/pd/extra/iemmatrix ! Is this a feature or a bug of Pd ?" -- Holzi [s] "I don't quite understand how this explains why wrap~ of -1 returns 1." -- steffen [s] there's a [wrap~] but no [wrap]. there's a [>] but no [>~] (without externals). -- matju dmotd about converting patches to postscript: "the internal pd postscript printer grabs the viewable canvas size, this would need to change to encompass the virtual limits of the patch. tcl/tk's 'canvas postscript' command takes the -width -height flags, so making it the virtual bounds is trivial. this works for snapshotting canvas bounds: sys_vgui("set cnv_bbox [.x%x.c bbox all] \n .x%x.c postscript -file /tmp/canvas.ps -width [lindex $cnv_bbox 2] -height [lindex $cnv_bbox 3] \n ", canvas, canvas); ------------------8<--------cut-here--------8<------------------ Patching-in-tongues Project [ ] make entries counter and matcher. entries en: english [ ] es: español [ ] Mario Mora & Ramiro Cosentino de: deutsch [ ] M Neupert, G Holzmann, T Grill nb: bokmål [ ] Gisle Frøysland it: italiano [ ] Davide Morelli + Federico Ferri pt: português [ ] Nuno Godinho fr: français [ ] Patrice Colet ca: català [ ] Nùria Verges pl: polski [ ] Michal Seta eu: euskara [ ] Ibon Rodriguez Garcia (Enrike Hurtado) cn: chinese [ ] Chun Lee jp: nihongo [ ] Kentaro Fukuchi tu: türkçe [ ] ... Koray Tahiroglu sv: svenska [ ] ... Daniel Skoglund (NOT FOUND) br: brasiliano [ ] ... Gabriel Menotti dk: dansk [ ] ... Steffen Leve Poulsen ------------------8<--------cut-here--------8<------------------ Dec 18 2006 1. there's no way to limit the size of the output buffer. If the other side of the connection doesn't respond, the sending buffer just inflates quickly. I've seen it happen that a bug in the sender causes it to try to send so fast that it ate memory like an infinite recursion or a forkbomb. 2. That operation is not realtime-safe (but still it's much closer to being so than just blocking...) 3. It's only usable by the GUI socket and never by [netsend]. 4. While that buffer together with t_guiqueue allow GUI updates to be delayed for as long as necessary, it doesn't solve the problem that it can send information that is already outdated and redundant. This can be important in preventing problem #1 for a very heavy GUI. DesireData has had this problem essentially dealt with since a long time, but it lacks some fine tuning to get more robust. ------------------8<--------cut-here--------8<------------------ matju, you may be interested in "Jim" - that does have closures and on the Wiki you can find several attempts and experiments regarding closures: http://wiki.tcl.tk/closures is there something like listbox but which works as a popup menu ? tk_optionMenu is an old-school version or get a combobox from BWidget or tile 1. wish8.5 desire.tk city.pd &> err 2. ctrl+e, ctrl+a, shift+right*3 (or just once if profiling) 3. times (tclx) is there a wrapper for libagg for tcl? AGG of antigrain.com don't know of one, but SWIG, Critcl, or ffidl might plug the gap [initbang] & [closebang]: https://sourceforge.net/tracker/?func=detail&atid=478072&aid=1544041&group_id=55736 [s] Ed Kelly reports that ALSA 24-bit output does not work? to dave griffiths: I think that this is three feature requests: 1. performing replacement of wire-object-wire by a single wire, as a single operation in the GUI 2. make that operation atomic in terms of DSP recompilation. 3. break down DSP recompilation in pieces so that it is more "incremental" for large patches. In the case of object insertion, (2) and (3) are not implemented either, but step (1) already has most of the desired effect; for the message system, step (1) is all that is needed. DSP is more work and I know less about DSP. It'll take me a while to get there; but (2) doesn't seem so hard. http://www.tomsawyer.com/gallery/index.php [b] matju to atwood: If I had automatic positioning in DesireData, it would be as an option: e.g. objects could default to "floating around" (that is, automatic positioning), but be pinned down into specific positions. In that case, an exception has to be done for [inlet] and [outlet] objects mostly. (the DS subsystem should be skipped over as well...) I could also have a use for some semi-automatic repositionings: for example, there could be a keyboard shortcut to reposition a non-"floating" object wherever it would go if it were floating, and if the user doesn't want it s/he can Ctrl+z it. http://www.graphdrawing.org/ you select a bunch of objects and group them together .... then you can select all the objects in that group later, if needed, by its name like, you start to build some mixer patch .. and then you add a chain for an external fx, so you can put all associated objects in the "ext.fx" group ... whenever it gets so messed up that you forgot what is what, you can just select the groupt you want, and see/move/whatever the involved objects the group name could also act as a template for the name of a subpatch, if one decides to finally put them into one .... #--------#--------#--------#--------#--------#--------#--------#--------#-------- interface wishlist from timvets (2008 Feb 17) Hello, here's my current Pd GUI wishlist, things that could streamline my work flow, things that don't seem logical to me...etc: I wish: [ ] going in and out of edit mode was reflected by the cursor turning into a hand or arrow immediately, not requiring the user to move it first, who, if newbie, can get confused if he/she hasn't moved the mouse. (this is the case on some versions I use in class, specifically pd-extended OSX I think) [ ] shift-click-and-drag on a number box would also work after you already clicked. Another idea: ctrl-click-drag to increment in steps of 10 or 100. [ ] home, end, shift+left/right, ctrl+left/right, ctrl+shift+left/right would work within object boxes just like in a text editor. [ ] click+drag a single object or messagebox wouldn't automatically activate text entry mode but the object itself stays the selection, so that you can move it again or use arrow keys for repositioning without having to deselect+reselect first. [ ] for a multiple connections facility, to connect all outlets of object a to all inlets of object b, and variations on that. (I think max has had this for a while, and maybe desiredata ?). [ ] 'subpatcherize' [ ] that when deleting all text in a comment and clicking outside it, the comment would be deleted, so that if you save the patch, close it, and reopen it, there doesn't appear the word 'comment' everywhere you left a 'blank' comment this way. Alternatively it could become 'comment' upon finalizing an empty comment, so that you can still see, select and delete it. [ ] the file browser (openpanel/savepanel) would support keystrokes to navigate: alt+up one dir up, tab to toggle focus between text entry and graphical area (where folders and files are displayed)...etc [ ] opening the filebrowser wouldn't cause the Pd main window to pop in front of all the patcher windows after it is closed. [ ] one object could be finalized by clicking the outlet of another object, so that you can immediately connect it. The extra click outside the object to finalize it first is unnecessary. When I click the outlet of another object, it is obvious that I am done typing the name of the current one. #--------#--------#--------#--------#--------#--------#--------#--------#-------- marius schebella 2008 Feb 17 Hi, this list is great! I would like to add the one again that I posted yesterday (sorry for double posting, but this thread subject is better) [ ] when only one object is selected and you start typing (any other than arrows) it should be possible to write into the object without an additional click into the object. I often use ctrl+d to duplicate an object and then arrow keys to place it on the canvas, and then I would like to just start typing into the object. [ ] when there is more than one object selected and I click into one object, but do not drag, then that object could switch to type-entry mode. right now I have to unselect all objects by clicking into the canvas and then click into the box to start text entry. [ ] exiting entry mode with enter would actually be nice, too. (for messages cr could be shift+enter (the cr is overwritten anyway). [ ] more actions could be triggered by keyboard shortcuts? [ ] the alt click and drag function. you click on an object and as soon as you start dragging that object is duplicated, but at the same time you already have the new object at the cursor position and can place it fast at a new spot. I want to point out that in many cases this would mean different behaviour between clicking, and clicking+dragging. plus new: keyboardshortcuts to bring the pd window to the front (to watch console output. [ ] and also change the cursor to arrow when you hit the command key to imply that clicking on messages or numbers has different behaviour (play mode) when you hit apple (or ctrl on win/lin?). marius.