outcoldman
outcoldman Denis Gladkikh

Компоненты: Написать, купить или скачать?

OpenSource, Developing, Libraries, and iTextSharp

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

История

На моих предыдущих работах (российские конторы) мы никогда не покупали готовых компонент, всегда использовали либо opensource, либо просто freeware библиотеки, ну либо самый распространенный вариант - писали сами. Причем, основные движки, на которых разрабатывались приложения – были написаны внутри фирмы, все внешнее – это небольшие компоненты, вроде чтения Excel документов, работа с POP3 и т.п. Мне такой подход нравился, действительно удобно, когда есть возможность оперативно исправить ошибку, и данный подход приносит очень много опыта программистам, так сказать обучаемость на своих ошибках и т.п.. В случае с opensource или freeware компонентами ошибки так же исправлялись достаточно быстро – намекаешь автору о ней, к тому же можно прикрепить пример, или вообще уже готовый bugfix, и ошибка так же будет исправлена достаточно быстро. Авторы своих opensource библиотек, вроде как, стремятся, чтобы эти библиотеки были достаточно хороши, и они хотят, чтобы их детища давали им имя.

Когда я сменил работу в последний раз (теперь я работаю на английскую контору), то все поменялось. Мы даже не используем бесплатные системы контроля версий, вроде SVN, у нас для этого есть Dynamsoft SourceAnywhere Hosted, это SourceSafe, репозиторий у которого хранится где то на серверах Dynamsoft. Представляете перелезть с SVN опять на SourceSafe! Оно понятно, что хорошо, когда не нужно задумываться о бекапах и администрировании баз исходников, но все же есть решения и для SVN и для Git платные и так же на серверах компаний, предоставляющих эти услуги. Правда, мы все ждем перехода на TFS 2010, очень сильно надеюсь, что там будет все лучше, чем в SourceSafe. Покупка хостинга у них видимо было спровоцировано просто тем, что team leader долго работал с подобными системами (типа SourceSafe), и они просто были ему ближе.

Но вернемся к компонентам, у нас сейчас куплено несколько полных комплектов двух небезызвестных фирм Syncfusion и Infragistic. Причем одним пакетом мы вообще больше не пользуемся (Infragistic), второй используем соответственно на 20% (Syncfusion). Разберем на примере: нам нужен экспорт отчетов в PDF. Задача распространённая, и есть хорошие бесплатные решения, вроде того же iTextSharp, и есть контора, которая нам предложила это решение и которое мы используем сейчас – это от Syncfusion. Итак, у нас есть реально большие отчеты (файлы на несколько десятков страниц), раньше они были реализованы на каком-то opensource движке, причем исходники этого opensource движка еще и включили в наш проект (их явно не правили), а реализация была ужасная – практически один метод на несколько десяток тысяч строк(!). Код было невозможно сопровождать, когда я переписывал его, я нашел такое огромное количество ошибок, что у наших менеджеров был шок. Что ж – переписывать генерацию отчетов стали с оберткой над библиотеками Syncfusion, один из отчетов состоял из 30 страниц, 20 из которых состояли из графиков, которые я экспортировал как обычные картинки, опять же при помощи компонент Syncfusion (когда они успевают писать столько функционала?). Очевидно, что картинки для меня лучше всего было хранить в PNG, так как там были четкие контуры, мало градиентов и т.п. (это же графики). PNG формат давал мне очень хорошую степень сжатия: 30 килобайт на картинку со 100% качеством, когда как JPG со 100% - это 200 килобайт, да и качество у него уже немного страдало. Так вот что я заметил, 40 графиков мне давали отчет, примерно, размером в 7 мегабайт, когда как PNG – это 30 килобайт и, умножив на 40, получаем 1200 килобайт. Отправил запрос в Syncfusion с примером, где из картинки в 20 килобайт у меня получался отчет в 200 килобайт. Ответ пришел сразу, но настолько тупой, что показалось, что они просто хотели по-быстрому от меня отделаться, содержание было примерно «мы читаем из PNG файла определенные параметры – из-за этого размер PDF документа увеличивается, если хотите уменьшить размер, поставьте параметр quality у картинки, которую импортируете в отчет равным 70%». Но, я то не дурак, и у меня уже тогда в голове была идея, что, скорее всего, они все изображения, не зависимо от формата, переделывают в JPG, да к тому же нет возможности у PNG выставлять quality. Несколько тестов это подтвердило, и я уже отправил конкретный вопрос с конкретной проблемой: «не зависимо от типа изображения вы всегда его конвертируете в JPG, отсюда и проблема». Ответ, конечно же, был положительный, моя догадка была верной, и решать эту проблему в ближайшем будущем никто не собирается. Вот и все, вот и платные компоненты.

Я уже начал смотреть в сторону iTextSharp, притом все компоненты от Syncfusion у нас использовались через обертку, и мне бы не составило особого труда быстро перевести с одной библиотеки на другую. Но наш team leader против этого (вообще с ним тяжело спорить), он просто не любит opensource библиотеки, говорит, что на них уже не раз обжигался – на что я просто сказал, дай мне другое решение. И знаете что, оказывается у него в Syncfusion есть знакомый, который пропихнул этот issue в следующий релиз, о чем нам сообщили потом. Временным решением я поставил качество в 70%, отчего этот отчет стал весить 2 мегабайта, но качество графиков хромало. Syncfusion решит нашу проблему, надеюсь, через полгода.

Вывод

Я не хочу сказать, что платные компоненты – это всегда плохо. Syncfusion нам с другой стороны очень сильно помог сделать наш продукт в несколько раз быстрее, и другие ошибки исправлялись намного , и ответы мы получали намного вразумительнее, но там ошибки были более явными.

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

Это просто история. ;) Как насчет вас, пользуетесь, покупаете, довольны?

Have feedback or questions? Looking for consultation?

My expertise: MongoDB, ElasticSearch, Splunk, and other databases. Docker, Kubernetes. Logging, Metrics. Performance, memory leaks.

Send me an email to public@denis.gladkikh.email.

The content on this site represents my own personal opinions and thoughts at the time of posting.

Content licensed under the Creative Commons CC BY 4.0.