LINUX.ORG.RU

яролит - реализация на javascript

 , транслитерация,


0

1

Думаю, кто-то помнит тему Новая версия Яролита (форк ГОСТ 16876-71, табл 2)

На страничке http://программирование-по-русски.рф/яролит.яргт/ можно попробовать ещё более новую версию реализации яролита. Наконец-то я сделал обратное, а не только прямое преобразование.

Кодировка на данный момент такова:

Русский алфавит:

a b v g d e jo zh z i jj k l m n o p r s t u f kh c ch sh shh jq y q eh ju ja

(Соответствует ГОСТ 16876-71, таблица 2, кроме Ь = Q и Ъ = JQ - в госте эти значки превращаются в небуквенные литеры)

Английские буквы:

xe - переключение в английский режим. В частности, «xeRussia» раскодируется как «Russia», а не как «Руссиа».

В английском режиме «x» кодируется как «xx», а «w» - как «ww»

xr - переключение обратно на русский

Суммарно, JAxeRxrJA == ЯRЯ

Не ASCII, не кириллица = xuNNNNNNx, где NNNNNN - 16-ричный код символа.

Исходники функций прямого и обратного преобразования - https://bitbucket.org/budden/ppr/src/master/static/jarolit/

Буду благодарен за код ревью. Пока речь не идёт об упаковке в тот или иной «пакет». Наиболее интересно на данный момент, как сделать код более быстрым. Например, имеет ли смысл делать case по коду символа, а не по строковым значениями? С точки зрения правильности код выглядит правильным, но если увидите баги - пишите.

★★★★★

Последнее исправление: den73 (всего исправлений: 1)

Ответ на: комментарий от anonymous

Коль затронуты такие «щепетильные» вопросы, то вот еще один.
Зачем Microsoft купил github?

anonymous
()
Ответ на: комментарий от den73

Мы сейчас в России находимся в таком положении, что мы либо доверяем США, либо сидим без компьютеров.

А зойчем вам эти бездуховные камплюхтеры? Блинцов с лопаты поели, водяры попили, на бутылку сели и порядок. И штабильношть.

anonymous
()
Ответ на: комментарий от anonymous

Ну, а далее:

А на кладбище так спокойненько
Среди верб, тополей да берёз,
Всё культурненько, всё пристойненько,
И решён там квартирный вопрос.

anonymous
()
Ответ на: комментарий от den73

Предлагаешь сделать строку и колонку?

И кусок текста выкинь хотя бы +- 10-20 символов и указатель, где парсер обломался. Как-то так:

Invalid sequence "je" line 15, col 28:
aaassffvvvvjewwwww
           ^

Почитай любой рукописный парсер

А что, есть нерукописные парсеры?

Например, если я сделаю типа интерпретатора «байткода» из массивов, то будут заморочки, потому что в js есть typeof, а в других языках может и не быть.

Зачем тебе typeof? Там надо перегнать букву в удобное число, по массиву определить соответствие, вернуть строку. Всё. Делается это на любом языке примерно одинаково.

Да не очень.

Ты меня расстраиваешь. И вообще, просишь код ревью, я его делаю, а тебе, оказывается, ничего не нужно и так сойдёт. Да и вообще, кто бы мне сделал код ревью? Я вот думаю, что можно делать лучше, но не знаю как.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Производительностью switch JavaScript не проверяли случаем случаем?

Интересно было бы почитать мануал /мануалы/, «просвещающие» в вопросах подобным, заданному в начале поста.

Многие просто не «чувствуют» JavaScript /конечно он не «серебряная пуля»/.
Многие его используют вовсе не от того, что он «навязан» кем то.

anonymous
()
Ответ на: комментарий от anonymous

Производительностью switch JavaScript не проверяли случаем случаем?

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

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

В gcc имеется goto Expressed, а у Microsoft в C++ нет.
Так вот использование goto Expressed + таблица переходы приводит к тому, что switch «рыдает» и «нервно курит в сторонке».
Замерял ... /профит около 50%/.

Имеется не мало алгоритмов где switch «валом».
Но ныне разработка оптимальных алгоритмов - признак «не понимания текущих реалей».

anonymous
()
Ответ на: комментарий от anonymous

Но ныне разработка оптимальных алгоритмов - признак «не понимания текущих реалей».

Да. HerakHerak&Production Driven Development рулит!

crutch_master ★★★★★
()
Ответ на: комментарий от den73

А потом что - восстание рабов?

Какая-то нездоровая аналогия, честное слово. Это же не ЕПАМ какой-нибудь, это сообщество. Ну да, там есть своя чёткая иерархия, но насколько я понимаю, она действует на принципах меритократии, а это означает, что у людей, которые вносят свой вклад и предлагают грамотные решения, есть шанс подняться.

Всё-таки у вас одностороннее предвзятое отношение именно к открытому софту, как я погляжу. Открытый софт — это сокровищница всего человечества (к ней можно и нужно относиться избирательно, с этим я не спорю). В то время как проприетарщина (которая, на минуточку, до сих пор занимает более 90% десктопа, да и в мобильном сегменте довольно широко представлена) открывает гораздо большие возможности для злоупотреблений, того же шпионажа и др.

Но мне кажется, что трудоёмкость софта выше.

Довольно-таки оригинальное мнение. Допустим, это так. Но почему же тогда свободного софта в мире много, а свободного железа кот наплакал? Где мне купить материнскую плату, где и процессор, и видеочип, и всё остальное сделаны по полностью открытым спекам?

hobbit ★★★★★
()
Ответ на: комментарий от anonymous

База данных ФИАС.

Так вот у них в zip имеется xml размером 26Gb.

SAX-парсер вполне помогает упихать это безобразие в любую, например, реляционную БД. Я дёргал оттуда выборку по Рязанской области, не сказать, чтобы быстро, но импорт прошёл успешно. DOM-парсер на таких данных, конечно, помрёт.

XML в данном случае — стандартный __обменный__ формат, не более того. Для переноса, не для повседневного использования.

А Вы что предлагаете? У них там в качестве альтернативы, кажется, ещё и dbf есть, но он не настолько стандартен, и инструментов для его чтения меньше. CSV? INI? Так у базы адресов древовидная структура, которая на эти форматы плохо ложится (да-да, костыльно ложится, и я так делал при нужде, но от хорошей жизни я этим заниматься не стану). Что-то бинарное? Так это сразу надо описание этого формата надо давать, желательно вместе с эталонной реализацией читалки, иначе это будет не БД ФИАС, а метапрог от ФНС.

Что-то ещё?

Вы если других дураками называете — хотя бы альтернативы их глупостям сразу предлагайте.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Вы если других дураками называете — хотя бы альтернативы их глупостям сразу предлагайте.

Они предоставили /но xml размером 26GB .../.

anonymous
()
Ответ на: комментарий от anonymous

Дополнение: да можно рассмотреть Protobuf. Но! XML я могу понять, сразу взглянув на теги. К protobuf же надо сразу прикладывать pb-файлы, по которым обязательно генерить программную реализацию. В XML можно в самом крайнем случае поиск по файлу сделать, хоть и не каждый редактор это потянет.

Ещё можно посмотреть, сколько языков и фреймворков поддерживает protobuf и на скольких уже есть XML/SAX-парсеры. Что-то мне подсказывает, что сравнение будет не в пользу протобуфа, хотя могу и ошибаться.

Да, читаться protobuf, скорее всего, будет быстрее. Но учитывая, что формат обменный — это не критичное преимущество.

hobbit ★★★★★
()
Ответ на: комментарий от anonymous

Я по-прежнему жду предложений по альтернативам.

Я не работаю в ФНС, если что. Но когда я этот архив увидел, я тоже сначала офигел, а потом подумал, что это, похоже, далеко не худший вариант.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Так dbf вполне альтернатива /парсить не нужно/.
Да и конвертеров dbf полно /если другой формат нужен/.
Для ФИАС по крайней мере подходит.
А вот xml 26GB - перебор.

anonymous
()
Ответ на: комментарий от hobbit

а потом подумал, что это, похоже, далеко не худший вариант

Что-то на ум худший вариант не приходит ...

anonymous
()
Ответ на: комментарий от crutch_master

Да. HerakHerak&Production Driven Development рулит!

+бесконечность

Нужно в ISO для этой методологии стандарт добавить.

anonymous
()
Ответ на: комментарий от hobbit

Да, читаться protobuf, скорее всего, будет быстрее. Но учитывая, что формат обменный — это не критичное преимущество.

«Формат обменный» и этим все сказано.

anonymous
()
Ответ на: комментарий от crutch_master

А что, есть нерукописные парсеры?

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

https://bitbucket.org/budden/budden-tools/src/default/russian-budden-tools.lisp

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

Нет, это только в прямую сторону. В обратную нужно парсить двух- и трёхбуквенные последовательности типа eh, kh, ja, jo, shh и т.п. Выдавать разные сообщения об ошибке. Т.е. часть букв сразу преобразуется в массив, а части букв соответствует функция дальнейшего разбора. Значит, в массиве будут два типа сущностей - строка замены или функция. Вот и typeof понадобился. Кроме того, лямбда медленнее, чем switch, а значит, будет как-то так:

  • заполняем массивы. Их будет, как минимум, два - для латиницы и для кириллицы (для кириллицы придётся набить кучу лишнего, поскольку ё стоит особняком, не говоря уже о том, что форма массива будет зависеть от кодировки). Для простых случаев будет замена, для сложных - символ с кодом 0 или пустая строка
  • там, где пустая строка - попадаем опять же в switch, который вызывает код разбора последовательности, начинающейся с этой буквы.

За код ревью спасибо большое, но только замечания по код ревью от начальника подлежит обязательному исполнению. Код ревью от человека с форума учитывается как мнение (и я его учёл, о чём и отписал).

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Далее, когда портируем, сталкиваемся с отсутствием лямбд в некоторых языках, значит, вариант с лямбдами вообще сомнительный.

den73 ★★★★★
() автор топика
Ответ на: комментарий от hobbit

это сообщество. Ну да, там есть своя чёткая иерархия

Именно. Есть организации, типа Эпл, Гугл и т.п., где люди сидят на зарплате. Если им нужен твой патч - они его примут. Если не нужен - не примут. Более того, они не всё открывают. Они могут открыть код, но не будут открывать стратегии, планы и прочее. Тут даже не раб на галере, а мимо проплывающая лодка, откуда пытаются давать добрые советы по изменению курса и иногда забрасывают через борт вяленое мясо и бутылочки с элем. Капитан галеры скажет за это спасибо и продолжит плыть куда изначально запланировано. До должности раба на такой галере надо ещё дослужиться. Максимум, что можно сделать - это найти дыры и сообщить об этом по процедуры - сначала им, через 90 дней - всем. Этот процесс в принципе работает, но инициатива - у тех, кто закладывает баги. И, как показывает bashdoor, опережение может достигать 10 лет и более.

И что, мы должны вверить безопасность своей страны такой вот ненадёжной стратегии, в расчёте на то, что нас с мимопроплывающей лодки возьмут на галеру погрести, а потом и порулить дадут? Утопия чистой воды.

Единственный работающий вариант - это форк.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от den73

И кстати, если уж подумать, то у нас проблемы с параллельностью.

Нет никаких проблем. Бьешь текст на куски и гоняешь.

В обратную нужно парсить двух- и трёхбуквенные последовательности типа

Ничего не надо. Делаешь вот так:

var seq = [
  { key : "H",
    seq3 : ["S"],
    ending  : ["SS","Z","K","C","S","E"],
    replace : ["Щ","Ж","Х","Ч","Ш","Э"]
  },
  ...
  { key : "J",
    ending  : ["O","J","Q","U","A"],
    replace : ["Ё","Й","Ъ","Ю","Я"]
  }
]
Бегаешь по seq и сравниваешь тек. букву с key. Берешь след. 2 буквы, ищешь вторую в seq3, добавляешь её, если находишь, бегаешь по ending и заменяешь на replace. Выбрасываешь, если ничего не нашел.
После всего этого делаешь спецкейс для xe/xu или придумываешь что-то похожее для управляющих символов. Там будет просто другой seq с функциями ну или можешь вкорячить туда свой свич.
Всё. Код работает и легко конфигурируется под что угодно.

crutch_master ★★★★★
()
Ответ на: комментарий от anonymous

Какой-то дикий изврат. Непонятно нахрена. Я понимаю бы что-то узкоспециализированное для описания чего-то.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

ending : [«SS»]

H в конце последовательности, а не в начале. Касаемо эффективности, если это целые числа и Си, то switch будет быстрее работать.

den73 ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Всё-таки у вас одностороннее предвзятое отношение именно к открытому софту, как я погляжу.

Нет, западная проприетарщина вообще не является предметом для рассмотрения. Касаемо российской проприетарщины - эта задача вне моего разумения, если речь идёт о безопасности. Я не знаю, как правильно. Из чего следует вывод о предвзятом отношении. Линукс - это решето, факт. Кроме того, он мне с инженерной точки зрения не нравится. Но это не отношение к идее открытого софта, а лишь к конкретным образцам оного.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Касаемо эффективности, если это целые числа и Си, то switch будет быстрее работать.

Про си - это к Царю.

H в конце последовательности, а не в начале.

Переделываешь логику в бегунке, добавляешь флагов с костылями. Главное структура со всеми твоими sh shh ja ju etc, которую можно менять как угодно.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Ну уже начались препирательства. По-твоему можно, но и если оставить как сейчас, тоже будет работать :)

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Именно. Есть организации, типа Эпл, Гугл и т.п., где люди сидят на зарплате.

Стоп, стоп. Мы говорим про опенсорс в целом и ядро Linux в частности. С какого боку тут Эпл вообще? Ну да, они что-то открывают, но это явно не опенсорс-компания. Гугл контрибутит в ядро, но решения принимают не они.

Вы путаетесь сами и пытаетесь путать других. Создаёте образ врага, при этом не с той стороны, откуда исходит реальная опасность. В своём манифесте пугаете людей глобальным опенсорсом, при этом про угрозу со стороны глобальной проприетарщины не упоминаете ни единым словом.

Единственный работающий вариант - это форк.

Форк в ряде случаев может быть полезен. Я уже говорил, что согласен с нужностью национальных репозиториев. Однако «единственный работающий» — это перебор. Отказ от двустороннего сотрудничества это во-первых, удар по темпам собственного развития, во-вторых, сомнительно с моральной точки зрения: мы берём чужую кодовую базу, что-то в ней дорабатываем, потом варимся в собственном соку, да ещё и хаем то место, откуда мы эту базу взяли.

Я за рост влияния русского ПО. Но через сотрудничество, а не через изоляцию. Сильным мира сего очень выгодно пугать американцев русской угрозой, а русских — американской. Да, должны быть решения на случай, если партия войны победит. Но для начала нужно сделать всё возможное, чтобы она не победила.

hobbit ★★★★★
()
Ответ на: комментарий от den73

Нет, западная проприетарщина вообще не является предметом для рассмотрения.

А это и есть предвзятое отношение. Когда вы человека, пытающегося защитить других от маньяка, обвиняете в применении насилия, а сам маньяк у вас «не является предметом рассмотрения».

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

hobbit ★★★★★
()
Ответ на: комментарий от den73

Линукс - это решето, факт. Кроме того, он мне с инженерной точки зрения не нравится.

Ну не нравится линукс — помогите развитию GNU Hurd, он микроядерный и там работ непочатый край. А свой велосипед будет однозначно решетистее хотя бы частично вылизанного линукса.

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

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Ну ок, я согласен, что в моём манифесте есть баг, связанный с неупоминанием проприетарщины. Мне думается, что наше гос-во уже осознало пагубность проприетарщины и это уже воплощено в практику (во всяком случае, есть устойчивый тренд). Потому я об этом и не написал. Да и из логики ясно, что если уж в опенсорсе полно закладок, то в проприетарщине и подавно. Это вторая причина, по которой об этом не нужно писать. Но если это вызывает вот такие недоразумения, то ок, я исправлю.

den73 ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Да, я видел на вашем сайте ссылки на Bluebottle, но они у меня почему-то все не открываются

http://вече.программирование-по-русски.рф/viewtopic.php?f=5&t=149

Но это лучше обсудить отдельно, если интересно.

Тут приходите вы и начинаете обличать опенсорс.

Ну как его не обличать, если там закладки буквально бросаются в глаза. вот стоило скачать для игр постгрес релиз 11.4 (случайно выбрал), и вот последние коммиты в нём:

2019-06-17	Tom Lane	Stamp 11.4. REL_11_4	
2019-06-17	Tom Lane	Last-minute updates for release notes.	
2019-06-17	Peter Eisentraut	Translation updates	
2019-06-17	Michael Paquier	Fix buffer overflow when processing SCRAM final message...	
2019-06-17	Michael Paquier	Fix buffer overflow when parsing SCRAM verifiers in...	
den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Из них последний содержательный - это Fix buffer overflow:

Fix buffer overflow when processing SCRAM final message in libpq

When a client connects to a rogue server sending specifically-crafted messages, this can suffice to execute arbitrary code as the operating system account used by the client.

Не искал, чес.слово. Натолкнулся.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

SCRAM

Так это новая шняга, только в 11 появилась(хотя может и в 10, но сути это не меняет). Что удивительного?

anonymous
()
Ответ на: комментарий от hobbit

Для дискуссии /и не более/.

 В опенсорс должен быть ordnung, который не может существовать без требований:

   -  тексты программ должны быть "опрятными" и основные блоки докумментированы;
   
   -  обязательно должeн быть developer manual к программе /алгоритму/, ...:

      -  объяснено укрупненно архитектура проекта /а не просто набор функций, .../;
   
      -  приведены /желательно/ все ссылки, связанные с проектом;

      ...

Почему так?
Потому что ныне для того, чтобы «въехать» в многие проекты нужны месяца ...
Это очень вредит развитию проектов.

Ныне же «Джоны», «Иваны» большей частью придерживаются методологии HerakHerak&FreeSource Driven Development.

anonymous
()
Ответ на: комментарий от anonymous

Шутка.

Форумчанам и форумчанкам.

В Metaprog: универсальная графическая среда программирования [LabVIEW-прототип] часть 9 (комментарий) была приведена критика форумовских «диалогов».

Так вот согласно критике многие прочитают предыдущий пост так:

В опенсорс ... требований:
...
...
Ныне же ... Development

И затем начинается «дискуссия» ...
Это стиль дискуссии HerakHerak&Потроллить Много.

anonymous
()
Ответ на: комментарий от anonymous

Это стиль дискуссии HerakHerak&Потроллить Много.

Я к такому «стилю дискуссии» и людям, провоцирующим его, отношусь очень плохо, если что.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

ИМХНО для меня обсуждение этих вопросов важно /и ни как не с целью троллинга/.

anonymous
()
Ответ на: комментарий от hobbit

Поступаю проще - с «задирами» перестаю общаться /ни когда об этом не пожалел/.

anonymous
()
Ответ на: комментарий от anonymous

Блинцов с лопаты поели

это хрень откуда?

водяры попили

Я русский, мы не бухаем!

на бутылку сели и порядок

А в этом какой смысл?

anonymous
()
Ответ на: комментарий от anonymous

Это все отсылки к нашумевшим новостям из жизни РФ к сожалению

saibogo ★★★★
()
Ответ на: комментарий от next_time

Я сначала осознал необходимость, потом придумал название, потом два раза переделал, потом обнаружилось сходство с ГОСТом.

В общем, думаю, что надо разбить все буквы на три диапазона: диапазон, охватывающий латиницу, диапазон, охватывающий кириллицу, и все остальные буквы. Далее делается

если код-буквы в-рамках диапазон-с-латиницей
  кортеж(добавляемая-строка, новое-состояние) = массив-латиницы[код-буквы]
иначесли код-буквы в-рамках дипазон-с-кириллицей   
  кортеж(добавляемая-строка, новое-состояние) = массив-латиницы[код-буквы]
кне
Конечный автомат расписать руками. Так будет сложнее расшифровать строку по времени её перепаковки, т.е. код будет пригоден для работы с паролями.

Обработка ошибок будет через некую маску в состоянии, при наличии которой по значению новое-состояние выбираем из массива код ошибки.

Как-то так.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от den73

Достаточно перекодировки «QWERTY» === «ЙЦУКЕНГ»

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.