griddle - an invisible splitter/spanner for serialosc

  • here comes griddle, an invisible (and linux friendly) splitter/spanner for serialosc:

    https://github.com/artfwo/griddle

    it's designed to serve two purposes: create large virtual devices from physical monomes and split larger monomes into small virtual devices. 8x8 is the smallest possible unit.

    griddle works the same way as serialosc. it's a service that announces your virtual devices through zeroconf and routes osc-messages to/from the monomes.

    i've tested it on linux with rove so far, a demo video of a working setup is here:

    http://www.youtube.com/watch?v=tCydmZe-ar0

    thanks to nightmorph for the name and #monome crowd for the input, i'm looking forward to hear more. so please send in comments, suggestions, patches, questions, i'd be glad to reply!

  • If you're using Gentoo Linux, I created packages for griddle in my overlay:

    https://github.com/nightmorph/overnight

  • do all i need to do is set up the conf and then run python griddle.py?

    Been stuck in the process of poking around in meme.py and realized i had to install python26-gtk, and am now stuck in the eternal qt4 package upgrade during a miscaclulated package manager update so i cant do anything right now.

    I see the virtual devices broadcasting over bonjour, but monomeserial.maxpat doesnt seem to want to connect to them. My theory is that my actual device (new 128) isnt being routed through the virtual devices properly.

    Anywho, I feel like a school girl in a taffy store with this one, I can't wait to get it to work!

  • Awesome idea.

    Just tried it on OS X Snow Leopard. Python version.
    Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
    [GCC 4.2.1 (Apple Inc. build 5646)] on darwin


    Conf looks like this

    # virtual device name
    [supernome]
    port = 3333
    size = 24, 16
    offset = 0, 0

    # attached physical devices
    m128-400 = 16, 0
    m0000146 = 0, 0

    I see "griddle-supernome" in 7up 2.0.5rc2's connection picker. When I click "Connect" the following is logged to the console.

    [Chaos-3:~/Downloads/artfwo-griddle-7495e6d] chrislloyd% python ./griddle.py
    creating supernome (3333)
    /Users/chrislloyd/Downloads/artfwo-griddle-7495e6d/OSC.py:2368: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
    self.message = "No callback registered to handle OSC-address '%s'" % pattern
    /Users/chrislloyd/Downloads/artfwo-griddle-7495e6d/OSC.py:2349: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
    return self.message


    If I try to send a test message to turn all leds on, I get

    OSCServer: NoCallbackError on request from localhost:57539: No callback registered to handle OSC-address '/7up/grid/led/all'
    OSCServer: NoCallbackError on request from localhost:58151: No callback registered to handle OSC-address '/7up/grid/led/all'

  • bar|none: how'd you get it running?

  • @flyingoctopus, you need gtk only to run the emulator, griddle should work on any python installation, you only have to edit the config for your needs.

    @bar|none, i added a couple more system callbacks to the frontend. this is not going to fix anything yet. i need to know the handshaking procedure for max, looking for it right now.

  • @bar|none, apparently the '/7up/grid/led/all' error happens because 7up doesn't autoset it's prefix on connecting to griddle. change the prefix to "monome" in 7up preferences and see if it helps.

    also, i noticed that your monomes aren't detected in griddle output. did you have serialosc running when starting griddle?

  • sorry i'm an illiterate here. i'm very interested with this application but couldn't understand anything about it. i double-clicked it and the terminal program launched and that's it. what should i do next?

    thanks.

  • @aryschien, you have to edit griddle.conf (look at the existing conf for an example).

    when it starts, it will act as a proxy between serialosc and your application.

  • thanks. i'll try to figure it out when i got home. (but why are we whispering? XD )

  • huh? whispering comments does not make them show up in the discussion thread?

  • yeah whispers are like private messages. you can edit the old post, clearing the whisper column and the post will be visible.

    i tried to split the 128 to 2 8x8. i changed the griddle.conf like this:

    # virtual device name
    [m1]
    port = 8000
    size = 8, 8
    offset = 0, 0

    [m2]
    port = 8888
    size = 8, 8
    offset = 8, 0

    # attached physical devices
    m0000003 = 0, 0

    and i failed. where did i do wrong?

    p.s.: is "griddle.py" the only thing i need to run?

  • @aryschien, you should write m0000003=0,0 for every virtual device you're creating (see griddle-splitter.conf example). BUT i just found out, this mode is broken, sorry. i am going to fix it tonight though.

  • splitting is fixed, code uncluttered, readme created!

  • 7up does autoset the prefix. Note that we are talking about .rc2 here which is the serialosc version.

    I can connect just fine to each monome through serialosc, even if the monome prefixes were configured differently than "/7up".

    Just to take 7up out of the mix, I tried using grainstorm with the same result.

    Wondering if you tested with the baseline serialosc.maxpat that tehn wrote?

    [edit] Actually, I just downloaded the latest version and it does connect now. However, 7up thinks the resulting virtual monome is an 8x8 grid. Are you sending the final monome size on /sys/info? If not, can I request it? 7up sizes itself automatically to whatever grid size is connected.

    Getting this as well

    OSCServer: NoCallbackError on request from 192.168.1.103:60458: No callback registered to handle OSC-address '/sys/info'

    Anyway, seems to be working great at 8x8 so this is going to be a very useful app.

  • @bar|none, that's right, size is sent on a /sys/info request (according to the wiki docs at least). the handler was there, i just forgot to connect it. should work now, check the latest update.

  • tried griddle with pages
    serialosc connection show the device
    but doesn't create a page when device is selected

    got a "no callback" message for /sys/info

    see attached

    664 x 334 - 33K
  • @rawore, /sys/info should now work, reget the source.

  • ok, got the new source.

    no message from griddle about callback, but still not
    getting a pages device window. I'll drop a note
    in pages thread (using pages 2.2a3)

  • tested griddle+max on linux (using the hacked serialosc.maxpat), works great! will try pages later.

  • Sweet, size reporting is working, however, now I see a bug in 7up. So going to fix that later. Good stuff.

  • @artfwo

    i split the 128 into 2 8x8 and it worked. except that there was no led lighting up in the second 8x8 area. (it worked, just no light.)

    my griddle.conf is like this:

    # virtual device name
    [128-L]
    port = 3333
    size = 8, 8
    offset = 0, 0
    # attached physical devices
    m0000003 = 0, 0

    [128-R]
    port = 3334
    size = 8, 8
    offset = 8, 0
    # attached physical devices
    m0000003 = 0, 0

  • kay, I put a pages console trace up in that thread.

    a dot at the end of the device id?

    seems like I remember that from somewhere, not that
    I remember which thread...

    669 x 332 - 69K
  • This is an awesome idea, but may I ask how to set it up ?

    Do I need to install python 2.7.1 or 3.2 ?
    Where to put all the source files ?

    Oh, I'm completely lost in python terrain...
    I'm on Mac OS 10.5.8

    Thanks

  • @aryschien, the right half should work now as well (tested in meme emulator).

    @rawore, the dot in the end should not be a problem, it's the way of naming hosts in zeroconf

    @areo sono, get python 2.7, unpack the sources anywhere you like and run "python griddle.py yourconfig.conf". hope this helps!

  • just looked around in griddle.py. are you sending /sys/type ?

    think pages might be expecting it.

  • /sys/type is not specified anywhere in http://docs.monome.org/doku.php?id=app:serialosc

    serialosc does not seem to send it as well.

  • @artfwo - i'm running the "artfwo-griddle-febb506" version, but still no light on the right half. is the procedure like this:

    - launch griddle.py with terminal
    - launch monome applications and whatever we usually do next

  • artfwo: your griddle-splitter.conf example totally helped, my conf originally looked like @aryschien thanks for the amazing app!

  • hi artfwo, trying to get this going, i grabbed the latest from github but i am seeing the following messages in the console:

    OSCServer: AttributeError on request from Tom-Laptop.local.:50172: Monome instan
    ce has no attribute 'xsize'
    OSCServer: AttributeError on request from Tom-Laptop.local.:50172: Monome instan
    ce has no attribute 'xsize'
    OSCServer: AttributeError on request from Tom-Laptop.local.:50172: Monome instan
    ce has no attribute 'xsize'
    OSCServer: AttributeError on request from Tom-Laptop.local.:50172: Monome instan
    ce has no attribute 'xsize'

    my config is:

    # virtual device name
    [test]
    port = 3333
    size = 8, 8
    offset = 0, 0

    # attached physical devices
    m40h0146 = 0, 0

    i tried with pages and arpshift, same result, i see the griddle-test device in both cases but can't get leds/presses to go through.

  • to anyone having the "no attribute 'xsize' error": don't forget to rediscover/reconnect to griddle from your application after restarting griddle.

  • just tested griddle against pages. the "midi keyboard" page worked with supplied griddle-basic.conf for my 2 arduinomes without any extra configuration.

    apparently, any problems with 'xsize' are related to udp port conflicts, as we found out on the irc today. double check your application ports and write port=0 in the config file to autopick free ports for virtual devices.

    also, just realised that griddle does not support distributing 2-byte row messages across affected 8x8 units yet, which leads to some display problems, e.g. in rove, the pattern recorder button doesn't blink. working on that.

  • hmm, tried port = 0
    using polygome256 (101 version)
    the griddle-test device stopped showing up
    in my choices for serialosc devices

    changing to fixed port and it shows up again.

    not getting the griddle-test device to connect to polygome256
    even when it shows in list.

    max 5.1.8
    2 gs128s
    f5d4f9f griddle version
    windows 7 python 6.5
    serialosc server

    config file
    -----------
    # virtual device name
    [test]
    port = 3333
    size = 16, 16
    offset = 0, 0

    # attached physical devices

    m128-303 = 0, 0
    m128-516 = 0, 8

  • have found possible issue while in split mode:

    - osx 10.6.7
    - using a gs128 16x8
    - two virtual devices, both 8x8
    - blinkenpark as test app

    virtual griddle devices are well seen and i can either connect "left" or "right" giddle devices.

    but connect to the "left" device, and set blinkenpark to "128" and you'll see it overflows/leaks on the "right" device..

    shouldn't griddle disgard OSC messages for zones that are outside of the virtual device size ? in other words, shouldn't an app be sandboxed to it's assigned virtual device ?

    another tiny thing, add a small message that says "you must specify a config file name" if launched without any args :p

    nevertheless, great soft :)

  • @rawore, getting any console output? with polygome i had to set the prefix by clicking it's "/sys/prefix gome" button before i could use it.

    @rud, yeah splitting is still broken, still requires clipping and a special /led/all handler. as soon as i fix it up, i'll announce it here.

  • splitter mode issues should be fixed by now, please test!

  • @artfwo

    splitter mode works fine now. thanks.

    but i just found another question: how do i use the griddle to connect applications that run with monomeserial (serialOSC), like mlrv?

  • to an application, griddle looks and feels exactly like a monome, so you shouldn't have a problem connecting it through monomeserial.maxpat. (just did a quick test on linux, this seems to work).

  • but i couldn't connect either of the two split virtual monome to mlrv.

    has it got anything to do with the port value? cause both mlrv and monomeserial have fixed port value.

  • well, yes and no. the application is responsible for sending it's listening port to a monome device upon connection, and you have an osc flow, which looks like this:

    . . . . . . . . . . . . . . . . . monomeserial.maxpat mlrv
    serialosc griddle
    . . . . . . . . . . . . . . . . . monomeserial.maxpat (or anything else)

    where each "" character is a send/receive port (application/server port), and all of them have to be different.

    if monomeserial.maxpat has an app port of 8000, mlrv should have something different, like 8001.

  • thanks. i see.

    i just tried again and found that, the problem is that i can't set the "prefix" properly in monomeserial. after connecting the griddle-virtual-device, i typed "mlrv" in the prefix column, but instead of "/mlrv" it showed some digit ("18403" as i just saw).

  • I spent a little bit of time with this the past couple of days and I haven't had any issues with the most recent version and my 256 on os x.

    I was able to run polygome64 [top left 64], tintinnabulome [top right 64], and straw [bottom 128]. I'll keep trying other combinations, but this is exactly what I've wanted since getting my 256.

    Thanks!

    oh and 1 minor feature request. It might be kind of nice to have a "clear" command once griddle is up and running, so I can clear my LEDs then close griddle. This is really more of a luxury request, but I thought I'd ask anyways :)

  • clear the leds on startup and shutdown? why not, a useful power saving feature ;)

    also, @nightmorph, remember the "mirror bug" that happened while you were filming your video? well, the current led_row routing requires physical/virtual grids to be sorted by their offsets for splitting stuff correctly (virtual sections can just be sorted in the config). a fix is on the way too!

  • artfwo: re windows 7, joined gs128s talking to pages

    progress with version in zip named 9d70410
    it runs without the xsize errors and the first run reported callback errors
    subsequent runs do not. pages does not pick up the size info on its device
    page for the griddle-test device. still only creates the page after adding a physical device page. however making a groovy page for griddle test, the
    characteristic pattern of leds on default startup covers both gs128s, oriented as i
    have seen on a single gs128 in other tests. no changes are registered when
    buttons are pushed, whether lit or unlit.

    also tried the latest zip, 9fc2455, but got xsize errors reported in the griddle
    console page.

  • artfwo:

    tested 6a24d20 latest zip, and print modified griddle.py as during chat ; with
    polygome101. max 5.18.
    griddle received messages from apps as evidenced by print statements in chat version and monome keypress after ctl c in both griddle versions.

    no keys were lit. by either griddle version.

    pages restart using config file that showed griddle-test device reconnects to
    monomes receiving keypress with both versions. no keys light.

    pages scratch starts using both versions of griddle have not reliably created a device page for griddle on further attempts.

    griddle-print version shows that pages is sending keypresses, even though
    no device box is created in pages on serialosc setup selection of griddle-test.

    no further occurances of xsize messages with either version.

  • I was wondering. Can griddle split a monome into any number of devices? Can I have 3 monomes on a 128? a 64 and two 32s?

  • no. while that's technically possible, the minimal size is 8x8 due to the way "row", "col" and "map" messages work.

  • artfwo: here's a snapshot of a testrun with the printing debug version of griddle used during our chat http://pastebin.ubuntu.com/626044/ (see attachment).

    this output was received by starting polygome256 from max main window. then clicking the 'connect" button at bottom, once only.

    it appears almost like serialosc has not cleared out instances of "griddle-test" from other runs ( I had been running tests with pages22a11, just before).
    I had stopped the python program using ^c and a monome button press. I had opened a new cmd window and run the program using the 16x16 config. then I ran polygome256 from max5 'open recent' window.

    -----
    I had been getting incrementing port numbers while testing with pages. there is a description, and attached snapshot at http://post.monome.org/comments.php?DiscussionID=9603&page=20#Item_38

    667 x 757 - 112K
  • confounding... serialosc doesn't know anything about griddle instances and cannot "clear" them, it's the job of bonjour. @rawore, may i suggest you test griddle+pages/max on another machine? (phortran mentioned griddle/pages is working for him on windows, so it may be your networking/bonjour configuration that's causing issues?)