Pull to refresh

Мой open source велосипед

Reading time 4 min
Views 18K
“Воин не бросит начатое.”
Мастер Шифу, м.ф. Кунг-фу Панда


Можно рассматривать этот топик не как технический, а как художественный. Тут не будет кусков кода, диаграмм классов и прочей ерунды. Будет история одного java open source проекта, который я разрабатываю уже около года.

Начало


Все началось, когда я был на четвертом курсе одного провинциального российского университета. С семестра, о котором ходили легенды на моей специальности, как о “семестре-убийце“ с его 55-ю лабораторными работами по графике, компиляторам и вычислительной математике (далее ВМ).

Когда в начале семестра думаешь о предстоящей большой и скучной (а в университетах как правило, все скучно) работе, не редко начинают опускаться руки. К счастью, у меня уже был проверенный временем рецепт “бесконечного энутизиазма”. Смысл его заключался в “бесконечном познании неизвестного” (с) Стругацкие, Понедельник начинается в субботу. Проще говоря, я каждый раз старался хоть как то извратить стандартный учебный процесс, чтобы он стал хоть немного интереснее для меня. Было испробовано большое количество способов — Linux на рабочей машине (с драйверами от ATI), непопулярные в университетских кругах языки (читай не С# и C++) и среды разработки (читай не VS2008), баг-трекеры для заданий, локальные репозитории кода для лабораторных и т.д.

Тогда я и решил начать писать свой open source проект, представляющий собой агрегацию лабораторных работ по курсу ВМ в виде java библиотеки c прозрачным и привычными для java-программистов API.

Я создал проект на Google Code, придумал название библиоткеи и работа началась. Каждая следующая лабораторная по курсу ВМ представляла собой пачку коммитов в репозиторий библиотеки. Это было что-то новое для меня и помогало мне поддерживать энтузиазм на протяжении всего курса.

По окончанию курса la4j (Linear Algebra for Java) доросла до версии 0.0.7 и уже умела работать с векторами и матрицами, решать системы линейных уравнений 6-ю различными способами и находить собственные числа и вектора матриц.

Середина


После окончания курса ВМ я почти не занимался проектом, курс кончился — энтузиазм иссяк. Все изменилось, когда начался новый курс — Шаблоны проектирования.

Этот курс меня невероятно заинтересовал, я даже начал писать об этом цикл статей на Хабрахабре. Но главное тут то, что я осознал все ошибки, которые когда-то совершил в la4j. Терпеть этого я не мог и вооружившись удобными инструментами рефакторинга Eclipse я начал кромсать код. Так получилась версия 0.1.0. Версия, которую уже не стыдно было кому-то показать. Она имела приятный ООП дизайн, небольшой но достаточный функционал. А самое главное — это был результат достаточно большой работы от которой я чувствовал удовлетворение.

Не могу сказать, что до этого этапа я позиционировал la4j как open source проект. Я воспринимал это как свое хобби, как площадку для оттачивания своих знаний и умений. Я просто делал это just for fun.

Потом на какое-то время я снова позабыл про la4j и начал усиленно заниматься рабочими делами, совмещая учебу и работу. Волею судьбы я стал заниматься производительность Java платформы на работе и этот факт заставил меня по-новому взглянуть на вычислительные алгоритмы внутри la4j.

Я попытался применить полученный опыт performance анализа и оптимизаций в la4j. Так родилась статья “История одной оптимизации”, которая вызвала у хабрапользователей большой интерес к моему проекту. В тот момент я получил большое количество отзывов, а самое главное — предложений помощи. Несколько человек изъявили желание помочь мне дальше развивать проект.

Тогда мне казалось, что сейчас все изменится. Люди начнут писать код и полетит куча коммитов в мой репозиторий. Но этого не произошло.

Как минимум пару человек я добавил в проект, рассказал про дальнейшие планы и даже повесил issue на каждого из них с примерной задачей. Сам же я с нетерпением ждал реакции новых участников. К сожалению, так и не дождался. Люди пропали, проект я решил заморозить на неопределенный срок.

Потом, я закончил университет и устроился на постоянную работу. Скажу лишь, что работать мне нравилось намного больше чем учиться. У меня была куча свободного времени, которое я тратил впустую, пытаясь отдохнуть от защиты диплома и марафона длиною в 5 лет.

В сентябре, все студенты начинаю учиться и у меня как у собаки Павлова сработал условный рефлекс — нужно писать лабораторные, учить функциональный анализ и т.п. Тогда я вспомнил про la4j и решил, что должен ее закончить. Закончить не потому, что «решение систем ЛУ — очень важная и актуальная проблема современности», а просто потому что, я когда то это начал и не довел до конца.

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

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

И …

Почти конец


Несколько дней назад, я закончил работу над версией 0.2.0. Было проделано очень много работы, принято много технических и не-очень решений, спроектировано и реализовано 55 классов, написано 6700 строк кода и около 80 jUnit тестов. Надеюсь мой труд не пропадет зря, и станет еще одним удобным инструментом в портфеле любого java-разработчика.

Конец


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

В: “На Java никто вычисления не пишет, закопать!”
О: “Пишут. Более того, еще и не хотят использовать обертки над BLAS из за привязки к нативной платформе”.

В: “Есть же JAMA, зачем еще один велосипед?”
О: а) Потому что он свой. б) JAMA не поддерживает разреженые матрицы. в) JAMA не поддерживает ввод/выввод. в) у JAMA ужасный API. г) у JAMA ужасная производительность.

Ресурсы



UPD: На днях стала доступна версия 0.4.0 (03.06.2013)

UPD: Тихо и незаметно вышла версия 0.4.5 (02.10.2013)
Tags:
Hubs:
+79
Comments 30
Comments Comments 30

Articles