Za nadaljevanje se moraš strinjati s temi pogoji
Spletna izmenjava datotek
Gostovanje avtorsko zaščitenih datotek na spletnih strežnikih in neposredno ponujanje te vsebine uporabnikom je nezakonito. Prav tako je s strani uporabnika nezakonito prenašanje avtorsko zaščitenega materiala iz internetnih strežnikov, če si uporabnik ne lasti originala tega dela.
Protokol BitTorrent
Protokol BitTorrent je že večkrat dokazano popolnoma legalna reštitev za prost pretok informacij. Gre za zbirko informacij o določenih datotekah, ki se nahajajo v virtualnem omrežju med domačimi uporabniki in niso gostovane na nobenem spletnem strežniku.
Tornado.si
Tornado.si je portal, ki poleg mnogih drugih aplikacij vsebuje tudi sledilnik (ang. tracker), ki s pomočjo protokola BitTorrent gradi svoje privatno p2p omrežje v slovenskem sistemu. Uporabniki si med seboj delijo informacije o datotekah, ki so del virtualnega omrežja. NOBENA datoteka ni gostovana direktno na strežniku Tornado.si. Tornado.si uporabnikom omogoča zgolj deljenje lastnosti, velikosti, slikovnega materiala, virov ter ostalih informacij o datotekah, ne pa neposrednega prenosa teh datotek.
Sledilnik (angl. tracker) je strežniški program, ki pozna lokacijo datoteke, ki jo želimo. Da lahko steče prenos potrebuje odjemalec najprej datoteko s podaljškom imena .torrent. V njej so podatki potrebni za prenos datoteke (ime, velikost, kontrolna vsota,...). Če ni datoteke s podaljškom .torrent je sledilnik ne najde in prenos ni možen. Posebnost tega protokola je tudi to, da sledilniki samo povežejo ponudnika in povpraševalca. S tem niso odgovorni za legalnost prenesenih datotek. Povedano drugače, lastnika sledilnika sodno ne preganjajo, če je omogočil prenos ilegalnih vsebin.
Vsebine Tornado.si
Za vso vsebino, ki je na Tornado.si nastala s strani uporabnikov, odgovarjajo uporabniki sami. Vodstvo Tornado.si redno preglejuje in moderira vse vsebine strani, a vseeno ne odgovarja za vsebino portala s strani uporabnikov. Vse ostale vsebine, izvorna koda strani, slikovne datoteke, logotip ter celostna grafična podoba strani in javascript ter css datoteke so avtorsko zaščitene in jih pod nobenim pogojem ni dovoljeno kopirati in reproducirati.

Če se ne strinjaš s temi pogoji potem te prosimo, da zapustiš tole stran.
(function() { var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60); }; window.requestAnimationFrame = requestAnimationFrame; })(); var flakes = [], canvas = document.getElementById("canvas"), ctx = canvas.getContext("2d"), flakeCount = 400, mX = -100, mY = -100 canvas.width = window.innerWidth; canvas.height = window.innerHeight; function snow() { ctx.clearRect(0, 0, canvas.width, canvas.height); for (var i = 0; i < flakeCount; i++) { var flake = flakes[i], x = mX, y = mY, minDist = 150, x2 = flake.x, y2 = flake.y; var dist = Math.sqrt((x2 - x) * (x2 - x) + (y2 - y) * (y2 - y)), dx = x2 - x, dy = y2 - y; if (dist < minDist) { var force = minDist / (dist * dist), xcomp = (x - x2) / dist, ycomp = (y - y2) / dist, deltaV = force / 2; flake.velX -= deltaV * xcomp; flake.velY -= deltaV * ycomp; } else { flake.velX *= .98; if (flake.velY <= flake.speed) { flake.velY = flake.speed } flake.velX += Math.cos(flake.step += .05) * flake.stepSize; } ctx.fillStyle = "rgba(255,255,255," + flake.opacity + ")"; flake.y += flake.velY; flake.x += flake.velX; if (flake.y >= canvas.height || flake.y <= 0) { reset(flake); } if (flake.x >= canvas.width || flake.x <= 0) { reset(flake); } ctx.beginPath(); ctx.arc(flake.x, flake.y, flake.size, 0, Math.PI * 2); ctx.fill(); } requestAnimationFrame(snow); }; function reset(flake) { flake.x = Math.floor(Math.random() * canvas.width); flake.y = 0; flake.size = (Math.random() * 3) + 2; flake.speed = (Math.random() * 1) + 0.5; flake.velY = flake.speed; flake.velX = 0; flake.opacity = (Math.random() * 0.5) + 0.3; } function init() { for (var i = 0; i < flakeCount; i++) { var x = Math.floor(Math.random() * canvas.width), y = Math.floor(Math.random() * canvas.height), size = (Math.random() * 3) + 2, speed = (Math.random() * 1) + 0.5, opacity = (Math.random() * 0.5) + 0.3; flakes.push({ speed: speed, velY: speed, velX: 0, x: x, y: y, size: size, stepSize: (Math.random()) / 30, step: 0, opacity: opacity }); } snow(); }; canvas.addEventListener("mousemove", function(e) { mX = e.clientX, mY = e.clientY }); window.addEventListener("resize",function(){ canvas.width = window.innerWidth; canvas.height = window.innerHeight; }) init();