Not knowing what is around the corner is one of the most exciting aspects of art. The trade off is that, without direction, we often spend our practice swimming around our comfort zones, going over the same tricks.
A library of new tricks and exercises can allow us to choose to work on something that we already know we like. For this, we're used to relying on books, teachers, and friends; what if we could each create our own library of tricks that have never before been juggled using a computer to handle the calculations?
Let Me Juggle That for You - is an online Siteswap validator and generator. The validation happens in real-time, as you type. The generation stems from your original trick and aims to allow for both random and specific changes. You can direct the creation.
The application also provides an intuitive method of learning to understand Siteswap. The real-time output and plain-sight details behind each trick help to allow the interface to disappear.
I hope that it proves of some use to you wherever your juggling and Siteswap is at. A large motivation for me coding this application has been learning more about Siteswap and JavaScript. It has led me to learn a great deal more about both and is continuing to do so.
The application comes with no warranty. Good luck!
Siteswap is a notation for juggling. It is written as a string of numbers, where each number represents a throw.
- The amount of throws in a pattern (before it repeats) is called the Period. 441 is a 'Period 3' trick.
- The value of each throw equals the amount of beats before that ball is thrown again.
- A '0' is an empty hand. A '2' is a ball held in the hand. They are still referred to as 'throws'.
- All patterns alternate hands: 'Right, Left, Right, Left' etc.
- '2's and '0's are spaces, A '2' in the right hand could mean that you have two consecutive 'actual throws' from the left.
- All other numbers are 'the type of throw you would use if you were juggling that number of balls'.
- Odd numbers cross, even numbers don't. Being divisible by two, even numbers always land back in the hand that threw them e.g. R,L,R,L,R,L (a '6').
- If the Period is odd, the trick will be symetrical.
- This application works in hexadecimal. '10' is written as 'a', '11' as 'b' and so on up to '15' as 'f'.
- For simplicity, the application refers only to balls. However, siteswap can be used with clubs, rings, and even diablos.
There are many developments in Siteswap to allow for more complicated positions or techniques such as reverse throws or multiplexes. The application currently works only in Vanilla Siteswap - The basic form.
The mean average of a pattern is equal to the number of balls. The mean average must be an interger.
If you throw a '5' on the first beat, that ball is not thrown again until the sixth beat as it covers beats 1, 2, 3, 4, 5. If you throw a '5' on the second beat, that ball is not thrown again until the seventh beat as it covers beats 2, 3, 4, 5, 6.
Where the ball is 'thrown again' is referred to as where it 'lands'. This is something of a misnomer because it isn't the exact point where the ball is caught!
As demonstrated above, where the ball 'lands' is the throw plus the beat on which it is thrown. However, if the Period is smaller than this 'landing', you loop back round, starting again from the first beat of the pattern.
For example, in a 'Period 3' trick, a '5' throw on the first beat would cover beats 1, 2, 3, 1, 2 and therefore land on beat '3'.
Of course, passing beat one again before it lands means that another '5' will be thrown while it's still in the air.
A Siteswap can therefore tell you whether or not each ball is repeating the same throw after it lands; if the throw is a multiple of the Period, it does. If it isn't it will move on to a different throw next time.
You can figure out where each ball lands by counting along the pattern, or with this equation:
L = 'the remainder of' (n+i)/p
Where the ball 'lands' = L
The throw = n
The beat on which it is thrown = i
The Period = p
For Vanilla Siteswaps, no two balls can land on the same beat.
Siteswap theory is fascinating and can provide a plethora of fun puzzles whilst helping to develop our understanding of what is really happening when we juggle. However, it can also be used to create, document, and communicate juggling tricks that people actually juggle. This is where personal taste becomes most important.
Just because a siteswap works, doesn't mean that it's suitable. Here are a few common problems and possible solutions:
If one number in a pattern is much higher than the others, it tends to mean an 'out of place', super-high throw. This could make the pattern impossible to juggle inside your home or onstage because of ceiling height.
If this number is higher than the Period, you can simply subtract the period from it and it will still land on the same beat.
- N.B. this will remove a ball as the average will go down by one.
Alternatively, you could Swap the Landings to share some of the height from the high throw with a lower throw.
If you've ended up writing a complex nine-ball-trick when you were after something with three, you could use the Decrement button to take one off of each number, thereby removing one ball, until you're down to three.
- N.B. after zero it restarts from one below the Period.
Alternatively, you could subtract the period from several individual numbers. Again, this removes one ball each time that you do it.
The input box will test whether or not a Siteswap pattern works and tell you where each throw lands.
If the pattern is not valid, the application will tell you if:
- Your average is not an interger,
- You have two or more throws landing in the same position
- You are using characters other than 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
If the pattern works, the application will produce a link to an animation of the trick. It does this by appending the siteswap onto a jugglinglab.sourceforge.net URL. You'll need Java installed to view the animations (it's free and good).
If you have a strong understanding of siteswap, the validator can work as a great time-saving tool when writing and checking siteswaps. It will do the calculations for you.
Beyond this, having the landing positions spelled out will make it much easier to put your siteswap through an array of changes in order to create new tricks. Examples are discussed in What can I do next?
If you're still getting to grips with Siteswap, the validator can help to spell out how it works, correct mistakes, and help to suggest what corrections an invalid trick needs to work.
This allows you to click on two throws in the siteswap and swap their landings to create a new trick.
This is more than simply swapping the two numbers in the siteswap; both of the thows will change value. Swapping the landings requires calculations to determine what the new throws will have to be in order to land in the new positions.
If one or both of the new throws is higher than 'f', this feature will stop and display an alert. The generator works in hexadecimal and so only goes up to 'f'.
Currently, the generator favours the Period over '0' (which are interchangeable in Siteswap patterns). This can give it a tendency for the number of balls to creep upwards. To alter this, you could subtract the Period from any number higher than it or use the Decrement button.
This feature is great as a finishing touch if you come up with a trick that you see as 'spoiled' by one or two of the throws.
It can provide subtle changes to the patterns you can already juggle, giving you more control as to how far out of your comfort zone you want to venture.
The changes this feature makes to the pattern always work. This means that it can be useful for randomizing a trick whilst regaining a degree of control.
This adds or subtracts one to each landing beat.
Usually, this means 'adding one to' or 'subtracting one from' each number in the Siteswap. There are two exceptions.
- After '0' has been reached, it is next replaced by one less than the period. This is instead of going down to -1.
- After 'f' has been reached, it is next replaced by the lowest number that lands where the alternative, a 'g' throw, would land.
Other than these exceptions, either button will always make your odd throws even and vice versa. This means that crossed throws become straght and vice versa.
Despite being a simple calculation, adding one to or subtracting one from each number can be tedious, especially when you are dealing with long strings of numbers. This feature can provide a quick way of adding or removing a ball from the pattern.
This can provide an especially useful approach to breaking down a challenging trick. By working on a version with fewer balls, you can zoom in on the details.
Similarly, it provides a quick an easy way to make a simple trick into something more difficult.
This puts the landings of your trick into the order of another's.
The process is explained in more detail in the 'Methods of Finding New Landings' section of What Can Do Next?
This feature will create a new trick by combining two valid siteswaps. It works by re-ordering the landing positions of one trick based on the landing positions of the other.
For the feature to work, both tricks must have the same Period.
Once a new trick is generated, the feautre will also set it as the new 'Father' or 'Mother' trick saving you from having to type it into either field. From here, you can either breed it again or modify the trick using the other features.
A tip for using this, Period length will make a big difference to the result. If you have a short Period, say 'Period 3', the feature is less likely to output a trick you haven't already seen. If you have a long Period, say 'Period 42', the new trick may need a throw higher than 'f', in which case an error message will be returned.
'Period 9' is a good guidline length for tricks as a middle ground.
This can provide a way to come up with brand new tricks. The feature handles the calculations making what would otherwise be a long and tedious process into a simple exercise.
Learning how the process works could also help you in finding creative ways to modify siteswaps.
If the Period is less than 15, you can arrange the landings from one trick into any order to create another.
There are two steps to re-ordering the trick:
- You need to put the landings into a new order. See below for some methods you can use to do this
- Once you have this new 'landing order', you need to find the throws that will land on these beats.
We'll look at the second step first.
If you know the beats on which the throws land, you can use this information to find the Siteswap throws you need. Using the application, this process is a snap.
Hint: Go for the lowest possible number for each throw because you'll have more control building from the ground up.
Start by typing in '0's - As many '0's as the Period. To know where a ball lands, the checker first needs to know the Period. For example, nothing can land on '12' if there are only two beats to choose from.
Move through the trick replacing the '0's with throws. The throws need to land on the correct beats.
You can figure this out by finding the difference between 'the beat on which your '0' currently lands' and 'the beat on which you're meant to land'. All you have to do is add this difference to the '0'.
For example, if a '0' currently lands on a '2' and it needs to land on a '5', the difference is three. Add the difference to the to get the throw you need: '0' + 3 = '3'.
Your trick probably won't work until you've finished writing it, this is normal so don't worry if the checker informs you that the 'average is not an interger' or that there's a 'double throw', until you've finished.
If your '0' lands on a '7' but you need to land on a '6', you'll need to 'loop back round'. Add as much as you need for it to land on the Period and then add six to that.
For example, if this were the case in a 'Period 9' trick, you'd add two to the throw for it to land on '9' and then add six: '0' + 2 + 6 = '8'.
If it's still confusing, try counting out the beats. If your throw is a '0', it lands on a '7' and it needs to land on six you can count upwards: (8, 9, 1, 2, 3, 4, 5, 6) that's '8' beats after '7'. '0' becomes '8'.
If you do it this way, remember not to count your original landing.
A full example to look at.
Say we have these landing positions but don't yet know the throws that make it:
5, 1, 4, 2, 3
It's a 'Period 5' trick. The first thing to do is to put five '0's in the validator. This gives us these landing positions:
1, 2, 3, 4, 5
We now need to add to the throws to make them land on the correct beats.
Our first throw, a '0', currently lands on beat '1'. It needs to land on beat '5' instead. This means we need to add four beats to the throw - '0' + 4 = '4'. Replace the first '0' with '4' in the validator. Now we have this:
Trick: 40000
Landings: 5, 2, 3, 4, 5
Next, we are currently on '2' but we need to land on beat '1'. We can't go any lower than '0'. Counting upwards from '2' to '1' in 'Period 5': (3, 4, 5, 1). The '1' occurs '4' beats after the '2'. Add '4' to the current throw - '0' + 4 = '4'.
Now we have:
Trick: 44000
Landings: 5, 1, 3, 4, 5
Next, we have a '3' but need a '4', so we add '1':
Trick: 44100
Landings: 5, 1, 4, 4, 5
Now we have '4' but need '2', count upwards: (5, 1, 2) means we add '3'
Trick: 44130
Landings: 5, 1, 4, 2, 5
Finally '5' to become '3': Another '3':
Trick: 44133
Landings: 5, 1, 4, 2, 3
Once you have the lowest possible trick that works, you can add the Period to any number and it will land in the same position. This will also add a ball, which could be useful if you've ended up with a one ball trick.
For example, 44633, 99133, 99688, 44138, and 44b33 all have the same landing beats as 44133
Perhaps it looks more complicated now than it really is. Often, the best way is to learn by doing, then to solidify your knowledge by reading a dry instruction manual like this once you already understand it, then to write/share your own explanation of it!
Bear in mind that one of the strengths of the application is that it's all displayed in front of you in a dynamic format that displays small, manageable pieces of information. You're probably better off using the application if this concept still needs clearing up. Just have a play.
For these methods we will, again, use the siteswap 44133 as our example trick.
The landings for 44133 are: 5, 1, 4, 2, 3
Retrograde is putting the landings in reverse order.
5, 1, 4, 2, 3 would become: 3, 2, 4, 1, 5
The lowest trick that lands on these beats is:
20120
A three ball version could be:
25125
Inversion is 'flipping the direction' of the intervals between the landings.
This is a little more complicated.
So, for 5, 1, 4, 2, 3, let's look at the intervals between the landings:
5, (-4) 1, (+3) 4, (-2) 2, (+1) 3
To flip the direction of the intervals, we just swap '-' for '+' and vice versa. We start on the same first number so the new trick will look like this:
5, (+4) x, (-3) x, (+2) x, (-1) x
Now we can go through, number by number applying the new intervals. From 5:
5, (+4) 9, (-3) x, (+2) x, (-1) x
From 9:
5, (+4) 9, (-3) 6, (+2) x, (-1) x
...and so on:
5, (+4) 9, (-3) 6, (+2) 8, (-1) 7
Finally, we subtract the Period off any number higher than it (repeat this step for each number as many times as it takes to get its value to lower than the Period). As 44133 is a 'Period 5' trick, we end up with:
5, 4, 1, 3, 2
I'll leave it to you to figure out the tricks that work.
With inversion, you'll always cover all of the landings, once each, occuring in an 'inverted' order. I.e. you'll never end up with the same landing twice.
Once you have the inversion, you could reverse that:
5, 4, 1, 3, 2 would become 2, 3, 1, 4, 5
Alternatively, you could invert the retrograde for a different pattern again:
3, 2, 4, 1, 5 would become 3, 4, 2, 5, 1
...which you could reverse:
3, 4, 2, 5, 1 would become 1, 5, 2, 4, 3
...which, again you could invert:
1, 5, 2, 4, 3 would become 1, 2, 5, 3, 4
I learned these processes when I studied the musical technique Serialism. They're all applicable to pitch.
Interestingly, you can convert any Twelve Tone Row from any Serialism piece into a valid series of landings and, from there, make it into a valid Siteswap trick.
Let's use this as our example:
C, G♯, E♭, B♭, B, A, F, D, C♯, F♯, G, E
Once you have your Tone Row, give your first note a value between one and twelve. In this case our first note is 'C'. For simplicity, let's say its value is '1'.
From this as a starting point, you can assign values to all other notes in order of pitch:
C=1, C♯=2, D=3, E♭=4, E=5, F=6, F♯=7, G=8, G♯=9, A=10, B♭=11, B=12.
Now you have a reference, you can write down the values of each note in order. So our Tone Row becomes:
1, 9, 4, 11, 12, 10, 6, 3, 2, 7, 8, 5
Of course, it works the other way round. Whenever you juggle, every twelve throws you make unwittingly create a theoretical tone-row. All you'd have to do to convert the landings into notes is choose a starting pitch.
This is really cool! You may be wondering how on earth this works. Well, when two juggling tricks love each other very much...
In a nutshell, it's writing out the landing beats of one trick in the order of another's.
For this, you'll need two tricks, a Father and a Mother. They must have the same Period for the method to work.
The Father: 612640152
Its landing positions: 7, 3, 5, 1, 9, 6, 8, 4, 2
The Mother: 630415314
Its landing positions: 7, 5, 3, 8, 6, 2, 1, 9, 4
To get our new trick let's start at the first number of the 'Mother' trick:
7, 5, 3, 8, 6, 2, 1, 9, 4
As it's '7', we replace it with the 7th number in the 'Father' trick:
7, 3, 5, 1, 9, 6, 8, 4, 2
Now we have this:
8, x, x, x, x, x, x, x, x
Next number in the 'Mother' trick is:
7, 5, 3, 8, 6, 2, 1, 9, 4
The 5th number in the 'Father' trick is:
7, 3, 5, 1, 9, 6, 8, 4, 2
We replace '5' with '9' to get this:
8, 9, x, x, x, x, x, x, x
Next, '3' becomes '5':
8, 9, 5, x, x, x, x, x, x
Etc:
8, 9, 5, 4, 6, 3, 7, 2, 1
The trick with the lowest number of balls that lands on these beats is: 772016031.
So far, we've only been modifying existing tricks.
As long as you use them once each, any group of numbers that contains all intergers from '1' to the Period can be converted into a juggling siteswap.
There's nothing stopping us from getting our landing positions from scratch.
The easiest method with which to do this would be just choosing a random order for a random Period.
For example, were I to choose 'Period 3', I'd arrange the numbers '1', '2', and '3' randomly:
2, 1, 3
This ends up as 120 in its lowest form but could also be: 423, 450, 153, 453, etc. (Conventionally these tricks start with the highest number).
Another method to order our landings would be to use an existing number or sequence. Let's take pi, as an example:
3.14159265358979323...
We could start by writing out landings in the order they appear:
3
Now that we've used a '3', if we continue, we will have to keep going until we've covered a '2' and a '1'.
3, 1, 4
Now we've hit a reoccurence, another '1'. As we know, no two landings can be the same in Vanilla Siteswap so we'll need to implement a rule. The easiest thing to do would be to skip any reoccuring numbers:
3, 1, 4, 5
...and so on:
3, 1, 4, 5, 9
Having hit a '9', we'll need to continue until all intergers from 1-9 have been covered:
3, 1, 4, 5, 9, 2, 6, 8, 7
The lowest Siteswap that lands on these beats is 281145807
There are plenty of other rules you can implement:
- Perhaps any reoccuring number could shift into the 'tens column' so 3.141592... becomes 3, 1, 4, 15, 9, 2...
- Perhaps you could pre-define the Period. For any number that is higher than it, you divide by the Period and take the remainder as your new number.
There's plenty of exploring to do. Don't stop at my examples!