Apache
tcp/443
Open service 185.31.40.17:443 · tb303.pl
2026-01-11 08:37
HTTP/1.1 200 OK
Connection: close
Content-Length: 4492
date: Sun, 11 Jan 2026 08:37:42 GMT
server: Apache
last-modified: Thu, 11 Dec 2025 22:13:56 GMT
etag: "118c-645b475fd95ed"
accept-ranges: bytes
vary: Accept-Encoding
content-type: text/html
via: 1.1 alproxy
Page title: tb303.pl
<!DOCTYPE html>
<html>
<head>
<title>tb303.pl</title>
<style type="text/css">
html {
height: 100%;
margin: 0;
}
body {
height: 100%;
margin: 0;
background: #222;
color: #888;
font-family: monospace;
display: grid;
place-items: center;
}
</style>
</head>
<body>
<canvas class="zdog-canvas" width="240" height="240"></canvas>
<script src="https://unpkg.com/zdog@1/dist/zdog.dist.min.js"></script>
<script>
let letterCoord = 40;
let isDragging = false;
let illo = new Zdog.Illustration({
element: '.zdog-canvas',
dragRotate: true,
onPrerender: function(ctx) {
ctx.lineWidth = 5.0;
ctx.fillStyle = "#BA2";
ctx.strokeStyle = "#000";
ctx.beginPath();
ctx.ellipse(0, 0, 100, 100, 0, 0, 2 * Math.PI);
ctx.fill();
ctx.stroke();
ctx.beginPath();
ctx.ellipse(0, -10, 75, 75, 0, Math.PI / 8, Math.PI * 7 / 8);
ctx.stroke();
ctx.fillStyle = "#000";
ctx.beginPath();
ctx.ellipse(-40, -30, 16, 26, 0, 0, Math.PI * 2);
ctx.ellipse(40, -30, 16, 26, 0, 0, Math.PI * 2);
ctx.fill();
ctx.globalCompositeOperation = "difference";
if (isDragging) {
const x = Math.floor(Math.random() * 120);
const y = Math.floor(Math.random() * 120);
const w = 10 + Math.floor(Math.random() * 110);
const h = 10 + Math.floor(Math.random() * 110);
let imageData = ctx.getImageData(x,y,w,h);
const offx = Math.floor(Math.random() * 30) - 15;
const offy = Math.floor(Math.random() * 30) - 15;
ctx.putImageData(imageData, x + offx, y + offy);
}
},
onDragStart: function() {
isDragging = true;
},
onDragEnd: function() {
isDragging = false;
}
});
let chassis = new Zdog.Box({
addTo: illo,
width: 200,
height: 100,
depth: 40,
stroke: 5,
leftFace: "#888",
rightFace: "#444",
bottomFace: "#444",
topFace: "#888",
frontFace: "violet",
rearFace: "#222",
});
let printGroup = new Zdog.Group({
addTo: illo,
});
// white area
new Zdog.Rect({
addTo: printGroup,
width: 180,
height: 40,
fill: true,
color: "#eee",
translate: {y: 28, z: 22},
});
new Zdog.Shape({
addTo: printGroup,
translate: {z: 200},
visible: false,
});
let ctrlGroup = new Zdog.Group({
addTo: illo,
});
let knobSpacing = 30;
let knob = new Zdog.Cylinder({
addTo: ctrlGroup,
color: "#999",
stroke: 10,
diameter: 10,
length: 10,
translate: {x: -40, y: -35, z: 30}
});
knob.copy({translate: {x: knob.translate.x + knobSpacing, y: knob.translate.y, z: knob.translate.z}});
knob.copy({translate: {x: knob.translate.x + knobSpacing * 2, y: knob.translate.y, z: knob.translate.z}});
knob.copy({translate: {x: knob.translate.x + knobSpacing * 3, y: knob.translate.y, z: knob.translate.z}});
knob.copy({translate: {x: -70, y: -7, z: knob.translate.z}, diameter: 15});
knob.copy({translate: {x: -30, y: -7, z: knob.translate.z}, diameter: 15});
knob.copy({translate: {x: 70, y: -7, z: knob.translate.z}, diameter: 15});
let keySpacing = 24;
let key = new Zdog.Shape({
addTo: ctrlGroup,
color: "#888",
stroke: 10,
path: [
{x: 0, y: 0},
{x: 0, y: -10},
],
translate: {x: -70, y: 40, z: 30},
});
key.copy({translate: {x: key.translate.x + keySpacing, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 2, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 3, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 4, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 5, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 6, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 0.5, y: key.translate.y - 15, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 1.5, y: key.translate.y - 15, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 3.5, y: key.translate.y - 15, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 4.5, y: key.translate.y - 15, z: key.trans
Open service 2a00:b6e0:1:20:8::1:443 · tb303.pl
2026-01-11 08:37
HTTP/1.1 200 OK
Connection: close
Content-Length: 4492
date: Sun, 11 Jan 2026 08:37:43 GMT
server: Apache
last-modified: Thu, 11 Dec 2025 22:13:56 GMT
etag: "118c-645b475fd95ed"
accept-ranges: bytes
vary: Accept-Encoding
content-type: text/html
via: 1.1 alproxy
Page title: tb303.pl
<!DOCTYPE html>
<html>
<head>
<title>tb303.pl</title>
<style type="text/css">
html {
height: 100%;
margin: 0;
}
body {
height: 100%;
margin: 0;
background: #222;
color: #888;
font-family: monospace;
display: grid;
place-items: center;
}
</style>
</head>
<body>
<canvas class="zdog-canvas" width="240" height="240"></canvas>
<script src="https://unpkg.com/zdog@1/dist/zdog.dist.min.js"></script>
<script>
let letterCoord = 40;
let isDragging = false;
let illo = new Zdog.Illustration({
element: '.zdog-canvas',
dragRotate: true,
onPrerender: function(ctx) {
ctx.lineWidth = 5.0;
ctx.fillStyle = "#BA2";
ctx.strokeStyle = "#000";
ctx.beginPath();
ctx.ellipse(0, 0, 100, 100, 0, 0, 2 * Math.PI);
ctx.fill();
ctx.stroke();
ctx.beginPath();
ctx.ellipse(0, -10, 75, 75, 0, Math.PI / 8, Math.PI * 7 / 8);
ctx.stroke();
ctx.fillStyle = "#000";
ctx.beginPath();
ctx.ellipse(-40, -30, 16, 26, 0, 0, Math.PI * 2);
ctx.ellipse(40, -30, 16, 26, 0, 0, Math.PI * 2);
ctx.fill();
ctx.globalCompositeOperation = "difference";
if (isDragging) {
const x = Math.floor(Math.random() * 120);
const y = Math.floor(Math.random() * 120);
const w = 10 + Math.floor(Math.random() * 110);
const h = 10 + Math.floor(Math.random() * 110);
let imageData = ctx.getImageData(x,y,w,h);
const offx = Math.floor(Math.random() * 30) - 15;
const offy = Math.floor(Math.random() * 30) - 15;
ctx.putImageData(imageData, x + offx, y + offy);
}
},
onDragStart: function() {
isDragging = true;
},
onDragEnd: function() {
isDragging = false;
}
});
let chassis = new Zdog.Box({
addTo: illo,
width: 200,
height: 100,
depth: 40,
stroke: 5,
leftFace: "#888",
rightFace: "#444",
bottomFace: "#444",
topFace: "#888",
frontFace: "violet",
rearFace: "#222",
});
let printGroup = new Zdog.Group({
addTo: illo,
});
// white area
new Zdog.Rect({
addTo: printGroup,
width: 180,
height: 40,
fill: true,
color: "#eee",
translate: {y: 28, z: 22},
});
new Zdog.Shape({
addTo: printGroup,
translate: {z: 200},
visible: false,
});
let ctrlGroup = new Zdog.Group({
addTo: illo,
});
let knobSpacing = 30;
let knob = new Zdog.Cylinder({
addTo: ctrlGroup,
color: "#999",
stroke: 10,
diameter: 10,
length: 10,
translate: {x: -40, y: -35, z: 30}
});
knob.copy({translate: {x: knob.translate.x + knobSpacing, y: knob.translate.y, z: knob.translate.z}});
knob.copy({translate: {x: knob.translate.x + knobSpacing * 2, y: knob.translate.y, z: knob.translate.z}});
knob.copy({translate: {x: knob.translate.x + knobSpacing * 3, y: knob.translate.y, z: knob.translate.z}});
knob.copy({translate: {x: -70, y: -7, z: knob.translate.z}, diameter: 15});
knob.copy({translate: {x: -30, y: -7, z: knob.translate.z}, diameter: 15});
knob.copy({translate: {x: 70, y: -7, z: knob.translate.z}, diameter: 15});
let keySpacing = 24;
let key = new Zdog.Shape({
addTo: ctrlGroup,
color: "#888",
stroke: 10,
path: [
{x: 0, y: 0},
{x: 0, y: -10},
],
translate: {x: -70, y: 40, z: 30},
});
key.copy({translate: {x: key.translate.x + keySpacing, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 2, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 3, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 4, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 5, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 6, y: key.translate.y, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 0.5, y: key.translate.y - 15, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 1.5, y: key.translate.y - 15, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 3.5, y: key.translate.y - 15, z: key.translate.z}});
key.copy({translate: {x: key.translate.x + keySpacing * 4.5, y: key.translate.y - 15, z: key.trans
Open service 2a00:b6e0:1:20:8::1:80 · tb303.pl
2026-01-11 08:37
HTTP/1.1 301 Moved Permanently Connection: close Location: https://tb303.pl/ via: 1.1 alproxy date: Sun, 11 Jan 2026 08:37:42 GMT transfer-encoding: chunked
Open service 185.31.40.17:80 · tb303.pl
2026-01-11 08:37
HTTP/1.1 301 Moved Permanently Connection: close Location: https://tb303.pl/ via: 1.1 alproxy date: Sun, 11 Jan 2026 08:37:42 GMT transfer-encoding: chunked