A solar year means the time taken by earth to rotate once which is 365 days 5 hours 48 minutes 46 seconds. But our calendar year consists of only 365 days. So, we are being ahead of 5 hours 48 minutes and 46 seconds each year. As a result, after each four years, we add 6*4=24 hours or 1 day to the calendar (February 29). Note: Instead of 5 hours 48 minutes and 46 seconds, we are being ahead of 6 hours per year. After this adjustment, we are (11 minutes 14 seconds)x4 behind the solar system after each four years. In future, we will have to skip a day when this (11 minutes 14 seconds) per years becomes equal of one day.
The calendar we are using as standard through world is called Gregorian Calendar. It is named after Pope Gregory XIII, who introduced it in October 15, 1582. Before the Gregorian calendar, Julian calendar was being used. So, when we moved to Gregorian Calendar, we drifted From 4th October, 1582 (Julian) to 15th October, 1582 (Gregorian).
Leap Year:
A leap year (also known as an intercalary year or bissextile year) is a calendar year containing one additional day (or, in the case of lunisolar calendars, a month) added to keep the calendar year synchronised with the astronomical/seasonal/solar year.
Simplified version: All the years, in which we add one additional day to sync with Solar system (6×4=24 hours), are called leap year.
Leap year in Julian Calendar:
Each year which is divisible by 4 is a leap year.
Leap year in Gregorian Calendar:
if (year is not divisible by 4) then (it is a common year)
else if (year is not divisible by 100) then (it is a leap year)
else if (year is not divisible by 400) then (it is a common year)
else (it is a leap year)
Note: There are too many leap years in Julian calendar than Gregorian calendar. Fixing this error was the original intention to create a new calendar system (Gregorian) which is more accurate than the Julian calendar.
References:
https://en.wikipedia.org/wiki/History_of_calendars
https://en.wikipedia.org/wiki/Leap_year
https://www.timeanddate.com/calendar/gregorian-calendar.html
hasPlanToBeOut = false; if(checkIfYouHavePlanToGoOut) { hasPlanToBeOut = true; }
এই অভ্যাসের বিড়ম্বনাঃ
আজকে বাসায় বসে বসে বিরক্ত হয়ে সন্ধ্যায় পর পর তিনজন কে মেসেজ দিলাম নিচের মত করেঃ
“বের হলে জানাইস”
উপরের কোডের মত যদি লেখি তাহলে দাড়ায়
if(jodiBerHos()) callMe();
সবই ঠিক আছে। যখন বাইরে বের হবে তখন তারা কল দিয়ে জানাবে যে বাহির হচ্ছে। সমস্যা হয় যদি তাদের আজকে বের হওয়ার কোন প্লান না থাকে। সেক্ষেত্রে আমাকে অনন্ত কালের একটা ওয়েটিং লুপে পরে যেতে হয়। এখানেই বিড়ম্বনা। আমার ওই মেসেজ টা যদি একটু পরিবর্তন করি তাহলেই আমাকে আর এই ওয়েটিং এ পড়তে হয় না।
প্রশ্নঃ “আজকে বের হবি?”
if(jodiBerHos) callMe(YES); else callMe(NO);
কয়েকদিন আগেই একটা প্রজেক্টে বাগ পোস্ট হয়েছিল। বাগটা ছিল এরকম, শুরুতে ২ টা এরিয়ার কালার হলুদ থাকে। সময়ের সাথে সাথে ডাটার উপর নির্ভর করে একটার রঙ পরিবর্তন হয়ে লাল হয়ে যায়। এরপর আবার কিছু সময় পর যখন ডাটা পরিবর্তন হয়ে লাল এরিয়া টা পুনরায় হলুদ হওয়ার কথা সেটা আর হয় না। মানে একবার লাল হয়ে যাওয়ার পর ডাটা পরিবর্তন হলেও ওইটা আর কখনোই হলুদ এ ফেরত আসে না।
//init areaA = yellow; areaB = yellow; //get called in a one minute interval if(someCondition()) areaB = red;
কোডটিতে দেখা যাচ্ছে শুরুতেই দুইটা প্রোপার্টির ভ্যালু ইয়েলো রেখে তারপর কন্ডিশন চেক করে রেড করা হচ্ছে। অর্থাৎ যদি someCondition() এর ভ্যালু true হয় তাহলে areaB রেড হয়ে যাবে। এই কন্ডিশন চেকের কোডটুকু এক মিনিট ইন্টারভালে বার বার কল হতে থাকবে। একবার রেড হয়ে গেল। এরপর কোন সময় যদি someCondition() এর ভ্যালু true না হয়ে যদি false হয় তখন আর কিন্তু areaB এর ভ্যালু পরিবর্তন হবে না। রেড ই থেকে যাবে। এই জন্য এই কোড স্নিপেট এর সঠিক রুপ এরকম হওয়া উচিত ছিলঃ
//init areaA = yellow; areaB = yellow; //get called in a one minute interval if(someCondition()) areaB = red; else areaB = yellow;
সারমর্মঃ যেকোন if() স্ট্যাটমেন্টে কমপক্ষে একটি else ব্রাঞ্চ থাকা উচিত।
]]>