Tuesday, July 22, 2025

Are these jokes funny?

Are these jokes funny?

• What do you call a pony with a cough?

A little horse.

• What did one hat say to the other?

You wait here. I’ll go on a head.

• What do you call a magic dog?

A labracadabrador.

• What did the shark say when he ate the clownfish?

This tastes a little funny.

• What’s orange and sounds like a carrot?

A parrot.

• Why can’t you hear a pterodactyl go to the bathroom?

Because the “P” is silent.

• What do you call a woman with one leg?

Eileen.

• What did the pirate say when he turned 80?

Aye matey.

• Why did the frog take the bus to work today?

His car got toad away.

• What did the buffalo say when his son left for college?

Bison.

• What is an astronaut’s favorite part on a computer?

The space bar.

• Why did the yogurt go to the art exhibition?

Because it was cultured.

• What do you call an apology written in dots and dashes?

Re-Morse code.

• Did you hear about the two people who stole a calendar?

They each got six months.

• Why did the hipster burn his mouth?

He drank the coffee before it was cool.

• What do cows do on date night?

Go to the moo-vies.

• What do cows say when they hear a bad joke?

“I am not amoosed.”

• Why do French people eat snails?

They don’t like fast food.

• Why did the golfer wear two pairs of pants? 

Just in case he got a hole in one!

• Why don’t the circus lions eat the clowns? 

Because they taste funny!

Trutimk

 



timkat timkat tim tim tim


Wednesday, July 16, 2025

👠 Top Fashion Models of 2025: Icons, Activists & Rising Stars

 

👠 Top Fashion Models of 2025: Icons, Activists & Rising Stars

The modeling world in 2025 is more diverse, dynamic, and digitally driven than ever. From established supermodels to breakout newcomers, these women are redefining beauty, power, and influence on and off the runway.

🌟 Leading Icons

1. Bella Hadid

  • Back stronger than ever after a health break

  • Continues to lead campaigns for Versace and Balenciaga

  • Known for her chameleon-like versatility and activism

2. Adut Akech

  • South Sudanese-Australian model and UNHCR ambassador

  • Walked for Dior, Valentino, and Prada

  • Launched a charity for refugee education in 2025

3. Liu Wen

  • China’s first supermodel and a global fashion icon

  • Represents Asian beauty and business acumen

  • Board member of a major fashion conglomerate

🚀 Breakout Stars of 2025

4. Awar Odhiang

  • Walked 71 shows in 2024

  • Canadian model with rising influence on social media

5. Agel Akol

  • Known for her work with Miu Miu and The Nobles Management

  • Walked 70 shows in 2024

6. Lulu Tenney

  • American model with a classic look

  • Featured in Coperni FW25 and walked 68 shows

💪 Models Making Impact

7. Paloma Elsesser

  • Body positivity advocate and Vogue cover star

  • Creative director of a major beauty brand

8. Quannah Chasinghorse

  • Indigenous model and climate activist

  • Launched a sustainability-driven beauty brand

9. Ashley Graham

  • Size-inclusive fashion pioneer

  • Introduced adaptive sportswear tech in 2025

📸 Visual Highlights

🔮 Trends Shaping Modeling in 2025

  • Diversity & Inclusion: Models of all backgrounds are front and center

  • Activism: Many use their platforms for social and environmental causes

  • Digital Influence: Instagram and TikTok are essential career tools

  • Virtual Modeling: CGI avatars are entering campaigns and shows

  • Body Positivity: More brands embrace models of all shapes and sizes

🕹️ Runner Game in HTML (CODE)

Here's a simple runner game written in HTML, CSS, and JavaScript. The player (a block) jumps over obstacles that move across the screen. It’s lightweight and runs directly in the browser.

🕹️ Runner Game in HTML

✅ Features

  • Jump with spacebar

  • Avoid incoming obstacles

  • Game over on collision

📄 Full Code

You can copy and paste this into a single .html file and open it in your browser:

html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>Runner Game</title>
  <style>
    body {
      margin: 0;
      overflow: hidden;
      background: #f0f0f0;
      font-family: sans-serif;
    }
    #game {
      position: relative;
      width: 100vw;
      height: 100vh;
      background: #87ceeb;
    }
    #player {
      position: absolute;
      bottom: 0;
      left: 50px;
      width: 50px;
      height: 50px;
      background: #333;
    }
    .obstacle {
      position: absolute;
      bottom: 0;
      width: 30px;
      height: 60px;
      background: red;
      animation: moveObstacle 3s linear infinite;
    }
    @keyframes moveObstacle {
      from { right: -30px; }
      to { right: 100vw; }
    }
    #score {
      position: absolute;
      top: 10px;
      left: 10px;
      font-size: 24px;
      color: #333;
    }
  </style>
</head>
<body>
  <div id="game">
    <div id="player"></div>
    <div id="score">Score: 0</div>
  </div>

  <script>
    const player = document.getElementById("player");
    const game = document.getElementById("game");
    const scoreDisplay = document.getElementById("score");

    let isJumping = false;
    let score = 0;

    function jump() {
      if (isJumping) return;
      isJumping = true;
      let jumpHeight = 0;
      const jumpInterval = setInterval(() => {
        if (jumpHeight >= 150) {
          clearInterval(jumpInterval);
          const fallInterval = setInterval(() => {
            if (jumpHeight <= 0) {
              clearInterval(fallInterval);
              isJumping = false;
            }
            jumpHeight -= 5;
            player.style.bottom = jumpHeight + "px";
          }, 20);
        }
        jumpHeight += 5;
        player.style.bottom = jumpHeight + "px";
      }, 20);
    }

    function createObstacle() {
      const obstacle = document.createElement("div");
      obstacle.classList.add("obstacle");
      obstacle.style.right = "-30px";
      game.appendChild(obstacle);

      let obstaclePosition = window.innerWidth;
      const moveInterval = setInterval(() => {
        obstaclePosition -= 5;
        obstacle.style.right = obstaclePosition + "px";

        const playerRect = player.getBoundingClientRect();
        const obstacleRect = obstacle.getBoundingClientRect();

        if (
          obstacleRect.left < playerRect.right &&
          obstacleRect.right > playerRect.left &&
          obstacleRect.bottom > playerRect.top
        ) {
          alert("Game Over! Final Score: " + score);
          location.reload();
        }

        if (obstaclePosition < -30) {
          clearInterval(moveInterval);
          game.removeChild(obstacle);
          score++;
          scoreDisplay.textContent = "Score: " + score;
        }
      }, 20);
    }

    setInterval(createObstacle, 2000);

    document.addEventListener("keydown", (e) => {
      if (e.code === "Space") jump();
    });
  </script>
</body>
</html>

🧠 How It Works

  • Press Spacebar to jump.

  • Red obstacles move from right to left.

  • Collision detection ends the game.

  • Score increases with each obstacle passed.

Top Model Cars 2025

Top Gear's 10 most important new cars of 2025 | Top GearEdmunds Top Rated Car 2025 | Edmunds
10Best Cars for 2025The 17 New Cars We're Most Excited About in 2025 | Architectural Digest

🚗 Top Cars of 2025: The Future Is Now

2025 is shaping up to be a landmark year for the automotive industry. From electrifying performance to cutting-edge tech, this year’s lineup of new cars is redefining what it means to drive. Whether you're into luxury sedans, rugged SUVs, or eco-friendly EVs, there’s something for everyone.

🌟 Top Picks for 2025

1. 2025 Honda Civic Type R

  • 🔥 Performance-focused hatchback

  • Turbocharged engine with track-ready handling

  • Aggressive styling and advanced infotainment 

2. 2025 Lucid Air

  • ⚡ Luxury electric sedan

  • Over 500 miles of range

  • Sleek design and futuristic interior 

3. 2025 BMW Neue Klasse

  • 🧠 BMW’s EV reinvention

  • Minimalist design with advanced tech

  • Built on a new electric platform 

4. 2025 Chevrolet Corvette ZR1

  • 🏎️ 1,064 horsepower supercar

  • Most powerful Corvette ever

  • Combines American muscle with exotic performance 

5. 2025 Range Rover EV

  • 🌿 All-electric luxury SUV

  • Over 300 miles of range

  • Opulent interior and off-road capability 

6. 2025 Kia Carnival Hybrid

  • 👨‍👩‍👧‍👦 Family-friendly hybrid minivan

  • Spacious interior with tech upgrades

  • Efficient and stylish 

🧠 Trends to Watch

  • Electrification: EVs dominate the 2025 lineup, with improved range and charging times.

  • Hybrid Comebacks: Plug-in hybrids offer a bridge between gas and electric.

  • Tech Integration: AI-powered infotainment, augmented reality navigation, and autonomous features are becoming standard.

  • Luxury Meets Sustainability: High-end brands are embracing eco-friendly materials and carbon-neutral production.

🏁 Final Thoughts

Whether you're upgrading your ride or just dreaming about the future, 2025’s top cars offer something for every driver. From high-performance beasts to eco-conscious cruisers, the road ahead looks thrilling.

Monday, July 14, 2025

Youtube Video Game/Jeu vidéo YouTube


Here is a little game to enjoy.



Voici un autre petit jeu vidéo à apprécier !
 

Sunday, July 13, 2025

Basic HTML PONG Game Source Code

 This is basic HTML Pong Game



The complete code:

<!DOCTYPE html>
<html>
<head>
  <title>Basic Tetris HTML Game</title>
  <meta charset="UTF-8">
  <style>
  html, body {
    height: 100%;
    margin: 0;
  }

  body {
    background: black;
    display: flex;
    align-items: center;
    justify-content: center;
  }

  canvas {
    border: 1px solid white;
  }
  </style>
</head>
<body>
<canvas width="320" height="640" id="game"></canvas>
<script>
// https://tetris.fandom.com/wiki/Tetris_Guideline

// get a random integer between the range of [min,max]
// @see https://stackoverflow.com/a/1527820/2124254
function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);

  return Math.floor(Math.random() * (max - min + 1)) + min;
}

// generate a new tetromino sequence
// @see https://tetris.fandom.com/wiki/Random_Generator
function generateSequence() {
  const sequence = ['I', 'J', 'L', 'O', 'S', 'T', 'Z'];

  while (sequence.length) {
    const rand = getRandomInt(0, sequence.length - 1);
    const name = sequence.splice(rand, 1)[0];
    tetrominoSequence.push(name);
  }
}

// get the next tetromino in the sequence
function getNextTetromino() {
  if (tetrominoSequence.length === 0) {
    generateSequence();
  }

  const name = tetrominoSequence.pop();
  const matrix = tetrominos[name];

  // I and O start centered, all others start in left-middle
  const col = playfield[0].length / 2 - Math.ceil(matrix[0].length / 2);

  // I starts on row 21 (-1), all others start on row 22 (-2)
  const row = name === 'I' ? -1 : -2;

  return {
    name: name,      // name of the piece (L, O, etc.)
    matrix: matrix,  // the current rotation matrix
    row: row,        // current row (starts offscreen)
    col: col         // current col
  };
}

// rotate an NxN matrix 90deg
// @see https://codereview.stackexchange.com/a/186834
function rotate(matrix) {
  const N = matrix.length - 1;
  const result = matrix.map((row, i) =>
    row.map((val, j) => matrix[N - j][i])
  );

  return result;
}

// check to see if the new matrix/row/col is valid
function isValidMove(matrix, cellRow, cellCol) {
  for (let row = 0; row < matrix.length; row++) {
    for (let col = 0; col < matrix[row].length; col++) {
      if (matrix[row][col] && (
          // outside the game bounds
          cellCol + col < 0 ||
          cellCol + col >= playfield[0].length ||
          cellRow + row >= playfield.length ||
          // collides with another piece
          playfield[cellRow + row][cellCol + col])
        ) {
        return false;
      }
    }
  }

  return true;
}

// place the tetromino on the playfield
function placeTetromino() {
  for (let row = 0; row < tetromino.matrix.length; row++) {
    for (let col = 0; col < tetromino.matrix[row].length; col++) {
      if (tetromino.matrix[row][col]) {

        // game over if piece has any part offscreen
        if (tetromino.row + row < 0) {
          return showGameOver();
        }

        playfield[tetromino.row + row][tetromino.col + col] = tetromino.name;
      }
    }
  }

  // check for line clears starting from the bottom and working our way up
  for (let row = playfield.length - 1; row >= 0; ) {
    if (playfield[row].every(cell => !!cell)) {

      // drop every row above this one
      for (let r = row; r >= 0; r--) {
        for (let c = 0; c < playfield[r].length; c++) {
          playfield[r][c] = playfield[r-1][c];
        }
      }
    }
    else {
      row--;
    }
  }

  tetromino = getNextTetromino();
}

// show the game over screen
function showGameOver() {
  cancelAnimationFrame(rAF);
  gameOver = true;

  context.fillStyle = 'black';
  context.globalAlpha = 0.75;
  context.fillRect(0, canvas.height / 2 - 30, canvas.width, 60);

  context.globalAlpha = 1;
  context.fillStyle = 'white';
  context.font = '36px monospace';
  context.textAlign = 'center';
  context.textBaseline = 'middle';
  context.fillText('GAME OVER!', canvas.width / 2, canvas.height / 2);
}

const canvas = document.getElementById('game');
const context = canvas.getContext('2d');
const grid = 32;
const tetrominoSequence = [];

// keep track of what is in every cell of the game using a 2d array
// tetris playfield is 10x20, with a few rows offscreen
const playfield = [];

// populate the empty state
for (let row = -2; row < 20; row++) {
  playfield[row] = [];

  for (let col = 0; col < 10; col++) {
    playfield[row][col] = 0;
  }
}

// how to draw each tetromino
// @see https://tetris.fandom.com/wiki/SRS
const tetrominos = {
  'I': [
    [0,0,0,0],
    [1,1,1,1],
    [0,0,0,0],
    [0,0,0,0]
  ],
  'J': [
    [1,0,0],
    [1,1,1],
    [0,0,0],
  ],
  'L': [
    [0,0,1],
    [1,1,1],
    [0,0,0],
  ],
  'O': [
    [1,1],
    [1,1],
  ],
  'S': [
    [0,1,1],
    [1,1,0],
    [0,0,0],
  ],
  'Z': [
    [1,1,0],
    [0,1,1],
    [0,0,0],
  ],
  'T': [
    [0,1,0],
    [1,1,1],
    [0,0,0],
  ]
};

// color of each tetromino
const colors = {
  'I': 'cyan',
  'O': 'yellow',
  'T': 'purple',
  'S': 'green',
  'Z': 'red',
  'J': 'blue',
  'L': 'orange'
};

let count = 0;
let tetromino = getNextTetromino();
let rAF = null;  // keep track of the animation frame so we can cancel it
let gameOver = false;

// game loop
function loop() {
  rAF = requestAnimationFrame(loop);
  context.clearRect(0,0,canvas.width,canvas.height);

  // draw the playfield
  for (let row = 0; row < 20; row++) {
    for (let col = 0; col < 10; col++) {
      if (playfield[row][col]) {
        const name = playfield[row][col];
        context.fillStyle = colors[name];

        // drawing 1 px smaller than the grid creates a grid effect
        context.fillRect(col * grid, row * grid, grid-1, grid-1);
      }
    }
  }

  // draw the active tetromino
  if (tetromino) {

    // tetromino falls every 35 frames
    if (++count > 35) {
      tetromino.row++;
      count = 0;

      // place piece if it runs into anything
      if (!isValidMove(tetromino.matrix, tetromino.row, tetromino.col)) {
        tetromino.row--;
        placeTetromino();
      }
    }

    context.fillStyle = colors[tetromino.name];

    for (let row = 0; row < tetromino.matrix.length; row++) {
      for (let col = 0; col < tetromino.matrix[row].length; col++) {
        if (tetromino.matrix[row][col]) {

          // drawing 1 px smaller than the grid creates a grid effect
          context.fillRect((tetromino.col + col) * grid, (tetromino.row + row) * grid, grid-1, grid-1);
        }
      }
    }
  }
}

// listen to keyboard events to move the active tetromino
document.addEventListener('keydown', function(e) {
  if (gameOver) return;

  // left and right arrow keys (move)
  if (e.which === 37 || e.which === 39) {
    const col = e.which === 37
      ? tetromino.col - 1
      : tetromino.col + 1;

    if (isValidMove(tetromino.matrix, tetromino.row, col)) {
      tetromino.col = col;
    }
  }

  // up arrow key (rotate)
  if (e.which === 38) {
    const matrix = rotate(tetromino.matrix);
    if (isValidMove(matrix, tetromino.row, tetromino.col)) {
      tetromino.matrix = matrix;
    }
  }

  // down arrow key (drop)
  if(e.which === 40) {
    const row = tetromino.row + 1;

    if (!isValidMove(tetromino.matrix, row, tetromino.col)) {
      tetromino.row = row - 1;

      placeTetromino();
      return;
    }

    tetromino.row = row;
  }
});

// start the game
rAF = requestAnimationFrame(loop);
</script>
</body>
</html>
That's it. Enjoy!!!

Basic HTML Tetris Game Source Code

 

This is a basic HTML tetris game code. 

Enjoy!!!

THE CODE:

<!DOCTYPE html>
<html>
<head>
  <title>Basic Tetris HTML Game</title>
  <meta charset="UTF-8">
  <style>
  html, body {
    height: 100%;
    margin: 0;
  }

  body {
    background: black;
    display: flex;
    align-items: center;
    justify-content: center;
  }

  canvas {
    border: 1px solid white;
  }
  </style>
</head>
<body>
<canvas width="320" height="640" id="game"></canvas>
<script>
// https://tetris.fandom.com/wiki/Tetris_Guideline

// get a random integer between the range of [min,max]
// @see https://stackoverflow.com/a/1527820/2124254
function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);

  return Math.floor(Math.random() * (max - min + 1)) + min;
}

// generate a new tetromino sequence
// @see https://tetris.fandom.com/wiki/Random_Generator
function generateSequence() {
  const sequence = ['I', 'J', 'L', 'O', 'S', 'T', 'Z'];

  while (sequence.length) {
    const rand = getRandomInt(0, sequence.length - 1);
    const name = sequence.splice(rand, 1)[0];
    tetrominoSequence.push(name);
  }
}

// get the next tetromino in the sequence
function getNextTetromino() {
  if (tetrominoSequence.length === 0) {
    generateSequence();
  }

  const name = tetrominoSequence.pop();
  const matrix = tetrominos[name];

  // I and O start centered, all others start in left-middle
  const col = playfield[0].length / 2 - Math.ceil(matrix[0].length / 2);

  // I starts on row 21 (-1), all others start on row 22 (-2)
  const row = name === 'I' ? -1 : -2;

  return {
    name: name,      // name of the piece (L, O, etc.)
    matrix: matrix,  // the current rotation matrix
    row: row,        // current row (starts offscreen)
    col: col         // current col
  };
}

// rotate an NxN matrix 90deg
// @see https://codereview.stackexchange.com/a/186834
function rotate(matrix) {
  const N = matrix.length - 1;
  const result = matrix.map((row, i) =>
    row.map((val, j) => matrix[N - j][i])
  );

  return result;
}

// check to see if the new matrix/row/col is valid
function isValidMove(matrix, cellRow, cellCol) {
  for (let row = 0; row < matrix.length; row++) {
    for (let col = 0; col < matrix[row].length; col++) {
      if (matrix[row][col] && (
          // outside the game bounds
          cellCol + col < 0 ||
          cellCol + col >= playfield[0].length ||
          cellRow + row >= playfield.length ||
          // collides with another piece
          playfield[cellRow + row][cellCol + col])
        ) {
        return false;
      }
    }
  }

  return true;
}

// place the tetromino on the playfield
function placeTetromino() {
  for (let row = 0; row < tetromino.matrix.length; row++) {
    for (let col = 0; col < tetromino.matrix[row].length; col++) {
      if (tetromino.matrix[row][col]) {

        // game over if piece has any part offscreen
        if (tetromino.row + row < 0) {
          return showGameOver();
        }

        playfield[tetromino.row + row][tetromino.col + col] = tetromino.name;
      }
    }
  }

  // check for line clears starting from the bottom and working our way up
  for (let row = playfield.length - 1; row >= 0; ) {
    if (playfield[row].every(cell => !!cell)) {

      // drop every row above this one
      for (let r = row; r >= 0; r--) {
        for (let c = 0; c < playfield[r].length; c++) {
          playfield[r][c] = playfield[r-1][c];
        }
      }
    }
    else {
      row--;
    }
  }

  tetromino = getNextTetromino();
}

// show the game over screen
function showGameOver() {
  cancelAnimationFrame(rAF);
  gameOver = true;

  context.fillStyle = 'black';
  context.globalAlpha = 0.75;
  context.fillRect(0, canvas.height / 2 - 30, canvas.width, 60);

  context.globalAlpha = 1;
  context.fillStyle = 'white';
  context.font = '36px monospace';
  context.textAlign = 'center';
  context.textBaseline = 'middle';
  context.fillText('GAME OVER!', canvas.width / 2, canvas.height / 2);
}

const canvas = document.getElementById('game');
const context = canvas.getContext('2d');
const grid = 32;
const tetrominoSequence = [];

// keep track of what is in every cell of the game using a 2d array
// tetris playfield is 10x20, with a few rows offscreen
const playfield = [];

// populate the empty state
for (let row = -2; row < 20; row++) {
  playfield[row] = [];

  for (let col = 0; col < 10; col++) {
    playfield[row][col] = 0;
  }
}

// how to draw each tetromino
// @see https://tetris.fandom.com/wiki/SRS
const tetrominos = {
  'I': [
    [0,0,0,0],
    [1,1,1,1],
    [0,0,0,0],
    [0,0,0,0]
  ],
  'J': [
    [1,0,0],
    [1,1,1],
    [0,0,0],
  ],
  'L': [
    [0,0,1],
    [1,1,1],
    [0,0,0],
  ],
  'O': [
    [1,1],
    [1,1],
  ],
  'S': [
    [0,1,1],
    [1,1,0],
    [0,0,0],
  ],
  'Z': [
    [1,1,0],
    [0,1,1],
    [0,0,0],
  ],
  'T': [
    [0,1,0],
    [1,1,1],
    [0,0,0],
  ]
};

// color of each tetromino
const colors = {
  'I': 'cyan',
  'O': 'yellow',
  'T': 'purple',
  'S': 'green',
  'Z': 'red',
  'J': 'blue',
  'L': 'orange'
};

let count = 0;
let tetromino = getNextTetromino();
let rAF = null;  // keep track of the animation frame so we can cancel it
let gameOver = false;

// game loop
function loop() {
  rAF = requestAnimationFrame(loop);
  context.clearRect(0,0,canvas.width,canvas.height);

  // draw the playfield
  for (let row = 0; row < 20; row++) {
    for (let col = 0; col < 10; col++) {
      if (playfield[row][col]) {
        const name = playfield[row][col];
        context.fillStyle = colors[name];

        // drawing 1 px smaller than the grid creates a grid effect
        context.fillRect(col * grid, row * grid, grid-1, grid-1);
      }
    }
  }

  // draw the active tetromino
  if (tetromino) {

    // tetromino falls every 35 frames
    if (++count > 35) {
      tetromino.row++;
      count = 0;

      // place piece if it runs into anything
      if (!isValidMove(tetromino.matrix, tetromino.row, tetromino.col)) {
        tetromino.row--;
        placeTetromino();
      }
    }

    context.fillStyle = colors[tetromino.name];

    for (let row = 0; row < tetromino.matrix.length; row++) {
      for (let col = 0; col < tetromino.matrix[row].length; col++) {
        if (tetromino.matrix[row][col]) {

          // drawing 1 px smaller than the grid creates a grid effect
          context.fillRect((tetromino.col + col) * grid, (tetromino.row + row) * grid, grid-1, grid-1);
        }
      }
    }
  }
}

// listen to keyboard events to move the active tetromino
document.addEventListener('keydown', function(e) {
  if (gameOver) return;

  // left and right arrow keys (move)
  if (e.which === 37 || e.which === 39) {
    const col = e.which === 37
      ? tetromino.col - 1
      : tetromino.col + 1;

    if (isValidMove(tetromino.matrix, tetromino.row, col)) {
      tetromino.col = col;
    }
  }

  // up arrow key (rotate)
  if (e.which === 38) {
    const matrix = rotate(tetromino.matrix);
    if (isValidMove(matrix, tetromino.row, tetromino.col)) {
      tetromino.matrix = matrix;
    }
  }

  // down arrow key (drop)
  if(e.which === 40) {
    const row = tetromino.row + 1;

    if (!isValidMove(tetromino.matrix, row, tetromino.col)) {
      tetromino.row = row - 1;

      placeTetromino();
      return;
    }

    tetromino.row = row;
  }
});

// start the game
rAF = requestAnimationFrame(loop);
</script>
</body>
</html>

That's it. 

On The Tarmac @Adan Cadde


 On the tarmac @ Adan Cadde Airport again headed for the skies!

Plants to grow in the summer



Summer Sensations: Blooming Beauties and Bountiful Harvests for Your Warm-Weather Garden

As the intense Mogadishu sun bathes our gardens, it's the perfect time to cultivate plants that revel in the warmth and long days. Summer in Banaadir offers a fantastic opportunity to grow a vibrant array of both delicious vegetables and dazzling flowers. Let's explore some fantastic choices to make your garden thrive during these hotter months.

Heat-Loving Vegetables for a Summer Feast

The summer heat is ideal for many of our favorite vegetables. With consistent sunshine and the right care, you can enjoy a rewarding harvest right from your backyard.

Tomatoes: These sun-loving fruits are a must-have for any summer garden. Choose heat-tolerant varieties that will flourish under the sun. Ensure they receive plenty of sunlight and consistent watering.



Peppers: Bell peppers and hot peppers alike thrive in warm conditions. Their vibrant colors and flavors make them a wonderful addition to your summer cooking.


Okra: This heat-loving vegetable is well-suited to the Somali climate. It's both nutritious and produces unique, edible pods.




Radiant Flowers to Brighten Your Summer Days

Add a splash of color to your garden with flowers that can withstand the summer heat and bloom beautifully.

Zinnias: These vibrant and easy-to-grow flowers come in a wide array of colors and attract beneficial pollinators like butterflies.





Hibiscus: With their large, showy flowers, hibiscus plants bring a tropical feel to your garden and thrive in warm, sunny conditions.


Sunflowers: These iconic summer blooms are not only beautiful but also produce edible seeds and oil. They are true sun worshippers.


Essential Tips for Summer Gardening 

To ensure your summer garden flourishes, remember these important tips:

  • Water deeply and regularly: The summer heat can dry out soil quickly. Water your plants deeply, especially during the hottest parts of the day. Early morning watering is often best.

  • Mulch generously: Applying a layer of organic mulch around your plants helps to retain soil moisture and regulate temperature.

  • Provide shade if needed: While many plants love the sun, some might benefit from partial shade during the hottest hours, especially young seedlings or more delicate varieties.

  • Protect from pests: Be vigilant for common summer pests and take appropriate measures to protect your plants.

  • Harvest regularly: For vegetables, regular harvesting encourages continued production. For flowers, deadheading spent blooms promotes more flowering.

With the right plant choices and consistent care, your summer garden in Mogadishu can be a vibrant and productive space, offering both beauty and fresh harvests throughout the season.



Thursday, July 10, 2025

Landing And Taking Off From Adan Cadde International Airport, Mogadisho Somalia

 Here is more of my flights to and fro Mogadishu, Somalia.


Top View from the plane somewhere between Mogadishu & Baidoa


Touch down at Shaati Guduud Airport Baidoa Somalia


After some fun back back in Mogadishu landing at Aden Cadde Airport


More fun later taking off from Adan Cadde Airport Mogadishu Somalia




Running Dry: Water Scarcity Becomes Top Global Risk, Innovation Surges in 2026

Running Dry: Water Scarcity Becomes Top Global Risk, Innovation Surges in 2026 Running Dry: Water Scarcity Becomes Top ...