Pull to refresh
94
0
Никита Гришин @Mgrin

Пользователь

Send message

LIVR — «независимые от языка правила валидации» или валидация данных без «проблем»

Reading time12 min
Views22K
Каждый программист неоднократно сталкивался с необходимостью проверки пользовательского ввода. Занимаясь веб-разработкой уже более 10 лет, я перепробовал массу библиотек, но так и не нашел той единственной, которая решала бы поставленные мною задачи.

Основные проблемы, которые встречаются в библиотеках валидации данных

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

Проблема №2. Процедурное описание правил валидации. Я не хочу каждый раз думать про алгоритм валидации, я просто хочу описать декларативно, как должны выглядеть правильные данные. По сути, я хочу задать схему данных (почему не «JSON Schema» — в конце поста).

Проблема №3. Описание правил валидации в виде кода. Казалось бы, это не так страшно, но это сразу сводит на нет все попытки сериализации правил валидации и использования одних и тех же правил валидации на бекенде и фронтенде.

Проблема №4. Валидация останавливается на первом же поле с ошибкой. Такой подход не дает возможности подсветить сразу все ошибочные/обязательные поля в форме.

Проблема №5. Нестандартизированные сообщения об ошибках. Например, «Field name is required». Такую ошибку я не могу показать пользователю по ряду причин:
  • поле в интерфейсе может называться совсем по другому
  • интерфейс может быть не на английском
  • нужно различать тип ошибки. Например, ошибки на пустое значение показывать специальным образом

То есть, нужно возвращать не сообщение об ошибках, а стандартизированные коды ошибок.

Проблема №6. Числовые коды ошибок. Это просто неудобно в использовании. Я хочу, чтобы коды ошибок были интуитивно понятны. Согласитесь, что код ошибки «REQUIRED» понятней, чем код «27». Логика аналогична работе с классами исключений.

Проблема №7. Нет возможности проверять иерархические структуры данных. Сегодня, во времена разных JSON API, без этого просто не обойтись. Кроме самой валидации иерархических данных, нужно предусмотреть и возврат кодов ошибок для каждого поля.

Проблема №8. Ограниченный набор правил. Стандартных правил всегда не хватает. Валидатор должен быть расширяемый и позволять добавлять в него правила любой сложности.

Проблема №9. Слишком широкая сфера ответственности. Валидатор не должен генерировать формы, не должен генерировать код, не должен делать ничего, кроме валидации.

Проблема №10. Невозможность провести дополнительную обработку данных. Практически всегда, где есть валидация, есть необходимость в какой-то дополнительной (часто предварительной) обработке данных: вырезать запрещенные символы, привести в нижний регистр, удалить лишние пробелы. Особенно актуально — это удаление пробелов в начале и в конце строки. В 99% случаев они там не нужны. Я знаю, что я до этого говорил, что валидатор не должен делать ничего кроме валидации.

3 года назад, было решено написать валидатор, который не будет иметь всех вышеописанных проблем. Так появился LIVR (Language Independent Validation Rules). Есть реализации на Perl, PHP, JavaScript, Python (мы на python не пишем — фидбек по ней дать не могу). Валидатор используется в продакшене уже несколько лет практически в каждом проекте компании. Валидатор работает, как на сервере, так и на клиенте.
Читать дальше →
Total votes 32: ↑30 and ↓2+28
Comments71

Книги и образовательные ресурсы по алгоритмической торговле

Reading time7 min
Views96K


Алгоритмическая торговля — интересная область, которая позволяет ИТ-специалистам применить свои технические знания на фондовом рынке и извлечь из этого ту или иную выгоду. В нашем блоге мы неоднократно рассматривали различные темы, связанные с созданием торговых роботов, но недостаточно внимания уделяли теоретическим вопросам, с которыми сталкиваются начинающие трейдеры.

В нашем сегодняшнем материале — подборка книг, которые помогут лучше подготовиться к началу работы на фондовом рынке и написанию механических торговых систем. Для достижения наибольшей эффективности материала, мы приводим советы экспертов, которые занимаются алгоритмической торговлей на российском и зарубежных фондовых рынках.
Читать дальше →
Total votes 43: ↑38 and ↓5+33
Comments22

Подходы и инструменты работы с BigData — все только начинается, начи-на-ет-ся

Reading time8 min
Views26K
Вы еще не сохраняете десятки миллионов событий в день? К вам еще не забегают менеджеры с кричащим вопросом — когда твой дорогущий кластер на «надцати» машинах посчитает агрегированную статистику по продажам за неделю (а в глазах читается: «чувак, ребята на php/python/ruby/go решают задачу за час, а ты со своей Бигдатой тянешь время днями, доколе?»)? Вы еще не вскидываетесь ночью в холодном поту от кошмара: «разверзлось небо и на вас, ваших коллег и весь нафиг город вывалилось огромная куча… Бигдаты и никто не знает, что с этим всем теперь делать»? :-)

Есть еще интересный симптом — в компании скапливается много-много логов и кто-то, по фамилии, отдаленно звучащей как «Сусанин», говорит: «коллеги, а в логах на самом деле сокрыто золото, там есть информация о путях пользователей, о транзакциях, о группах, о поисковых запросах — а давайте это золото начать извлекать»? И вы превращаетесь в «извлекателя» добра из терабайт (и их десятков) информационного водопада под мотивирующие советы: «а разве нельзя в потоке получать ценную для бизнеса информацию, зачем гонять часами кластера?».

Если это не о вас, тогда и не заходите под кат, ибо там — треш и жесткий технологический трепет…
Читать дальше →
Total votes 31: ↑23 and ↓8+15
Comments13

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6

Reading time7 min
Views399K

Содержание курса



Улучшение кода






Official translation (with a bit of polishing) is available here.




Постановка задачи


Цель этого цикла статей — показать, как работает OpenGL, написав его (сильно упрощённый!) клон самостоятельно. На удивление часто сталкиваюсь с людьми, которые не могут преодолеть первоначальный барьер обучения OpenGL/DirectX. Таким образом, я подготовил краткий цикл из шести лекций, после которого мои студенты выдают неплохие рендеры.

Итак, задача ставится следующим образом: не используя никаких сторонних библиотек (особенно графических) получить примерно такие картинки:



Внимание, это обучающий материал, который в целом повторит структуру библиотеки OpenGL. Это будет софтверный рендер, я не ставлю целью показать, как писать приложения под OpenGL. Я ставлю целью показать, как сам OpenGL устроен. По моему глубокому убеждению, без понимания этого написание эффективных приложений с использованием 3D библиотек невозможно.
Читать дальше →
Total votes 198: ↑196 and ↓2+194
Comments120

58 признаков хорошего интерфейса

Reading time16 min
Views380K
У хорошего интерфейса пользователя высокая конверсия и его просто использовать. То есть, он хорош и для бизнеса, и для использующих его людей. Вот список опробованных нами идей.

1 Один столбец вместо нескольких


Один столбец точнее отражает то, что вы хотите донести. Пользователи проходят сверху вниз по более предсказуемому пути. В дизайне с несколькими колонками есть риск отвлечения пользователя от основной задачи страницы.

image
Читать дальше →
Total votes 226: ↑182 and ↓44+138
Comments102

Лепим Стартап. Начало

Reading time3 min
Views13K
Новый 2015 год. Понедельник. Пора начинать новую жизнь стартап с нуля. После прочтения чуть более чем всех статей по поводу того, как же его начинать ясно одно — ничего не ясно. Пол Грэм (со-основатель Y Combinator), например, считает, что стартапы — нелогичны и все делать надо совсем не так как хочется. А как делать? Для этого можно или попасть в крутой инкубатор или иметь хорошего ментора или же… попробовать пилить свой проект, параллельно проходя онлайн курсы от лучших университетов мира. С января 2015 начинается (повторяется) 2 отличных курса:
Technology Entrepreneurship, от Stanford University Online
Entrepreneurship 101: Who is your customer? от edx (MIT, Harvard)
Можно ли слепить стартап с нуля только при помощи онлайн курсов и интереса?

Читать дальше →
Total votes 20: ↑10 and ↓100
Comments14

ah — лучше, чем history

Reading time3 min
Views30K
Так получается, что я провожу в консоли (терминале) достаточно времени, порой даже больше, чем хотелось бы. Порой даже исполняю там какие-то команды и внимательно изучаю их вывод. Часто случается, что к выводу той или иной команды приходится возвращаться, а он постоянно теряется: то терминалы захлопываются, то в tmux окно закрываешь, то выводы прочих команд уже давным-давно забили и похоронили ту самую полезную строчку.

Для того, чтобы сохранить вывод какой-либо утилиты я, как и многие, пользовался tee. Это работало, но постоянная суета среди бесконечных error.log, out.log, output.log, err.log log.log, lll.txt и тп если не сводила с ума, то безумно раздражала; вместо того, чтобы вести какой-то порядок, постоянно подмывало создать Новую Папку (1), где и похоронить эти самые логи, периодически бэкапя могильничек: порядок предполагал какую-то систематизацию, а в разгаре работы вспоминать как назвать свой файл крайне не хотелось.

Тогда я написал ah, крохотную утилитку, которая сильно-сильно улучшила мою жизнь.
Читать дальше →
Total votes 97: ↑93 and ↓4+89
Comments21

Продвинутое использование объектов в JavaScript

Reading time15 min
Views50K
Этот пост выходит за рамки повседневного использования объектов в JavaScript. Основы работы с объектами по большей части так же просты, как использование JSON-нотации. Тем не менее, JavaScript дает возможность использовать тонкий инструментарий, с помощью которого можно создавать объекты некоторыми интересными и полезными способами и который теперь доступен в последних версиях современных браузеров.
Читать дальше →
Total votes 60: ↑56 and ↓4+52
Comments29

Droidutils — набор решений, которые ускоряют разработку приложений под Android

Reading time7 min
Views20K
При разработке приложений я заметил, что каждый раз, когда мне приходилось сталкиваться с решением похожих задач (реализовывать работу с http, json, multithreading и т.п.), приходилось делать одну и туже роботу, причем на это уходило много времени. Поначалу это было не критично, но в больших проектах занимало слишком много времени. Чтобы сэкономить свое и ваше время, решил написать универсальное решение для этих задач, которым и хочу поделиться с сообществом.
Читать дальше →
Total votes 17: ↑15 and ↓2+13
Comments36

Логика мышления. Часть 7. Интерфейс человек-компьютер

Reading time7 min
Views49K


Для тех, кто только присоединился, я советую начать с первой части или хотя бы с описания волновой модели коры. Наша волновая модель показывает как вызванная активность нейронов коры порождает волны фоновой активности, распространяющиеся как внутри зон коры, так и через проекционные связи по всему пространству мозга. Проходя по какому-либо участку коры, волна, кодирующая определенное явление, воспроизводит свой уникальный узор. Это позволяет нейронам в любом месте коры получать информацию о том, что происходит в других частях мозга.
Читать дальше →
Total votes 43: ↑32 and ↓11+21
Comments8

Интервью с Элоном Маском. Часть 2 — про массу, про Марс и про MBA

Reading time5 min
Views83K
imageЭто вторая часть интервью Элона Маска Элене Левин, колумнистке издания Американского физического общества APT News. Первая часть была опубликована вчера.

Левин: Как вы решаете встающие перед вами бизнес-задачи? Помогает ли вам ваше физическое и математическое образование видеть проблемы в бизнесе под другим углом, или по-другому подходить к их решению?

Маск: Физика очень помогает, потому что математика, на которую опираются бизнесмены, очень примитивна по сравнению с математическим аппаратом физики. Помню, как на курсе по анализу рынка ценных бумаг преподаватель объяснял, что такое матрицы. Я был в шоке. Если вы знаете математику достаточно, чтобы заниматься физикой, то экономические задачи будете решать без усилий. Многие учёные недооценивают себя в этой области. На самом деле они знают намного больше, чем думают. Можно просто взять и приложить физический метод мышления к практически любой проблеме — это универсальные приёмы и они работают в мире экономики так же как и в мире физики.

Левин: Я тоже изучала математику и физику и всегда рассматриваю проблемы в бизнесе как двоичное дерево, и продумываю шаги на 4, 5 или 6 уровней вперед. У вас это так же происходит? Это изучение физики накладывает отпечаток?

Маск: Да, в общем-то я всегда стараюсь продумывать будущие события, пытаюсь предсказать их. Я предвижу цепочку событий, затем анализирую ошибки и расхождения между предсказанием и реальным ходом вещей и пытаюсь минимизировать эти ошибки. Вот так мне это представляется. А ещё я думаю в терминах потоков вероятностей. Есть определённый набор исходов, вероятности этих исходов, и я хочу быть в выигрыше при любом раскладе. Так что, хоть и не всегда всё происходит так как планируешь, если всё правильно просчитать, со временем обязательно продвинешься вперёд.
Читать дальше →
Total votes 80: ↑79 and ↓1+78
Comments31

Температура цвета

Reading time10 min
Views376K
image
По нашим психологическим ощущениям цвета бывают тёплыми и горячими, бывают холодными и очень холодными. На самом деле все цвета горячие, очень горячие, ведь у каждого цвета есть своя температура и она очень высокая.
Читать дальше →
Total votes 192: ↑174 and ↓18+156
Comments65

Интервью с Элоном Маском. Часть 1 — о том, как он хотел стать физиком, но стал предпринимателем

Reading time4 min
Views122K
imageЭлон Маск, основатель и сооснователь таких компаний как PayPal, SpaceX, Tesla Motors, изучал физику в Пенсильванском университете. В первой части интервью, которое Маск дал Элене Левин, колумнистке издания Американского физического общества APT News, он рассказывает о том, как он использует мышление, основанное на принципах, какие преимущества ему дало изучение физики, и о том, почему он с гордостью называет себя нердом.

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

Маск: Физики были вынуждены разработать способ мышления, который позволяет понимать контринтуитивные элементы реальности. Вещи вроде квантовой физики не слишком интуитивны, и чтобы продвигаться в их изучении физики создали методику мышления, которая позволяет получать правильные ответы, даже если они совершенно неочевидны. А это требует огромного умственного напряжения. В повседневной жизни нельзя всё время руководствоваться принципами, это потребует слишком большого расхода умственной энергии. Так что большую часть жизни приходится действовать по аналогии, попросту копируя поведение других людей с минимальными вариациями. Но если вы пытаетесь стать первооткрывателем, изобрести что-то действительно новое, то вам придется перейти к мышлению, основанному на принципах, выявить самые фундаментальные истины в вашей отрасли, и выводить свою мысль из них. Это требует напрячь голову, и я могу привести пару примеров того, как это помогает в ракетостроении.
Читать дальше →
Total votes 102: ↑97 and ↓5+92
Comments17

Моделирование нейросети Машина Больцмана

Reading time7 min
Views44K
Уважаемое хабросообщество, решил поделиться с вами моими наработками в изучении нейросети Машины Больцмана, сделанными в студенческие года.

В России по данной теме было крайне мало информации. Даже руководитель нашей кафедры не мог мне помочь с материалом. Благо наш университет состоял в единой международной базе, и была возможность воспользоваться зарубежным опытом. В частности, большая часть была найдена в литературе оксфордского университета. По сути, данная статья является сборником информации из различных источников, переосмысленная и изложенная достаточно понятным языком, как мне кажется. Надеюсь кому-то будет интересно. Когда-то меня это заставляло не спать ночами.
Итак, приступим.
Читать дальше →
Total votes 35: ↑27 and ↓8+19
Comments10

Нейросеть на практике: Задача коммивояжера

Reading time5 min
Views47K
Добрый день, уважаемые хабропользователи.
Хотел бы поделиться практическим применением одного из алгоритмов нейродинамики, в продолжении моего поста Моделирование нейросети Машина Больцмана.
Реализация на примере решения задачи коммивояжера.
Немного напомню в чем ее суть.
image

Читать дальше →
Total votes 16: ↑13 and ↓3+10
Comments7

Структура белка: введение для айтишников

Reading time17 min
Views155K
Приятно видеть, что хабравчане регулярно интересуется другими предметными областями – например, биологией (более конкретно – структурой и функцией биологических макромолекул). Однако некоторые посты (например, этот), вызывают у специалиста просто физическую боль из-за обилия совершенно диких фактологических ошибок. В этом посте мне хочется рассказать о структуре и функции белка. О том, что мы знаем и о том, чего не знаем, а так же об имеющихся в этой области вычислительных задачах, требующих решения и интересных IT-специалистам. Постараюсь рассказывать сжато и тезисно, чтобы информации было больше, а воды – меньше. Всех, интересующихся структурой белков, прошу под кат, там очень много букв.
Читать дальше →
Total votes 146: ↑145 and ↓1+144
Comments72

Короткометражный мультфильм «Крепость»

Reading time1 min
Views54K


Создатель мультика, Дмитрий Федотов, о себе:
Я компьютерный художник пятнадцатилетней выдержки. Учился в художке, работал там то и там то. В данную минуту работаю инструктором компьютерной графики в компьютерной школе.

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

На его сайте доступны некоторые стадии создания мульта.
Total votes 263: ↑236 and ↓27+209
Comments168

Использование искусственных иммунных систем для решения задачи символьной регрессии

Reading time4 min
Views9K
Доброго времени суток, уважаемое хабро-сообщество!

Представляю на ваш суд статью, написанную по мотивам моей магистерской работы (факультет прикладной математики, информатики и механики Воронежского ГосУниверситета). Ее тема «Применение распределенных искусственных иммунных систем для решения задачи символьной регрессии». Постараюсь коротко (но содержательно) рассмотреть основные понятия искусственных иммунных систем и мой подход к их реализации для решения задачи символьной регрессии – восстановления символьного представления функции по заданному множеству ее значений в некоторых точках. Программа была написана на языке Python (версии 3.3), исходники доступны на Github.
Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments5

Квантовая механика для всех, даром, и пусть никто не уйдёт обиженным: часть вторая

Reading time6 min
Views68K
Здравствуйте! Квантовая механика продолжается во второй части цикла Элиезера Юдковски, и сегодня вы узнаете немного больше о конфигурациях, а также поймёте, почему процесс наблюдения влияет на объект наблюдения. Критики в адрес непонятливого человечества, само собой, тоже будет предостаточно. В общем, не проходите мимо!
Читать дальше →
Total votes 53: ↑45 and ↓8+37
Comments33
1
23 ...

Information

Rating
Does not participate
Location
Westerham, England - London, Великобритания
Date of birth
Registered
Activity