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

 
СТАНДАРТЫ ДАТА-ВРЕМЯ ADT версия 2 СТАНДАРТЫ AKEY

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



Зарегистрирован: 27.09.2005
Сообщения: 666

СообщениеДобавлено: Пт, 27 Янв, 2006 22:12    Заголовок сообщения: СТАНДАРТЫ ДАТА-ВРЕМЯ ADT версия 2 СТАНДАРТЫ AKEY Ответить с цитатой

СТАНДАРТЫ ДАТА-ВРЕМЯ ADT
версия 2
СТАНДАРТЫ AKEY

( NATIVE/NATURE/НАТУРА ) ADT DATE TIME STANDARTS
AKEY STANDARTS

Copyright (C) Двинянинов Андрей Борисович, Екатеринбург,
Россия, 2003-2004
Свободно. Ссылка обязательна.


С 15 июня 2005 года ADT является свободно на территории где русский язык является государственным или одним из государственных. На остальной территории ADT является Luckyware. Страница Luckyware tripod. Язык написания может быть любым, но территория freeware ограничена.

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

Это то что называется настоящая фундаментальная наука. Это не те организации и их служащие, которым выделяют деньги. Это другое, это закон природы. Это решение окончательное и законное. Не надо путать с лжецами типа органы власти, прокуратура, судьи, мусора. Их решения не являются законными и окончательными. Данное решение является законном природы. Его можно улучшать. Сделать другое решение невозможно.

Кто будет использовать стандарты ADT, могут делать более ясные и сложные программы. К сожалению длина программ может уменьшится. Кто получает деньги за операторы могут потерять деньги.



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

Если делать диск по уму, протоколы надо накапливать. При этом еще надо их располагать по порядку.

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

Вводится 36-ричная символьная арифметика. Цифры - это символы ASCII '0123456789ABCDEFHGIJKLMNOPQRSTUVWXYZ'. Реально это где-то 36-ричная арифметика. Мне нравится название 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 символа сделано для удобства, простоты, надежности и ясности алгоритма. Внутри каждой части применяется упаковка путем сдвигов/умножения-деления. Попутно оказалось, что сравнение таких упакованных дата-время делается как сравнение 2-х 4-байтных/32-битных целых. Это самая быстрая операция, лучше чем символьное сравнение. Сразу оказалось, что это без разницы знаковое или беззнаковое сравнение.

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

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

Для тех евреев кто ко мне относился хорошо - небольшое утешение. (Носовский и Фоменко) Уже Исаак Ньютон докапывался до настоящей истории и боялся напечататься. Когда его взгляды были напечатаны против его согласия чтобы получить гонорар, против него поднялись многие продажные. Позже был такой Ламброзо c теорией что все гении - сума- шедшие/придурки. Как пример он привел именно этот случай с Ньютоном. По итогам документов за тысячелетие это ложь. Ламброзо оказался лакеем, продажным наглым мошенником и лжецом. Ньютон оказался копал в верном направлении.

Кстати о русских. Носовский и Фоменко подняли документы. Оказалось что не было на Руси татаро-монгольского нашествия. 1-я династия русских царей пробыла около 700 лет. Около 1630 года произошел переворот. Самозванцы Романовы обьявили себя новыми царями и начали чернить предшествеников. Не было ига на Руси.

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

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

Код:
 .s - .string
 .b1 - .byte
 .i - .integer
 .i2 - .integer


В строке индексы начинаются с 1. При переносе на другой язык где индексы от 0 надо убрать 1 в операторах типа s0z [x+1].

Язык - Алгол 68 древний компилятор WBC версии 1.4 с моими доработками. Доработки - тип именуется одной буквой, к типу добавляется цифра - число байт, занятых типом. Префикс в виде точки для обозначения типов, операций и служебных слов уже часть WBC и это отлично. Это самое эффективное представление типа. Самые простые типы :

Код:
 - .b1 - 1 байт,
 - .b2 - 2 байта,
 - .i2 - целое длиной 2 байта,
 - .s  - строка, в реализации WBC только 128 байт.

.Egg "==ADT№GET" =
.s :
( .s ffnn ;

.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 байт для этого типа отметки дата-время. Есть неудобство при работе с такой строкой как 8-байтовым целым или 2-мя 4-х байтовыми целыми. Порядок байт в целом - обратный к порядку байт в строке. Это машииное представление строк и чисел в IBM PC. Надо различать эти 2 случая хранения. Надо бы иметь машинную команду загрузки и сожранения числа в регистр по обоим случаям хранения. По состоянию на 2004 выбрано хранение ADT в памяти как в строке. Берется строка S[8], берется ее содержимое - 8 байт и хранится как .b8 без переворота байт как принято у Intel.

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

Простота алгоритма получилась после нескольких изменений алгоритма и версий. Первый алгоритм был сделан ~ 1996 -1997. Первая прога была для Quantum-ов. Если бы я тратил больше времени тогда, то смещение в ADT я бы сделал не от 2000, а от 1000 года.

Время - единственный и неповторимый закон природы. Время само является естественной, нарастающей, хэширующей функцией. Стандарт ADT можно назвать натуральным или NATURE/NATIVE.

Компьютеры работают уже 40 лет. Сменилось много поколений компьютеров, много поколений программеров. Почему только я догадался заложить время в компьютеры, сделать ось времени, ввести координату времени? Обозначение времени как строки это не ось времени и не координата, это просто текст. Плавающая арифметика - это не стандарт. На одном компьютере может стоять сразу несколько моделей плавающей арифметики с потерей точности при переводе. Между компьютерами разных фирм или разных по поколению моделей обмен числами с плавающей арифметикой настолько труден что применяется. Производится перевод плаваюшего в текст, чтение текста и перевод обратно в плавающее.

Время один из основных законов природы и только я догадался заложить этот закон в компьютеры.

ПРИЛОЖЕНИЕ 1.

Алгоритм подсчета ADT проги FZ.

Прога FZ затирает свободное место локального логического диска. Проверена под WinXP. Написана на Visual Studio.NET версии то ли 7.0 то ли 7.1. Алгоритм - работающий. Неудобством является внутреннее системное время Win. Оно считается по Гринвичу. Локальное время оказывается постоянно пересчитывается от внутреннего. Переписать алгоритм под локальное время предлагается как упражнение. Предлагается использовать не тот алгоритм пересчета который работает только до 2030 года, а тот который до 3000 года. Запас ADT - до 5600 года. Хочется чего-то настоящего, а не времянок типа Windows. Соответствие алгоритма на C постановке не проверялось. Примерно работает и ладно.

Строка ADT - формирование метки по стандарту ADT. Строка DT - символьное представление даты и времени.

Код:
CHAR  s0z [] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;

BYTE dec_dig ( WORD ii )
 { return s0z [ii] ; }
BYTE hex_dig ( WORD ii )
 { return s0z [ii] ; }

BYTE d1 ( BYTE bb )
 { WORD ii = bb ; ii = ii % 36 ; return s0z [ii] ;}
BYTE d1_i2 ( WORD ii )
 { return d1 ( ii ) ; }

// void d2 ( BYTE bb, TCHAR *ss )
// { WORD ii = bb ;
//   ss = ss + dec_dig ( ii / 10 ) + dec_dig ( ii % 10 ) ; }

void ADT ( TCHAR *adt )
{
  GetSystemTime ( &st ) ;
//  OEMGetRealTime ( &st ) ;

//  adt = "" ;
  adt [0] = d1_i2 ( ( ( ( st.wYear ) / 100 ) - 20 ) % 36 ) ;
  adt [1] = d1_i2 ( ( ( st.wYear ) % 100 ) / 3 ) ;
  adt [2] = d1_i2 ( ( ( ( st.wYear ) % 100 ) % 3 ) * 12
         + ( ( st.wMonth ) - 1 ) ) ;
  adt [3] = d1_i2 ( st.wDay ) ;

  adt [4] = d1_i2 ( st.wHour ) ;
  adt [5] = d1_i2 ( ( st.wMinute ) / 2 ) ;
  adt [6] = d1_i2 ( ( ( st.wMinute ) % 2 ) * 16
      + ( st.wSecond ) / 4 ) ;
  adt [7] = d1_i2 ( ( ( st.wSecond ) % 4 ) * 10
      + ( st.wMilliseconds ) % 200 ) ;
  adt [8] = 0 ;

  strcpy ( DT, "00d 00m 0000y  00h 00m 00.00s" ) ;
  DT [0] += (BYTE) ((st.wDay / 10 ) ) ;
  DT [1] += (BYTE) (st.wDay % 10 ) ;
//  DT [2] = (CHAR) ("d") ;
  DT [4] += (BYTE) (st.wMonth / 10 );
  DT [5] += (BYTE) (st.wMonth % 10 ) ;
// DT [5] = (CHAR) ("m") ;

  DT [8] += (BYTE) (st.wYear / 1000 ) ;
  DT [9] += (BYTE) (( st.wYear / 100 ) % 10 );
  DT [10] += (BYTE) (( st.wYear % 100 ) / 10 ) ;
  DT [11] += (BYTE) (st.wYear % 10 ) ;
//  DT [10] = (CHAR) ("y") ;
//  DT [11] = 0 ;
  DT [15] += (BYTE) (st.wHour / 10 ) ;
  DT [16] += (BYTE) (st.wHour % 10 ) ;
  DT [19] += (BYTE) (st.wMinute / 10 ) ;
  DT [20] += (BYTE) ( st.wMinute % 10 ) ;
  DT [23] += (BYTE) ( st.wSecond / 10 ) ;
  DT [24] += (BYTE) ( st.wSecond % 10 ) ;
  DT [26] += (BYTE) ( st.wMilliseconds / 100 ) ;
  DT [27] += (BYTE) ( ( st.wMilliseconds / 10 ) % 10 ) ;

//  wYear -> st
//  wMonth -> st
//  wDay -> st
//  wHour -> st
//  wMinute -> st
//  wSecond -> st
//  wMilliseconds -> st

 ; }

Получается что стандарт ADT - не один. Смотря как брать время - местное или по Гринвичу получаются разные стандарты.

ПРИЛОЖЕНИЕ 2.

Расширение ADT для быстрых процессов.

Шаг 1/5 секунды - это мало. В соответствии со стандартом язык A - обозначении чила байтов в типа, ADT можно назвать ADT44. 4 байта - дата, 4 байта - время. Для быстрых процессов требуется расширить поле для времени видимо до 8 байт. Тогда этот ADT будет называться ADT48.

Доп 4 байта времени можно рассматривать как часть 1/5 секунды. Надо получить микросекунды - 10**6 = 1 секунда, отнять число учтенных 1/5 секунд - получится поле для упаковки в доп 4 байта. Эта вычисленная величина <= 200'000. Это можно представить как < 256 * 1024 ` 8 * 32 * 32 * 32. В 36-ричной арифметике 32 - хорошая величина для разбиения числа. Тогда остается еще 2 бита в резерв от перевода 8 в 32.

Перевод числа в байты выглядит так :

1. Число микросекунд после выделения 1/5 части - это .b4. Его можно рассматривать как :

Код:
.structure ( .b2 low, .b2 high ) ;


256 * 1024 = 4 * 64'xxx.
2. Число .b4 сдвигается влево на 3 бита. Старшие 2 байта рассматриваются как .b2. У них берется младшая цифра и переводится в 0..Z - это 1-я цифра.

3. Дальше работа только с младшими 2 байтами - .b2. Делается циклический сдвиг влево на 5 бит. У результата берется младшие 5 бит, переводится в 0..Z - это 2-я цифра.

4. Повторить пункт 3 - это 3-я цифра.

5. Циклический сдвиг влево на 3 бита, сдвиг влево на 2 бита. Маладшие 5 бит переводятся в 0..Z - это 4-я последняя цифра. В последней цифре 2 бита неиспользованы - это резерв.

Алгоритм простой. Не отлажен.

Опять получается что стандарт ADT не один. Смотря какую брать точность или как нумеровать уточнение ADT. Получается не стандарт, а стандарты.

Вы будете смеяться. На спутниках для работы GPS - глобальной системы определения координат, стоят атомные часы с точностью 1 наносекунда. Стандарт ADT48 дает точность или шаг 1/4 микросекунд - это 250 наносекунд. За это время свет или радиоволна могут пройти только 75 метров. Для атомных часов это маловато. Для GPS это выше крыши.

Приложение 3. СТАНДАРТЫ AKEY

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

В приложении к базами данных предлагается применять AKEY как внутренний собственный ключ записей. Это дает столько выгоды, что у меня не хватит времени описывать.

Кстати выявляется свойство синхронизации записей с ключом AKEY. Пусть пришло несколько запросов с одним и тем же ключа AKEY. Тогда раз AKEY это аналог времени, добавление записей приводит к алгоритму когда первым обрабатывается самая важная запись, остальные обрабатываются по приоритетам. При этом ключ AKEY можно слегка подвинуть - увеличить. Регистрация события может быть только позднее, но не раньше события. Хэшируемость является плановой в зависимости от точности шага ADT. Всегда есть окно куда можно слегка подвинуть ключ. Вопрос коллизий является естественно решаемым.

Использование ключа AKEY дает решение сссылок на записи. Нужно ссылаться на значение ключа AKEY. Ссылка на абсолютный номер записи остается только при соответствии AKEY и записи.

Дальше больше. При использовании ключа AKEY только при добавлении в конец, поиск по такой базе без индекса равен log2(число записей). Поиск можно проводить методом деления пополам.

Достаточно открыть кран под названием наука и прет столько науки, что всю не сделать. Это настояшая наука, а не название функционеров, популяризаторов и рекламных агентов и их организаций.

Приложение 4. АППАРАТНАЯ РЕАЛИЗАЦИЯ

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

Видно - аппаратная реализация стандартов ADT самая простая. Добавляется еще умный сумматор. Суммирование делается в арифметике 0..Z.

Когда сделано по научному, все решается быстро, просто и окончательно.

EOF
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум iHDD.RU -> Двинянинов(tm) о винчестерах Часовой пояс: GMT + 3
Страница 1 из 1

 








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

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