В заметке «Можно ли делить на 0,01 ?» на сайте тестировщиков я написал, что при тестировании нужно проверять согласованность валидаторов входных данных с логикой обработки этих данных приложением. Но из комментариев к этой заметке я понял, что для понимания того, как надо тестировать валидацию данных, надо понимать, как она должна работать, что можно считать правильным, а что нет. Поэтому я написал об этом отдельную статью. В ней рассматривается три вопроса: 1) зачем вообще нужна валидация данных, и 2) где и когда может выполняться валидация данных, 3) какие бывают разновидности проверок. Ну и конечно продемонстрировано, как всё это выглядит на живых примерах. А может быть мои рассуждения окажутся интересны не только тестировщикам, но и разработчикам.
Пётр Ерёменко @prg
User
.NET 4.0: что нового в базовых классах (BCL)? Подробный обзор
9 min
3.3KTranslation

Visual Studio 2010 и .NET Framework 4 Beta 2 уже доступны для загрузки. .NET 4 Beta 2 содержит некоторое количество нового функционала и улучшений в базовых классах (BCL) в дополнение к тем, которые мы представили ранее в .NET 4 Beta 1. Многие эти улучшения были произведены благодаря отзывам и рекомендациям от клиентов, полученным через Microsoft Connect.
+38
VS 2010 улучшения в Intellisense
2 min
3.4KTranslation

+23
GPS компонент
1 min
997
GPS.NET прежде всего является коммерческим .NET компонентом, разрабатываемый GeoFrameworks LLC c 2004 года. В 2009 Джон Пирсон решил выложить полный исходный код GPS.NET для публичного использования. Текущая версия продукта 3.0, которая вышла незадолго до публикации на CodePlex. Данный фреймворк предлагает интуитивный GPS функционал в реальном времени, который максимально эффективно работает на любом компьютере, мобильном устройстве и NMEA-совместимыми GPS устройствами.
+6
Построение regexp'a по входным строкам S1..SN
3 min
2KВот совершенно недавно столкнулся с задачкой, по которой не смог накопать не то, чтобы каких либо библиотек, но даже теории или алгоритмов. Т.к. время поджимало, решил сам разбираться с задачей. Написал статью для тех, кто с подобной задачей столкнется в будущем, да и интресна критика. Как бы вы решали подобную задачу?
На входе алгоритма есть набор строк S1..SN. Требуется, по данным строкам построить такое минимальное регулярное выражение R, чтобы R(Si)=true, i [1,N] (N порядка нескольких тысяч).
Требование минимальности — не строгое, и доказывать минимальность построенного regexp'a не требуется. Если строки S1..SN обладают некоторой схожей структурой, то regexp должен выявлять эту структуру. Стандартное задание программисту — в меру конкретизировано, но и с некоторой свободой действий.
Итак, задача ...
На входе алгоритма есть набор строк S1..SN. Требуется, по данным строкам построить такое минимальное регулярное выражение R, чтобы R(Si)=true, i [1,N] (N порядка нескольких тысяч).
Требование минимальности — не строгое, и доказывать минимальность построенного regexp'a не требуется. Если строки S1..SN обладают некоторой схожей структурой, то regexp должен выявлять эту структуру. Стандартное задание программисту — в меру конкретизировано, но и с некоторой свободой действий.
+38
Показать себя
3 min
752Эта заметка должна была стать первой главой книги о веб-разработке, компьютерной графике и дизайне. Вернее, об идеологических моментах работы людей, так или иначе связанных с визуальным сектором информационных технологий. Но я ещё не уверен, что осилю целую книгу в течении хотя бы одного года, поэтому публикую пока как есть. Заодно посмотрю на сколько такой материал будет востребован целевой группой и скорректирую свои планы. А может и вовсе заброшу это дело.
У меня уже заготовлено несколько тем для следующих глав, но с удовольствием прислушаюсь и к пожеланиям читателей.
Ещё с самого юного возраста нам дают понять, что дорогие игрушки, бутерброды с чёрной икрой и золотые цепи на шее бывают только у детей богатых родителей. Но раз уж нам не повезло, — или повезло, ну и что с того, — придётся дорасти до права называться богатыми родителями самим. И тогда уже покупать дорогие игрушки за свои деньги.
Нам предлагают три сценария на выбор и как перед Ильями Муровцами рисуют три дорожки с указателями — «Выиграть миллион в лотерею», «Украсть», «Заработать тяжким трудом». Из зала подсказывают, что нужно заработать.
У меня уже заготовлено несколько тем для следующих глав, но с удовольствием прислушаюсь и к пожеланиям читателей.

Ещё с самого юного возраста нам дают понять, что дорогие игрушки, бутерброды с чёрной икрой и золотые цепи на шее бывают только у детей богатых родителей. Но раз уж нам не повезло, — или повезло, ну и что с того, — придётся дорасти до права называться богатыми родителями самим. И тогда уже покупать дорогие игрушки за свои деньги.
Нам предлагают три сценария на выбор и как перед Ильями Муровцами рисуют три дорожки с указателями — «Выиграть миллион в лотерею», «Украсть», «Заработать тяжким трудом». Из зала подсказывают, что нужно заработать.
+29
Пишем статью
3 min
2.1KВ продолжение темы habrahabr.ru/blogs/study/41589
Курсивом — то, что надо изменить в вашей статье.
// комментарии
Научная статья
Курсивом — то, что надо изменить в вашей статье.
// комментарии
Научная статья
+36
Дело о потерянных строках в DataView
3 min
2KОтлаживая WPF-ный редактор для таблицы БД, столкнулся с Exception-ом при переходе между соседними ячейками с помощью клавиатуры.
Казалось бы, обычное дело — кто из нас эксепшенов не нюхал? Да и компонент DataGrid из WPF Toolkit весьма экспериментальный, так что удивляться нечему. Однако, кое-что меня насторожило.
Казалось бы, обычное дело — кто из нас эксепшенов не нюхал? Да и компонент DataGrid из WPF Toolkit весьма экспериментальный, так что удивляться нечему. Однако, кое-что меня насторожило.
+27
Как написать компонент к Firefox на C++
5 min
3.6KКак написать на C++ компонент для Firefox, так, чтобы его потом можно было использовать из яваскриптового extension или даже из обычной веб-страницы.
+34
Начало научной карьеры (часть 3)
4 min
8.4KРазобравшись с высшим образованием в виде бакалавриата и магистратуры, можно перейти к первому шагу на пути к настоящей научной карьере — к поступлению в аспирантуру.
Для начала необходимо пояснить, что отношение к аспирантуре в России и за границей немного отличается.
В России аспирантуру нередко рассматривают как своего рода «совсем высшее» образование, иметь которое престижно, но которое автоматически не наделяет человека статусом учёного. Соответственно, далеко не все закончившие российскую аспирантуру люди идут в университеты. Весьма немало выпускников уходит в фирмы или ещё куда-нибудь за пределы лабораторий.
На Западе для трудоустройства «в миру» практически всегда достаточно бакалаврского, максимум, магистерского образования. Законченная аспирантура требуется исключительно в научной карьере (либо в тех редких случаях, когда частная фирма реально занимается какой-либо исследовательской деятельностью).
Для начала необходимо пояснить, что отношение к аспирантуре в России и за границей немного отличается.
В России аспирантуру нередко рассматривают как своего рода «совсем высшее» образование, иметь которое престижно, но которое автоматически не наделяет человека статусом учёного. Соответственно, далеко не все закончившие российскую аспирантуру люди идут в университеты. Весьма немало выпускников уходит в фирмы или ещё куда-нибудь за пределы лабораторий.
На Западе для трудоустройства «в миру» практически всегда достаточно бакалаврского, максимум, магистерского образования. Законченная аспирантура требуется исключительно в научной карьере (либо в тех редких случаях, когда частная фирма реально занимается какой-либо исследовательской деятельностью).
+59
Методы защиты веб-формы без капчи
3 min
62KО чём речь?
В последнее время на Хабре было предложено довольно много идей для капчи. Сложная, умная, смешная, капча остаётся одним из основных способов защиты формы от ботов.
Однако, одновременно с этим, капча является проблемой юзабилити, поскольку заставляет пользователя выполнять лишнее действие.
В этом обзорном посте я бы хотел рассмотреть незаметные для пользователя методы защиты от ботов.
Методы защиты
+109
Компилятор выражений
12 min
19KНедавно у меня возникла необходимость в вычислении выражений. Выражение представлено в виде строки и может содержать имена переменных, целые числа, строковые константы и любые операции над ними.
Пример:
выражение: «x + 10 == 5 * y / (1 + z*2)»;
требуется уметь вычислять это выражение для любых значений x, y и z.
И конечно при этом надо учитывать приоритеты операторов.
Для решения нужно сделать компилятор, который по строке строит объект «Вычислимое Выражение». У этого объекта будет метод «вычислить для данных значений переменных».
Решение на Java, но может быть легко переведено на другие языки.
Пример:
выражение: «x + 10 == 5 * y / (1 + z*2)»;
требуется уметь вычислять это выражение для любых значений x, y и z.
И конечно при этом надо учитывать приоритеты операторов.
Для решения нужно сделать компилятор, который по строке строит объект «Вычислимое Выражение». У этого объекта будет метод «вычислить для данных значений переменных».
Решение на Java, но может быть легко переведено на другие языки.
+33
Парсер математических выражений
5 min
48KСпасибо всем! Статья набрала необходимое число плюсов и автор к нам присоединяется! Вот и он: elw00d
Представляю вниманию товарищей-дотнетчиков библиотечку собственного написания, с помощью которой можно легко обращаться с несложными математическими функциями, переводя их из строковой формы инфиксной записи в обработанное представление, составленное в постфиксной нотации, и обратно. Для чего это может понадобиться?
К примеру, можно написать приложение, которое принимает ввод функции пользователем в виде строки, анализирует корректность синтаксиса, вычисляет его значение в указанных точках, оптимизирует введенное выражение, минимизируя количество операций, требуемых для вычисления, и может выдавать результат в виде строки, представляющей собой корректное строковое представление оптимизированной функции. В качестве конкретных применений можно отметить различные специализированные калькуляторы (в том числе, построенные наподобие программируемых), приложения, используемые для построения графиков или других отчетов, требующие задания начальных функций, или как оригинальное средство для построения защиты от спама / автоматических регистраций.
Представляю вниманию товарищей-дотнетчиков библиотечку собственного написания, с помощью которой можно легко обращаться с несложными математическими функциями, переводя их из строковой формы инфиксной записи в обработанное представление, составленное в постфиксной нотации, и обратно. Для чего это может понадобиться?
К примеру, можно написать приложение, которое принимает ввод функции пользователем в виде строки, анализирует корректность синтаксиса, вычисляет его значение в указанных точках, оптимизирует введенное выражение, минимизируя количество операций, требуемых для вычисления, и может выдавать результат в виде строки, представляющей собой корректное строковое представление оптимизированной функции. В качестве конкретных применений можно отметить различные специализированные калькуляторы (в том числе, построенные наподобие программируемых), приложения, используемые для построения графиков или других отчетов, требующие задания начальных функций, или как оригинальное средство для построения защиты от спама / автоматических регистраций.
+74
Тривиальные задачи по вёрстке
4 min
60K
+228
Кунг-фу поддержки проектов
3 min
1.5KНаверно каждому из программистов приходилось сталкиваться на новом или на не новом месте работы с необходимостью поддерживать «чужой» проект.
Программисту удается написать код компилилируемый или интерепретиуемый, но не каждому понятный.
Все реагируют на «чужой» код по разному. Одних бросает в холодный пот, другие стиснув зубы разбираются. Так получилось, что я наблюдал этот процесс изнутри, как сторонний наблюдатель, как team leader и как специалист передающий свой код «новичку»
Программисту удается написать код компилилируемый или интерепретиуемый, но не каждому понятный.
Все реагируют на «чужой» код по разному. Одних бросает в холодный пот, другие стиснув зубы разбираются. Так получилось, что я наблюдал этот процесс изнутри, как сторонний наблюдатель, как team leader и как специалист передающий свой код «новичку»
+48
Огнелис в роли сервера разработки
2 min
692Прочитал только что статью про пример использования telnet-сервера в firefox и наткнулся на комментарий пользователя @merlin_rterm, который упомянул про расширение POW, или Plain Old Webserver. Данное расширение позволяет запускать серверные скрипты средствами огнелиса. Далее опишу как настроить огнелис для работы с PHP и SQLite под Ubuntu. Думаю, что под Mac и Windows инструкция не будет сильно отличаться.
+28
Subversion: cлияние переименований файлов
3 min
3.5K— Зачем ты, Белка, летишь за мной, Кабаном?
— Не знаю, Кабан! Приказ Хорька. Как понял? Приём.
— Ни хера не понял! Какого Хорька, Белка? Я Кабан. Кто такой Хорёк? Кто это? Приём.
— Кабан, ты дятел! Как понял? Приём.
— Понял тебя, Белка. Я — Дятел. Повторяю вопрос про хорька. Кто это?
— Кабан, сука, ты всех заманал, лети вперёд молча! Конец связи.
Виктор Шендерович
Как известно, Subversion не умеет отслеживать переименования файлов. Согласно документации, команда
svn move
равносильна svn copy
с последующим svn delete
. Такое поведение вызывает большие проблемы при слиянии веток. Рассмотрим способы их решения.+49
Оптимизация процесса создания unit-тестов
6 min
4.8KВсем привет! Хабраюзер shai_xylyd написал статью про аспекты тестирования, где им были рассмотрены некоторые понятия и ценности TDD. В частности, он упомянул очень интересный способ создания первичных юнит-тестов — когда функциональный код пишется совместно с кодом юнит-теста, чем меня очень заинтриговал.
Дело в том, что я (как программист), нахожусь в состоянии переходного процесса между «классической» разработкой и разработкой test-driven, поэтому всякими способами ищу возможности упростить и сделать более естественной последнюю. После пары приседаний, сразу включиться в методику shai_xylyd не сумел. Начал переписку с автором статьи, где он натолкнул меня на мысль подойти к решению с математической точки зрения. Идея в том, чтобы воспользоваться функциональным пространством среды программирования и «разложить» написание юнит-теста на составляющие. После чего сделать выводы.
Дело в том, что я (как программист), нахожусь в состоянии переходного процесса между «классической» разработкой и разработкой test-driven, поэтому всякими способами ищу возможности упростить и сделать более естественной последнюю. После пары приседаний, сразу включиться в методику shai_xylyd не сумел. Начал переписку с автором статьи, где он натолкнул меня на мысль подойти к решению с математической точки зрения. Идея в том, чтобы воспользоваться функциональным пространством среды программирования и «разложить» написание юнит-теста на составляющие. После чего сделать выводы.
+14
Непопулярные аспекты тестирования
5 min
2.6KНепопулярные аспекты тестирования
Каждый разработчик знает, что писать тесты это правильно, часть разработчиков знает это на своем опыте, другая из книг тех программистов, которые знают это на личном опыте и умеют продавать свои книги. Писать книги я не умею, да и опыта мало, но поделиться некоторыми аспектами использования unit тестов я могу. Ниже, я постараюсь поменьше упоминать прописные истины, но побольше оригинальных мыслей. Все размышления не привязаны к какому либо языку или фреймворку, поэтому эта статья может быть полезна широкой аудитории разработчиков.
+37
Кузявые ли бутявки, т.е. пишем морфологический анализатор на Python
8 min
54KМорфологический анализатор для русского языка — это что-то заумное? Программа, которая приводит слово к начальной форме, определяет падеж, находит словоформы — непонятно, как и подступиться? А на самом деле все не так и сложно. В статье — как я писал аналог mystem, lemmatizer и phpmorphy на Python, и что из этого получилось.
+103
Information
- Rating
- Does not participate
- Location
- Бишкек, Кыргызстан, Кыргызстан
- Date of birth
- Registered
- Activity