iHDD.RU
Список форумов Форум iHDD.RU Форум iHDD.RU
Ремонт накопителей и восстановление информации
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

 
СТАНДАРТ ДАТА-ВРЕМЯ

 
Начать новую тему   Ответить на тему    Список форумов Форум iHDD.RU -> Двинянинов(tm) о винчестерах  Двинянинов(tm) о винчестерах
СТАНДАРТ ДАТА-ВРЕМЯ
Автор Сообщение
Dmitry_Postrigan



Зарегистрирован: 14.04.2004
Сообщения: 1440
Откуда: :адуктО

СообщениеДобавлено: Сб, 17 Апр, 2004 02:10    Заголовок сообщения: СТАНДАРТ ДАТА-ВРЕМЯ Ответить с цитатой

Copyright (C) Dvinyaninov AB, Ru, 2003
Copyright (C) Двинянинов Андрей Борисович, Екатеринбург,
Россия, 2003

Freeware. Refer to author is require.
Свободно. Ссылка на Автора обязательна.

Неизвестно в каком виде дойдет эта статья. В любом случае
ссылка на Автора обязательна. Ошибки возможны.

Есть технология, которая не поставляется, но некоторые
результаты этой технологии уже не скрыть.

Задача возникла при попытке генерации имени протокола программы проверки жестких дисков.
Требовалось генерить имена протоколов. Требовалось следить за состоянием жесткого диска.
Требовалось делать жесткие диски не так как наши рвачи-чинители дисков, а на года.
Сделал и на несколько лет забыл.

Если делать диск по уму, протоколы надо накапливать. При этом еще надо их располагать по порядку.
Поскольку я работаю с вещами более сложными чем русские програмеры, сразу возникла идея сделать
генератор имен и больше к этому не возвращаться. Рассказывать историю долго, сразу готовый результат.

Вводится 36-ричная символьная арифметика. Цифры - это символы ASCII '0123456789ABCDEFHGIJKLMNOPQRSTUVWXYZ'.
Реально это где-то 37-ричная арифметика. Мне нравится название 36-ричная или 0..Z арифметика.

Получается из компа дата и время. Это может быть временная отметка начала запуска программы,
это может быть временная отметка текущего времени. Эта отметка распаковывается в структуру :

.mode .kdt = .struct (
.b1 year_h, - две первые цифры года
.b1 year_l, - две последние цифры года
.b1 mon, - месяц
.b1 day, - день
.b1 hh, - час
.b1 mm, - минуты
.b1 ss, - секунды
.b1 th ) ; - сотые секунд

Поле .b1 - 1 байт. Вычисляется как двоичное. В алгоритме это просто младший байт двоичного числа.

Далее делается перевод и упаковка даты в 4 ASCII символа арифметики 0..Z и перевод и упаковка времени
в 4 ASCII символа арифметики 0..Z.

Разбиение на 2 части по 4 символа сделано для удобства, простоты, надежности и ясности алгоритма.
Внутри каждой части применяется упаковка путем сдвигов/умножения-деления.

При упаковке времени сделано отсечение младшей части сотых секунд. Квантование делается с шагом 1/5 секунды.

При упаковке даты применяется стандартное решение сдвига начала отсчета даты. Отсчет
начинается с 2000 года. Из двух первых цифр года вычитается число 20. Это дает запас по
дате до ~ 5636 года. Сдвиг начала отсчета известен. В компьютерах IBM PC где-то есть время
считаемое вроде бы от 1982 года. BIOS-ы компьютеров при сбросе начинают отсчет не с 0 года,
а с какого-то года типа года выпуска компьютеров. В истории человечества сдвиг тоже применялся.
Есть исторические факты, что Христос жил в X веке. Приставка буквы J к году привела к мнимому
удлинению истории на 1000 лет, хотя человечество помнит свою историю не ранее X века по
принятому исчислению. Самые свежие публикации этого сдвига у Носовского и Фоменко (www.lib.ru).
Кстати у них же есть публикации, что действительно евреи украли русскую историю вместе с
названием и славой и приписывают себе подвиги русских. Все эти Библии - это просто русская
история, где евреи где-то упомянуты, но не как основные народы. Кстати и Иерусалим и Израиль
тоже оказались ворованными нееврейскими именами и эти современные территории тоже ворованные
и не имеют никакого отношения к Библии.

Далее приводится алгоритм. Это работающая программа с работающего компилятора. Компилятор
работает со вложенными блоками. Эта программа была вложена в другой блок. Обозначения -

.s - .string
.b1 - .byte
.i - .integer
.i2 - .integer

.Egg "==ADT№GET" =
.s :
( .s ffnn ;
$$IFDEF NONE
.b1 ( year_h - 20 ) .mod 36
^ .b1 MAX = 5600 YEAR

.b1 year_l, \ 100
.b1 mon, / 12 = 1200 < 36*36 = 1296

^ .b1 : yl .div 3 ( MAX = 34 < 36 )
+ .b1 : ( yl .mod 3 ) * 12 + mon - 1 ( MAX = 2*12+11 =35<36 )

.b1 day,
^ .b1 : day ( max = 31 < 36 )

.b1 hour,
^ .b1 : hour ( max = 24 < 36 )

.b1 min \ 60 - min .div 2 60
.b1 sec / 60 ( 2 * sec .div 4 )
.b1 th - 4 * ( th .div 10 )
^ .b1 : min .div 2 ( MAX = 30 < 36 )
+ .b1 : ( min .mod 2 ) * 16 + sec .div 4 ( MAX = 16*1+15 < 36 )
+ .b1 : ( sec .mod 4 ) * 10 + th .div 20 ( MAX = 3*10+5 < 36 )


60 * 60 * 10 = 36000 = 36 * 100
36 * 36 * 36 = 46656

( min * 600 + sec * 10 + t ) .div 36 .div 36 =
min .div 4

1 вариант - min .div 2
( min .mod 2 ) * 16 + ( sec .div 4 )
( sec .mod 4 ) * 5 + t .div 2


Квантование - 1/5 секунды

Подсчет числа событий
1 сек - 5
1 мин - 300
1 час - 18'000
1 сутки - 432'000
1 месяц (30) - 12'960'000
1 год (365) - 157'680'000

$$FI
.s s0z := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
$$# 01234567890123456789012345
.№kdt №kdt ;

.op ( .i ) .b1 .dec_dig = ( .i ii ) .b1 : ( s0z [ii+1] ) ;
.op ( .i ) .b1 .hex_dig = ( .i ii ) .b1 : ( s0z [ii+1] ) ;

.op ( .i2 ) .s .d1 = ( .i2 i2i2 ) .s :
( d1 ( .chr i2i2 ) ) ;

.proc ( .b1 ) .s d1 = ( .b1 b1b1 ) .s :
( .i ii := .ord b1b1 ;
.i mm := ii .mod 36 ;
s0z [mm+1] ) ;

.proc ( .b1 ) .s d2 = ( .b1 b1b1 ) .s :
( .i ii := .ord b1b1 ;
.dec_dig ( ii .div 10 ) + .dec_dig ( ii .mod 10 ) ) ;

get № kdt ( №kdt ) ; # <-- получить временную отметку #

ffnn :=
.d1 ( ( .ord year_h .of №kdt - 20 ) .mod 36 )
+ .d1 ( ( .ord year_l .of №kdt ) .div 3 )
+ .d1 ( ( ( .ord year_l .of №kdt ) .mod 3 ) * 12
+ ( .ord mon .of №kdt ) - 1 )
+ d1 ( day .of №kdt )

+ d1 ( hour .of №kdt )
+ .d1 ( ( .ord min .of №kdt ) .div 2 )
+ .d1 ( ( ( .ord min .of №kdt ) .mod 2 ) * 16
+ ( .ord sec .of №kdt .div 4 ) )
+ .d1 ( ( .ord sec .of №kdt .mod 4 ) * 10
+ ( .ord th .of №kdt ) .div 20 ) ;

ffnn )

Результатом является строка из 8 ASCII символов "0..Z". В программе также применяется
тип .ADT = .b8 - 8 байт для этого типа отметки дата-время.
Простота алгоритма получилась после нескольких версий.


ПРИМЕНЕНИЕ

Этот генератор применяется программой проверки жестких дисков. При инициализации исполняющей
системы запрашивается дата и время. Эта временная отметка упаковывается, сохраняется и используется
для генерации имен файлов. Для файла протокола добавляется расширение ".HDC". Для файлов ROM и
адаптивов дисков FUJITSU применяется расширение ".BIN", ".ADP", ".ADS".

Этот генератор дает упорядоченные по времени 8-символьные строки с шагом квантования 1/5 секунды.
Имена уникальны и никогда не пересекаются. При переходе зимнее/летнее время когда сдвигаются стрелки
часов есть конфликт. Можно применять тогда гринвическое GMT время.

Генератор дает держать в одном каталоге все файлы протоколв по одному диску, не говоря уж о разных.


ДАЛЬШЕ - БОЛЬШЕ

Генератор дает возможность узнать временную отметку по имени такого файла. Не надо портить внутренности файла.


ДАЛЬШЕ - БОЛЬШЕ

Генератор дает уникальную возможность называть файлы. Можно писать всевозможные справочники и базы
данных со множеством файлов с именами получаемыми таким генератором.

При смене и создании версий не надо заботиться о пересечении имен файлов. Генератор дает уникальные имена.
Если постараться, можно держать разные версии одного и того же справочника или базы данных на одной машине и
даже в одном каталоге. Имена их файлов не будут пересекаться. И при этом все делает машина.


ДАЛЬШЕ - БОЛЬШЕ

Применение генератора для создания ключей в базах данных типа таблица/DBF файл показывает удивительные результаты.

В базах данных запись данных можно отыскать или по абсолютному адресу или по относительному адресу типа
значение какого-либо поля записи. Абсолютная адресация применяется в индексах. В программах работами с базами
данных применяется относительная адресация по значению какого-либо ключа/поля записи. Вводятся коды,
классификаторы. Они содержатся в каком-либо поле записи.

Предлагается ввести 8-байтовое поле записи для хранения ключа типа данная временная отметка. Считать это
поле логическим адресом записи. Ссылку на запись делать только на этот ключ. Для соответствия этого логического
адреса и физического адреса применять стандартный индекс. При сжатии баз данных потребуется пересчитывать только
этот индексный файл.

При применении такого алгоритма в таблицах типа DBF требуется только одно - добавлять записи только в конец.
Исключать записи, обновлять поля записи, кроме ключа, можно в любом месте. При этом сохраняется упорядоченность
записей по ключу типа дата-время.

При такой упорядоченности отыскать запись по такому ключу оказывается легко. При отсутствии файла индексов
применяется метод деления пополам и операция больше-меньше. Для базы данных в 200-300 тысяч записей
( ~ 256 * 1024 = 2**18 ) требуется 18 делений пополам. После этого всем постановщикам задач из всех крутых
и богатых организаций следует выкинуть свой опыт и знания. При этом применяется не строковые операции
сравнения, а операции целочисленной арифметики. Быстрее некуда. Сравнение 2-х 8-байтных чисел - это
сравнение целых чисел в 4-байтных/32 битных регистрах. Дата - свои 4 байта, время - свои 4 байта.
Символы 0..Z - в нижней части таблицы. Двоичное представление 4-х байт даты и 4-х байт времени оказываются
целыми положительными числами, нет проблем со знаками.

Дальше-больше. При такой упорядоченности можно применять динамическое построение индексов. Если
запись не найдена, следует выдать интервал, где закончился поиск. В длинном интервале в динамике сделать
поиск методом деления пополам. В коротком интервале поиск методом линейного поиска. При постоянных обращениях
к базе происходит динамическое частичное построение индексов соответствия ключа дата-время и номера физической записи.

Дальше-больше. Ошибка или несоответствие в индексах не приводит к отказу в работе и многочасовому
построению индексов заново или линейному поиску. Можно в динамике корректировать индексы. Применять
метод деления пополам или линейный поиск - это уже подробности.

Если написать арифметику для таких 0..Z чисел, можно будет для поиска применять стандартные методы
поиска нуля функции типа метод золотого сечения или метод секущих.

Дальше-больше. Индекс/Индексный файл - это дерево корнями вверх, листьями вниз. Поиск ведется от корня.
Когда поиск доходит до листа, в листе делается линейный поиск путем перебора ключей в листе. Можно написать
индексы так, чтобы сохранять только корни и ветви дерева, а листья не сохранять. При такой упорядоченности
ключи из одного листа стоят достаточно близко рядом в родной базе данных/таблице.

Предположим. Кластер имеет 32 кбайта. Запись имеет длину 512 байт. Тогда в кластере 64 записи. Чтобы в
большей части случаев попадать в один кластер возьмем для расчетов 32 записи. Пусть лист содержит 32 записи.
Согласно разным моделям построения индексов длина листа должна быть типа корень квадратный или корень
кубический из числа записей в базе данных. Тогда по прикидкам из расчета 32 записи попадаем на размер
базы от 1000 (32**2) до 30000 ( 32**3 ) записей. При расчете из 64 записей получаем от 4000 ( 64**2 )
до 300000 ( 64**3 ) записей. Это достаточно. При этом сразу получаем оптимальное значение длины листа.
При этом лист не создается, не хранится в индексе. Вместо поиска по листу, поиск ведется по самим записям.
Записи стоят рядом из-за упорядоченности. Сравнение делается проще некуда - взять 1-ое целое со смещением
в 32-х разрядный регистр, взять 2-ое целое со смещением в 32-х разрядный регистр. Сравнить. Операцию
повторить со смещением+4.

Дальше-больше. Этот ключ является временной отметкой. Это позволяет делить и соединять таблицы/DBF файлы
по интервалам даты-времени.

Дальше-больше. Для расширения информации о записях применяются MEMO поля в DBF файлах. Этот ключ сам
может рассматриваться как имя файла без расширения для какого-либо поля записи DBF файла. Добавляя
расширение можно получить несколько/много файлов для данной записи DBF файла. Что это будет - описание товара,
фото товара, сертификат, Гост, ТУ - это уже детали. Это может быть название каталога с этими файлами.


РАСШИРЕНИЯ

Шаг квантования составляет 1/5 секунды. Если это не хватает, в конец добавляют дополнительные байты.
Будет ли это нумерация по порядку или датчик типа TSC, это детали. Главное - чтобы работала целая арифметика.

Предел составляет ~5600 лет. После этого все пойдет с нуля. Если требуется сделать атомный корабль и
запустить в космос, в начало добавляют доп байты для нумерации лет. Сколько байт не главное. Главное -
чтобы работала целая арифметика.

Использование отметки дата-время как часть имени или расширения бесконечно расширяет возможности генератора
уникальных имен. При использовании длинных имен можно применять эту отметку как префих (начало) длинного
имени файла. Если файловая система развалится и придется вытаскивать файлы по коротким именам, то уникальная
отметка дата-время однозначно восстановит файлы. Кстати если переписать программы проверки файловой системы
чтобы они восстанавливали висячие файлы не с именем FILE0000.CHK и далее, а с именем типа отметка
дата-время, то голова будет меньше забита. А если еще файл протокола обзывать также по стандарту дата-время,
то не будет проблем с запусками программ типа SCANDISK и ответом на вопросы этих программ.

Использовать маленькие буквы и буквы национальных алфавитов не надо. Операция перекодировки применяется
часто и по умолчанию. Это приведет к искажению. Требуется именно надежность.


ЗАКРЫТЬ ТЕМУ

Когда я учился в аспирантуре самого крупного технического университета - УПИ, писал я реферат по сдаче
философского минимума. В реферате описывались средние века. Народу в средние века было уже много, часов
еще не было. Чтобы организовать жизнь применялись церковные колокола. Народ по звону колокола знал, что
пора вставать, пора идти на работу, на обед, с работы. Вот такая неожиданная польза от колоколов, хотя это
был призыв на молитву. Не понравился реферат кафедре философии. Не интересуют кафедру философии проблемы
бытия, пространства и времени. Жизнь - она другая, чем пишут функционеры и популяризаторы типа академики,
доктора, кандидаты и преподаватели.

Человечество закладывает знания в компьютеры. Отметка типа дата-время это просто закон природы.
Хотите - используйте, тогда природа будет работать на вас. С точки зрения фундаментальной науки, как
области изучения законов природы, а не области занятости функционеров и популяризаторов со званиями,
это первое приближение к стандарту дата-время в компьютерно-человеческом виде. С точки зрения технической
науки - это техническое решение проблемы.

И причем тут наука в сырьевой колонии типа Россия. Федеральные власти плюют на русский народ и конституцию,
воспитывают лакейство под видом патриотизма. Судьи лгут и не боятся попадаться. Свидетелей и письменных
документов навалом. Прокуратура - теплое место. Мусора - патологические лжецы и преступники и вообще
распространяют наркотики. Это общеизвестный факт. У меня в суде лежат дела на мусоров и работников
ГУИН - распространителей наркотиков, лежат и не рассматриваются. Пока их не убьешь - не успокоятся.

Местные власти вымогают деньги и разворовывают деньги собираемые на текущий ремонт жилого фонда.
Вот лежат документы. Часть документов они могут подделать, но платежное поручение Сбербанка РФ тяжело подделать.

Министерство обороны - это тупые. Вот лежит у меня бумага. Военная прокуратура Екатеринбургского
гарнизона отупела настолько, что сама на себя выдала бумагу что они не то лжецы не то мошенники.
На оборонных предприятиях народ служит и от них ждать нечего.


НЕ СЛУШАЙТЕ НИКОГО. ПРОСТО СТАВЬТЕ ЭТОТ ГЕНЕРАТОР.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум iHDD.RU -> Двинянинов(tm) о винчестерах Часовой пояс: GMT + 3
Страница 1 из 1

 








Rambler's Top100 Рейтинг@Mail.ru

Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB