With 2014 coming to an end we can't help but feel a little nostalgic and look back at what the past twelve months have brought us. We couldn't be happier with what we do and we have all of you, our loyal readers to thank for our success. The website is slowly, but determinedly climbing up the internet statistics ladder and Alexa.com, now ranks us as the 328th most-popular website across the globe (at one point we even made it in the top 300). We are so very thankful for all the love and attention and promise to strive to better ourselves and our work constantly and remain dedicated to our work and our fans. During the past 360 or so days, we have been hard at work to bring you news and insights form the tech world and we managed to ramp up more than 3175 news articles, 2920 blog posts and as many as 170 reviews. We are also extremely thankful for all the support in different social media. Our YouTube channel now has almost 100,000 subscribers and over 73,000,000 views. We have also been experimenting with new and engaging lifestyle videos and commentary, which we hope will make for a better multimedia experience. Our Facebook group has also grown and now has over 800,000 likes and counting and so has out Twitter account, with over 75,000 followers reading along. We've also expanded our social media presence over at Google+, where we now have over 75,000 subscribers. Our team also spent many hours developing exciting new features. Our advanced Phone Finder underwent a massive overhaul and now looks and works better than ever. Looking through our extensive smartphone and tablet database has never been easier and we hope it serves as an aid to find the best device for your need. We have also made battery life scores more accessible and easily searchable through our interactive Battery life table. We are all set for 2015 and will be reporting live from CES 2015 (January 6 to January 9 2015) and can't wait to see what the New Year is going to bring to the tech world and we hope you stick around so we can share it with you. Happy New Year to you and all those you hold dear and we wish you true happiness, joy and success in the months to come. Cheers! The GSMArena team window.requestAnimFrame = ( function() { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function( callback ) { window.setTimeout( callback, 1000 / 60 ); }; })(); // now we will setup our basic variables for the demo var canvas = document.getElementById( 'canvas' ), ctx = canvas.getContext( '2d' ), // full screen dimensions cw = 580, ch = 363, // firework collection fireworks = [], // particle collection particles = [], // starting hue hue = 120, // when launching fireworks with a click, too many get launched at once without a limiter, one launch per 5 loop ticks limiterTotal = 5, limiterTick = 0, // this will time the auto launches of fireworks, one launch per 80 loop ticks timerTotal = 80, timerTick = 0, mousedown = false, // mouse x coordinate, mx, // mouse y coordinate my; // set canvas dimensions canvas.width = cw; canvas.height = ch; // now we are going to setup our function placeholders for the entire demo // get a random number within a range function random( min, max ) { return Math.random() * ( max - min ) + min; } // calculate the distance between two points function calculateDistance( p1x, p1y, p2x, p2y ) { var xDistance = p1x - p2x, yDistance = p1y - p2y; return Math.sqrt( Math.pow( xDistance, 2 ) + Math.pow( yDistance, 2 ) ); } // create firework function Firework( sx, sy, tx, ty ) { // actual coordinates this.x = sx; this.y = sy; // starting coordinates this.sx = sx; this.sy = sy; // target coordinates this.tx = tx; this.ty = ty; // distance from starting point to target this.distanceToTarget = calculateDistance( sx, sy, tx, ty ); this.distanceTraveled = 0; // track the past coordinates of each firework to create a trail effect, increase the coordinate count to create more prominent trails this.coordinates = []; this.coordinateCount = 3; // populate initial coordinate collection with the current coordinates while( this.coordinateCount-- ) { this.coordinates.push( [ this.x, this.y ]...