Skip to content

Instantly share code, notes, and snippets.

@plugnburn
plugnburn / LICENSE.txt
Last active Dec 20, 2015 — forked from 140bytes/LICENSE.txt
Whitespace text encoder
View LICENSE.txt
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2013 plugnburn
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
@plugnburn
plugnburn / index.md
Last active Dec 20, 2015
MSM (Mutating Stack Machine) reference implementation
View index.md

MSM programming language reference implementation

Overview

MSM ( Mutating Stack Machine ) is a minimalist self-modifying, stack-based esoteric programming language. It was designed to create the smallest usable stack machine implementation ever possible in JavaScript.

Language structure

View LICENSE.txt
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2013 plugnburn
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
@plugnburn
plugnburn / bitspace.js
Created Aug 12, 2013
BitSpace text steganography bookmarklet
View bitspace.js
//BitSpace bookmarklet
//Just add the below URL to your bookmark bar
//To hide the text into your input, focus on your input field and call the bookmarklet, then input the text to hide
//To reveal the text, select the text in non-input field and call the bookmarklet
javascript:(function(z){BitSpace=eval('({hide:Yh,i,d,e){d=(h=h.split("").map(Yn){Xn.charCodeAt(0).toString(2)Z[+c]}).join("")}).join(" ")).length;e=0;Xi.replace(/ /g,Y){Xe<d?h[e++]:" "})},reveal:Yr,v,l){if(r=r.match(/[ \\u2004\\u2008]/g)){for(v=0,l="";v<r.length;v++)l+=r[v];Xl.split(" ").map(Ys){XString.fromCharCode(parseInt(sZ.indexOf(c)}).join(""),2))}).join("")}}})'.replace(/Z/g,'.split("").map(Yc){X["\\u2004","\\u2008"]').replace(/Y/g,"function(").replace(/X/g,"return ")),z=document.activeElement;z.value?z.value=BitSpace.hide(prompt("Text to hide"),z.value):alert(BitSpace.reveal(getSelection()+""))})()
@plugnburn
plugnburn / LICENSE.txt
Last active Dec 21, 2015 — forked from 140bytes/LICENSE.txt
Downloader.
View LICENSE.txt
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2013 plugnburn
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
@plugnburn
plugnburn / index.html
Created Oct 3, 2013
Pong999 - adaptive multiplayer pong in 999 bytes. Controls: A/Z keys for player 1, Up/Down arrows for player 2. Play at http://bl.ocks.org/plugnburn/raw/6813874/
View index.html
<!DOCTYPE html><title>Pong</title><body onload='R=window.requestAnimationFrame||function(c){setTimeout(c,16)};Z=document.querySelector("canvas"),p=s=0;(onresize=function(){H=(K=Z.height=innerHeight)/5,W=(J=Z.width=innerWidth)>>6,M=W>>1})();(D=function(){Y=Z.getContext("2d"),Y.font="40pt monospace",Y.textBaseline="top",O=P=(K-H)>>1,x=M+W+1,y=O+(H-W)>>1,U=I=0,B=V=4})();onkeydown=function(e){eval({65:"U=-4",90:"U=4",38:"I=-4",40:"I=4"}[e.which])};onkeyup=function(e){eval({65:"U",90:"U",38:"I",40:"I"}[e.which]+"=0")};R(Q=function(){R(Q);with(Math)A=abs,O=min(max(O+U,M),z=K-M-H),P=min(max(P+I,M),z);(y<M||y>K-M-W)&&(B=-B);x<=M+W&&(y+W>=O&&y<=O+H?V=A(U)-V:D(++s)),x>=J-M-W-W&&(y+W>=P&&y<=P+H?V=-V-A(I):D(++p));Y.F=Y.fillRect;with(Y)fillStyle="#000",F(0,0,J,K),fillStyle="#eee",F((J-W)/2,0,W,K),F(M,O,W,H),F(J-W-M,P,W,H),F(x+=V,y+=B,W,W),textAlign="right",fillText(p,J/2-W-M,M),textAlign="left",fillText(s,J/2+W+M,M)})'><canvas style=position:fixed;top:0;left:0>Use a browser, moron!</canvas></body>
@plugnburn
plugnburn / democode.js
Last active Dec 25, 2015
Some democode routines (will be updated from time to time)
View democode.js
//bytebeat: beat(pattern,length)
beat=function(b,e,a,t){return(a="data")+":audio/wav;base64,UklGRl9fX19XQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgA"+btoa(eval("for(t=0;++t<e*8e3;)a+=String.fromCharCode(255&("+b+"))"))}
//bytebeat with math: beatm(pattern,length)
beatm=function(b,e,a,t){return(a="data")+":audio/wav;base64,UklGRl9fX19XQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgA"+btoa(eval("with(Math)for(t=0;++t<e*8e3;)a+=String.fromCharCode(255&("+b+"))"))}
//konamicode: konami(callback)
konami=function(k,c){onkeyup=function(e){/113302022928$/.test(c+=[e.which-37])&&k()}}
//circle gesture detection: circgest(callback[, clockwiseflag])
//clockwiseflag: 1 - counterclockwise, 0 or absent - clockwise
circgest=function(f,a,v,i,c,o){c=v="";addEventListener("mousemove",function(e){o&&(i=2*(e.screenX>o.screenX)+(e.screenY>o.screenY),i^c&&(v+=i,c=i),(a?/3201$/:/2310$/).test(v)&&(f(),v=""));o=e},0)}
View index.html
<div style="background:black;width:90vmin;height:90vmin;position:fixed;left:50%;top:50%;transform:translate(-50%,-50%)"></div>
View README.md

ESVer: conditionally load your scripts depending on the target platform

ESVer is a tiny and convenient helper script to get you out of the overhead hell for the browsers that don't really need it. It detects whether a browser supports ES6/ES2015 standard natively and allows you to load different script versions depending on the result of this check.

Usage

Include your scripts like this:

@plugnburn
plugnburn / README.md
Last active Mar 27, 2016
Psto: a single package.json to scaffold and run your single-post web page in no time
View README.md

Psto

This is a no-brainer to get your single-post web page up and running. Just have to have Node and NPM installed, and /bin/sh pointing to Bash shell. Styling is powered by 999.css.

Steps:

  1. Place the below package.json into an empty directory and enter this directory in your command line prompt.
  2. Run npm run scaffold.
  3. Edit domain, title and author in the config section of your package.json. The domain may be either a Surge subdomain or your own (please refer to the Surge docs). If you're going to host your page yourself, you may leave domain empty.