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 [x] done ------------------8<--------cut-here--------8<------------------ [s] encapsulate wires list [s] observable boxes list [s] observable wires list [s] gop filter [s] triad ------------------8<--------cut-here--------8<------------------ [s] class_setreinit(t_pd *, t_symbol *s, int argc, t_atom *argv) [s] fix canvas_merge, canvas_remove_nth, canvas_sort [s] recreate abstr instances after abstr save [s] [bng] messages get duplicated upon entering a subpatch??? [s] rewrite [any] [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] Save Changes? Save Changes? 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 [c] split View into several classes [s] extraneous space at end of binbuf_gettext [s] make t_hash thread-safe (use external iterator) [s] take advantage of the support for zero-size arrays in gcc. [s] writesf_free has deadlock. (assigned to Sylvain) [b] look into race conditions and locking [c] figure out what to do about the existence of [$self look] vs ordinary attributes (pointer_sense= and such) [s] [error] [b] localise error messages [b] colorised console with hyperlinked error messages [c] atomic undo [c] undo subpatch [c] numbox: is_log [c] change the order of the fields in Properties if it makes things more logical than the order of fields of savefn [c] [hradio] : chg -> is_log [c] [vu] props : scale should appear instead of is_log [s] figure out how to keep [pd] subscribed even when closed. [s] new parser for nested lists and extended symbols [s] update s_audio.c to support any number of devices (not just max 4) [s] look for new bugs involving %*s added around 2007.06.28 [c] new way to do View get_canvas [b] too much duplication of inlets vs outlets [s] too much duplication of adc vs dac (see s_audio.c) [c] implement multiple cascaded languages (use listbox+up+down) [c] def Menuable raise {} {wm withdraw $w; wm deiconify $w [s] what to do with post() in case of -listdev, etc.? [s] turn old [dropper] code into a feature of SymbolBox [s] inheritance: [super] "instantiates" other abstraction with same $0; [self] allows sending messages to self; [declare super ...] makes the tree. [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] server don't send delete message back after client sending "object_delete" (http://pastebin.ca/318343) [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] [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 [s] prevent hidden subpatches/abstraction-instances from being loaded in the client all of the time. [s] -lib in .pdrc crashes server: http://pastebin.ca/286300 [s] server don't pick up changes via NumBox reload, ie the width: <- .x8068058 reload 2 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 256; -> change x8068058 x8067c50 {#X obj 335 166 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 256;} [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 optimization [ ] fix double delete of [pd]. [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.) [ ] note that Marius Schebella is interested in benchmarks [ ] atomically with multiple level [ ] tidy_up/snap to grid [ ] 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. [ ] 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); matju: another big bug for me - v/h sliders in existing patches bounce repeatedly back to bottom when some kind of event occurs. you have to move the mouse very gently back and forth until the slider stays at the location you want, then without moving the mouse, release the mouse button :( [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] bug: you can move parts of gop subpatches, from the parent patch! [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 width and height (or remove those settings) [x] Implement (or fix) Find, Find Again in class Client [x] with ability to search substrings [ ] with ability to search across canvases [ ] all canvases [x] all subcanvases [x] only the current one [ ] with regexps [ ] with replace [ ] in hsl-help.pd, [hsl] shouldn't appear as a Radio. [ ] canvas dialog: [ ] 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] finish merging 0.40 (wasn't it finished?) [s] merge 0.41 (no?) [s] proper symbol quoting [s] refcounted symbols [c] patching-in-tongues follow-up [c] def def [c] take care of needless "save changes?" [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. [-] write an installer in Tcl/Tk. [s] canvas_object_insert() [c] simplify def Dialog add [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 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... (?) [b] rewrite [image], [display], [knob], [grid], [popup], ... [ ] 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] ReadLine or NCurses interface [c] make commandline options reloadable at runtime [x] canvas scrollbars auto-disappear when not needed. [b] implement dirty flag [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 dialogs tapping into method signatures) (?) [s] hooks for outsourcing the preceding stuff to a plugin (eg: GridFlow, PyExt) [b] VT100 colours in console [b] [graph] is too slow (gui) for real big arrays [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] colored 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 [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 sort of pd-extended, call it DesireData Express or (gasp) Extraordinaire. [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" dialog. [s] turn [makefilename] into something that doesn't suck. (alias it to [sprintf] or [format]) [s] merge martin peach's tcp externs into the core [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 ....