Pull to refresh
101
15.8
Марк Шевченко @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
448-th
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

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