[PD] [PD-announce] jit_expr 0.1: Just in time compiled expr/expr~/fexpr~

Marco Matteo Markidis mm.markidis at gmail.com
Mon Mar 19 00:52:28 CET 2018


(probably) last mail of the night :)
I update the llvm to 5.0 and add the cxx flags for include flex header and
m_pd.h. Anyway, something goes wrong...

MMMarkidis:jit_expr dis$ make

[  7%] Building CXX object src/parse/CMakeFiles/parse.dir/scanner.cc.o

In file included from scan.ll:4:

In file included from parse.yy:12:

In file included from
/Users/dis/Documents/Pd/externals/jit_expr/src/parse/driver.hh:9:

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:26:18: error: no
type

      named 'shared_ptr' in namespace 'std'

    typedef std::shared_ptr<Node> NodePtr;

            ~~~~~^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:26:28: error:

      expected unqualified-id

    typedef std::shared_ptr<Node> NodePtr;

                           ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:27:18: error: no
type

      named 'shared_ptr' in namespace 'std'

    typedef std::shared_ptr<Variable> VariablePtr;

            ~~~~~^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:27:28: error:

      expected unqualified-id

    typedef std::shared_ptr<Variable> VariablePtr;

                           ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:28:18: error: no
type

      named 'shared_ptr' in namespace 'std'

    typedef std::shared_ptr<SampleAccess> SampleAccessPtr;

            ~~~~~^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:28:28: error:

      expected unqualified-id

    typedef std::shared_ptr<SampleAccess> SampleAccessPtr;

                           ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:29:18: error: no
type

      named 'shared_ptr' in namespace 'std'

    typedef std::shared_ptr<ArrayAccess> ArrayAccessPtr;

            ~~~~~^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:29:28: error:

      expected unqualified-id

    typedef std::shared_ptr<ArrayAccess> ArrayAccessPtr;

                           ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:30:18: error: no
type

      named 'shared_ptr' in namespace 'std'

    typedef std::shared_ptr<Deref> DerefPtr;

            ~~~~~^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:30:28: error:

      expected unqualified-id

    typedef std::shared_ptr<Deref> DerefPtr;

                           ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:31:18: error: no
type

      named 'function' in namespace 'std'

    typedef std::function<void(std::string v, unsigned int depth)>
PrintFunc;

            ~~~~~^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:31:26: error:

      expected unqualified-id

    typedef std::function<void(std::string v, unsigned int depth)>
PrintFunc;

                         ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:33:36: error: no

      member named 'VariablePtr' in namespace 'xnor::ast'

    typedef std::vector<xnor::ast::VariablePtr> VariableVector;

                        ~~~~~~~~~~~^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:112:16: error:

      unknown type name 'VariablePtr'; did you mean 'Variable'?

        Quoted(VariablePtr var);

               ^~~~~~~~~~~

               Variable

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:75:11: note:

      'Variable' declared here

    class Variable : public VNode<Variable> {

          ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:116:9: error:

      unknown type name 'VariablePtr'; did you mean 'Variable'?

        VariablePtr variable() const { return mQuotedVar; }

        ^~~~~~~~~~~

        Variable

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:75:11: note:

      'Variable' declared here

    class Variable : public VNode<Variable> {

          ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:119:9: error:

      unknown type name 'VariablePtr'; did you mean 'Variable'?

        VariablePtr mQuotedVar = nullptr;

        ^~~~~~~~~~~

        Variable

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:75:11: note:

      'Variable' declared here

    class Variable : public VNode<Variable> {

          ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:119:34: error: no

      viable conversion from 'nullptr_t' to 'xnor::ast::Variable'

        VariablePtr mQuotedVar = nullptr;

                                 ^~~~~~~

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:75:11: note:

      candidate constructor (the implicit copy constructor) not viable: no
known

      conversion from 'nullptr_t' to 'const xnor::ast::Variable &' for 1st

      argument

    class Variable : public VNode<Variable> {

          ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:85:9: note:

      candidate constructor not viable: no known conversion from
'nullptr_t' to

      'const std::string &' (aka 'const basic_string<char> &') for 1st
argument

        Variable(const std::string& n);

        ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:129:24: error:

      unknown type name 'NodePtr'

        UnaryOp(Op op, NodePtr node);

                       ^

/Users/dis/Documents/Pd/externals/jit_expr/src/parse/ast.h:132:9: error:

      unknown type name 'NodePtr'

        NodePtr node() const { return mNode; }

        ^

fatal error: too many errors emitted, stopping now [-ferror-limit=]

20 errors generated.

make[3]: *** [src/parse/CMakeFiles/parse.dir/scanner.cc.o] Error 1

make[2]: *** [src/parse/CMakeFiles/parse.dir/all] Error 2

make[1]: *** [all] Error 2

make: *** [pd] Error 2


2018-03-18 23:38 GMT+01:00 Marco Matteo Markidis <mm.markidis at gmail.com>:

> I managed to add llvm but compilation fails.
>
> MMMarkidis:jit_expr dis$ make
>
> [  7%] [FLEX][Scanner] Building scanner with flex 2.6.4
>
> [ 15%] [BISON][Parser] Building parser with bison 3.0.4
>
> Scanning dependencies of target parse
>
> [ 23%] Building CXX object src/parse/CMakeFiles/parse.dir/scanner.cc.o
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:772:8:
> error:
>
>       member reference type 'std::istream *' (aka 'basic_istream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>                         yyin.rdbuf(std::cin.rdbuf());
>
>                         ~~~~^
>
>                             ->
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:779:9:
> error:
>
>       member reference type 'std::ostream *' (aka 'basic_ostream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>                         yyout.rdbuf(std::cout.rdbuf());
>
>                         ~~~~~^
>
>                              ->
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1112:50:
> error:
>
>       member reference type 'std::istream *' (aka 'basic_istream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>                         YY_CURRENT_BUFFER_LVALUE->yy_input_file =
> yyin.rdbuf();
>
>                                                                   ~~~~^
>
>                                                                       ->
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1232:2:
> error:
>
>       cannot initialize a member subobject of type 'std::istream *' (aka
>
>       'basic_istream<char> *') with an rvalue of type
>
>       'basic_streambuf<char_type, traits_type> *'
>
>         yyin(arg_yyin ? arg_yyin->rdbuf() : std::cin.rdbuf()),
>
>         ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1233:2:
> error:
>
>       cannot initialize a member subobject of type 'std::ostream *' (aka
>
>       'basic_ostream<char> *') with an rvalue of type
>
>       'basic_streambuf<char_type, traits_type> *'
>
>         yyout(arg_yyout ? arg_yyout->rdbuf() : std::cout.rdbuf())
>
>         ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1235:2:
> error:
>
>       use of undeclared identifier 'ctor_common'
>
>         ctor_common();
>
>         ^
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1240:14:
> error:
>
>       out-of-line definition of 'parseFlexLexer' does not match any
> declaration
>
>       in 'parseFlexLexer'
>
> yyFlexLexer::yyFlexLexer( std::istream& arg_yyin, std::ostream& arg_yyout
> ):
>
>              ^~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:30:25:
> note:
>
>       expanded from macro 'yyFlexLexer'
>
>     #define yyFlexLexer parseFlexLexer
>
>                         ^~~~~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1231:27:
> note:
>
>       type of 1st parameter of member declaration does not match definition
>
>       ('std::istream *' (aka 'basic_istream<char> *') vs 'std::istream &'
> (aka
>
>       'basic_istream<char> &'))
>
> yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout
> ):
>
>                           ^
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1241:2:
> error:
>
>       cannot initialize a member subobject of type 'std::istream *' (aka
>
>       'basic_istream<char> *') with an rvalue of type
>
>       'basic_streambuf<char_type, traits_type> *'
>
>         yyin(arg_yyin.rdbuf()),
>
>         ^    ~~~~~~~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1242:2:
> error:
>
>       cannot initialize a member subobject of type 'std::ostream *' (aka
>
>       'basic_ostream<char> *') with an rvalue of type
>
>       'basic_streambuf<char_type, traits_type> *'
>
>         yyout(arg_yyout.rdbuf())
>
>         ^     ~~~~~~~~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1244:2:
> error:
>
>       use of undeclared identifier 'ctor_common'
>
>         ctor_common();
>
>         ^
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1249:19:
> error:
>
>       out-of-line definition of 'ctor_common' does not match any
> declaration in
>
>       'parseFlexLexer'
>
> void yyFlexLexer::ctor_common()
>
>                   ^~~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1287:19:
> error:
>
>       out-of-line definition of 'switch_streams' does not match any
> declaration
>
>       in 'parseFlexLexer'
>
> void yyFlexLexer::switch_streams( std::istream& new_in, std::ostream&
> new_out )
>
>                   ^~~~~~~~~~~~~~
>
> /Applications/Xcode.app/Contents/Developer/Toolchains/
> XcodeDefault.xctoolchain/usr/include/FlexLexer.h:129:31: note:
>
>       type of 1st parameter of member declaration does not match definition
>
>       ('std::istream *' (aka 'basic_istream<char> *') vs 'std::istream &'
> (aka
>
>       'basic_istream<char> &'))
>
>         virtual void switch_streams( FLEX_STD istream* new_in, FLEX_STD ...
>
>                                      ^
>
> /Applications/Xcode.app/Contents/Developer/Toolchains/
> XcodeDefault.xctoolchain/usr/include/FlexLexer.h:53:22: note:
>
>       expanded from macro 'FLEX_STD'
>
> #    define FLEX_STD std::
>
>                      ^
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1291:41:
> error:
>
>       no viable conversion from 'std::istream' (aka 'basic_istream<char>')
> to
>
>       'std::istream *' (aka 'basic_istream<char> *')
>
>         yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE  ) );
>
>                                                ^~~~~~
>
> /Applications/Xcode.app/Contents/Developer/Toolchains/
> XcodeDefault.xctoolchain/usr/include/FlexLexer.h:121:62: note:
>
>       passing argument to parameter 's' here
>
>         struct yy_buffer_state* yy_create_buffer( FLEX_STD istream* s, int
> size );
>
>                                                                     ^
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1294:7:
> error:
>
>       member reference type 'std::ostream *' (aka 'basic_ostream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>         yyout.rdbuf(new_out.rdbuf());
>
>         ~~~~~^
>
>              ->
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1302:10:
> error:
>
>       assigning to 'std::istream *' (aka 'basic_istream<char> *') from
>
>       incompatible type 'std::istream **' (aka 'basic_istream<char> **');
> remove
>
>       &
>
>                 new_in = &yyin;
>
>                        ^ ~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1306:11:
> error:
>
>       assigning to 'std::ostream *' (aka 'basic_ostream<char> *') from
>
>       incompatible type 'std::ostream **' (aka 'basic_ostream<char> **');
> remove
>
>       &
>
>                 new_out = &yyout;
>
>                         ^ ~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1315:18:
> error:
>
>       out-of-line definition of 'LexerInput' does not match any
> declaration in
>
>       'parseFlexLexer'
>
> int yyFlexLexer::LexerInput( char* buf, int max_size )
>
>                  ^~~~~~~~~~
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1318:11:
> error:
>
>       member reference type 'std::istream *' (aka 'basic_istream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>         if ( yyin.eof() || yyin.fail() )
>
>              ~~~~^
>
>                  ->
>
> /Users/dis/Documents/Pd/externals/jit_expr/build/src/parse/scanner.cc:1318:25:
> error:
>
>       member reference type 'std::istream *' (aka 'basic_istream<char> *')
> is a
>
>       pointer; maybe you meant to use '->'?
>
>         if ( yyin.eof() || yyin.fail() )
>
>                            ~~~~^
>
>                                ->
>
> fatal error: too many errors emitted, stopping now [-ferror-limit=]
>
> 20 errors generated.
>
> make[3]: *** [src/parse/CMakeFiles/parse.dir/scanner.cc.o] Error 1
>
> make[2]: *** [src/parse/CMakeFiles/parse.dir/all] Error 2
>
> make[1]: *** [all] Error 2
>
> make: *** [pd] Error 2
>
> 2018-03-18 22:49 GMT+01:00 Marco Matteo Markidis <mm.markidis at gmail.com>:
>
>> Hi Alex,
>>
>> jit_expr.pd_darwin is in the same folder of help file. Usually it works...
>> On my machine, Deken puts the externals in Pd/externals and in my path I
>> have Pd/externals.
>>
>> Anyway, putting all stuff in verbose I get in console:
>>
>> /Users/dis/Documents/Pd/externals/jit_expr/jit_expr.pd_darwin:
>> dlopen(/Users/dis/Documents/Pd/externals/jit_expr/jit_expr.pd_darwin,
>> 10): Symbol not found: _futimens
>>   Referenced from: /Users/dis/Documents/Pd/extern
>> als/jit_expr/jit_expr.pd_darwin (which was built for Mac OS X 10.13)
>>   Expected in: /usr/lib/libSystem.B.dylib
>>  in /Users/dis/Documents/Pd/externals/jit_expr/jit_expr.pd_darwin
>>
>> So there is futimens function that is not found; indeed looking at
>> symbols present in my /usr/lib/libSystem.B.dylib futimens is not present.
>> So I suspect that passing from OSX 10.10.5 (my os) to OSX 10.13 (the one
>> you use to compile) something changes.
>>
>> Finally, I tried to compile jit_expr. However Cmake 3.10.2 does not find
>> LLVMConfig.cmake or llvm-config.cmake. I have several llvm installed on my
>> machine with macports, but even using find command I do not find manually
>> any of these two files.
>>
>> Best,
>> Marco
>>
>> Ps. I found a LLVM-Config.cmake but I don't know how to add this path or
>> set a LLVM_DIR.
>>
>> 2018-03-18 19:22 GMT+01:00 Alex <x37v.alex at gmail.com>:
>>
>>> Hi Marco,
>>>
>>> HMM, where did you install jit_expr.pd_darwin ? Deken initially sets up
>>> a directory for you if you tell it to, I believe. I think on mac this is in
>>> ~/Documents/Pd/extra ?
>>> Can you tell me what is in your "path" settings, on mac the "file" menu
>>> item might be just called "Pd"? I'm not sure [I'm on a linux machine right
>>> now]
>>> File -> preferences -> path
>>>
>>> -Alex
>>>
>>>
>>> On Sun, Mar 18, 2018 at 10:10 AM, Marco Matteo Markidis <
>>> mm.markidis at gmail.com> wrote:
>>>
>>>> Sorry,
>>>> I forgot to let you know all the important informations.
>>>>
>>>> Pd vanilla 48.1 64 bit, OSX, downloaded from deken binaries and
>>>> sources. help file doesn't work opening from pd browser and directly
>>>> double-clicking.
>>>>
>>>> I tried even copy pd.lib in the same folder of help & pd.darwin, but
>>>> without success.
>>>>
>>>> 2018-03-18 18:04 GMT+01:00 Alex <x37v.alex at gmail.com>:
>>>>
>>>>> Hi Marco,
>>>>>
>>>>> Which version of PD are you running? Which OS? I expect you downloaded
>>>>> jit_expr from deken?
>>>>> Does the jit_expr help file work if you open it in the pd browser?
>>>>> help -> browse -> jit_expr -> double click on the jit_expr-help.pd file?
>>>>>
>>>>> -Alex
>>>>>
>>>>>
>>>>> On Sun, Mar 18, 2018 at 9:49 AM, Marco Matteo Markidis <
>>>>> mm.markidis at gmail.com> wrote:
>>>>>
>>>>>> Dear Alex,
>>>>>>
>>>>>> very happy about this new feature... and incredibly very happy about
>>>>>> hearing just-in-time compiling dsp graph!
>>>>>> Anyway, I get only various jit/expr, jit/expr~, jit/fexpr~ couldn't
>>>>>> create...
>>>>>> I tried to change the [declare -lib] in [declare -path], jit_expr in
>>>>>> jit/expr in declare, looking to have the right 64 bit pd but nothing...
>>>>>>
>>>>>> Best,
>>>>>> Marco
>>>>>>
>>>>>> 2018-03-18 17:34 GMT+01:00 Alex <x37v.alex at gmail.com>:
>>>>>>
>>>>>>> Alexandre,
>>>>>>>
>>>>>>> I don't think it has had enough usage to be called "stable" yet, but
>>>>>>> I could see that happening down the line. In fact, I could see eventually
>>>>>>> JIT compiling the entire DSP graph.. but of course that would be
>>>>>>> significant work. At this point I just need more people to try it out and
>>>>>>> make sure it would be up to it.
>>>>>>>
>>>>>>> -Alex
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Mar 18, 2018 at 9:23 AM, Alexandre Torres Porres <
>>>>>>> porres at gmail.com> wrote:
>>>>>>>
>>>>>>>> if this is stable, wouldn't it be a nice idea to propose it as an
>>>>>>>> update to the expr~ family of objects? since it is basically an optimized
>>>>>>>> clone?
>>>>>>>>
>>>>>>>> cheers
>>>>>>>>
>>>>>>>> 2018-03-18 13:08 GMT-03:00 Alex <x37v.alex at gmail.com>:
>>>>>>>>
>>>>>>>>> jit_expr is a clone of the pure data expr/expr~/fexpr~ objects. It
>>>>>>>>> just-in-time compiles its expressions so they should be much more optimized
>>>>>>>>> than the original. If all works as designed, they should use less CPU than
>>>>>>>>> the equivalent vanilla, non-expr, patching and have a significant CPU
>>>>>>>>> advantage over the original expr objects.
>>>>>>>>>
>>>>>>>>> I've put the external, compiled for 64-bit Mac-OS and 64-bit
>>>>>>>>> Linux, up on deken: in pd, go to help menu, find externals, search for
>>>>>>>>> "jit_expr".
>>>>>>>>>
>>>>>>>>> After installing the external you should be able to change any of
>>>>>>>>> your expr family of objects to just in time compile by loading the library,
>>>>>>>>> [declare -lib jit_expr], and then prefixing the object name with "jit/",
>>>>>>>>> for example [jit/fexpr~ $x1[0] + $y1[-1]].
>>>>>>>>>
>>>>>>>>> I believe they are feature complete with the originals but I'd
>>>>>>>>> love to know if there is anything that I'm missing or any bugs that you
>>>>>>>>> discover.
>>>>>>>>> I'm not exactly sure how to profile pure data patches. If anyone
>>>>>>>>> has a good approach or original expr~/fexpr~ patches that use a lot of CPU
>>>>>>>>> you can share, let me know.
>>>>>>>>>
>>>>>>>>> Compiling in the object takes a little bit of time, so the initial
>>>>>>>>> instantiation of the object/expression will be a bit slower than the
>>>>>>>>> original, FYI.
>>>>>>>>>
>>>>>>>>> Please report any issues here:
>>>>>>>>> https://github.com/x37v/jit-expr/issues
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> BTW, if you're curious to see the llvm assembly produced by your
>>>>>>>>> expression, send the |print( message into the left most inlet of your
>>>>>>>>> object then check out the pd console.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I would love help building Windows and 32-bit Linux versions of
>>>>>>>>> the externals. I'm guessing we could also do raspi/arm builds but we'd need
>>>>>>>>> some changes to the source code as it uses llvm and explicitly generates
>>>>>>>>> code for x86 right now.
>>>>>>>>>
>>>>>>>>> The source code can be found in the git repo:
>>>>>>>>> https://github.com/x37v/jit-expr
>>>>>>>>>
>>>>>>>>> -Alex Norman
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Pd-announce mailing list
>>>>>>>>> Pd-announce at lists.iem.at
>>>>>>>>> https://lists.puredata.info/listinfo/pd-announce
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Pd-list at lists.iem.at mailing list
>>>>>>>>> UNSUBSCRIBE and account-management ->
>>>>>>>>> https://lists.puredata.info/listinfo/pd-list
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Pd-list at lists.iem.at mailing list
>>>>>>>> UNSUBSCRIBE and account-management ->
>>>>>>>> https://lists.puredata.info/listinfo/pd-list
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Pd-list at lists.iem.at mailing list
>>>>>>> UNSUBSCRIBE and account-management -> https://lists.puredata.info/li
>>>>>>> stinfo/pd-list
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Ho cambiato l'indirizzo email in mm.markidis at autistici.org . Se non
>>>>>> è un problema, scrivimi a questo nuovo indirizzo email.
>>>>>>
>>>>>> I changed my email address in mm.markidis at autistici.org . If it is
>>>>>> ok for you, please write me to this new email address.
>>>>>>
>>>>>> _______________________________________________
>>>>>> Pd-list at lists.iem.at mailing list
>>>>>> UNSUBSCRIBE and account-management -> https://lists.puredata.info/li
>>>>>> stinfo/pd-list
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Ho cambiato l'indirizzo email in mm.markidis at autistici.org . Se non è
>>>> un problema, scrivimi a questo nuovo indirizzo email.
>>>>
>>>> I changed my email address in mm.markidis at autistici.org . If it is ok
>>>> for you, please write me to this new email address.
>>>>
>>>> _______________________________________________
>>>> Pd-list at lists.iem.at mailing list
>>>> UNSUBSCRIBE and account-management -> https://lists.puredata.info/li
>>>> stinfo/pd-list
>>>>
>>>>
>>>
>>
>>
>> --
>> Ho cambiato l'indirizzo email in mm.markidis at autistici.org . Se non è un
>> problema, scrivimi a questo nuovo indirizzo email.
>>
>> I changed my email address in mm.markidis at autistici.org . If it is ok
>> for you, please write me to this new email address.
>>
>
>
>
> --
> Ho cambiato l'indirizzo email in mm.markidis at autistici.org . Se non è un
> problema, scrivimi a questo nuovo indirizzo email.
>
> I changed my email address in mm.markidis at autistici.org . If it is ok for
> you, please write me to this new email address.
>



-- 
Ho cambiato l'indirizzo email in mm.markidis at autistici.org . Se non è un
problema, scrivimi a questo nuovo indirizzo email.

I changed my email address in mm.markidis at autistici.org . If it is ok for
you, please write me to this new email address.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20180319/cf0ea05c/attachment-0001.html>


More information about the Pd-list mailing list