Как стать автором
Обновить
94
0
Никита Гришин @Mgrin

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

Отправить сообщение

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

Время на прочтение12 мин
Количество просмотров22K
Каждый программист неоднократно сталкивался с необходимостью проверки пользовательского ввода. Занимаясь веб-разработкой уже более 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 не пишем — фидбек по ней дать не могу). Валидатор используется в продакшене уже несколько лет практически в каждом проекте компании. Валидатор работает, как на сервере, так и на клиенте.
Читать дальше →
Всего голосов 32: ↑30 и ↓2+28
Комментарии71

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

Время на прочтение7 мин
Количество просмотров97K


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

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

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

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

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

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

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

Время на прочтение7 мин
Количество просмотров401K

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



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






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




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


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

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



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

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

Время на прочтение16 мин
Количество просмотров380K
У хорошего интерфейса пользователя высокая конверсия и его просто использовать. То есть, он хорош и для бизнеса, и для использующих его людей. Вот список опробованных нами идей.

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


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

image
Читать дальше →
Всего голосов 226: ↑182 и ↓44+138
Комментарии102

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

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

Читать дальше →
Всего голосов 20: ↑10 и ↓100
Комментарии14

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

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

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

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

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

Время на прочтение15 мин
Количество просмотров50K
Этот пост выходит за рамки повседневного использования объектов в JavaScript. Основы работы с объектами по большей части так же просты, как использование JSON-нотации. Тем не менее, JavaScript дает возможность использовать тонкий инструментарий, с помощью которого можно создавать объекты некоторыми интересными и полезными способами и который теперь доступен в последних версиях современных браузеров.
Читать дальше →
Всего голосов 60: ↑56 и ↓4+52
Комментарии29

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

Время на прочтение7 мин
Количество просмотров20K
При разработке приложений я заметил, что каждый раз, когда мне приходилось сталкиваться с решением похожих задач (реализовывать работу с http, json, multithreading и т.п.), приходилось делать одну и туже роботу, причем на это уходило много времени. Поначалу это было не критично, но в больших проектах занимало слишком много времени. Чтобы сэкономить свое и ваше время, решил написать универсальное решение для этих задач, которым и хочу поделиться с сообществом.
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии36

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

Время на прочтение7 мин
Количество просмотров49K


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

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

Время на прочтение5 мин
Количество просмотров83K
imageЭто вторая часть интервью Элона Маска Элене Левин, колумнистке издания Американского физического общества APT News. Первая часть была опубликована вчера.

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

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

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

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

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

Время на прочтение10 мин
Количество просмотров376K
image
По нашим психологическим ощущениям цвета бывают тёплыми и горячими, бывают холодными и очень холодными. На самом деле все цвета горячие, очень горячие, ведь у каждого цвета есть своя температура и она очень высокая.
Читать дальше →
Всего голосов 192: ↑174 и ↓18+156
Комментарии65

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

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

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

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

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

Время на прочтение7 мин
Количество просмотров44K
Уважаемое хабросообщество, решил поделиться с вами моими наработками в изучении нейросети Машины Больцмана, сделанными в студенческие года.

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

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

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

Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Комментарии7

О белках и сложных сетях

Время на прочтение3 мин
Количество просмотров5.2K
Вдогонку к посту о белках попробую рассказать о, казалось бы, такой несвязанной с биологией темой как сложные сети (complex networks).
Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии7

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

Время на прочтение17 мин
Количество просмотров155K
Приятно видеть, что хабравчане регулярно интересуется другими предметными областями – например, биологией (более конкретно – структурой и функцией биологических макромолекул). Однако некоторые посты (например, этот), вызывают у специалиста просто физическую боль из-за обилия совершенно диких фактологических ошибок. В этом посте мне хочется рассказать о структуре и функции белка. О том, что мы знаем и о том, чего не знаем, а так же об имеющихся в этой области вычислительных задачах, требующих решения и интересных IT-специалистам. Постараюсь рассказывать сжато и тезисно, чтобы информации было больше, а воды – меньше. Всех, интересующихся структурой белков, прошу под кат, там очень много букв.
Читать дальше →
Всего голосов 146: ↑145 и ↓1+144
Комментарии72

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

Время на прочтение1 мин
Количество просмотров54K


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

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

На его сайте доступны некоторые стадии создания мульта.
Всего голосов 263: ↑236 и ↓27+209
Комментарии168

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

Время на прочтение4 мин
Количество просмотров9.1K
Доброго времени суток, уважаемое хабро-сообщество!

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

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

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

Информация

В рейтинге
Не участвует
Откуда
Westerham, England - London, Великобритания
Дата рождения
Зарегистрирован
Активность