Планы на ближайшее будущее

Планы на ближайшее будущее

Давно не отчитывался по проектам, хотя за последние месяцы произошло довольно много интересного. Во-первых, я обзавелся новым, более мощным ноутбуком, который отлично тянет Dagon, так что отныне смогу работать над движком гораздо больше. Во время установки софта приятной неожиданностью стало то, что последние версии DMD из коробки линкуют 64-битные приложения под Windows в релизном режиме (dub build –build=release) без необходимости установки Visual Studio. Используется линкер LLD из состава LLVM и набор 64-битных библиотек из MinGW. Наконец-то эта позорная зависимость от продуктов MS устранена, и DMD можно считать полностью самодостаточным тулчейном!

Во-вторых, я вернулся к разработке dlib. В планах сейчас – чистка кода от устаревших и неиспользуемых модулей (подробности в Issues), завершение рефакторинга, связанного с ручным управлением памятью, и реализация пула потоков.

Что касается Dagon, то в настоящее время я работаю над новой системой шейдеров, которая в версии 0.9 заменит старый подход с абстрактными бэкендами материалов, значительно упростит создание новых шейдеров и передачу uniform-параметров. Состоится переход с GLSL 3.30 на 4.00, в убершейдерах будут задействованы шейдерные подпрограммы вместо ветвления. Также все шейдеры будут вынесены из D-кода в отдельные файлы, внедряемые на этапе компиляции, что упростит их отладку. На новую систему уже портирован forward-пайплайн. Вы можете следить за этой работой в ветке smartshader. В остальном разработка нового рендера практически завершена, и я надеюсь выпустить 0.9 до конца года.
Между тем, ветка 0.8 также была обновлена для совместимости со свежими версиями DMD и старыми версиями SDL и Freetype – см. Dagon 0.8.3 и dev_0.8.

Веб-мусор

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

  • Реклама по площади больше, чем полезный контент, а также перекрывающая или блокирующая контент. И еще любая реклама со звуком, самопроизвольное перенаправление по партнерским ссылкам и открытие дополнительных вкладок/окон с рекламой.
  • Блокировка доступа к сайту при включенном Адблоке. Я еще не решил, полезен ли для меня ваш сайт, а вы уже хотите на мне заработать? Если реклама для вас жизненно важна, просто культурно сообщите об этом, и я отключу блокировщик рекламы – после того, как прочитаю то, что мне было нужно. Но если вы мне сразу не дадите это сделать, то я просто уйду и больше не вернусь.
  • Навязчивые всплывающие сообщения и модальные окна, а также любые посторонние элементы, самопроизвольно блокирующие или мешающие видеть контент – подписка в соцсетях, опросы и т.д. Если я захочу подписаться на вашу страницу в соцсети или пройти опрос, я это сделаю без вашего напоминания.
  • Блокировка копирования текста или правого клика на изображениях. Напрасно стараетесь – все равно и текст, и изображения легко вытащить из HTML. За кого вы принимаете своих посетителей, за полных идиотов?
  • Требование ввести капчу просто для доступа к сайту (не для регистрации или авторизации).
  • Игнорирование HTML5 (верстка, целиком выполненная на Flash, видео или аудио на Flash).
  • Автоматически воспроизводящаяся фоновая музыка, особенно если она не выключается.
  • Атоматически запускающееся видео – это даже хуже музыки, но, увы, в последнее время куда популярнее.
  • Тексты не в UTF-8. Я этих ужасов с кодировками наелся в нулевые.
  • DRM в любой форме. Если я не смогу скачать ваше аудио или видео и посмотреть его локально своим плеером (так, как удобно мне), то не обессудьте – пойду в другое место.
  • Бесконечные ленты, которые рано или поздно начинают подвешивать браузер. Пожалуйста, разбивайте длинные ленты на страницы.
  • Регистрация по номеру телефона, если это не мессенджер (хотя мне и в мессенджерах это не нравится), а также необоснованное требование при регистрации предоставить конфиденциальную информацию (полное имя, адрес проживания, паспортные данные и т.д).
  • Блокировка доступа к сайту из старых или малоизвестных браузеров. Не вам решать за меня, каким браузером пользоваться – могу вообще свой HTTP-клиент написать.
  • Черные списки IP, блокировка выходных узлов TOR и браузерных прокси.
  • Большие файлы без возможности докачки.

dlib 0.14.0

На днях состоялся очередной релиз библиотеки dlib – 0.14.0. Из основных нововведений отмечу следующее:

  • SuperImage.pixelFormat теперь возвращает значение типа uint. Это было сделано для того, чтобы можно было расширять dlib.image новыми пиксельными форматами. Значения от 0 до 255 зарезервированы для dlib и используются в стандартных константах PixelFormat. Вместо PixelFormat.RGBA_FLOAT рекомендуется использовать FloatPixelFormat.RGBAF32 из dlib.image.hdri, поскольку в будущем будут добавлены новые float-форматы.
  • Реализовано сохранение изображений в формат Radiance HDR/RGBE (ранее была доступна только загрузка).
  • Добавлены новые фильтры: dlib.image.filters.histogram, dlib.image.filters.binarization.
  • Добавлен новый tonemapper – hdrTonemapACES.
  • Улучшен dlib.image.canvas. Растеризатор фигур Безье теперь поддерживает антиалиасинг (ранее антиалиасинг осуществлялся путем растеризации псевдоконтура алгоритмом Ву). Исправлен баг с рендерингом на неквадратных холстах.
  • В dlib.audio.synth добавлен объектно-ориентированный фреймворк для создания звуковых синтезаторов. Доступны три встроенных синтезатора: SineWaveSynth, SquareWaveSynth, FMSynth. Для рендеринга звука с произвольным синтезатором есть две функции – fillSynth и mixSynth.
  • Добавлен модуль dlib.math.smoothstep с реализациями сигмоид: hermiteSmoothstep, rationalSmoothstep.
  • Добавлена поддержка DMD 2.081.0 в dlib.core.stream.

Важно: начиная с 0.14.0, dlib не поддерживает macOS. О причинах этого бойкота я ранее высказывался в блоге. Скорее всего, функциональность, основанная на POSIX, продолжит работать нормально, но никаких гарантий на будущее нет, и проблемами совместимости с macOS, если они возникнут, я заниматься не буду. Непрерывная интеграция для macOS на Travis также была остановлена. В общем, рекомендую перейти на Linux, FreeBSD или Windows.

P.S. На сайте LightHouse Software за последние месяцы вышли две мои новые статьи:

Хочу также отметить статью aquaratixc Бинаризация методом Оцу в dlib, код из которой вошел в состав dlib 0.14.0.

P.P.S. К сожалению, пока не могу сказать, когда выйдет новая версия Dagon с отложенным рендером. Очень многое еще нужно дописать и реализовать. Но по завершении работы над Dagon 0.9 я планирую перевести на него Atrium, так что самое интересное только начинается.

Мысли о freeware

Будучи убежденным сторонником СПО, я часто задумываюсь, почему до сих пор существуют закрытые бесплатные программы (freeware)? В чем, как говорится, прикол? Их все еще очень много, и авторы даже не планируют их открывать. Я могу понять крупные компании, вложившие в свои коммерческие продукты миллионы долларов, но никогда не пойму энтузиастов, которые боятся выкладывать исходники своих персональных проектов.

Мне встречалось множество разных взглядов на этот вопрос, но все они сводятся к следующим основным пунктам:

1. Нежелание потерять контроль над проектом. Совершенно иррациональный страх – хотя бы потому что таких прецедентов попросту не было. Да, были случаи, когда форк становился популярнее оригинала, но еще ни разу никто не отбирал у изначального автора право развивать его детище так, как он хочет. Как он может “потерять контроль”? Эту мантру повторяют многие, но в ней нет и капли смысла. То, что под ней подразумевается – появление в одночасье сотен форков, несовместимых между собой – не более чем продукт чьей-то больной фантазии. В реальности же никто ничего не форкает без серьезной на то причины. Да, СПО – это анархия, где все делают, что хотят. Но это анархия разумных и опытных людей, и их суммарные усилия дают положительный результат, а не ноль. В противном случае движение СПО давно бы уже заглохло.

2. Страх оказаться обокраденным. Вторая по популярности фобия – многие боятся, что кто-то украдет их исходники, скомпилирует и будет продавать за деньги. Это теоретически возможно, но дело в том, что в случае со свободным ПО понятие кражи кода лишается всякого смысла – все свободные лицензии разрешают коммерческое использование, иначе они не были бы свободными. Вообще я бы не бросался словом “украсть” применительно к нематериальным объектам. К апологетам этого слова у меня много риторических вопросов. Как можно украсть то, что доступно всем? Кто станет покупать то, что в другом месте раздается бесплатно? Если вы считаете, что вашу программу будут покупать под чужим брендом, почему вы сами ее не продаете? Если вы не ведете бизнес, то почему беспокоитесь о недополученной прибыли? И так далее, и тому подобное… И я уже молчу о том, что открытие исходников никоим образом не мешает продавать программу – если хотите извлекать прибыль, можете, например, продавать бинарники.

3. Страх потерять репутацию из-за действий злоумышленников. Кто-то может взять ваши исходники, встроить вирусы-шпионы-бэкдоры, выдать за оригинал и наживаться на несчастных, ничего не подозревающих пользователях, а обвинять будут вас. Звучит пугающе, но, опять-таки, начисто лишено рационального зерна. Вы всегда можете (и должны) дать понять пользователям, где именно находится официальный источник сборок, чтобы скачивали только оттуда (а из других источников – на свой страх и риск). И вы никоим образом не отвечаете за чужие деструктивные действия с вашим кодом – вы даже не отвечаете за корректную и безопасную работу оригинального кода, потому что любой свободный софт распространяется без каких бы то ни было гарантий.

4. Ну и, наконец, то, в чем не каждый признается – нежелание показывать публике свой быдлокод. Могу сказать честно – чужой код мало кто читает, каким бы классным он ни был. Обычно это нужно для исправления багов, во всех остальных случаях люди просто компилируют исходники или копипастят отдельные компоненты, не вникая в детали. Поэтому большая часть программ представляет собой уродливых нечитаемых монстров, и с этим все давно смирились. Конечно, бывает и такой код, который можно смело в рамочке на стенку вешать – читаемый, лаконичный, красивый – но такой встречается очень редко.
Тот, кто все-таки захочет разобраться в вашем коде, вряд ли будет вас публично высмеивать – если, конечно, вы сами не попросите критики. Творчество есть творчество – любой имеет на него право, и никто из нас не идеален. Если вы не публикуете код только из страха критики, то я вас уверяю – бояться абсолютно нечего. Напротив, открытие плохого кода может стать важным шагом на пути саморазвития.

Я, конечно, уважаю авторское право и не считаю, что мне кто-то что-то должен. Открывать или не открывать код – личное дело автора. Есть много закрытых программ с солидным сообществом, и может показаться, что в исходниках там никто особо и не нуждается, пока автор регулярно выпускает релизы и исправляет баги. Но я должен предупредить: стоит автору потерять интерес, как сказка закончится. Поскольку программа бесплатна, у автора нет перед вами никаких обязательств, и вы останетесь с носом. Я видел десятки таких примеров, и в том числе среди коммерческих продуктов.
Никогда не стоит забывать Столлмана: используя закрытые программы, вы становитесь зависимым и беспомощным. Поэтому я предостерегаю от использования freeware – лучше отдайте предпочтение СПО.