seen from United States

seen from United States
seen from United States
seen from Russia

seen from United States

seen from Germany
seen from United States
seen from China
seen from Saudi Arabia
seen from Türkiye
seen from United States
seen from Türkiye

seen from Germany
seen from Türkiye
seen from United States

seen from Philippines
seen from China

seen from Australia
seen from United Kingdom

seen from United States

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch ⢠No registration required ⢠HD streaming
Match 1A[4]
Introducing an awful, cursed monstrosity that somehow spawned because people weren't satisfied with another language that a lot of people really love to hate on but is actually pretty alright... and JSFuck.
JSFuck
Everyone complains that JavaScript has too much going on. null *and* undefined? == and ===? where does it end? That's why I decided to thanos my keyboard so it only had 6 characters left. And it's still probably more usable than angular.js
C++
C is a highly performant, minimal language, that can do almost anything you put it to. It's often described as packing everything you need, and nothing you don't. C++ is not that language.
Match 1A[4]
JSFuck
C++
Let's talk about Javascript. Like just about every modern language, Javascript is based on C-syntax. That means when you look at a piece of Javascript, it should look pretty familiar: braces to denote block scope, semicolons to terminate lines, square brackets for arrays and dot notation for objects. The usual stuff.
Today I became aware of JSFuck, which is amazing. The above-linked article nicely walks through just how brainbreaking it is (...probably only understandable to programmers). Javascript, man.
Javascript in only six characters.
I think we should all take a moment to appreciate JSFuck, Martin Kleppeās method by which you can write arbitrary javascript code using only the six characters [, ], (, ), !, and +.
How it works:
Basics:
Because we have [], we have the empty array and the ability to index things with other things. We can immediately construct undefined by [][[]].
! turns anything into a boolean. So ![] is false, and !![] is true.
+, used as a unary operator, casts anything to a number. So +[] is 0, and +!![] is 1. Of course, we also have + as a binary operator, so you can get any other number just be chaining - 5 is +!![]+!![]+!![]+!![]+!![], for example.
Adding an empty array to something turns it into a string, because javascript is terrible. So since ![] is false, ![] + [] is the stringĀ āfalseā.
This means we can make individual letters: Ā (![] + [])[+[]] becomes āfalseā[0] becomesĀ āfā.
Building an alphabet:
At this point everything becomes about getting more letters. Weāve already built false, true, and undefined, as well as all integers, so we can build any string as long as it only uses characters from ā0123456789adefilnrstuā.
Characters so far:Ā ā0123456789adefilnrstuā
Those characters are enough to make āfindā: Ā (![]+[])[+[]] + ([][[]]+[])[+!![]+!![]+!![]+!![]+!![]] + ([][[]]+[])[+!![]] + ([][[]]+[])[+!![]+!![]]
Well, [].find is a method of arrays, so [][āfindā]+[] is a string that starts with āfunction find() {ā (thereās more to this string, but in some environments like firefox there are newlines and in some there arenāt, so we canāt reliably get the rest).
Characters so far:Ā ' ()0123456789acdefilnorstu{'
Now we can spell āconstructorā, so we do ([]+[])["constructor"] to get the String type; String[ānameā] is the string āStringā.
Characters so far: ' ()0123456789Sacdefgilnorstu{'
The S and g were all we were missing for toString. Number.toString takes a base, so e.g. 17[ātoStringā](36) returns 17 in base 36, which is āhā. We can do this for every number 10-36 to get all lowercase letters.
Characters so far:Ā ' ()0123456789Sabcdefghijklmnopqrstuvwxyz{'
Going Global:
[][āfindā][āconstructorā] is Function, the function type. Applied to a string, this yields a function whose code is that string. This means that we can execute any javascriptĀ as long as we can write it. In particular, we already have enough letters to call Function(āreturn thisā)(). This gives us the global objectĀ (calledĀ āglobalā in node, āwindowā in the browser), which means we can now call any global function if we can spell it. Weāre nearly there!
Finishing the set:
Finally, we can now access global[āescapeā] and global[āunescapeā]. escape(ā(ā) gives us ā%28ā and thus the % sign, and now weāre done: we can make any hex number, prefix it with %, and call unescape on it. For example,Ā unescape(ā%27ā³) is a single quote, unescape(ā%7eā) is a tilde, and so forth. Every single ascii character is now available to us.
Characters so far: ALL
Putting it togetherĀ
So now, given any javascript, you can compile it into an enormous, unreadable mass of ()!+[]s! All you have to do is encode it grossly, wrap it in a Function() call, and call the resulting function!
In practice, there are lots of optimizations - you donāt have to build the full unescape sequence to getĀ āNā, for example, becauseĀ +[![]] is NaN so āNā is the relatively short (+[![]]+[])[+![]].
For reference, alert(0) looks like this:
[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
and alert(āHello, world!ā) is 18,616 characters long.
And now you know!
If JavaScript is not chaotic enough for you, this classic library (releasedĀ 07-05-09 and available here via the Wayback Machine) adds the goto statement, which sadly was not included in JSās official specification.
If you really want to mess with JS, however, thereās also my FatFinger.JS dialect, which makes misspellings of JS valid code, and of course JSFuck, building all of JS out of six punctuation symbols.

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch ⢠No registration required ⢠HD streaming
> go on date > get coffee > rant about javascript type coercion > talk about how jsfuck works > date goes well
Interview with Martin Kleppe
Martin Kleppe is best known as the creator of JSFuck, an esoteric coding style of JavaScript, allowing one to write fully functional JS with just six punctuation symbols. While it is similar in style to brainfuck, JSFuck is not an invented language but a discovered one; amazingly, it is native to JS. This means it is runnable as JavaScript without additional code to interpret the symbols or translate them into some other system. Kleppe's other projects deal with code that functions on multiple levels simultaneously; programs that use their own code as display, or self-referential polyglots that contain markup, script, and image as a single text calling itself in different contexts.
Ā» How did you first discover the weird features of JavaScript that make JSFuck possible? Was there a moment when you realized you could write essentially any JavaScript code in just the tiny set of JSFuck characters?Ā
This happened in 2012 when a friend showed me a Tweet with some cryptic JavaScript. There were no Latin letter involved but it was possible to execute the code and it resulted in a simple word. Nothing really fancy when I compare it to what is possible today but at that time I was super impressed! And it made me curious.Ā
So I started to walk through the code step by step (or better: char by char) and already learned a lot about type coercion in JavaScript. The basic idea was to convert primitive data types to a string (eg: true + [] == ātrueā) and then pull out single characters (eg: ātā from ātrueā[0]). These characters then can be joined together to generate new words.Ā
Then the question came up, if it is possible to get more than just a handful characters by playing this kind of Scrabble game. The solution was to access and call methods that generate new strings.
Ā» The amazing thing about JSFuck is that it's all already there in JavaScript ā you showed us a new approach to writing JS, rather than constructing a language artificially. What is it about JavaScript as a language that makes JSFuck possible? How/why did JavaScript end up this way?Ā
Some people say that JavaScript is a bad programming language and poorly designed. But I wouldnāt agree. In my opinion it was designed with a lot of freedom in mind ā which is a good thing. It allows you to go in different directions and seek your own style. There were no strict types or rules how to use it, and many people came up with their own idea about how to solve problems. It is like a mutation or evolution that is unveiling new aspects. In my work, I always try to break a given limit. And a way to achieve this is by digging deeper and deeper to explore new areas that we not have thought of.
Two Aurebesh scripts
Ā» Aurebesh.js extends the JSFuck approach, simplifying some of the combinations of symbols into letters from a list of alphabets. The scripts have very different aesthetics based on the alphabet, some of which look more obfuscated than others, but itās still pretty abstract ā from what I can tell, itās using the letters to represent JS atomic parts which are then constructed into JS commands. Could you tell me a bit about why you went this direction?
Aesthetic was definitely one of the main reasons. Especially the style of other writing systems that we are not used to. I was always fascinated by words written in foreign alphabets, because you look at them and know that there is a meaning behind but you can not even read it. In school I learned Russian first and then English which was way easier for me, because the latin alphabet was something I was used to.
This and vodka were the reasons, why I first started the ŠŠŠŠŠŠ Š”ŠŠŠ Š¢Š (Death Star) project. Later I was invited to JSConf.asia where I presented the Matrix intro sequence written with Asian characters only. Another conference led me to Tel Aviv that made me think, how JavaScript would look like when written in Hebrew from right to left.
The term ācharacterā from the Greek āĻαĻακĻĪ®Ļā combines many meanings and also reflects, that symbols has a different aesthetics. Aurebesh.js plays with that fact in a new context and let us translate code written in English into other writing systems.
When you look at these scripts, can you figure their behavior in your head or do you need to translate them into regular old javascript to see what theyāre actually doing?
Iād love to say: Yes, I can read this code and parse it in my head. ā But to be honest: I canāt! At least, it would need pen, paper and a couple of minutes to solve it. Like a crossword or sudoku puzzle. Thatās why I build little helpers to do that for me.
Kleppe presenting at JSConf.eu 2014
» Could you explain a bit about the animated quines (Hello World 1k etc) and how this style developed? The animated quality adds a great immediacy to the minimized quine; the code shows us what it's doing even while we're reading it, giving a way past its obfuscation.Ā
Letās explain the term āquineā first: A quine is a computer program which takes no input and produces a copy of its own source code as its only output. A simple one in ES6 is:
(Q=a=>alert('(Q='+Q+')()'))()
Quines are dealing with recursion as a topic, because when you execute the result, you will see the same result again and again. The /world was the first animated quine I did and it presented it at JSConf.eu in 2013. It is based on the Qlobe program by the incredible Yusuke Endoh. I saw that years ago and was so fascinated by the spinning world inside of code, that I wanted to do that in the browser. I decided to not read the Ruby source code but figure out everything at my one. It turned out that it was really a long and hard way to go but I learned more than ever before.
In the end it was shorter (exactly 1024 bytes) than the original and also included code highlighting. The feedback on this was overwhelming and I decided to do more. My second animated quine was Mandelcode ā code shaped in the form of a Mandelbrot and once you click, it zooms into the fractal. After some time I started to evolve the topic and created the Matrix éØ quine using Asian characters only and recently VOID where invisible code was used to hide the program itself.
Ā» Please tell me about your new incept10n.com project
This may look different to what I did before, but in the core, it explores the limits of languages used in the Web, too. Incept10n is a so-called polyglot, a single file written in different languages. In our case the file is an image, a style sheet, a script and a web page ā all at the same time. This works, because I manipulated the header section of an JPEG to inject code. When you run it in different contexts it will behave depending on its surrounding.
When you open the page in the web browser, it renders an HTML page. The HTML contains a reference to an external JavaScript pointing to the same file. This will execute it as a script that dynamically writes a CSS link tag. The loaded Ā file then renders a background image into a section of the page. This is finally the manipulated JPG, showing an image of the movie Inception.
There are other examples that merge images and scripts to bypass security restrictions or render a descriptive page around a funny squirrel picture. My motivation was to see how many levels of inceptions with different formats can be done in the browser. I wanted to go some steps further but stumbled many times. After some time I was not even sure if it will all work out. Reading the JPEG specs, fiddling with old-school HEX editors and learning some new command-line tricks helped me out in the end.
Who knew JS could get worse than it already is.