All streams
Search
Write a publication
Pull to refresh
113
0
Марк Шевченко @markshevchenko

программист

Send message
Гораздо интереснее ЛНС так называемые «психологи от сохи», которые придумывают новые теории и психологические термины на основании пары случаев из жизни, и делают далекоидущие выводы!
Ну, это очень круто на самом деле. Желаю успехов. С удовольствием поиграю в Вашу игру. :)
Ну, как бы, вопрос и не к Вам, а к хабравчанину leemuar. Вопрос с подковыкой: сказать «рекомендую» может каждый, а вот написать соответствующий код почему-то получается далеко не у каждого. :) У Вас то как раз получилось. :)
Согласен.

В принципе, я тоже сторонник готовых решений. Но, скажем так, в общеобразовательных целях люблю решать задачи, в том числе и такие, не имеющие даже практической ценности.
> Проблема в том, что фразой «если мне не изменяет память»
> не отделаешься, это непрофессионально.

Вообще то нет. Можно один раз разобраться, потом забыть подробности.

> Нужно знать точно, какие проверки сделать. Чтобы знать
> точно, нужно вначале изучить RFC, а потом на его основе
> кодировать. Я считаю это напрасной тратой времени и при
> любой возможности перекладываю такой контроль на
> сторонние средства, где это уже реализовано. А трата
> времени на недорешения с псевдоконтролем чревата
> последующими эксплуатационными проблемами.

Любой подход чреват эксплуатационными проблемами. Тем более подход «перекладывания на сторонние средства». Их ведь надо протестировать на соответствие RFC, а это тоже трата времени. Если не тестируете, рискуете получить проблемы там, где их не ожидали.
Если мне не изменяет память, этот регексп учитывает и такие адреса, как [«Вася Пупкин» vasya2003@pupmail.net] — почтовый адрес в квадратных скобках. Мне лично кажется, что это излишество.
> Доставка по постсоветскому пространству от индекса не зависит. Дойдет
> и без него. Дойдет и с ошибочным. Проверено.

В данном конкретном случае согласен. Но это никак не отменяет необходимости проверки пользовательского ввода в целом.

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

Или комическую ситуацию, которая довольно часто встречается: «я случайно положил деньги на ваш телефон, положите столько на телефон хххххххх». :)
Ну а какая альтернатива то? Либо «на шесть цифр», либо вот так.

Но это ещё так себе задачка. Телефонные номера — вот где настоящий геморрой, особенно, если предполагается международное использование сервиса.
Поискал по интернету, нашёл эталонный справочник почтовых индексов вот здесь: info.russianpost.ru/database/ops.html#newdbdata

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

1. Проверяем, обновился ли файл info.russianpost.ru/database/PIndx.zip с момента последнего скачивания (надеюсь, If-Modified-Since они поддерживают, иначе совсем грустно).

2. Если обновился, скачиваем. В случае обрыва связи, пытаемся повторить. Если скачать не удалось, журналируем ошибку.

3. Распаковываем архив, получаем DBF.

4. Из DBF перегоняем данные в нашу собственную базу.

5. В случае необходимости проверяем индекс по базе.

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

> Проверка индекса на 6 цифр — это, кстати, отличный пример некачественной проверки
> (если не оговорить ещё несколько условий).

Например, каких? Почтовые индексы можно проверить только базой, там нет избыточности, как в номерах банковских счетов. Вопрос — где вы будете брать актуальную базу и сколько это будет стоить? Окупается ли это, т. н. качество?
По поводу доменов первого уровня. Если хотите проверять универсально, держите у себя копию файла data.iana.org/TLD/tlds-alpha-by-domain.txt и обновляйте регулярно. Там перечислены все актуальные домены верхнего уровня.
А если сервер временно недоступен? А если там стоит проверка на спам? Забыл как называется, ныне очень популярный метод у админов — не отвечать на первую попытку положить письмо, нормальный SMPT повторит попытку минут через 15 — но это значит, что для проверки пользователю придётся ждать 15 минут.

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

С базой всё хорошо, только как поддерживать актуальность информации? Если поддерживать, то сразу задача становится непростой и организационной. Потому, на мой взгляд, достаточно убедиться, что в индексе 6 цифр. И убедиться, что электронный адрес похож на настоящий.
Почему же сразу бессмысленна? Обычный хороший тон — проверка пользовательских данных. Плюс именно так работает двухшаговая схема регистрации: сначала пользователь регистрируется, а потом подтверждает регистрацию по электронной почте.
Речь не о том, чтобы считать. Считать, понятно, лучше всего на ферме.

Я имел в виду видео-монтаж. Вырезать пару фрагментов из 2-3 фильмов, склеить, наложить пару эффектов. Очень, блин, ресурсоёмкая штука. :)
А Вы никогда видео не редактировали? ;)
Для больше универсальности надо разнести формат числа и формат слов, связанных с ним.

Вроде того, что когда функция видит %F%, она вставляет значение F в это место.
Когда видит {%F%...} вставляет подходящий текст, но не само число.

Просто сами предложения могут быть достаточно сложными, например:
Найдено 5 файлов в 10-ти папках, они скопированы в архив.
Не найдено файлов в 3-х папках, и никто их никуда копировать не будет
Найден один файл в 1-й папке, он скопирован в архив.

Ну и вторая мысль: надо делать рекурсивную обработку строк, т.е., например у нас есть {%F%a|b|c}, вот в строках a, b и c мы тоже можем писать блоки форматирования.

Тогда можно делать сложные конструкции: найдено 200 файлов, из них удалено 195. Ну а если файлов не найдено, то про удаление можно вообще не писать, и так понятно, что 0 файлов удалено.
В основном все отличия связаны с интеграцией в .NET.

Кстати, похожесть на OCaml лично мне помогла при освоении языка. Скажем, про fslex, fsyacc в сети практически нет документации, зато она есть про ocamllex, ocamlyacc. Кроме того, есть хорошие учебники по OCaml, что способствует.
Ух ты. Вот это действительно круто!

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Backend Developer
Lead
From 450,000 ₽
C#
Rust
Algorithms and data structures
Functional programming