eng text + additional time bugs

This commit is contained in:
dan63047 2022-01-31 22:41:53 +03:00
parent 44b020ab10
commit 895a2e0a76
4 changed files with 146 additions and 43 deletions

View File

@ -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;
}

View File

@ -25,42 +25,29 @@
<path fill-rule="evenodd" d="M5.5 0a.5.5 0 0 1 .5.5v4A1.5 1.5 0 0 1 4.5 6h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 1 .5-.5zm5 0a.5.5 0 0 1 .5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 1 0 1h-4A1.5 1.5 0 0 1 10 4.5v-4a.5.5 0 0 1 .5-.5zM0 10.5a.5.5 0 0 1 .5-.5h4A1.5 1.5 0 0 1 6 11.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 0-.5-.5h-4a.5.5 0 0 1-.5-.5zm10 1a1.5 1.5 0 0 1 1.5-1.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 0-.5.5v4a.5.5 0 0 1-1 0v-4z"/>
</svg>
</div>
<div id="language-selector"><span id="lang-name">language:</span><a id="rus" onclick="languageSwitcher('ru')">ru</a><a id="eng" onclick="languageSwitcher('en')">en</a></div>
<div id="counter">
<h1 id="title">До смерти 32-битных систем осталось</h1>
<h1 id="title_ru">До смерти 32-битных систем осталось</h1>
<h1 id="title_en">Until the death of 32-bit systems remaining</h1>
<div id="time"><span id="time-left" onclick="msecDisplaySwitcher()"></span><span id="time-left-msec"></span></div>
<div id="bar">
<p id="time-left-readable" onclick="ReadableTimerSwitcher()"></p>
<progress id="prog" max="2147483647"></progress>
</div>
</div>
<div id="description">
<div id="description_ru">
<h3>О чём этот сайт?</h3>
<p>Проблема 2038 года в вычислительной технике — ожидаемые сбои в программном обеспечении накануне 19 января
2038 года. Данная проблема затронет программы и системы, в которых используется представление времени по
стандарту POSIX (UNIX-время), которое представляет собой количество секунд, прошедшее с полуночи 1 января
1970 года. Такое представление времени — это стандарт для Unix-подобных операционных систем (из-за
повсеместного использования языка Си).</p>
<p>Сейчас значение Unix timestamp равно <span id="timestamp"></span>.</p>
<p>Проблема 2038 года в вычислительной технике — ожидаемые сбои в программном обеспечении накануне 19 января 2038 года. Данная проблема затронет программы и системы, в которых используется представление времени по
стандарту POSIX (UNIX-время), которое представляет собой количество секунд, прошедшее с полуночи 1 января 1970 года. Такое представление времени — это стандарт для Unix-подобных операционных систем (из-за повсеместного использования языка Си).</p>
<p>Сейчас значение Unix timestamp равно <span id="timestamp_ru"></span>.</p>
<h3>В чём проблема?</h3>
<p>В старых 32-битных системах (до середины 1990-х) используется тип данных time_t для хранения секунд в виде
signed int (32-битного целого со знаком). Самая поздняя дата, которая может быть представлена таким
форматом в стандарте POSIX — это 03:14:07, вторник, 19 января 2038 года по Всемирному времени (UTC).</p>
<p>Более позднее время заставит такое поле данных стать отрицательным, как бы закольцевав таким образом время
(поскольку отрицательное число может быть воспринято программами как время в 1970 или 1901 году, в
зависимости от реализации). В результате любые расчёты, включающие дату позже 19 января 2038 года, могут
привести к сбою программы либо к ошибочным вычислениям.</p>
<p>Для проблемы 2038 года не существует простого решения для существующих комбинаций операционных систем и
прикладного программного обеспечения. Изменение определения типа time_t на 64 бита нарушит бинарную
совместимость программ, существующих хранимых данных и всего другого, использующего представление времени в
бинарном виде. А приведение time_t в целое без знака может нарушить работу программ, которые вычисляют
разницу во времени.</p>
<p>В старых 32-битных системах (до середины 1990-х) используется тип данных <code>time_t</code> для хранения секунд в виде <code>signed int</code> (32-битного целого со знаком). Самая поздняя дата, которая может быть представлена таким форматом в стандарте POSIX — это 03:14:07, вторник, 19 января 2038 года по Всемирному времени (UTC).</p>
<p>Более позднее время заставит такое поле данных стать отрицательным, как бы закольцевав таким образом время (поскольку отрицательное число может быть воспринято программами как время в 1970 или 1901 году, в зависимости от реализации). В результате любые расчёты, включающие дату позже 19 января 2038 года, могут привести к сбою программы либо к ошибочным вычислениям.</p>
<p>Для проблемы 2038 года не существует простого решения для существующих комбинаций операционных систем и прикладного программного обеспечения. Изменение определения типа time_t на 64 бита нарушит бинарную совместимость программ, существующих хранимых данных и всего другого, использующего представление времени в бинарном виде. А приведение time_t в целое без знака может нарушить работу программ, которые вычисляют разницу во времени.</p>
<h3>Что подвержено этой проблеме?</h3>
<p>Многие структуры данных, которые используются сегодня, имеют 32-битные представления времени, встроенные
в их структуру. Полный список этих структур данных практически невозможно составить, но есть хорошо известные
структуры данных, у которых есть проблема времени Unix:</p>
<p>Многие структуры данных, которые используются сегодня, имеют 32-битные представления времени, встроенные в их структуру. Полный список этих структур данных практически невозможно составить, но есть хорошо известные структуры данных, у которых есть проблема времени Unix:</p>
<ul>
<li>файловые системы (многие файловые системы используют только 32 бита для представления времени в индексных
дескрипторах)</li>
<li>файловые системы (многие файловые системы используют только 32 бита для представления времени в индексных дескрипторах)</li>
<li>форматы двоичных файлов (в которых используются 32-битные поля времени)</li>
<li>базы данных (которые имеют 32-битные поля времени)</li>
<li>языки запросов к базам данных, такие как SQL, которые имеют команды, похожие на <code>UNIX_TIMESTAMP()</code></li>
@ -70,17 +57,45 @@
<li>встроенные подсистемы управления и мониторинга завода, НПЗ</li>
<li>различное медицинское, военное оборудование</li>
</ul>
<p>Любая система, использующая структуры данных, содержащие 32-битные представления времени, представляет риск.
Степень риска зависит от характера отказа.</p>
<h3>Использаванные материалы при составлении этого текста</h3>
<p>Любая система, использующая структуры данных, содержащие 32-битные представления времени, представляет риск. Степень риска зависит от характера отказа.</p>
<h3>Использованные материалы при составлении этого текста</h3>
<ul>
<li><a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_2038_%D0%B3%D0%BE%D0%B4%D0%B0">Проблема 2038 года - Wikipedia RU</a></li>
<li><a href="https://en.wikipedia.org/wiki/Year_2038_problem">Year 2038 problem - Wikipedia EN</a></li>
</ul>
</div>
<div id="description_en">
<h3>What is this site?</h3>
<p>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).</p>
<p>Now the UNIX timestamp value is <span id="timestamp_en"></span>.</p>
<h3>What is the problem?</h3>
<p>In the old 32-bit systems (until the mid-1990s), the <code>time_t</code> data type is used to store seconds in the form of <code>signed int</code> (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).</p>
<p>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.</p>
<p>For the year 2038 problem, there is no universal solution for existing combinations of operating systems and application software. Changing the definition of the <code>time_t</code> 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 <code>time_t</code> to an unsigned integer can break programs that compute the time difference.</p>
<h3>What is affected by this problem?</h3>
<p>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:</p>
<ul>
<li>file Systems (Many file systems use only 32 bits to submit time in index descriptors)</li>
<li>binary file formats (in which 32-bit time are used)</li>
<li>databases (which have 32-bit time fields)</li>
<li>languages requests for databases, such as SQL, which have commands similar to <code>UNIX_TIMESTAMP()</code></li>
</ul>
<p>Examples of systems using data structures that may contain 32-bit presentations of the time include:</p>
<ul>
<li>embedded management and monitoring subsystems, refinery</li>
<li>various medical, military equipment</li>
</ul>
<p>Any system that uses data structures containing 32-bit time represents the risk. The degree of risk depends on the nature of the failure.</p>
<h3>Used materials when compiling this text</h3>
<ul>
<li><a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_2038_%D0%B3%D0%BE%D0%B4%D0%B0">Проблема 2038 года - Wikipedia RU</a></li>
<li><a href="https://en.wikipedia.org/wiki/Year_2038_problem">Year 2038 problem - Wikipedia EN</a></li>
</ul>
</div>
<div id="other_countdowns"></div>
<footer>
<hr>
<p>Автор сайта: <a href="https://t.me/dan63047">dan63047</a></p>
<p><span id="me_tg_ru">Автор сайта: </span><span id="me_tg_en" style="display: none;">Author of the site: </span><a href="https://t.me/dan63047">dan63047</a></p>
</footer>
<script type="text/javascript" src="jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="script.js"></script>

View File

@ -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);
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") ? "<h3>Другие, более далёкие проблемы времени в вычислительной технике</h3>" : "<h3>Other, more distant time problems in computing</h3>";
other_counters.forEach(element => {
l = element[3] - timestamp;
other_counters_html = other_counters_html + '<div id="other_counter"><h4>'+ element[(language_site == "ru") ? 1 : 0] + '</h4><span style="font-size: 2rem; font-family: \'7Digital\'">' + Math.trunc(l).toLocaleString('ru') +
'</span><div class="othr_progress" style="float: right">' + 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) + '</div>' + '</div>';
});
$("#other_countdowns").html(other_counters_html)
}
var c = setInterval(Cycle, 1000 / 60);
var c = setInterval(Cycle, 1000 / 15);

View File

@ -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:visited{
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;
}