» Blog
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

Blog

new post

Blog-posts are sorted by the tags you see below. You can filter the listing by checking/unchecking individual tags. Doubleclick or Shift-click a tag to see only its entries. For more informations see: About the Blog.

  reset tags

addon-release core-release date devvvv gallery news screenshot stuff
delicious flickr vimeo
Order by post date popularity

Serialization in VL has drastically been simplified by introducing two new nodes called Serialize and Deserialize in the category System.Serialization.
Let's first have a look at two basic examples:

Serialize takes any value and serializes it into a XElement while Deserialize does the exact opposite, it takes a XElement and turns it into a value of the requested output type.

As you can see from the screenshot the resulting string is very short and contains only the mimimum amount of data. It achieves that tidyness by only serializing user defined properties, skipping properties which have the default value, making use of XML attributes, putting collections of primitive values into comma separated strings and adding type information only when necessary.

When deserializing the system will try to apply the serialized content on the instance to be created. This makes it very resilient to future patch changes as adding or removing properties and to some extend even changing the type of a property will just work.

Serializers are provided for all primtive types (Boolean, Integer32, Float32, etc.), collection types (Array, Spread, Dictionary, etc.), commonly used imported types (Vector2/3/4, Matrix, Color, etc.) and most importantly all patched types. If a serializer should be missing for a certain type either report it to us or keep on reading to the next section where you learn how to patch (or write) your own serializer.

Paired with the new files nodes serialization to disk is straight forward:

That's basically all there is to know from an end-user perspective. You can try these new nodes in the latest alpha versions.

Writing a custom serializer

Even though VL ships with serializers for the most common types the situation could still arise where a custom serializer has to be written - either because it's simply missing for the type in question or one is not satisfied with the output of the already existing serializer.

Creating a custom serializer consists of two steps

  1. Patching (or writing in C#) the serializer by implementing the ISerializer<T> interface using the advanced Serialize and Deserialize nodes working on the SerializationContext
  2. Registering that serializer using the advanced RegisterSerializer node inside the static RegisterServices operation (more on that in an upcoming blog post)

Here are two screenshots of the above from an example implementation which can be found in the VL.CoreLib/help/Serialization.vl file:

We're looking forward to your feedback.

Happy serialization!

Elias, Wednesday, Jul 18th 2018 Digg | Tweet | Delicious 3 comments  

Dear All.

We and the 25 participants can't wait for LINK, here are some information for everybody on what we're gonna do there.

We went through all applications and clustered the topics the participants want to work on and tried to sort all wishes and tagged them into 6 main topics/areas.

1) Timeline
What we've mostly understood by now is that different use-cases have different timeline or cueing needs. Can we identify recurring scenarios and work towards a modular set of nodes to build custom timelines quickly?

2) 3D Engine
Direct3d, OpenGL or Vulkan, all possible with VL but what does a library of nodes look like for the things we want to do. What's the basics, what's needed, what's a bonus?

3) Integrating Libraries
VL makes it particularly simple to integrate basically any .Net library. There are tons of libraries available. What are common patterns, best practices when importing and wrapping third-party libraries for use in a visual-programming language.

4) Machine Learning
Being the buzz of 2018, ML can be beautifully integrated with visual programming concepts. Libraries exist that can be used, ideas are needed regarding what to use them for.

5) Authoring Environment
vvvv is a multipurpose toolkit, VL is even much more general. Too general for some. What future target groups can be identified, what are their specific needs, how to best work towards those.

6) Realizing Projects
This is a group where everyone works on their personal projects but is interested in sharing ideas and best patching practices, brainstorming concepts and helping each other out.

Please add your thoughts/ideas/interests regarding each of these topics in the forum.
hurray!

a a a a, Tuesday, Jul 17th 2018 Digg | Tweet | Delicious 0 comments  

Who wisp
When Mon, Sep 10th 2018 until Sun, Sep 16th 2018
Where Kontor80, Torgauer Straße 80, Leipzig, Germany

Open Call | Wisp Laboratory ‘18

We’re pleased to announce the international Open Call for the second edition of Wisp Laboratory at Kontor80 in Leipzig, which will happen from 10th to 16th of September.
After last year’s successful week of building a 3D speaker setup and realising a 360° visualisation setup together with the participants, Wisp Laboratory is back for its second year.
We welcome audio and video artists from across the globe to apply for this unique lab. The Laboratory is limited up to 20 participants. The aim is to encourage and increase meeting points and the interaction between people. Together we will reconstruct architecturally the audiovisual phenomenon through concerts & performances with collaborative real-time systems.
From 10th to 14th of September the participants will set-up a 3D Audio and 360° projection environment together with the lab hosts and have time to prepare their shows for the final presentation. In the nights of the 15th and 16th of September the results will be presented to an audience in a public event.

Lab Hosts
The lab will be facilitated by Felix Deufel (Audio Host) and Paul Schengber (Video Host) and David Simmons (Video & Audio Host) of Wisp Collective.

Location
The location of the lab days and performance nights will be Kontor80, Torgauer Straße 80, Leipzig.

Deadline for Applications is the 31st of July!

APPLY NOW!

Please download and fill out the Application Form:https://drive.google.com/open?id=1eRVMQ1Ku9IwMwMe9M52RsHUNYSb5L42Y

Once you have completed your application, please ensure it is accompanied by the following:

Portfolio (maximum of ten works) – JPEG, PDF or Word Docs, links to videos, sound files

Please send your application electronically along with the above information to the following email address: info@wisp-kollektiv.de

If you have any questions please do not hesitate to contact us!

Your Wisp-Team

wisp, Thursday, Jul 12th 2018 Digg | Tweet | Delicious 0 comments  

Dear patcher,

as an avid vl user by now you've understood that in vl there are different kinds of patches. While colloquially we just call them all patches for simplicity and because they all allow you to patch in them, we can easily distinguish two main types of patches:

  • Datatype Patches: patches defining a process node and/or datatype
  • Structural Patches: patches that only help you structure your programs

While datatype patches more resemble what we had in vvvv, structural patches are new in vl. We just reworked this part a litte and ended up with 3 structural patches which make things much more clear:

  • Group
  • Category
  • FullCategory

But before we go on let's make sure we are on par regarding the term "Category":

When we read TogEdge [Control], that means there is a node named "TogEdge" in the category "Control". Also categories are what we see in the NodeBrowser. They can be nested, like Animation.FrameBased and in general they are our friends.

Obviously. (Yeah, just wanted to make sure)

What we had so far was a not so clear mix of all three. Let's see what we have in latest alpha:

Group

Group patches simply allow you to create more space in a patch by opening a new canvas. The groups name is merely used for human readability, vl doesn't care about it at all. Create a group by typing "group" in the nodebrowser. Groups is what you will be mostly using in your daily project-patching work.

Inside a group patch
Group patch from the outside

Category

A Category patch looks quite similar to the group, only its name has a meaning: The name appends itself to the category of its parent patch. That way you can build up any category hierarchy, that you then see in the NodeBrowser. Multiple category levels are allowed with dot notation. e.g. MyCat1.MyCat2.

Inside a category patch
Category patch from the outside

Full Category

A Full Category patch is similar to the Category patch, only that it doesn't add its category to the parent. By that you can place nodes in any category, regardless of the parent patch. It's considered bad practice to do that, but is useful to add nodes to an existing category like Collections.Spread, for example. Multiple category levels are allowed with dot notation. e.g. MyParentCat.MySubCat.

Inside a full category patch
Full category patch from the outside

Each vl document can directly start a category, which you can define in the angular brackets in the top left corner of the document patch.

"Voo" specified as a documents category

Changing the Patch Type

You can easily convert a group patch into a category patch and vice versa by the patch type enum. Note how the label changes and represents the actual category structure:

Converting a group into a category

Setting Categories on Node-Definitions

As if the above didn't offer enough options already there is one more way to specify a category for an operation or a datatype definition:

Setting a Category on an datatype or operation-definition

Happy node sorting!

tonfilm, Thursday, Jul 5th 2018 Digg | Tweet | Delicious 9 comments  

Who Alexandra Pirici, Andrei Dinu, Ion Cotenescu, Jared Marks, Maria Mora
When Thu, Jul 5th 2018 - 19:30 until Fri, Jul 6th 2018 - 19:30
Where Roskilde Festival Art Tent, Roskilde, Denmark

Adda Kaleh is a musical project of first league performance artist Alexandra Pirici.
Come have a brake from the beers at the Art Tent on thursday and/or friday at 19:30 for a show made both by woman and robot. Or something inbetween.

If you are from hhhhere, don’t hesitate to say hi, ggml will be scriptkid for the night.

https://www.roskilde-festival.dk/music/2018/adda-kaleh-aka-alexandra-pirici-w-andrei-dinu-ion-cotenescu-jared-marks-maria-mora?view=poster

ggml, Thursday, Jul 5th 2018 Digg | Tweet | Delicious 1 comments  

previously on vvvv: vvvvhat happened in May 2018


hola,

que patcha? we did it. as announced here last time, we've finally finished our cleanup of the VL.Corelib. further we've released improved File IO nodes and a little new feature to frame your patches. we've also reworked how groups and categories work which we'll introduce in a blogpost soon. these then were the biggest chunks that we had planned for the coming release. so we're now soon reaching everyones favorite: release-candidate time!

and on july 10th, the second berlin meetup is happening, organized by a_a_a_a and sebl, horray!

Contributions

again some amazing new stuff:

and some fine updates to existing contributions:

Gallery

30° - Visualising Ocean Data by students of the Muthesius Academy of Fine Arts, Kiel

and if you have a moment checkout the latest additions to vimeo already with some fine documentations by latest works of NSNK


that was it for june. anything to add? please do so in the comments!

joreg, Tuesday, Jul 3rd 2018 Digg | Tweet | Delicious 0 comments  

Who a a a a, sebl, you
When Tue, Jul 10th 2018 - 19:30 until Tue, Jul 10th 2018 - 23:00
Where Spektrum Berlin, Bürknerstraße 12, 12047 Berlin, Germany

Berlin Patchers.

Our first meetup was a blast. See the protocol if you missed it.

Lets keep it up.
Here is the second one.

This time we will have lasal (seehttp://aristidesgarcia-blog.tumblr.com/) exposing some insights of his latest project. Hopefully this gets us inspired, so that we can have spontaneous discussions/talks/showcases following.

So, feel free to bring your project/notebook/questions or whatever you want to share with the community.

There will be a bar serving us drinks.
There will also be other people around as well.

Thanks go to Lieke and Alfredo who are running the fantastic spacehttps://spektrumberlin.de.
Thank you Lieke & Alfredo.

RSVP & more info here.

update:

sebl, Thursday, Jun 28th 2018 Digg | Tweet | Delicious 2 comments  

Some things take a while longer...
Planned since vvvv pre-beta1 we're happy to finally bring you:

Frames

Patches tend to do different things all at once and when looking at them it is often not clear at first sight which part of a patch does what. We have comments to add a few words at certain spots but those fail when we'd like to point at a group of nodes that do a certain thing. So the idea is to have a visual element we can place in a patch to frame a group of nodes and mark them with a color and label. This will help us to better structure and document large patches.

Press ALT while making a selction to create a frame and optionally give it a title
When selected, the frame shows a color-box
Move and size the frame

Frames are always in the very back of everything. They don't contain any other elements and they cannot be contained in other regions. They are mere visual elements and don't interfere with the functionality of a patch in any way.

Grab the frame at the color-box to move its content along

To show/hide all frames in a patch at once, press CTRL+ALT+F.
To frame a bunch of selected nodes, press ALT+F.

Screenshots

Besides being structural elements, frames also allow you to take screenshots easily and repeatably. We're using this e.g. to automate generating screenshots for our documentation...

Here is how:

  • Press the Printer button to make a screenshot, then rightclick it to see the captured file in explorer
    • Alternatively press CTRL+2 to take a shot of the selected frame
  • Press CTRL+5 to take screenshots of all frames in a document at once

To create a quick screenshot of an area without even creating a frame, simply press S while making a selection. This will copy the screenshot to the clipboard (so you can simply paste it into the chat or a forum reply) and also place a .png next to the current .vl document.

Recordings

Apart from single screenshots you can also record an animated gif of the area of a frame, here is how:

  • Press the Record button to start a recording, the same button again or ESC to stop it
    • Alternatively toggle CTRL+4 to start/stop recording the selected frame

Note that the resulting .gifs are quite large. This is a known problem that shall be fixed at some point.

Screenspace Frame

One more: In case you want to make a recording that includes panning or zooming in the patch you can create a frame in screenspace:

Press ALT+SHIFT while making a selection to create a frame in screenspace
joreg, Wednesday, Jun 27th 2018 Digg | Tweet | Delicious 9 comments  

Here is to inform you about an update to general File input/output in VL available for testing in latest alphas today. Introduced 1.5years ago we've now completely reworked this from the ground up with the things we've learned so far.

Blocking

We noticed that even though obviously you'll often want file io to be non-blocking, there are cases where blocking makes sense. So we now give you the following:

FileReader, FileReader (String), JSONReader, XMLReader
FileWriter, FileWriter (String), JSONWriter, XMLWriter

These are the most simple to use, very close to the comparable vvvv versions, only without error reporting, which we explain below.

Non-Blocking

In the case we want to have our file io non-blocking we learned that most likely we don't only want to load the file but often also do some kind of "transformation" to the data before it is used further in the patch. Most likely this transformation should also be non-blocking and we only want to be informed when that part is done as well. Introducing:

Read: Foreach file read, parse its content and pass it on.
HoldLatest returns the last data pushed to it.
On Data bangs when new data is available.

Instead of returning the actual data of a file, those readers return an Observable<Data> which allows you to do some further processing to the data before you get access to it in the patch using a HoldLatest node. For more information on working with observables see the chapter Reactive.

The writers in turn also take an Observable<Data> and write whenever new data is pushed through the observable. Like this you can e.g. write data received from an input via an observable directly to a file without ever touching the mainloop:

Read: Foreach Payload received via UDP, append to file result.txt

Naming Convention

While in vvvv we had different names for file accessing nodes, like: Reader (Raw), FileTexture (EX9.Texture), XFile (EX9.Geometry Load), MP3Parser (File), ... we decided on a new naming scheme for VL:

  • all readers end on "Reader"
  • all writers end on "Writer"
  • the node is prefixed with a hint at the file-format it handles, like XMLReader, JSONReader
  • more generic readers that don't read a specific format are called more generically, like FileReader, ImageReader, ..

Like this, typing "reader" or "writer" in the nodebrowser, you'll be guaranteed to find all available readers and writers.

Error Handling

Reading or writing files can go wrong for different reasons and the system needs a way to inform you about this. Previously, error handling of reader/writer nodes was inconsistent. Some ignored errors, others reported "Success" or returned an "Error Message". Having realized error-handling has to be supported on a higher-level than individually on every node, we have now removed all error handling from those nodes.

Now what? Right, so the first thing you need to know: If an error occurs at runtime it will be catched by vl and the node will go pink, informing you of the problem. Often this is enough.

In case you want to react to an error in your patch we again have to differentiate between the blocking and non-blocking case:

Blocking

The solution for the blocking case involves using the experimental Try [Control] region and looks like this:

The experimental Try region catches the error that occured

Non-Blocking

In a non-blocking scenario you can use the HoldLatestError [Reactive] node like this:

HoldLatestError bangs and returns an error message
joreg, Saturday, Jun 23rd 2018 Digg | Tweet | Delicious 3 comments  

Who david, joreg, sebl, a a a a
When Tue, Jun 12th 2018 - 19:30 until Tue, Jun 12th 2018 - 23:00
Where Spektrum Berlin, Bürknerstraße 12, 12047 Berlin, Germany

HBAO+

Berliners and non berliners.

We thought it's time for a first VVVV Meetup in Berlin, which will hopefully turn into a series of patcher kucha style evenings.

The meetup is for vvvv and VL interested open minds in Berlin. It is a place to meet and exchange ideas and experiences. It is open to anyone who wants to join, no matter if you are a vvvv expert or beginner, a famous or breadless artist, a designhead or technologist, a piano player or techno musician.

Thankfully we will be hosted by Lieke and Alfredo who are running the fantastic spacehttps://spektrumberlin.de. It's a nice exhibition, performance and community building space. There will be a bar serving us drinks and some people around. Thank you Lieke & Alfredo.

Next steps:

  1. Drop us a mail, comment or forum post if you like to show something. We will announce some line-up soon.
  2. If you like: make yourself a member of our brand new meetup group on meetup.comhttps://www.meetup.com/VVVV-Meetup-Berlin
  3. And check yourself in for the first meetuphttps://www.meetup.com/de-DE/VVVV-Meetup-Berlin/events/251273271

Looking forward to meet you!

Ann-Katrin & David

Update:

We are happy to announce our first talks:

  • dennis of NSYNK will introduce us to his great new contribution of an ambient occlusion algorithm for vvvv.
  • princemio, art director at Waltz Binaire, is joining us to present undocumented super secret stuff for your brains to explode.

Update 2:
Find out about what happened in the Protocol

a a a a, Monday, Jun 11th 2018 Digg | Tweet | Delicious 0 comments  

anonymous user login

Shoutbox

~1d ago

tonfilm: Saving and loading your own data types to disk was never easier: vl-serialization #vvvv #vl #dotNet #visualprogramming

~4d ago

stulloyd: @dominikKoller my little brother works for them.

~8d ago

vasilis: @readme I already did this...but when I reopen my patch and make some changes I press save all..and then the same again. It opens 2

~9d ago

readme: vasilis, Alt+R in your vvvv instance, delete it from vvvv root, save. Otherwise vvvv loads up the patch by default.

~9d ago

vasilis: And even if I go in the root patch and delete them. when i save my patch again it duplicates.

~9d ago

vasilis: Anyone know why when I save my patch and close vvvv, when I try again to reopen it, it opens two patches (two the same)?

~9d ago

david: updated the berlin meetup log. Please correct names or missing stuff. berlin meetups 2018