Wednesday, 29 April 2026

LIST OF COLLEGES IN MUMBAI

 LIST OF COLLEGES IN MUMBAI

  • St. Xavier's College
  • Jai Hind College
  • H.R. College of Commerce and Economics
  • Kishinchand Chellaram College
  • Sydenham College of Commerce and Economics
  • Elphinstone College
  • Wilson College
  • Ramnarain Ruia College
  • Ramniranjan Anandilal Podar College
  • Guru Nanak Khalsa College
  • D. G. Ruparel College
  • SIES College of Arts Science and Commerce
  • South Indians Welfare Society College
  • Mithibai College
  • Narsee Monjee College of Commerce and Economics
  • K. J. Somaiya College of Arts and Commerce
  • K. J. Somaiya College of Science and Commerce
  • Bhavan's College
  • M. M. K. College
  • Tolani College of Commerce
  • Patkar Varde College
  • St. Andrew's College
  • NES Ratnam College
  • Mulund College of Commerce
  • S. K. Somaiya College
  • SIES College Nerul
  • Royal College Mira Road
  • Birla College
  • Sir J. J. College of Architecture
  • L. S. Raheja School of Architecture
  • Institute of Forensic Science Mumbai
  • Monday, 27 April 2026

    who invented zero in mathematics

    who invented zero in mathematics



    The story of zero is actually pretty fascinating. It wasn’t invented overnight by just one person—it developed over time. But the mathematician most often credited for truly defining zero is Brahmagupta from India.

    Around the 7th century, he treated zero as a real number and explained how it works in calculations, like adding or subtracting it. Before that, ancient civilizations such as the Babylonians and the Mayans had symbols for zero, but mainly as placeholders—not as a number you could calculate with.

    What makes Brahmagupta’s work special is that he gave zero meaning and rules, which made math much more powerful. From India, this idea spread across the world and became essential for everything—from basic arithmetic to modern computers.

    In simple terms, zero grew over time, but Brahmagupta made it what it is today.

    Friday, 10 April 2026

    Complete List of State Board Websites (India)

     

    Complete List of State Board Websites (India)

    Andhra Pradesh

    Assam

    Bihar

    Chhattisgarh

    Goa

    • GBSHSE: https://gbshse.in

    Gujarat

    Haryana

    Himachal Pradesh

    Jammu & Kashmir

    Jharkhand

    Karnataka

    Kerala

    Madhya Pradesh

    • MPBSE: http://mpbse.nic.in

    Maharashtra

    Manipur

    Meghalaya

    Mizoram

    • MBSE: https://mbse.edu.in

    Nagaland

    Odisha

    Punjab

    Rajasthan

    • RBSE: http://rajeduboard.rajasthan.gov.in

    Tamil Nadu

    Telangana

    Tripura

    Uttar Pradesh

    Uttarakhand

    • UBSE: http://ubse.uk.gov.in

    West Bengal

     

    Thursday, 2 April 2026

    ALL AI TOOLS

     ALL THE AI TOOLS THAT YOU NEED !!!


    CLICK BELOW TO ACCESS THE AI TOOLS 

    1. SERVER 1 CLICK HERE 👈👈👈

    2. SERVER 2 CLICK HERE 👈👈👈

    3. SERVER 3 CLICK HERE 👈👈👈

    4. SERVER 4 CLICK HERE 👈👈👈

    5. SERVER 5 CLICK HERE 👈👈👈

    6. SERVER 6 CLICK HERE 👈👈👈

    Wednesday, 21 January 2026

    HSC 2027 Economics Most important questions.

    HSC 2027 Economics Most important questions.

    1. Explain 4 features of macroeconomics and microeconomics.

    2. Explain Scope of macroeconomics and microeconomics.

    3. Difference between microeconomics and macroeconomics.

    4. Explain law of diminishing marginal utility with assumption.

    5. Exception of diminishing marginal utility.

    6. Explain types of utility and 4 features of utility.

    7. Explain types of demand.

    8. Law of demand with exception

    9. Determinants of demand.

    10. Difference between individual and market demand.

    11. Explain price elasticity of demand with types.

    12. Methods of measuring price elasticity.

    13. Factors influencing elasticity of demand.

    14. Law of supply with assumption.

    15. Difference between stock and supply.

    16. Total revenue and marginal revenue.

    17. Meaning and features of perfect competition.

    18. Meaning and features of monopoly.

    19. Explain features of oligopoly and monopolistic competition.

    20. What is index number. Explain steps involved in its construction.

    21. Practical difficulties in measuring national income.

    22. Define national income .explain difficulties in measuring it.

    23. Output method vs income method for measuring national income.

    24. Various sources of public revenue in India

    25. Reason for growth of public expenditure.

    26. Distinguish between internal and external debt.

    27. Distinguish between money and capital markets

    28. Features of money and capital markets.

    29. What is foreign trade explain its importance.

    30. Explain recent trends in Indian foreign trade.


    Friday, 9 January 2026

    HSC 2027 Book keeping/Accounts chapter 2 Most Expected Questions

    Most Expected Questions

    1. Outstanding income/expenses.

    2. Depreciation.

    3. Drawings.

    4. Capitalized 50% Donation , life membership etc.

    5. Subscription.

    Tuesday, 6 January 2026

    HSC 2027 Book keeping /Accounts Chapter 1 Most Expected Questions

    Chapter 1 Most Expected Questions 

    1. Closing Stock Questions.

    2. Outstanding Expenses.

    3. Depreciation Questions.

    4. RDD /Bad debts.

    5. Drawings on interest of capital.

    6. Drawings on prepaid expenses.


    Wednesday, 31 December 2025

    HSC 2027 CHEMISTRY CHAPTER 1 SOLID STATE MOST EXPECTED QUESTIONS

    HSC 2027 CHEMISTRY CHAPTER 1 SOLID STATE 

    MOST EXPECTED QUESTIONS

    1. NUMBER OF PARTICLES PRESENT IN FCC PER UNIT CELL

    2. DISTINGUISH BETWEEN CRYSTALLINE & AMORPHOUS SOLIDS 

    3. FCC CONSISTS OF HOW MANY ATOMS EXPLAIN

    4. WHAT ARE SCHOTTKY AND FRESNEL DEFECTS

    5. EXPLAIN METAL DEFICIENCY DEFECT WITH EXAMPLE

    6. WHAT IS SUBSTITUTIONAL  IMPURITY DEFECT

    7. DIFFERECE BETWEEN IONIC AND COVALENT CRYSTALS

    8. CALCULATE PERCENTAGE  EFFICIENCY OF PACKING IN SCC

    9. DEFINE ANISOTROPHY. 

    10. RELATION BETWEEN RADIUS OF ATOM AND EDGE LENGTH IN BCC

    11. WHAT IS COORDINATION NUMBER OF ATOMS IN SCC

    12. RATIO OF OCTAHEDRAL HOLES TO ANIONS IN HCP STRUCTURE

    13. DEFINE ISOMORPHISM , UNIT CELL

    14. WRITE THE CONSEQUENCES OF SCHOTTKY DEFECT WITH REASONS

    15. DIFFERENCE BETWEEN SCHOTTKY AND FRESNEL DEFECTS

    16. WHAT IS INTERSTITIAL IMPURITY DEFECT

    17. RELATION BETWEEN MOLAR MASS , DENSITY & UNIT EDGE LENGTH 

    18. WHAT IS COORDINATION NUMBER OF ATOMS IN SCC LATTICE

    19. COPPER HAS FCC WITH EDGE LENGTH 495 PM FIND ITS RADIUS.

    20. SOLVE ALL TEXTBOOK NUMERICALS.








    Friday, 26 December 2025

    HSC 2026 Physics chapter 13 AC Circuits.

    Most Expected Questions.

    1. Explain inductive reactance , capacitive reactance

    2. Explain impedance, admittance.

    3. State formula for average power in AC Circuits & Formula for power factor.

    4. Conditions for current and impedance in series & parallel resonant circuit.

    5. What is average value of AC current over a complete cycle.

    6. When is an AC Circuit inductive.

    7. Derive an expression for impedance for LCR circuit. Draw it's phasor diagram.

    8. Solve all solved numericals from textbook.


    Sunday, 21 December 2025

    HSC 2026 Physics chapter 12 Electromagnetic Induction

    Most Expected Questions ( 4 -5 marks Fix)

    1. What is transformer.

    2. Explain the construction and working principle of transformer.

    3. Derive the equation of transformer.

    4. Distinguish between stepup and stepdown transformer.

    5. Define self induction and mutual induction.

    6. What are Eddy currents. Write it's 2 applications.

    7. State Faraday laws of Electromagnetic Induction.

    8. State Lenz law of Electromagnetic Induction.

    9. Obtain an expression for rotational EMF of conducting bar in an uniform magnetic field perpendicular to the plane of rotation.

    10. Obtain an expression for EMF generated in a conductor moving in an uniform magnetic field along x axis.


    Friday, 19 December 2025

    HSC 2026 Physics chapter 14 Dual Nature

    Confirm Questions ( 5 marks Fix)

    1. What is photo electric effect.

    2. State two characteristics of photoelectric effect.

    3. With a neat diagram explain the experimental setup to study photoelectric effect.

    4. State Einstein's Photo electric equation and mention the significance of each term in it.

    5. What is debroglies hypothesis. Obtain an expression for debroglies wavelength.

    6. What is debroglies wavelength. Obtain an expression for it.

    7. Define photo electric work function, threshold frequency, stopping potential.


    Wednesday, 17 December 2025

    HSC 2027 Physics Current Electricity

    Most Expected Questions ( 5-6 marks Fix )

    1. What is value of resistance in an ideal voltmeter.

    2. Define Potential Gradient

    3. What is Shunt

    4. State Kirchoffs law of electricity.

    5. Define Loop , Junction , Node.

    6. Conversation of Mcg to ammeter.

    7. Conversion of Mcg to voltmeter.

    8. Distinguish between ammeter and voltmeter.

    9. Distinguish between potentiometer and voltmeter.

    10. Advantages of potentiometer over voltmeter.

    11. With a neat diagram explain calculation of unknown resistance using meter bridge.

    12. Obtain the balancing condition for wheatstone Bridge.

    13. Explain calculation of internal resistance using potentiometer.

    14. Show that deflection in MCG is directly proportional to the current passing through it.








    Monday, 16 December 2024

    Appreciation Of the poem Upon Westminster Bridge

     

    Appreciation Of the poem Upon Westminster Bridge


    ‘Upon Westminster Bridge’ is a Petrarchan sonnet written by the renowned Nature poet William Wordsworth. It is a 14-line poem divided into an octave and a sestet. The poem is about the poet’s feelings of fascination and wonder as he watches the early morning in the city of London from the Westminster Bridge.

    The poet has used poetic devices such as Hyperbole, Personification, Alliteration, Metaphor and Simile. The use of Simile –‘This city now doth, like a garment, Wear the beauty of the morning’ creates a picturesque image. The artistic use of end-rhymes gives a song-like rhythm to the poem. The rhyme scheme is Ababa cdcdcd.

    The main message of the poem is the beauty of the city in its natural setting before the routine activities have begun. This highlights the negative impact of industrialization which the poet believes may ruin the city. Overall, the poem is brilliantly outstanding and allows the readers to visualize the picture painted by Wordsworth. The tone of the poem changes from overwhelmed to calm, to excited and amazed by the end. The poet’s calling out to God in sheer amazement is indeed a sublime finish to the beautiful sonnet. This poem validates the fact that Wordsworth was a true Nature poet.

    I like this poem for its simplicity, freshness & picturesque depiction. This over 200 year’s old poem has the supreme power to take anyone close to nature.

    Appreciation of the poem – ‘There is another sky’

     

    Appreciation of the poem – ‘There is another sky’

    The poem ‘There is another sky’ is written by Emily Dickinson. Emily Dickinson is America’s one of the greatest and most original poets of all time. ‘There is another sky’ is an inspirational poem. It is a Petrarchan sonnet of fourteen lines consisting of two stanzas – an octave of eight lines and a sestet of six lines. Through this poem, the poet addresses her younger brother, Austin, and urges him to return home. Home is depicted here as a world, a garden, an ideal place.

    The first stanza tells about the ‘other’ place and in the second stanza the poet urges her brother to return to this place. The poem emphasizes the serenity, peace and happiness surrounding one’s home. At the centre of the poem is the special sibling bond.

    The theme of the poem is that happiness and gloom are the two sides of life and each one has to focus on what one desires. The lines of the poem are short and the language is simple. The poet has used inversion, hyperbole, onomatopoeia and alliteration. The poem is philosophical in nature and the tone of the poem is encouraging and pleading.

    The message of the poem is that one should not get affected by trials and tribulations of life. I like this poem for its universal appeal. Anybody can relate to the genuine emotions and feelings involved in this poem. The poem is like a call of return to one’s sibling who are profoundly missed.

    Monday, 9 December 2024

    Appreciation of the poem (cherry tree)

     Appreciation of the poem (cherry tree)

    Cherry Tree is a beautiful poem written by Ruskin Bond. It is a narrative poem describing the everyday struggle of a plant to grow & blossom. The poet’s tone is optimistic, full of wonder for the nature – he focuses on the growing aspect of nature. The poem has a beginning, middle and an end. It’s a simple poem about the poet’s innocent & pure joy. All the incidents are in nice sequence.

    The poet planted a cherry seed which grew into a full blossomed tree after a wait of eight years. The poem is all about this wonderful experience and survival instinct of the tree. The time, that is the seasons and the rain helped the tree grow and the poet watched this patiently without much to do. The poem is about the poet’s sense of achievement & pride of having nurtured a tree.

    The style & language of the poem is simple. Poetic devices such as Alliteration, Antithesis, Climax, Personification are used by the poet. The important aspect of this poem is its picturesque depiction & colourfull imagery. The whole process of a seed turning into a plant is been made appealing to the readers with colourfull & vivid description. The references of seasons, the sky, animals, birds, insects focus on the wonders of nature.

    The poem gives a message of nature conservation- tree plantation & its importance. The cherry tree is indeed a ‘Giving Tree’. It also speaks about the tree’s determination to grow despite all odds.

    I like the poem for its positive, optimistic tone. It encourages us to overcome the obstacles, hardships we may face in life & become resilient like the cherry tree.

    Thursday, 19 September 2024

    Html code for Tetris game

     Html code for Tetris game

    ( copy paste the given code below)

    <!DOCTYPE html>

    <html lang='en'>

     

    <head>

        <meta charset='UTF-8'>

        <style>

            canvas {

                position: absolute;

                top: 45%;

                left: 50%;

                width: 640px;

                height: 640px;

                margin: -320px 0 0 -320px;

            }

        </style>

    </head>

     

    <body>

        <canvas></canvas>

        <script>

            'use strict';

            var canvas = document.querySelector('canvas');

            canvas.width = 640;

            canvas.height = 640;

     

            var g = canvas.getContext('2d');

     

            var right = { x: 1, y: 0 };

            var down = { x: 0, y: 1 };

            var left = { x: -1, y: 0 };

     

            var EMPTY = -1;

            var BORDER = -2;

     

            var fallingShape;

            var nextShape;

            var dim = 640;

            var nRows = 18;

            var nCols = 12;

            var blockSize = 30;

            var topMargin = 50;

            var leftMargin = 20;

            var scoreX = 400;

            var scoreY = 330;

            var titleX = 130;

            var titleY = 160;

            var clickX = 120;

            var clickY = 400;

            var previewCenterX = 467;

            var previewCenterY = 97;

            var mainFont = 'bold 48px monospace';

            var smallFont = 'bold 18px monospace';

            var colors = ['green', 'red', 'blue', 'purple', 'orange', 'blueviolet', 'magenta'];

            var gridRect = { x: 46, y: 47, w: 308, h: 517 };

            var previewRect = { x: 387, y: 47, w: 200, h: 200 };

            var titleRect = { x: 100, y: 95, w: 252, h: 100 };

            var clickRect = { x: 50, y: 375, w: 252, h: 40 };

            var outerRect = { x: 5, y: 5, w: 630, h: 630 };

            var squareBorder = 'white';

            var titlebgColor = 'white';

            var textColor = 'black';

            var bgColor = '#DDEEFF';

            var gridColor = '#BECFEA';

            var gridBorderColor = '#7788AA';

            var largeStroke = 5;

            var smallStroke = 2;

     

            // position of falling shape

            var fallingShapeRow;

            var fallingShapeCol;

     

            var keyDown = false;

            var fastDown = false;

     

            var grid = [];

            var scoreboard = new Scoreboard();

     

            addEventListener('keydown', function (event) {

                if (!keyDown) {

                    keyDown = true;

     

                    if (scoreboard.isGameOver())

                        return;

     

                    switch (event.key) {

     

                        case 'w':

                        case 'ArrowUp':

                            if (canRotate(fallingShape))

                                rotate(fallingShape);

                            break;

     

                        case 'a':

                        case 'ArrowLeft':

                            if (canMove(fallingShape, left))

                                move(left);

                            break;

     

                        case 'd':

                        case 'ArrowRight':

                            if (canMove(fallingShape, right))

                                move(right);

                            break;

     

                        case 's':

                        case 'ArrowDown':

                            if (!fastDown) {

                                fastDown = true;

                                while (canMove(fallingShape, down)) {

                                    move(down);

                                    draw();

                                }

                                shapeHasLanded();

                            }

                    }

                    draw();

                }

            });

     

            addEventListener('click', function () {

                startNewGame();

            });

     

            addEventListener('keyup', function () {

                keyDown = false;

                fastDown = false;

            });

     

            function canRotate(s) {

                if (s === Shapes.Square)

                    return false;

     

                var pos = new Array(4);

                for (var i = 0; i < pos.length; i++) {

                    pos[i] = s.pos[i].slice();

                }

     

                pos.forEach(function (row) {

                    var tmp = row[0];

                    row[0] = row[1];

                    row[1] = -tmp;

                });

     

                return pos.every(function (p) {

                    var newCol = fallingShapeCol + p[0];

                    var newRow = fallingShapeRow + p[1];

                    return grid[newRow][newCol] === EMPTY;

                });

            }

     

            function rotate(s) {

                if (s === Shapes.Square)

                    return;

     

                s.pos.forEach(function (row) {

                    var tmp = row[0];

                    row[0] = row[1];

                    row[1] = -tmp;

                });

            }

     

            function move(dir) {

                fallingShapeRow += dir.y;

                fallingShapeCol += dir.x;

            }

     

            function canMove(s, dir) {

                return s.pos.every(function (p) {

                    var newCol = fallingShapeCol + dir.x + p[0];

                    var newRow = fallingShapeRow + dir.y + p[1];

                    return grid[newRow][newCol] === EMPTY;

                });

            }

     

            function shapeHasLanded() {

                addShape(fallingShape);

                if (fallingShapeRow < 2) {

                    scoreboard.setGameOver();

                    scoreboard.setTopscore();

                } else {

                    scoreboard.addLines(removeLines());

                }

                selectShape();

            }

     

            function removeLines() {

                var count = 0;

                for (var r = 0; r < nRows - 1; r++) {

                    for (var c = 1; c < nCols - 1; c++) {

                        if (grid[r][c] === EMPTY)

                            break;

                        if (c === nCols - 2) {

                            count++;

                            removeLine(r);

                        }

                    }

                }

                return count;

            }

     

            function removeLine(line) {

                for (var c = 0; c < nCols; c++)

                    grid[line][c] = EMPTY;

     

                for (var c = 0; c < nCols; c++) {

                    for (var r = line; r > 0; r--)

                        grid[r][c] = grid[r - 1][c];

                }

            }

     

            function addShape(s) {

                s.pos.forEach(function (p) {

                    grid[fallingShapeRow + p[1]][fallingShapeCol + p[0]] = s.ordinal;

                });

            }

     

            function Shape(shape, o) {

                this.shape = shape;

                this.pos = this.reset();

                this.ordinal = o;

            }

     

            var Shapes = {

                ZShape: [[0, -1], [0, 0], [-1, 0], [-1, 1]],

                SShape: [[0, -1], [0, 0], [1, 0], [1, 1]],

                IShape: [[0, -1], [0, 0], [0, 1], [0, 2]],

                TShape: [[-1, 0], [0, 0], [1, 0], [0, 1]],

                Square: [[0, 0], [1, 0], [0, 1], [1, 1]],

                LShape: [[-1, -1], [0, -1], [0, 0], [0, 1]],

                JShape: [[1, -1], [0, -1], [0, 0], [0, 1]]

            };

     

            function getRandomShape() {

                var keys = Object.keys(Shapes);

                var ord = Math.floor(Math.random() * keys.length);

                var shape = Shapes[keys[ord]];

                return new Shape(shape, ord);

            }

     

            Shape.prototype.reset = function () {

                this.pos = new Array(4);

                for (var i = 0; i < this.pos.length; i++) {

                    this.pos[i] = this.shape[i].slice();

                }

                return this.pos;

            }

     

            function selectShape() {

                fallingShapeRow = 1;

                fallingShapeCol = 5;

                fallingShape = nextShape;

                nextShape = getRandomShape();

                if (fallingShape != null) {

                    fallingShape.reset();

                }

            }

     

            function Scoreboard() {

                this.MAXLEVEL = 9;

     

                var level = 0;

                var lines = 0;

                var score = 0;

                var topscore = 0;

                var gameOver = true;

     

                this.reset = function () {

                    this.setTopscore();

                    level = lines = score = 0;

                    gameOver = false;

                }

     

                this.setGameOver = function () {

                    gameOver = true;

                }

     

                this.isGameOver = function () {

                    return gameOver;

                }

     

                this.setTopscore = function () {

                    if (score > topscore) {

                        topscore = score;

                    }

                }

     

                this.getTopscore = function () {

                    return topscore;

                }

     

                this.getSpeed = function () {

     

                    switch (level) {

                        case 0: return 700;

                        case 1: return 600;

                        case 2: return 500;

                        case 3: return 400;

                        case 4: return 350;

                        case 5: return 300;

                        case 6: return 250;

                        case 7: return 200;

                        case 8: return 150;

                        case 9: return 100;

                        default: return 100;

                    }

                }

     

                this.addScore = function (sc) {

                    score += sc;

                }

     

                this.addLines = function (line) {

     

                    switch (line) {

                        case 1:

                            this.addScore(10);

                            break;

                        case 2:

                            this.addScore(20);

                            break;

                        case 3:

                            this.addScore(30);

                            break;

                        case 4:

                            this.addScore(40);

                            break;

                        default:

                            return;

                    }

     

                    lines += line;

                    if (lines > 10) {

                        this.addLevel();

                    }

                }

     

                this.addLevel = function () {

                    lines %= 10;

                    if (level < this.MAXLEVEL) {

                        level++;

                    }

                }

     

                this.getLevel = function () {

                    return level;

                }

     

                this.getLines = function () {

                    return lines;

                }

     

                this.getScore = function () {

                    return score;

                }

            }

     

            function draw() {

                g.clearRect(0, 0, canvas.width, canvas.height);

     

                drawUI();

     

                if (scoreboard.isGameOver()) {

                    drawStartScreen();

                } else {

                    drawFallingShape();

                }

            }

     

            function drawStartScreen() {

                g.font = mainFont;

     

                fillRect(titleRect, titlebgColor);

                fillRect(clickRect, titlebgColor);

     

                g.fillStyle = textColor;

                g.fillText('Tetris', titleX, titleY);

     

                g.font = smallFont;

                g.fillText('click to start', clickX, clickY);

            }

     

            function fillRect(r, color) {

                g.fillStyle = color;

                g.fillRect(r.x, r.y, r.w, r.h);

            }

     

            function drawRect(r, color) {

                g.strokeStyle = color;

                g.strokeRect(r.x, r.y, r.w, r.h);

            }

     

            function drawSquare(colorIndex, r, c) {

                var bs = blockSize;

                g.fillStyle = colors[colorIndex];

                g.fillRect(leftMargin + c * bs, topMargin + r * bs, bs, bs);

     

                g.lineWidth = smallStroke;

                g.strokeStyle = squareBorder;

                g.strokeRect(leftMargin + c * bs, topMargin + r * bs, bs, bs);

            }

     

            function drawUI() {

     

                // background

                fillRect(outerRect, bgColor);

                fillRect(gridRect, gridColor);

     

                // the blocks dropped in the grid

                for (var r = 0; r < nRows; r++) {

                    for (var c = 0; c < nCols; c++) {

                        var idx = grid[r][c];

                        if (idx > EMPTY)

                            drawSquare(idx, r, c);

                    }

                }

     

                // the borders of grid and preview panel

                g.lineWidth = largeStroke;

                drawRect(gridRect, gridBorderColor);

                drawRect(previewRect, gridBorderColor);

                drawRect(outerRect, gridBorderColor);

     

                // scoreboard

                g.fillStyle = textColor;

                g.font = smallFont;

                g.fillText('hiscore    ' + scoreboard.getTopscore(), scoreX, scoreY);

                g.fillText('level      ' + scoreboard.getLevel(), scoreX, scoreY + 30);

                g.fillText('lines      ' + scoreboard.getLines(), scoreX, scoreY + 60);

                g.fillText('score      ' + scoreboard.getScore(), scoreX, scoreY + 90);

     

                // preview

                var minX = 5, minY = 5, maxX = 0, maxY = 0;

                nextShape.pos.forEach(function (p) {

                    minX = Math.min(minX, p[0]);

                    minY = Math.min(minY, p[1]);

                    maxX = Math.max(maxX, p[0]);

                    maxY = Math.max(maxY, p[1]);

                });

                var cx = previewCenterX - ((minX + maxX + 1) / 2.0 * blockSize);

                var cy = previewCenterY - ((minY + maxY + 1) / 2.0 * blockSize);

     

                g.translate(cx, cy);

                nextShape.shape.forEach(function (p) {

                    drawSquare(nextShape.ordinal, p[1], p[0]);

                });

                g.translate(-cx, -cy);

            }

     

            function drawFallingShape() {

                var idx = fallingShape.ordinal;

                fallingShape.pos.forEach(function (p) {

                    drawSquare(idx, fallingShapeRow + p[1], fallingShapeCol + p[0]);

                });

            }

     

           function animate(lastFrameTime) {

                var requestId = requestAnimationFrame(function () {

                    animate(lastFrameTime);

                });

     

                var time = new Date().getTime();

                var delay = scoreboard.getSpeed();

     

                if (lastFrameTime + delay < time) {

     

                    if (!scoreboard.isGameOver()) {

     

                        if (canMove(fallingShape, down)) {

                            move(down);

                        } else {

                            shapeHasLanded();

                        }

                        draw();

                        lastFrameTime = time;

     

                    } else {

                        cancelAnimationFrame(requestId);

                    }

                }

            }

     

            function startNewGame() {

                initGrid();

                selectShape();

                scoreboard.reset();

                animate(-1);

            }

     

            function initGrid() {

                function fill(arr, value) {

                    for (var i = 0; i < arr.length; i++) {

                        arr[i] = value;

                    }

                }

                for (var r = 0; r < nRows; r++) {

                    grid[r] = new Array(nCols);

                    fill(grid[r], EMPTY);

                    for (var c = 0; c < nCols; c++) {

                        if (c === 0 || c === nCols - 1 || r === nRows - 1)

                            grid[r][c] = BORDER;

                    }

                }

            }

     

            function init() {

                initGrid();

                selectShape();

                draw();

            }

     

            init();

        </script>

     

    </body>

     

    </html>