Все записи автора admin

Фракталы — синтаксический разбор арифметических выражений

Общее описание сайта и математическая теория создания фрактальных изображений здесь.

Одна из основных задач, которые пришлось решить в ходе создания сайта «Fun with Fractals», заключается в следующем:

Задача. На основе понятного для человека описания функции комплексного переменного составить ее представление, позволяющее вычислять ее значения при помощи JavaScript или WebGL.

Читать далее Фракталы — синтаксический разбор арифметических выражений

Фракталы — общее описание

Сайт Fun with Fractals — небольшой проект, наглядно демонстрирующий возможности HTML5 на примере фракталов:

  • элемент HTML5 <canvas> для рисования (<canvas>, HTMLCanvasElement);
  • фоновые потоки выполнения JavaScript для ускорения процесса рисования и избавления от «подвисания» браузера;
  • WebGL для рисования с помощью графического ускорителя вместо JavaScript (значительно быстрее).

В результате получаются достаточно красивые картинки:

Фрактал №1
ссылка на сайт
Фрактал №2
ссылка на сайт
Фрактал №3
ссылка на сайт

Читать далее Фракталы — общее описание

Yii Framework — поддержка нескольких языков в URL

Одной из причин, по которой для реализации программного комплекса я выбрал полноценный веб-фреймворк, стала необходимость поддержки трех языков: русского, украинского и английского. В системах управления содержимым (content management system), таких как Joomla, WordPress или Drupal, для поддержки нескольких языков необходимы сторонние дополнения. В то же время, в современных веб-фреймворках, использующих архитектуру Model — View — Controller, модуль поддержки языков встроен в систему и доступен без каких-либо манипуляций со стороны разработчика.

Поддержка нескольких языков интерфейса присутствует и в выбранном для разработки программного комплекса Yii Framework. С переводом представлений проблем нет; в Yii существуют для него два базовых механизма:

  • при помощи сообщений;
  • путем создания специфичных для языка файлов представлений.

Определенные трудности возникают при настройке преобразования URL. В отличие от некоторых других веб-фреймворков (например, Django), Yii «из коробки» не поддерживает работу с URL на сайтах с несколькими языками. Для того, чтобы устранить этот недостаток, надо рассмотреть, как происходит обработка URL в Yii.

Читать далее Yii Framework — поддержка нескольких языков в URL

Лекция 15. Эволюция ПО

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

Существует несколько причин, по которым эволюция ПО объективно необходима:

  • Несмотря на тестирование и верификацию, всякая программная система содержит определенные дефекты, которые необходимо исправлять для корректной работы.
  • Систему нужно адаптировать к меняющейся среде выполнения (новому оборудованию, вспомогательному программному обеспечению и так далее).
  • Для сохранения заинтересованности пользователей в ПО его функциональность необходимо постоянно расширять.

Презентация: Лекция 15.

Читать далее Лекция 15. Эволюция ПО

Лекция 14. Верификация и валидация

Верификация и валидация — два связанных процесса разработки ПО. Верификация отвечает на вопрос «Правильно ли разрабатывается продукт?» (Are we building the product right?); валидация — на вопрос «Правильный ли продукт разрабатывается?» (Are we building the right product?). Верификация проверяет ПО на соответствие спецификациям, заданным при проектировании; валидация проверяет, соответствует ли продукт ожиданиям заказчика и потребителей. Исходя из определения, тестирование — частный случай валидации.

Презентация: Лекция 14.

Читать далее Лекция 14. Верификация и валидация

Лекция 13. Тестирование ПО

Тестирование — один из основных этапов разработки ПО, решающий две задачи:

  • выяснить, соответствует ли программный продукт ожиданиям заказчика и конечных пользователей (процесс валидации);
  • устранить содержащиеся в программной системе ошибки (поиск дефектов).

В рамках классических моделей жизненного цикла тестирование следует за конструированием. В более современных подходах (например, в гибкой методологии разработки) тестирование происходит одновременно с конструированием; оно помогает уточнить и/или выявить требования к программной системе. Существует даже подход к разработке ПО, при котором тесты пишутся до (а не после) основного кода — test-driven development.

Презентация: Лекция 13.

Читать далее Лекция 13. Тестирование ПО

Программный комплекс по биоинформатике. Сериализация выборок

Для многих алгоритмов комплекса один из сохраняемых параметров — выборка последовательностей скрытых состояний (то есть геном или набор белков); в частности, выборки используются для всех алгоритмов распознавания. Объем информации, соответствующий такой выборке, составляет несколько десятков или даже сотен мегабайтов, так что ее хранение при сериализации алгоритма вызывает определенные трудности. Более того, одна и та же выборка (соответствующая, например, геному какого-то биологического вида) может быть общей для многих алгоритмов.

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

  • файлы, в которых хранятся выборки, можно переносить без потери работоспособности сохраненных данных;
  • одному файлу может соответствовать несколько идентификаторов (например, в целях обратной совместимости).

Логика сериализации выборки не является универсальной: в некоторых случаях (например, если необходимо сохранять результаты работы алгоритма распознавания) имеет смысл все-таки записывать все содержимое выборки. Поэтому в комплексе базовые операции над выборками (выбор строк, объединение, фильтрация и т. п.) реализованы в виде класса SimpleSequenceSet, а функциональность, которая соответствует необычному механизму сериализации, сосредоточена в дочернем классе NamedSequenceSet.

Читать далее Программный комплекс по биоинформатике. Сериализация выборок

Программный комплекс по биоинформатике. Сохранение прогресса алгоритмов

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

  • Алгоритмы распознавания и некоторые вспомогательные алгоритмы (например, алгоритмы отбора предикатов для иерархических композиций) работают достаточно долго (от 10 минут до нескольких часов). Хотелось бы иметь возможность в любой момент прервать работу алгоритма и вернуться к нему позже. (При прерывании выполнения программы пользователем сохранение состояния алгоритма возможно за счет использования Runtime.addShutdownHook.)
  • Во многих случаях имеет ценность информация, связанная с алгоритмом (например, порядок используемой модели для распознавания). Желательно, чтобы эту информацию не требовалось хранить вручную.

Наиболее очевидный способ хранения структурированных данных в Java, который и был использован — сериализация средствами интерфейса java.io.Serializable. У этого метода есть недостатки (например, при изменении структуры наследования класса или его переименовании десериализация перестает работать), но при разумном процессе разработки количество встреч с ними минимально. Более того, разработка с оглядкой на сериализацию побуждает с самого начала создавать правильную иерархию классов и подбирать для классов подходящие поля.

Читать далее Программный комплекс по биоинформатике. Сохранение прогресса алгоритмов

Распознавание на основе скрытых марковских моделей (часть 2)

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

Презентация доклада: Распознавание на основе скрытых марковских моделей (часть 2).

Читать далее Распознавание на основе скрытых марковских моделей (часть 2)

Скрытые марковские модели в биоинформатике

Биоинформатика — применение методов математической статистики и информатики для анализа и обработки биологических данных: последовательностей нуклеотидов (ДНК) и аминокислот (белки).

Одной из основных категорий математических моделей, которые используются для анализа ДНК / генов и белков, являются скрытые марковские модели (СММ). В рамках СММ предполагается, что последовательность наблюдаемых состояний (нуклеотидов или аминокислот) порождается с помощью ненаблюдаемых (скрытых) состояний. Хорошо изученная задача — поиск оптимальной цепочки скрытых состояний по заданной наблюдаемой цепочке — имеет в биоиноформатике большую практическую ценность. В самом деле, если сопоставить скрытые состояния с характеристиками ДНК и белков, которые сложно замерить экспериментально (например, пространственная структура в белках, функциональные участки в генах), то становится возможным предсказывать эти характеристики на основе последовательностей нуклеотидов или аминокислот.

Скрытые марковские модели стали темой моей кандидатской диссертации (Методы распознавания на основе моделей Маркова со скрытыми переменными).

Читать далее Скрытые марковские модели в биоинформатике