Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
266 lines (264 sloc) 18.6 KB
Add below. Lines starting with - are done. It would be nice if each fix was done with a
dedicated git-branch, with remark starting with 'fix0001:' etc.
-0001 Wed Feb 24 11:40:47 CET 2010 TODO event_output MidiEvent support
Sat Mar 6 22:48:43 CET 2010 DONE
-0002 Thu Feb 25 22:22:53 CET 2010 TODO make rplaymidi++ work as a two step system
a) build an in-memory chunk NODE -> midifile->chunk
b) play the tracks in the chunk NODE -> chunk -> device[s]
Fri Mar 19 21:00:38 CET 2010 more or less, by virtue of midifilereader + -writer.
-0003 Sat Feb 27 21:50:12 CET 2010 BUG rplaymidi reads a NoteOn without a NoteOff
in fixtures/eurodance.midi. Note 12, Rhythm track. I believe this was recorded
with arecordmidi. So who's to blame? Is there an official midi file dumper somewhere?
Tue Mar 16 20:26:02 CET 2010 FIXED. At least in midifilereader.rb
0004 Thu Mar 4 23:20:06 CET 2010 BUG rmidiroute.rb:14:in `block in midi_route': undefined method `set_subs'
NOTE TO SELF: the subscription API was incomplete, but this has been mended.
-0005 Thu Mar 4 23:24:01 CET 2010 TODO writing ev: param := ':modwheel', reading same event -> param == 1.
This is an inconsistency. Must be mapped back.
Sat Mar 6 22:48:43 CET 2010 DONE
-0006 Mon Mar 8 21:08:06 CET 2010 BUG emptying the buffers is no good enough to avoid hanging notes.
NoteOns may already have arrived in a device so we MUST send the NoteOffs.
First make sure we use MidiEvent.
I noticed the following: the INT-handler truly gets first. So we flush the queue.
After that NoteOff's for hanging notes are sent, but to no avail
Finally we get in the ensure of the Sequencer constructor.
No problem, use rb_thread_blocking_region and SignalException
Mon Mar 29 17:29:03 CEST 2010
-0007 Thu Mar 11 21:39:48 CET 2010 BUG using alsa mallocs causes a critical condition since it uses
malloc (probably) and not the ruby wrappers. ALLOC or ALLOC_N.
Also a failure should raise NoMemError. The least I can do is make sure these all go
trough one container.
Sat Mar 27 21:40:51 CET 2010
-0008 Thu Mar 11 23:36:01 CET 2010 TODO: queue_timer interface is lacking...
Mon Mar 15 19:00:52 CET 2010 DONE
-0009 Mon Mar 15 19:01:17 CET 2010 BUG: merging events through pipes cannot work since notes will
be out of order.
Mon Mar 15 20:13:17 CET 2010 FIXED
-0010 Wed Mar 24 23:41:10 CET 2010 TODO: snd_seq_event_output should signal a possible block.
Also we should take care in not sending half messages. So we must make sure ahead that there
will be enough space. Compare SYSEX handling where outputbuffer is sometimes increased.
Problem: sometimes we send 2 or 3 events. Could be bad if ev1 is send and then 2 fails.
The solution is to do polls using Kernel#sleep and NOT the c version!!
This way the C calls can remain as they are, even though the API is changed.
That way we can actually interrupt the sequencer and enter the ensure.
All that is left is to use trap on INT etc. to execute remove stuff on the queue.
See miniarp.
The entire way blocking woks has been reviewed
Mon Mar 29 17:29:03 CEST 2010
-0011 Sat Mar 27 18:18:19 CET 2010 FIXME: I discovered rb_thread_blocking_region.
This means there is really no problem using blocking after all.
Should wrap ALL potentially blocking calls. I don't know for sure if this is the case...
Sat Mar 27 21:41:42 CET 2010
0012 Mon Mar 29 17:30:34 CEST 2010 TODO: missing events in alsa_seq.cpp event_output
queue messages and alsa connection messages are blatantly missing.
To see this disconnect two ports using kaconnect, and player complains.
NOTE TO SELF: these events are sent on port 'SYSTEM ANNOUNCE'. It probably works.
0013 Mon Mar 29 17:33:12 CEST 2010 TODO: checking impact GC on realtime filters
There is a GC.count method that tells you how many times the GC has run.
-0014 Mon Mar 29 21:21:36 CEST 2010 HOWTO implement splitter.
The next task is to split a recording into its separate channels and save these
and then to play them back simultaneously (which is the reverse process).
I) could make a node with an outputconnector per channel and then connect the yamlwriters
to this.
II) alternatively a filter could be used between each writer and the original node.
This way several nodes all connect to one socket but they read different stuff.
III) a mix. The splitter receives a request for some event. If there are events in
the stashbuffer for the output we return the first (FIFO). Otherwise we start
reading events from the input. If the event matches the splitter condition we return it
and we are done. Otherwise we stash the event in a FIFO buffer attached to another
splitter output (the one with the proper condition). Maybe we could try them one
by one. Finally, if there is no splitter condition valid, the event is discarded.
II make look cleaner but has a problem. Each filter has to be given all data which
increases the number of event handlings. It is also closer to how things work now.
The writer is always the active reading process, while the reader process reads
on demand.
I is clumsier in that we now have to connect our next node to some named subnode of the
What to split? channels come to mind. And maybe port destinations.
A range of keys on the keyboard. A minimum or maximum gate time.
Now we are getting somewhere. It can be completely generic with any kind of query
on an event that is possible. The query would obviously be a ruby block.
Indentity can be seen as a Splitter with { |ev| true } as its condition.
A Splitter must be given names + conditions to setup its output structure.
Fri Oct 8 21:28:25 CEST 2010 FIXED
0015 Thu Apr 1 10:40:41 CEST 2010 TODO: review 'combine' and split options. Currently only active
in Chunk#consume which is stupid and the wrong place. The previous version had major problems
with blocking but that is no longer the case. So this can be done by filters.
Well, 'split_channels' really only applies to Chunk at the moment. All producers
are pure messagecreators, and tracks no longer apply. In that sense, a Chunk is now a Filter
and not a Producer perse.
Currently I cannot combine notes in Recorder, which is bad. On the other hand, combining
still delays the original noteon message! So it depends on the situation. And it is not
a big deal if disfunctional! YamlWriter should be able to use it though. And MidiFileReader
could use it. Workaround: use a chunk filter.
0016 Thu Apr 1 23:10:40 CEST 2010 FIXME: CTRL-C + Player -> small delay shutting down
This can be avoided by sending a special InterruptEvent if the caller is interrupted (which
is now more likely then Player itself). In fact Player cannot be interrupted since it calls
each_fiber which does not return (it's weird). On receipt of this event we clean
the queue (but no close yet)
-0017 Thu Apr 1 23:14:14 CEST 2010 BUG: Player + threads deadlocks. But it's strange since basicly,
there is only one extra thread, because the main process is just calling 'join'.
It may also be event_output hanging. But why? What have threads got to do with this?
It is now certain that event_output() hangs (the wrapper in
It seems that using rb_funcall is a nono for code within a rb_thread_blocking_region
callback. What is likely happening is that the GIL somehow got locked.
This could then be fixed by putting it in a more precise spot. It now embraces too much code,
that would not block anyway.
Fri Apr 2 12:24:10 CEST 2010
0018 Fri Apr 2 10:36:35 CEST 2010 FIXME: Chunk as a producer does not create the TrackEvents and
the initial tempo may also be missing.
-0019 Wed Sep 29 19:59:26 CEST 2010 BUG: rrecordmidi++ does not understand '-?' for --help
Wed Oct 6 15:49:47 CEST 2010
-0020 Wed Sep 29 20:13:13 CEST 2010 bin/node_identity.rb --output='UM-2 MIDI 2' --input=/tmp/t.yaml GIVES:
~/Midibox/lib/rrts/midiqueue.rb:88:in `set_queue_tempo':
wrong argument type RRTS::Driver::AlsaQueueTempo_i (expected Data) (TypeError)
from ~/Midibox/lib/rrts/midiqueue.rb:94:in `tempo='
from ~/Midibox/lib/rrts/midiqueue.rb:53:in `initialize'
from ~/Midibox/lib/rrts/sequencer.rb:494:in `new'
from ~/Midibox/lib/rrts/sequencer.rb:494:in `create_queue'
from ~/Midibox/lib/rrts/node/player.rb:145:in `block in consume'
from ~/Midibox/lib/rrts/node/node.rb:64:in `block (3 levels) in each_fiber'
from /usr/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
from ~/Midibox/lib/rrts/node/node.rb:62:in `block (2 levels) in each_fiber'
from ~/Midibox/lib/rrts/node/node.rb:61:in `loop'
from ~/Midibox/lib/rrts/node/node.rb:61:in `block in each_fiber'
It seems that AlsaQueueTempo_i is never seen as originating from snd_seq_queue_tempo_malloc??
Fri Oct 8 21:26:52 CEST 2010 FIXED
0021 Fri Oct 8 21:26:01 CEST 2010. Change 'skew' consistently into a float.
0022 Thu Oct 21 21:35:36 CEST 2010. Building the system when Qt works really needs a busy-bar.
I can see something is being done but a user will be confused if a gem install takes a long time.
-0023 Thu Oct 21 21:41:30 CEST 2010. check_gem loops and causes 100% CPU load!!!
Thu Oct 21 21:48:43 CEST 2010. FIXED
0024 Thu Oct 21 22:38:59 CEST 2010. If you load and quit, you get a 'save as' box. Or it saves
even if nothings changes. How do we keep a 'dirty' flag for such external data?
And if dirty (idea: set @dirty on the @root maybe) is set, what is the condition
that it is clean again. This relies very much on what a 'save' of a model instance means.
So it should probably be part of the Model module.
0025 Thu Oct 21 22:45:36 CEST 2010. If it asks to save the data, when closing down, it must be
with a 'save|do not save|cancel' dialog. And if I cancel the form must not be closed.
-0026 Wed Oct 27 23:02:59 CEST 2010. midibox crashes (upgraded to maverick. Qt4.7)
~/Midibox/lib/reform/models/structure.rb:175: [BUG] Segmentation fault
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
-- control frame ----------
c:0045 p:---- s:0167 b:0167 l:000166 d:000166 CFUNC :method_missing
c:0044 p:0212 s:0165 b:0165 l:000164 d:000164 METHOD ~/Midibox/lib/reform/models/structure.rb:175
c:0043 p:0022 s:0160 b:0157 l:000147 d:000156 BLOCK ~/Midibox/lib/reform/models/structure.rb:192
c:0042 p:---- s:0153 b:0153 l:000152 d:000152 FINISH
c:0041 p:---- s:0151 b:0151 l:000150 d:000150 CFUNC :each
c:0040 p:0219 s:0148 b:0148 l:000147 d:000147 METHOD ~/Midibox/lib/reform/models/structure.rb:191
c:0039 p:0251 s:0141 b:0141 l:000140 d:000140 METHOD ~/Midibox/lib/reform/models/structure.rb:147
c:0038 p:---- s:0137 b:0137 l:000136 d:000136 FINISH
c:0037 p:---- s:0135 b:0135 l:000134 d:000134 CFUNC :new
c:0036 p:0296 s:0131 b:0131 l:000130 d:000130 METHOD ~/Midibox/lib/reform/models/structure.rb:168
c:0035 p:0022 s:0126 b:0123 l:000113 d:000122 BLOCK ~/Midibox/lib/reform/models/structure.rb:192
Fri Oct 29 22:43:52 CEST 2010
0027 Sat Oct 30 15:33:21 CEST 2010. Design error. Specific for Structure::unshift, and changing array order.
Each structure has a 'keypath' stating how to get to it from the root. But if the record is in an array
then the keys can easily change by inserts in the middle or the unshift operation.
Workaround: don't do this then... If each structure has a parent, then we do not need to store the keypaths but only
the key. And we could use 0 for all array elements indicating that we must lookup the index in the parent.
That could be slow though. But the keypaths are not used that much anyway.
-0028 Sat Oct 30 21:48:37 CEST 2010. lib/reform/examples/models/demo03.rb is broken. And so is midibox.
I changed Structure to not be a Control (yaml problems -> SEGV, bug 0026). This changes the parenting, and a structure may not
have a parent. It may go unreferenced and then ruby may delete the QModel (if it has parent nil).
Note that setting a model in a view does NOT set the parent (as models count as shared).
Diagnostics: List has a model, but when setCurrentIndex(4) arrives it says: undefined method `index' for nil:NilClass
This can be fixed by deleting the 'circle' in the canvas (or the entire canvas). But this can't ever have anything to
do with it. Adding/removing tags also changes the pattern.
Sat Oct 30 22:08:04 CEST 2010
0029 Tue Dec 21 21:46:41 CET 2010. Bug in undolist: you can undo and then not redo but something else. At that
point a part of the undo list must be erased. Since I use a shadow-copy of it this behaviour must be replicated
0030 Tue Dec 21 21:47:48 CET 2010. Fedora14 support. Running virtual now.
Current state:
Failed to load Qt4, attempt to build it right here and now
CHECKING '~/.rvm/src/ruby-1.9.2-p0/include/ruby.h'
Failed to load Qt4, attempt to build it right here and now
CHECKING '~/.rvm/src/ruby-1.9.2-p0/include/ruby.h'
Failed to load Qt4, attempt to build it right here and now
CHECKING '~/.rvm/src/ruby-1.9.2-p0/include/ruby.h'
etc..... load == 100%
However a restart of the midibox script fixes it.
0031 Sat Nov 20 23:09:47 CET 2010 BUG:
~/Midibox/lib/rrts/midievent.rb:149:in `populate': undefined method `id_clients' for #<RRTS::Sequencer:0x00000002855690> (NoMethodError)
from ~/Midibox/lib/rrts/midievent.rb:149:in `initialize'
from ~/Midibox/lib/rrts/sequencer.rb:322:in `new'
from ~/Midibox/lib/rrts/sequencer.rb:322:in `event_input'
Happens on qtrconnect after unplugging + replugging usb-midiconnector.
Must be a PortStartEvent then ?
0032 Sat Nov 20 23:09:47 CET 2010
Another thing: a list(view) does not reload the internal model if a transaction is committed on it.
qtrconnect, unplug midi port. Should update list automagically.
0033 Sun Jan 2 13:44:08 CET 2011
circle pos: [30, 30], size: 30 is drawn at pos 60, 60 (center 75,75). Something is off.
0034 Fri Jan 7 23:21:10 CET 2011
:: ruby1.9.1 examples/painting/cubics_demo04.rb
when clicking in an active vertex:
~/Midibox/lib/reform/graphics/activepath.rb:93:in `setVertexPos': undefined method `path' for #<Reform::PathItem::PathBuilder:0x00000001684380> (NoMethodError)
from ~/Midibox/lib/reform/graphics/activepath.rb:34:in `itemChange'
-0035 Sun Jan 9 14:10:28 CET 2011
struct does not propagate at all it seems, see lib/reform/examples/processing/data1_2b.rb
data1_2.rb shows a circle that is immediately 'red', however it does that because the dynamic color
constructor immediately assigns the proper value from the attached model.
However, this probably only works because the model is declared first. It should really not matter
and a dynamic attribute constructor should NOT assign the value to begin with.
Sun Jan 9 20:25:13 CET 2011
-0036 Sun Jan 9 14:33:46 CET 2011
calling pen/stroke/brush/fill does not set the parent Control (not qt one). As a result putting a connector
in it breaks the 'want_data!' message stream and propagation will not work. See data1_2b.rb as mentioned
in 0035.
Sun Jan 9 20:25:13 CET 2011
0037 Sun Jan 9 17:39:08 CET 2011
The QReplicator handles pen + brush inconsistently. Should be same as 'Empty' class.
0038 Wed Jan 12 21:00:50 CET 2011
Duplicator and Replicator must gain GENERIC ability to step-operate on ANY parameter.
This can of course be done with procs. Just define a 'step' proc that operates on the (re|du)plicate
0039 Sun Jan 16 23:12:25 CET 2011
prelims.rb should get the notion of a package. Since midibox = reform+alsa. Currently the 'reform.bash' starter
check for alsa which is stupid.
0040 Sun Sep 11 13:49:21 CEST 2011
Need an 'observe' clause for all gui elements. Reason: shared datasource elements can't otherwise be
observed correctly. It should add a toplevel observer, and not work really different than how the
application handles changes right now.
0041 Mon Sep 12 22:22:37 CEST 2011
after building the qtbindings gem, it cannot be loaded! Some caching issue, because it. qtbindings is inconvenient. Constructors are
hacked and slow.
works after that.
-0042 Thu Sep 22 21:07:50 CEST 2011
Need RStore::Item class to create auto-persistent subclasses, that allow more complicated
Wed Oct 19 22:11:32 CEST 2011
-0043 Sun Oct 2 17:30:45 CEST 2011
Regression: reform spectest App: ICE default IO error handler doing exit(), errno = 4
Mon Oct 3 21:05:38 CEST 2011
Did not occur one day later. Must be some weird X state???
-0044 Mon Oct 3 20:51:32 CEST 2011
~/Midibox/lib/reform/app.rb:389:in `module_eval': undefined method `rfcircle' for module `Reform::GraphicContext' (NameError)
from ~/Midibox/lib/reform/app.rb:389:in `module_eval'
from ~/Midibox/lib/reform/app.rb:389:in `registerControlClassProxy_i'
from ~/Midibox/lib/reform/app.rb:1170:in `block in registerKlassProxy'
from ~/Midibox/lib/reform/app.rb:1170:in `each'
from ~/Midibox/lib/reform/app.rb:1170:in `registerKlassProxy'
from ~/Midibox/lib/reform/app.rb:1123:in `block (2 levels) in internalize'
from ~/Midibox/lib/reform/app.rb:1123:in `each'
from ~/Midibox/lib/reform/app.rb:1123:in `block in internalize'
from ~/Midibox/lib/reform/app.rb:1110:in `each'
from ~/Midibox/lib/reform/app.rb:1110:in `internalize'
from ~/Midibox/lib/reform/app.rb:1235:in `block in internalize_dir'
from ~/Midibox/lib/reform/app.rb:1233:in `each'
from ~/Midibox/lib/reform/app.rb:1233:in `internalize_dir'
from ~/Midibox/lib/reform/app.rb:1253:in `app'
Mon Oct 3 21:02:00 CEST 2011
reason circle -> rfcircle -> rfellipse. Feature: this is not handled at all.
So relinked circle -> rfellipse directly.
-0045 Sat Oct 8 12:23:12 CEST 2011. Regression. analogclock2/3 don't rotate properly.
The arms OK, but the empty does nothing...
Sat Oct 8 19:41:00 CEST 2011 Fixed. postSetup -> model_postSetup
0046 Sat Oct 15 21:14:45 CEST 2011. Using 'x' to set a bool prop is deprecated.
Either say 'x true' or 'x!'.
0047 Sat Oct 15 21:15:23 CEST 2011. qtbindings is inconvenient. Constructors are
hacked and slow. bugs are hard to trace due to 'method_missing' crap.
0048 Wed Oct 19 22:09:40 CEST 2011. model_value2key is broken for hash models.
If changed it breaks combo_spec. But in calendar.rb the whenActivated should
receive second argument 'key'. This is always nil which is completely wrong!