diff --git a/fullscreen-style.css b/fullscreen-style.css
index 7110e98..8162846 100644
--- a/fullscreen-style.css
+++ b/fullscreen-style.css
@@ -17,8 +17,9 @@ body{
#prog{
width: 100%;
}
-#title{
+#title_ru, #title_en{
position: fixed;
+ text-align: center;
top: 0;
width: calc(100% - 16px);
}
@@ -47,6 +48,7 @@ body{
width: calc(100% - 16px);
}
#button-to-fullscreen, #button-fullscreen-exit{
+ transition: 500ms;
position: absolute;
left: 25px;
top: 35px;
@@ -57,12 +59,9 @@ body{
#button-to-fullscreen:hover, #button-fullscreen-exit:hover{
color: #fff;
}
-#button-to-fullscreen, #description, footer{
+#button-to-fullscreen, #description_ru, #description_en, footer, #language-selector{
display: none;
}
#title{
text-align: center;
-}
-a:visited{
- color: #fff;
}
\ No newline at end of file
diff --git a/index.html b/index.html
index a2d0c1f..51ad0f7 100644
--- a/index.html
+++ b/index.html
@@ -25,42 +25,29 @@
+
+
О чём этот сайт?
-
Проблема 2038 года в вычислительной технике — ожидаемые сбои в программном обеспечении накануне 19 января
- 2038 года. Данная проблема затронет программы и системы, в которых используется представление времени по
- стандарту POSIX (UNIX-время), которое представляет собой количество секунд, прошедшее с полуночи 1 января
- 1970 года. Такое представление времени — это стандарт для Unix-подобных операционных систем (из-за
- повсеместного использования языка Си).
-
Сейчас значение Unix timestamp равно .
+
Проблема 2038 года в вычислительной технике — ожидаемые сбои в программном обеспечении накануне 19 января 2038 года. Данная проблема затронет программы и системы, в которых используется представление времени по
+ стандарту POSIX (UNIX-время), которое представляет собой количество секунд, прошедшее с полуночи 1 января 1970 года. Такое представление времени — это стандарт для Unix-подобных операционных систем (из-за повсеместного использования языка Си).
+
Сейчас значение Unix timestamp равно .
В чём проблема?
-
В старых 32-битных системах (до середины 1990-х) используется тип данных time_t для хранения секунд в виде
- signed int (32-битного целого со знаком). Самая поздняя дата, которая может быть представлена таким
- форматом в стандарте POSIX — это 03:14:07, вторник, 19 января 2038 года по Всемирному времени (UTC).
-
Более позднее время заставит такое поле данных стать отрицательным, как бы закольцевав таким образом время
- (поскольку отрицательное число может быть воспринято программами как время в 1970 или 1901 году, в
- зависимости от реализации). В результате любые расчёты, включающие дату позже 19 января 2038 года, могут
- привести к сбою программы либо к ошибочным вычислениям.
-
Для проблемы 2038 года не существует простого решения для существующих комбинаций операционных систем и
- прикладного программного обеспечения. Изменение определения типа time_t на 64 бита нарушит бинарную
- совместимость программ, существующих хранимых данных и всего другого, использующего представление времени в
- бинарном виде. А приведение time_t в целое без знака может нарушить работу программ, которые вычисляют
- разницу во времени.
+
В старых 32-битных системах (до середины 1990-х) используется тип данных time_t
для хранения секунд в виде signed int
(32-битного целого со знаком). Самая поздняя дата, которая может быть представлена таким форматом в стандарте POSIX — это 03:14:07, вторник, 19 января 2038 года по Всемирному времени (UTC).
+
Более позднее время заставит такое поле данных стать отрицательным, как бы закольцевав таким образом время (поскольку отрицательное число может быть воспринято программами как время в 1970 или 1901 году, в зависимости от реализации). В результате любые расчёты, включающие дату позже 19 января 2038 года, могут привести к сбою программы либо к ошибочным вычислениям.
+
Для проблемы 2038 года не существует простого решения для существующих комбинаций операционных систем и прикладного программного обеспечения. Изменение определения типа time_t на 64 бита нарушит бинарную совместимость программ, существующих хранимых данных и всего другого, использующего представление времени в бинарном виде. А приведение time_t в целое без знака может нарушить работу программ, которые вычисляют разницу во времени.
Что подвержено этой проблеме?
-
Многие структуры данных, которые используются сегодня, имеют 32-битные представления времени, встроенные
- в их структуру. Полный список этих структур данных практически невозможно составить, но есть хорошо известные
- структуры данных, у которых есть проблема времени Unix:
+
Многие структуры данных, которые используются сегодня, имеют 32-битные представления времени, встроенные в их структуру. Полный список этих структур данных практически невозможно составить, но есть хорошо известные структуры данных, у которых есть проблема времени Unix:
- - файловые системы (многие файловые системы используют только 32 бита для представления времени в индексных
- дескрипторах)
+ - файловые системы (многие файловые системы используют только 32 бита для представления времени в индексных дескрипторах)
- форматы двоичных файлов (в которых используются 32-битные поля времени)
- базы данных (которые имеют 32-битные поля времени)
- языки запросов к базам данных, такие как SQL, которые имеют команды, похожие на
UNIX_TIMESTAMP()
@@ -70,17 +57,45 @@
- встроенные подсистемы управления и мониторинга завода, НПЗ
- различное медицинское, военное оборудование
-
Любая система, использующая структуры данных, содержащие 32-битные представления времени, представляет риск.
- Степень риска зависит от характера отказа.
-
Использаванные материалы при составлении этого текста
+
Любая система, использующая структуры данных, содержащие 32-битные представления времени, представляет риск. Степень риска зависит от характера отказа.
+
Использованные материалы при составлении этого текста
+
+
What is this site?
+
The Year 2038 problem in computing technology - expected failures in software on the eve of January 19, 2038. This problem will affect the programs and systems that use the presentation view according to the POSIX standard (UNIX-time), which is the number of seconds passed from midnight on January 1, 1970. Such a presentation of time is a standard for UNIX-like operating systems (due to the ubiquitous use of the C language).
+
Now the UNIX timestamp value is .
+
What is the problem?
+
In the old 32-bit systems (until the mid-1990s), the time_t
data type is used to store seconds in the form of signed int
(32-bit integer with the sign). The most late date, which can be represented by this format in POSIX Standard - is 03:14:07, Tuesday, January 19, 2038 for World Time (UTC).
+
Later time will cause such a field to become negative, as if looping the time in this way (since a negative number can be interpreted by programs as time in 1970 or 1901, depending on the implementation). As a result, any calculations that include a date later than January 19, 2038 may cause the program to crash or cause erroneous calculations.
+
For the year 2038 problem, there is no universal solution for existing combinations of operating systems and application software. Changing the definition of the time_t
type to 64 bits will break the binary compatibility of programs, existing stored data, and anything else that uses a binary representation of time. And casting time_t
to an unsigned integer can break programs that compute the time difference.
+
What is affected by this problem?
+
Many data structures that are used today have 32-bit time presentations built into their structure. The complete list of these data structures is almost impossible to compile, but there are well-known data structures that have a UNIX time problem:
+
+ - file Systems (Many file systems use only 32 bits to submit time in index descriptors)
+ - binary file formats (in which 32-bit time are used)
+ - databases (which have 32-bit time fields)
+ - languages requests for databases, such as SQL, which have commands similar to
UNIX_TIMESTAMP()
+
+
Examples of systems using data structures that may contain 32-bit presentations of the time include:
+
+ - embedded management and monitoring subsystems, refinery
+ - various medical, military equipment
+
+
Any system that uses data structures containing 32-bit time represents the risk. The degree of risk depends on the nature of the failure.
+
Used materials when compiling this text
+
+
+
diff --git a/script.js b/script.js
index 816b65d..df9f57a 100644
--- a/script.js
+++ b/script.js
@@ -1,18 +1,61 @@
const maxtimestamp = 2147483647;
var readable_timer_mode = 0;
var msec_display = true;
-
+var fullscreen = false;
+var other_counters = [ ["Year 2100 bug", "Проблема 2100 года", 946684800, 4102444800],
+ ["UNIX unsinged 32-bit timestamp", "UNIX 32 бита без знака", 0, 4294967295],
+ ["FAT filesystems timestamps", "Штампы времени файловой системы FAT", 351907200, 4354819200],
+ ["Year 10K bug", "Проблема 10 000 года", -62167219200, 253402300800],
+ ["Year 32,768 bug", "Проблема 32 768 года", -62167219200, 971890963200],
+ ["Year 65,536 bug", "Проблема 65 536 года", -62167219200, 2005949145600],
+ ["UNIX singed 64-bit timestamp", "UNIX 64 бита со знаком", 0, 9223372036854775807],
+ ["UNIX unsinged 64-bit timestamp", "UNIX 64 бита без знака", 0, 18446744073709551615],
+ ];
+var language_user = window.navigator ? (window.navigator.language ||
+ window.navigator.systemLanguage ||
+ window.navigator.userLanguage) : "ru";
+language_user = language_user.substr(0, 2).toLowerCase();
+language_site = (language_user == "ru" || language_user == "by" || language_user == "ua") ? "ru" : "en";
function ReadableTimerSwitcher(){
readable_timer_mode++
if(readable_timer_mode > 2){readable_timer_mode = 0}
}
addEventListener("fullscreenchange", (event) => {
- if(document.fullscreen){
- $("#style").attr("href", "fullscreen-style.css")
+ if(!fullscreen){
+ $("#style").attr("href", "fullscreen-style.css");
+ $("#description_en").css("display", "none");
+ $("#description_ru").css("display", "none");
+ fullscreen = true;
}else{
- $("#style").attr("href", "style.css")
+ $("#style").attr("href", "style.css");
+ languageSwitcher(language_site)
+ fullscreen = false;
}
})
+
+function languageSwitcher(lang_code){
+ switch (lang_code) {
+ case "ru":
+ $("#title_en").css("display", "none");
+ $("#title_ru").css("display", "block");
+ $("#description_en").css("display", "none");
+ $("#description_ru").css("display", "block");
+ $("#me_tg_en").css("display", "none");
+ $("#me_tg_ru").css("display", "");
+ language_site = "ru";
+ break;
+ case "en":
+ $("#title_ru").css("display", "none");
+ $("#title_en").css("display", "block");
+ $("#description_ru").css("display", "none");
+ $("#description_en").css("display", "block");
+ $("#me_tg_ru").css("display", "none");
+ $("#me_tg_en").css("display", "");
+ language_site = "en";
+ break;
+ }
+}
+languageSwitcher(language_site);
function msecDisplaySwitcher(){
if(msec_display){
msec_display = false
@@ -30,7 +73,8 @@ function Cycle() {
$("#time-left").html(t.toLocaleString('ru'));
$("#time-left-msec").html("." + ("00" + lmsec).slice(-3))
$("#prog").val(timestamp);
- $("#timestamp").html(Math.trunc(timestamp).toLocaleString('ru'));
+ $("#timestamp_ru").html(Math.trunc(timestamp).toLocaleString('ru'));
+ $("#timestamp_en").html(Math.trunc(timestamp).toLocaleString('ru'));
if (left < 60 && readable_timer_mode != 2) { $("#time-left-readable").css("display", "none") }
if (left <= 0) {
clearInterval(c);
@@ -52,12 +96,28 @@ function Cycle() {
thour = Math.floor(left / 60 / 60) % 24,
tday = Math.floor(left / 60 / 60 / 24) % 365,
tyear = Math.floor(left / 60 / 60 / 24 / 365);
- $("#time-left-readable").html("(" + tyear + " л. " + tday + " дн. " + ("0" + thour).slice(-2) + ":" + ("0" + tmin).slice(-2) + ":" + ("0" + tsec).slice(-2) + ")");
+ switch (language_site) {
+ case "ru":
+ $("#time-left-readable").html("(" + tyear + " л. " + tday + " дн. " + ("0" + thour).slice(-2) + ":" + ("0" + tmin).slice(-2) + ":" + ("0" + tsec).slice(-2) + ")");
+ break;
+ case "en":
+ $("#time-left-readable").html("(" + tyear + " y. " + tday + " d. " + ("0" + thour).slice(-2) + ":" + ("0" + tmin).slice(-2) + ":" + ("0" + tsec).slice(-2) + ")");
+ break;
+ }
break;
case 2:
var precentage = (timestamp/maxtimestamp)*100;
$("#time-left-readable").html(Math.trunc(timestamp).toLocaleString('ru')+" / "+maxtimestamp.toLocaleString('ru')+" ("+precentage.toFixed(8)+"%)");
break;
}
+ let other_counters_html = (language_site == "ru") ? "
Другие, более далёкие проблемы времени в вычислительной технике
" : "
Other, more distant time problems in computing
";
+ other_counters.forEach(element => {
+ l = element[3] - timestamp;
+ other_counters_html = other_counters_html + '
'+ element[(language_site == "ru") ? 1 : 0] + '
' + Math.trunc(l).toLocaleString('ru') +
+ '' + new Date(element[3]*1000).toUTCString() + " · " +(((timestamp-element[2])/(element[3]-element[2]))*100).toFixed(8).toString() +
+ '% · ' + Math.floor(l / 60 / 60 / 24 / 365).toLocaleString('ru') + ((language_site == "ru") ? " л. " : " y. ") + (Math.floor(l / 60 / 60 / 24) % 365).toString() + ((language_site == "ru") ? " дн. " : " d. ") +
+ ("0" + (Math.floor(l / 60 / 60) % 24)).slice(-2) + ':' + ("0" + (Math.floor(l / 60) % 60)).slice(-2) + ':' + ("0" + (Math.floor(l) % 60)).slice(-2) + '
' + '
';
+ });
+ $("#other_countdowns").html(other_counters_html)
}
-var c = setInterval(Cycle, 1000 / 60);
\ No newline at end of file
+var c = setInterval(Cycle, 1000 / 15);
\ No newline at end of file
diff --git a/style.css b/style.css
index 610e3ed..40d9ec2 100644
--- a/style.css
+++ b/style.css
@@ -26,6 +26,7 @@ body{
cursor: pointer;
}
#button-to-fullscreen, #button-fullscreen-exit{
+ transition: 500ms;
position: absolute;
left: 25px;
top: 35px;
@@ -35,12 +36,40 @@ body{
#button-to-fullscreen:hover, #button-fullscreen-exit:hover{
color: #fff;
}
-#button-fullscreen-exit{
+#button-fullscreen-exit, #title_en, #description_en{
display: none;
}
-#title{
+#title_ru, #title_en{
text-align: center;
}
+a{
+ transition: 500ms;
+ color: #333;
+ text-decoration: none;
+}
+a:hover{
+ color: #fff;
+}
a:visited{
+ color: #999;
+}
+a:visited:hover{
+ color: #fff;
+}
+#language-selector{
+ position: absolute;
+ right: 25px;
+ top: 35px;
+
+ color: #333;
+}
+#lang-name, #rus{
+ padding-right: 7px;
+}
+#rus, #eng{
+ transition: 500ms;
+}
+#rus:hover, #eng:hover{
+ cursor: pointer;
color: #fff;
}
\ No newline at end of file