Из нас растили проектировщиков информационных систем. Мы делали все работы, начиная от сбора бизнес требований и заканчивая разработкой схем БД.
Одна из моих курсовых работ была связана с научной разработкой нашей кафедры ИТ. В общем наш заведующий кафедрой придумал, как оценивать знания не с помощью тестов, а с помощью понятийных структур.
Суть метода была в том, что студент должен был оценить свои знания каждого термина из набора. Оценка от 1 до 10. Система ставила оценку студенту на основе распределения его оценок. Предполагалось, что сложные понятия должны оцениваться студентом ниже, а простые - выше. Система использовала базу тестов и сравнивала распределение оценок, которые поставил студент, с идеальными распределениями человека, который очень хорошо разбирался в теме.
Я писал программу, которая позволяла упростить подготовку таких понятийных структур.
Дело в том, что система имела защиту от списывания, и каждому студенту выдавался свой набор понятий. Списки понятий могли пересекаться, но незначительно.
И вот моя программа должна была определять степень похожести двух понятийных структур (списков понятий).
Тогда ещё не было NLU, Python, Elastic search и прочих современных штук.
Я использовал среду разработки Borland Delphi (про лицензию не спрашивайте). Программа имела простой интерфейс в виде 2 окон. В каждый из окон можно было загрузить Excel файл со списком понятий.
Казалось, что задача будет простой. Нужно просто пробежаться по одному списку и каждое понятие сравнить со всеми понятиями второго списка, и таким образом найти одинаковые понятия. Далее просто посчитать долю пересечений.
Однако в процессе написания программы выяснилась одна сложность, которая поменяла всё.
Дело в том, что понятия могли иметь одинаковую семантику, но отличаться окончаниями.
Например:
ER-схема базы данных
ER-схемы баз данных
Существовали ли тогда морферы? Не знаю. Это был примерно 2008 и что-то мне подсказывает...
Я купил очередную карточку интернета, соскарябал защитный слой, прослушал всю композицию «Писк-треск» моего модема и начал искать решение в интернете.
И нашёл!
Это был MS SQL Server с компонентом FullText Search. К тому же бесплатная версия!
Мне пришлось разобраться с клиент-серверной архитектурой, развёртыванием MS SQL Server в локальной сети, драйверами ODBC и OLE DB и самим FullText Search.
Интересно, что тогда были популярны оффлайн базы знаний в виде наборов связанных CHM-файлов. Оттуда я почерпнул много информации.
В конце-концов прога была готова.
Для меня это было прямо «Ваааау». Моя прога - тонкий клиент (!), коннектится к настоящему MS SQL Server (!) через локальную сеть универа (!), использует нечёткое сравнение строк (!) и реально работает!
Но не обошлось без кастылей!
Итак, самое интересное.
Чтобы воспользоваться FullText Search, нужно было сначала загрузить понятийные структуры во временные таблицы БД, затем создать индекс и только после этого отправлять запросы на сравнение строк.
И вот именно с индексом у нас и не заладились отношения. Я отправлял запрос на создание индекса, запрос запускался, но индекс создавался каждый раз за разное время. В моей программе была кнопка «Сравнить», и если она нажималась до окончания создания индекса, то сравнение списков не происходило.
В идеале, пока индекс ещё не был создан, нужно было дизейблить кнопку «Сравнить».
Но я никак не мог понять, как мне отловить событие успешного создания индекса. В справке не было информации, на кафедре тоже никто не горел желанием помочь.
Поэтому я сделал поистине элегантное решение. Я написал в интерфейсе своей программы, что кнопку «Сравнить» нужно нажимать несколько раз

Да-да, о хранимых процедурах я тогда ещё не знал.
Этот опыт позволил мне узнать одну важную вещь о себе: я могу разобраться с нуля даже в самых сложных темах. И даже при наличии серьёзных преград я могу найти обходной путь. Пусть и не совершенный.
Далее в моей жизни было ещё много интересных проектов. Например, я написал программу по расчёту числа операторов для колл-центра. Программа базировалась на математике Марковских цепей.
И она до сих пор жива!
Вот как она выглядит:
Мне удалось сохранить интерес к программингу по сегодняшний день. Сейчас мне интересна nocode-разработка Android-приложений, но это совсем другая история!..
Для того, чтобы оставлять комментарии, необходимо пройти авторизацию
Авторизоваться