Skip to content Skip to navigation

Connexions

You are here: Home » Content » Data Flow Control

Navigation

Lenses

What is a lens?

Definition of a lens

Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual member, a community, or a respected organization.

What are tags? tag icon

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

This content is ...

Affiliated with (What does "Affiliated with" mean?)

This content is either by members of the organizations listed or about topics related to the organizations listed. Click each link to see a list of all content affiliated with the organization.
  • NSF Partnership display tagshide tags

    This module is included inLens: NSF Partnership in Signal Processing
    By: Sidney BurrusAs a part of collection: "Introduction to G Programming"

    Click the "NSF Partnership" link to see all content affiliated with them.

    Click the tag icon tag icon to display tags associated with this content.

  • Featured Content display tagshide tags

    This module is included inLens: Connexions Featured Content
    By: ConnexionsAs a part of collection: "Introduction to G Programming"

    Click the "Featured Content" link to see all content affiliated with them.

    Click the tag icon tag icon to display tags associated with this content.

Recently Viewed

This feature requires Javascript to be enabled.

Tags

(What is a tag?)

These tags come from the endorsement, affiliation, and other lenses that include this content.
 

Data Flow Control

Module by: Eduardo Perez. E-mail the author

Summary: The creation of this content was supported in some part by NSF grant 0538934.

Case Structure

The case structure allows data to flow based on a integer, Boolean or string matching condition. The case executed is selected based on the data wired to the Case Selector.

Figure 1: Case Structure
A screen capture of a 'Case Structure' icon. The 'Case Selector' is labeled on the left and the 'Selector Label' is on the right.

Boolean Selection

In the Front Panel window, select a Boolean control and an output string.

Figure 2: Case Selection User Interface
A case selection user interface screen cap. There is 'Boolean' button and a 'Case' field.

Arrange the diagram to look as in Figure 3.

Figure 3: Case Selection G Diagram
A row of three icons. From left to right the icons are a boolean icon, a box icon with the word 'true' at the top, and the third icon is a case icon.

In the True case, add a string constant containing True Case.

Figure 4: True Case Diagram
A row of three icons. From left to right the icons are a boolean icon, a box icon with the word 'true' at the top and a pink box in the middle containing 'true case', and the third icon is a case icon.

To select the False case, click on the selector label down arrow and select False from the pop-up menu. You can also cycle through the cases by clicking the next (right) or previous (left) arrows.

Figure 5: Selecting False Case
A row of three icons. From left to right the icons are a boolean icon, a box icon with the word 'true' at the top and a pick box containing 'true case'. There is also a menu on top of this second icon with 'false' highlighted in blue and a check mark next to 'true'. The third icon is a case icon.

In the False case, add a string constant containing False Case.

Figure 6: False Case Diagram
A row of three icons. From left to right the icons are a boolean icon, a box icon with the word 'false' at the top and a pick box containing 'false case'. The third icon is a case icon.

Wire the string constant in the case structure to the output string terminal.

Figure 7: Wiring Case Structures
A row of three icons. From left to right the icons are a boolean icon, a box icon with the word 'false' at the top and a pick box containing 'false case'. A pink line connects the second icon to the third icon which is a case icon.

Select the True case and wire the string constant to the case structure tunnel. Complete the diagram as shown in Figure 8.

Figure 8: Completed Case Diagram
A row of three icons. From left to right the icons are a boolean icon connect via a green line to a box icon with the word 'true' at the top and a pick box containing 'true case'. A pink line connects the second icon to the third icon which is a case icon.

It is important to note that all instances in a case structure must be wired to enable data to flow from the case structure.

In the Front Panel window, toggle the Boolean input control and run the program.

Figure 9: False Selection
A field with a Boolean button and a case field containing 'Flase Case'.
Figure 10: True Selection
A field with a Boolean button and a case field containing 'True Case'.

Multicase Selection

Select an Integer 32 numeric input and an Integer 32 numeric output and label them Selector and Case respectively.

Figure 11: Multicase GUI
A form containing the field 'sector' and the field 'case'. Each field contains 0.

In the Block Diagram window, create a case structure, select the False case and arrange the terminals as shown in Figure 12.

Figure 12: Multicase
There are three icons. From left to right the icon are a 'sector' icon, a box with 'false' on top and the third icon is a 'case' icon.

Wire the Selector numeric control to the case selector on the case structure. The selector label reflects the diagram update.

Figure 13: Multicase Selector
There are three icons. From left to right the icons are a 'sector' icon connected via a blue line to a box with '0, Default' on top and the third icon is a 'case' icon.

In the 0, Default case, add a numeric constant and leave its value as 0.

Figure 14: Default Case
There are three icons. From left to right the icons are a 'sector' icon connected via a blue line to a box with '0, Default' on top and their is a '0' in the middle. This box is connected to the third icon which is a 'case' icon.

Using the selector label, select case 1. Add a numeric constant, enter 1 and wire it to the case tunnel. The resulting diagram is shown in Figure 15.

Figure 15: Case 1
There are three icons. From left to right the icons are a 'sector' icon connected via a blue line to a box with '1' on top and their is a '1' in the middle. This box is connected to the third icon which is a 'case' icon.

Right click anywhere in the case structure and select Add Case After from the pop-up menu.

Figure 16: Adding Cases
A row of icons with a menu overlaid. From left to right there is an icon labeled 'sector' connected to a large box via a blue line. The item 'Add Case After' is highlighted in blue on the menu.

Case 2 is added after case 1. Add a numeric constant, enter 2 and wire it to the case structure tunnel.

Figure 17: Case 2
There are three icons. From left to right the icons are a 'sector' icon connected via a blue line to a box with '2' on top and their is a '2' in the middle. This box is connected to the third icon which is a 'case' icon.

Figure 18 shows the results of running this simple case selection programs for Selector set to 0, 1, 2 and 3 respectively.

Figure 18: Multicase Selection Program
There are four forms with the fields 'Sector' and 'Case' on each. Clockwise from top left the values in 'sector' 'case' pairs are '0,0', '1,1', '2,2' and '3,0'.

For Loop

The For Loop structure repeatedly executes the diagram within the structure. The Loop Count specifies the number of times the loop contents must be executed and the Loop Iteration indicates which iteration is currently being executed.

Figure 19: For Loop Structure
An icon containing a blue square with an 'N' in the top left corner that is labeled 'Loop Count'. Another blue square containing 'i' is near the bottom left of the box and is labeled 'Loop Iteration'.

The Loop Count and Loop Iteration are of Integer 32 data types. If the Loop Count is set to N, then the Loop Iteration value range is from 0 to N-1. This is illustrated in Figure 20 and Figure 21.

Figure 20: Loop Count
A blue box labeled 'Loop Count' connects to a box with a blue box containing 'N' at the top left and a blue box containing 'i' at the bottom left. The 'i' box is connected within the big box to an icon labeled 'Iteration'.

Figure 21: Final Loop Iteration
A form with the field 'loop count' with a value of '100' and the field 'iteration' with a value of '99'.

Shift Registers

Shift Registers allow the preservation of intermediate results between sequences of iterations.

Figure 22: Shift Registers
A large box containg a blue box 'N' and a blue box 'i'. A pair of two down arrows are labeled 'shift registers'. An up arrow is opposite the down arrows.
Figure 23: Shift Registers
A large box containg a blue box 'N' and a blue box 'i'. A pair of two down arrows are labeled from top to bottom 'i-1' and 'i-2' and collectively they are labeled 'result at iteration'. An up arrow is opposite the down arrows and is labeled 'i' and 'Result at iteration'.

To add a Shift Register, right click on the For Loop structure and select Add Shift Register from the pop-up menu.

Figure 24: Adding Shift Registers
A large box with an blue box 'N' at the upper left corner and an 'i' in a blue box at the lower left. A menu exists on the right with the item 'Add Shift Register' is highlighted in blue.

To add elements to the shift register, right click on the shift register and select Add Element from the pop-up menu.

Figure 25: Adding Shift Register Elements
A box with a menu overlaid. The item 'Add Element' is highlighted in blue.
Figure 26: Adding Shift Register Elements
A box with a blue box 'N' in the upper left corner and a blue box 'i' towards the lower left. A pair of down arrows exists on the far left side and an up arrow exist on the right side opposite the down arrows.

To illustrate the use of the shift registers, the following example computes the Fibonacci number Fib(n).

Fib ( n ) = { 0 , n = 0 1 , n = 1 Fib ( n - 1 ) + Fib ( n - 2 ) , n > 1 Fib ( n ) ={ 0 , n = 0 1 , n = 1 Fib ( n - 1 ) + Fib ( n - 2 ) , n > 1 (1)

In the Front Panel window, select an integer 32 numeric input and output controls and labeled them n and Fib(n) respectively. Arrange the diagram as shown in Figure 27.

Figure 27: Shift Register Example
(a) (b)
A form with two fields labeled 'n' and 'Fib(n)' from left to right. Both fields contain the value '0'.Form left two right there is an icone labeled 'n', a box with a blue box 'N' in the upper left corner and a blue box 'i' towards the lower left. A pair of down arrows exists on the far left side and an up arrow exist on the right side opposite the down arrows. Our the far right is another icon labeled 'Fib(n)'.

Add a 0 and 1 numeric constants to initialize the elements of the shift register and wire them to the i-1 and i-2 elements respectively. Add the add operator in the for loop and complete the program wiring as shown in Figure 28.

Figure 28: Fibonacci G Program
This image consists of several icons connected by lines. From left to right there is an icon in a blue box and below that are two other small blue boxes containing '0' and '1'. All of these boxes are connected via a blue line  to items in a larger box. They are connected to an 'N', and two down arrows respectively. The two down arrows are connected to a triangle pointing to the righ containing a '+'. Below This is an 'i'. The triangle is connected via a line to an up arrow which is connected to an icon outside the big box labeled 'Fib(n)'.

For n = 0, the for loop iterates 0 times and passes 0 to Fib(n), therefore Fib(0)=0. For n = 1, the for loop the values in i-1 and i-2 shift register elements are added (0+1) and saved in the i shift register element (1). Since the loop iterates once only, the resulting value is passed to Fib(n), therefore Fib(1)=1. For n = 2, the first iteration produces the value of 1. Prior to the next and final iteration, the values are shifted in the register as follows:

The value in the i-2 shift register element is discarded

The value in the i-1 shift register element is shifted to the i-2 shift register element

The value in the i shift register element is shifted to the i-1 shift register element

To start the 2nd and final iteration, the i-1 shift register element contains 1 and the i-2 shift register element contains 0. These are added to produce 1, which is passed to Fib(n) and, therefore, Fib(2)=1. This process is repeated for values of n > 2.

Save this program as Fibonacci.vi. Figure 29 shows the result of Fib(8).

Figure 29: Fib(8) = 21
A form with two fields 'n' and 'Fib(n)' with values '8' and '21' respectively.

Auto-Indexing

Auto-indexing allows input array elements to be operated on and output array elements to be aggregated automatically in a for loop. It is not required to wire the Loop Counter. The for loop automatically reduces the array dimensionality by one.

Figure 30: For Loop Auto-Indexing
Three icons in a row. From left to right there is an icon labeled 'Input Array' connected to a large box with an 'N' in the upper left and connects to an orange square which is labeled 'Auto-Indexed Tunnel'. This square is connected via an orange line to a sine wave icon and then to another orange square and finally to another icon labeled 'Output Array'.

Disabling Auto-Indexing

It is sometimes necessary to disable auto-indexing. In this example, the For Loop is used to scan the elements of the array taking advantage of the auto-indexing feature. However, the result is a single number. Wiring the result through the For Loop with auto-indexing enabled results in a broken data type wire.

Figure 31: Broken Auto-Indexing
A screen capture of 'Broken Auto-Indexing'. From left to right there is an 'Array' icon above a blue square containing '0'. These are connected to a large box containing a blue box containing an 'N', a little square, a blue down arrow and a blue box containing 'i'. The icons outside the big box are connected to the little square and down arrow in the big box via a blue line. Another line connects these icons to two blue dots which then connect to a triangle containing '>'. Lines connect the triangel and two dots to a larger triangle  which is connected to a small square and an up arrow along the far right side of the box. To the right of the box is a red 'x'and to the right of that is an icon labeled 'Maximum'.

To disable auto-indexing, right click on the target Auto-Indexed Tunnel and select Disable Indexing from the pop-up menu.

Figure 32: Disabling Auto-Indexing
A screen capture of 'Broken Auto-Indexing'. From left to right there is an 'Array' icon above a blue square containing '0'. These are connected to a large box containing a blue box containing an 'N', a little square, a blue down arrow and a blue box containing 'i'. The icons outside the big box are connected to the little square and down arrow in the big box via a blue line. Another line connects these icons to two blue dots which then connect to a triangle containing '>'. Lines connect the triangel and two dots to a larger triangle  which is connected to a small square and an up arrow along the far right side of the box. To the right of the box is a red 'x'and to the right of that is an icon labeled 'Maximum'. A menu is ovberlaid on top of this diagram with the item 'Disable Indexing' highlighted in blue.

The final diagram with the Auto-Indexed Tunnel disabled is shown in Figure 33.

Figure 33: Disabled Auto-Indexing
A screen capture of 'Broken Auto-Indexing'. From left to right there is an 'Array' icon above a blue square containing '0'. These are connected to a large box containing a blue box containing an 'N', a little square, a blue down arrow and a blue box containing 'i'. The icons outside the big box are connected to the little square and down arrow in the big box via a blue line. Another line connects these icons to two blue dots which then connect to a triangle containing '>'. Lines connect the triangel and two dots to a larger triangle  which is connected to a small square and an up arrow along the far right side of the box. To the right of that is an icon labeled 'Maximum'.

While Loop

The While Loop conditionally iterates executing the statements within the structure. The Loop Condition establishes whether the loop iterates or terminates. The Loop Iteration is a zero-based iteration execution reference similar to the For Loop.

Figure 34: While Loop Structure
There is a box containing a blue box 'i' on the lower left and a green square red circle on the lower right. The 'i' is labeled 'Loop Iteration'. The other icon is labeled 'Loop Condition'.

Loop Condition

Stop if True

The default loop condition is to continue if the Boolean condition is False (or stop if True). The while loop in Figure 35 will iterate while Iterations is less than Loop Iteration is False or, equivalently, will stop iterating when Iterations is less than the value in Loop Iteration.

Figure 35: Stop If True
Three elements comprise this diagram. From left to right there is an icon labeled 'Iterations' connected via a line to a large box containing an 'i' in a blue box and a triangle containing '<' which is connected to a green square red circle. The 'i' is connected via a line to an icon outside the large box labeled 'count'.

Continue if True

At times it is more convenient to let the while loop iterate while the condition is True. To change the loop condition, right click on the loop condition icon and select Continue if True from the pop-up menu.

Figure 36: Changing Loop Condition
Three elements comprise this diagram. From left to right there is an icon labeled 'Iterations' connected via a line to a large box containing an 'i' in a blue box and a triangle containing '<' which is connected to a green square red circle. The 'i' is connected via a line to an icon outside the large box labeled 'count'. There is a menu overlaid on top of the diagram and the menu item 'Continue if True' is highlighted, while the item 'Stop if True' has a check mark next to it.

Figure 37 shows the Loop Condition set to Continue if True.

Figure 37: Continue If True
A diagram consisting three icons. From left to right the icons are a blue square labeled 'Iterations'. There is large box to the right containing a blue square 'i', a triangle containin a sideways 'w', a green square containing a circular arrow. On the other side of the large box is an icon labeled 'Count'.

Shift Registers

Programmatically, while loop shift registers are identical to for loop shift registers. Refer to Section 5 for the discussion. However, an example is provided to illustrate the use of shift registers in while loops.

Figure 38: While Loop Shift Registers
A box with two black down arrow boxes on the far right of the box, blue box 'i' on the lower left of the box, and up arrow on the upper right of the box and a green square with a circular arrow in the lower right of the box.

In the following example, Euler’s number e is computed to the specified accuracy using the infinite series

e = n = 0 n = 1 n ! = 1 + n = 0 n = 1 n ! = 1 + 1 1 ! + 1 2 ! + 1 3 ! + = 2.7182818284 e= n = 0 n = 1 n ! =1+ n = 0 n = 1 n ! =1+ 1 1 ! + 1 2 ! + 1 3 ! +=2.7182818284(2)

Notice that two shift registers keep track of the factorial and the sum. Also notice the dot in the multiplication. This is because the loop iteration is an integer 32 data type and the input from one of the shift registers is double precision numeric. The dot represents that the integer 32 data type has been coerced into a double precision number.

Figure 39: Computing e
A complex diagram of 'Computing e'. It consists of an icon on the right labeled 'Accuracy' connected to a large box diagram with many triangles and squares. There is also a square icon on the left labeled 'e'.

Save the program as e.vi. The result of running this program is shown in Figure 40.

Figure 40: Computed e to 5 Digits
A form with two fields labeled 'Accuracy' and 'e'. The values of the fields are '1E-5' and '2.71828'respectively.

Enabling Auto-Indexing

By default, while loops are auto-indexed disabled. In order for while loops to process and generate arrays, the loop tunnel must be enabled to auto-indexed arrays.

Figure 41: Disabled Auto-Indexing
A big square box contain a blue square 'i' and a blue square '999' connected via lines to a triange containing a '<'. This triangle is connected to a green square containing a circular arrow. Above these icons is a dice icon which connects to an orange box on the edge of the big box. To the right there is a red 'x' and then an orange box around an 'array' icon.

To enable auto-indexing, right click on the loop tunnel and select Enable Indexing from the pop-up menu.

Figure 42: Enabling Auto-Indexing
A big square box contain a blue square 'i' and a blue square '999' connected via lines to a triange containing a '<'. This triangle is connected to a green square containing a circular arrow. Above these icons is a dice icon which connects to an orange box on the edge of the big box. To the right there is a red 'x' and then an orange box around an 'array' icon. On top of this diagram, a menu is overlaid with the item 'Enable Indexing' highlighted in blue.

In this example the while loop appropriately generates a 1,000 element numeric array with random numbers.

Figure 43: Auto-Indexing Enabled
A big square box contain a blue square 'i' and a blue square '999' connected via lines to a triange containing a '<'. This triangle is connected to a green square containing a circular arrow. Above these icons is a dice icon which connects to a hollow box on the edge of the big box. To the right there is an orange box around an 'array' icon.

Sequence

Although G was designed to easily develop interactive, parallel programs, it is sometimes necessary to execute diagrams in sequential order. The sequence structure allows G diagrams to execute sequentially.

The following examples time in milliseconds (ms) the execution of a G diagram. The sequence of events is get a start time stamp, execute the diagram, get stop time stamp and take the difference between the stop and start times to determine the execution time.

Figure 44: Sequence Structure
A diagram that looks like two frames of film. The left frame is labeled 'Execute First' and the right frame is labeled 'Execute Next'.

Flat Sequence

Flat Sequences always execute left to right. A Flat Sequence structure starts with a single frame and allows a user to visualize the diagram sequences.

Figure 45: Sequence Frame
An empty film frame.

To add frames to a sequence, right click on the sequence structure and select either Add Frame After or Add Frame Before from the pop-up menu according to the program’s needs.

Figure 46: Adding Sequence Frames
An empty film frame overlaid by a menu with the item 'Add Frame After' highlighted in blue.

Add two more frames to the sequence structure to get a three frame sequence as shown in Figure 47.

Figure 47: Three Frame Sequence
A row of three empty film frames.

From the Functions >> Programming >> Timing menu select Tick Count (ms) function.

Figure 48: Tick Count Function
A row of three icons is nested in the second level of a directory. The levels are labeled 'Programming' and 'Timing' underneath that. The icons are labeled from left to right 'Tick Count (ms)', 'Wait(ms)' and 'Wait Until Ne...'.

Drop the Tick Count (ms) function in the first (left most) frame of this sequence. Make a copy of the Tick Count function and place it on the third (right most) frame as shown in Figure 49.

Figure 49: Start and Stop Tick Counts
A diagram of three film frames with the left and right most frames contain clock icons.

Add a For Loop that iterates 5,000 times to the second frame. Add a subtract operator, an unsigned integer 32 output and complete the program as shown in Figure 50. The execution of this program shows the time in milliseconds it took for the 2nd sequential frame to execute.

Figure 50: Timing G Program
A diagram of three film frames with the left and right most frames contain clock icons. In the middle fram there is an icon with a blue square on the left containing '5000' which is connected to a square containing a blue square 'N' in the upper left and a blue square 'i' in the lower left and dice on the middle. A line runs for the first clock to a triangle containing a '-' on the right of the film frames and then the triangle connects to a square icon.

Stacked Sequence

A Stacked Sequence provides a more compact representation of program sequences. It is programmatically identical to the Flat Sequence with the exception that a Sequence Local enables data to flow to subsequent frames. Additionally, as frames are added, a Sequence Selector provides access to the desired frame (see Figure 51).

Figure 51: Stacked Sequence
A film frame with '0[0..1]' with arrows on either side pointing to the right and a down error.

For this timing example, start with a Stacked Sequence and add 3 more frames. The sequence frames are labeled 0, 1, 2 and 3 and will execute in that order.

Figure 52: Four Frame Stacked Sequence
A film frame with '3[0..3]' with arrows on either side pointing to the right and a down error.

Go to the first frame (frame 0) and add a Tick Count (ms) function. Right click on the sequence structure and select Add Sequence Local from the pop-up menu.

Figure 53: Adding Sequence Locals
A film frame with '3[0..3]' with arrows on either side pointing to the right and a down error. A clock icon is contained in the middle of the frame.
Figure 54: Adding Sequence Locals
A film frame with '3[0..3]' with arrows on either side pointing to the right and a down error. A menu is overlaid on top of this diagram with the item 'Add Sequence Local' is highlighted in blue.

The Sequence Local is shown as an undefined tunnel. Wire the Tick Count (ms) function to the Sequence Local to define the tunnel data type and data flow. Data can now flow from frame 0 to the other frames as needed.

Figure 55: Sequence Local
A film frame with '3[0..3]' with arrows on either side pointing to the right and a down error. There is a clock icon in the middle of the frame with a hollow square on the lower left.
Figure 56: Sequence Local
A film frame with '3[0..3]' with arrows on either side pointing to the right and a down error. There is a clock icon in the middle of the frame connected to a square containing a blue arrow on the lower left via a line.

Go to the next frame sequence (frame 1) and enter the program to be timed.

Figure 57: Frame to Time
A film frame with '1[0..3]' with arrows pointing either direction and a down arrow at the top of the frame. Inside the frame there is an icon with a blue square on the left containing '5000' which is connected to a square containing a blue square 'N' in the upper left and a blue square 'i' in the lower left and dice on the middle. There is also a square arrow pointing to the right.

Go to the third frame of the sequence (frame 2), add a Tick Count (ms) function, add another Sequence Local and wire the Tick Count (ms) to the new Sequence Local. The wired sequence frame is shown in Figure 58.

Figure 58: Stop Time Stamp
A film frame with '2[0..3]' with arrows pointing either direction and a down arrow at the top of the frame. There is a clock icon in the middle of the frame with an arrow pointing left and another pointing right on the left wall of the frame.

Go to the last frame (frame 3) and add a Subtract function. Wire the Sequence Locals from frame 2 and frame 0 to the Subtract function as shown in Figure 59. To complete the diagram, wire the output of the Subtract function to the unsigned integer 32 output.

Figure 59: Stacked Timing G Program
A film frame with '3[0..3]' with arrows pointing either direction and a down arrow at the top of the frame. Contained within the frame from left to right there are two blue square arrows pointing right with a blue line connecting to a triangle box containing '-' connected to a blue square on the left edge of the frame wall. A line connects this box to a blue box on the outside of the frame.

It is important to note that the programs in Figure 50 and Figure 59 are programmatically identical.

Content actions

Download module as:

PDF | EPUB (?)

What is an EPUB file?

EPUB is an electronic book format that can be read on a variety of mobile devices.

Downloading to a reading device

For detailed instructions on how to download this content's EPUB to your specific device, click the "(?)" link.

| More downloads ...

Add module to:

My Favorites (?)

'My Favorites' is a special kind of lens which you can use to bookmark modules and collections. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need an account to use 'My Favorites'.

| A lens I own (?)

Definition of a lens

Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual member, a community, or a respected organization.

What are tags? tag icon

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

| External bookmarks