воскресенье, 23 июля 2017 г.

Инструментарий C++-программиста

Юрий “yurembo” Язев

Интегрированная среда Visual Studio содержит исчерпывающий набор инструментов для разработки различных приложений под популярные настольные, серверные и мобильные платформы. Не только Windows, но и macOS, iOS, Linux, Android. И это прекрасно на самом деле!

Между тем, есть ряд задач, которые Visual Studio не охватывает или решает не очень хорошо. В то же время, для каждой из них есть решение от третьих разработчиков. Я составил джентельменский набор C++-разработчика, в результате использования которого совместно с Visual Studio, на мой взгляд, делает программирование на этом языке продуктивнее, приятнее и менее трудозатратным.

1. У JetBrains есть ReShaper C++, его стоимость составляет $199 в год. С другой стороны, у Whole Tomato  есть Visual Assist стоимостью $99 на все время. Предлагаю остановиться на втором. Visual Assist представляет собой плагин для студии. Он значительно расширяет работу IntelliSense, проводит статический анализ кода, тем самым позволяет выявлять орфографические ошибки до непосредственной компиляции, осуществляет подсветку синтаксиса, расширяет средства форматирования, поиска, переименования. Также он добавляет возможность оптимизации и генерации кода. Предоставляет средства рефакторинга (выделение кода в метод, etc.). Данная тулза оптимизируют процесс кодинга, делает его приятнее, избавляя программиста от многих головняков.

2. Когда программируешь на C++, необходимо следить за указателями во избежание появления утечек памяти. С умными указателями ситуация значительно упростилась, однако проблема не исчерпана. Для обнаружения утечек памяти можно воспользоваться средствами, предлагаемыми разработчиками процессоров: Intel, AMD. Они, особенно первая, предлагают широкий ряд средств. В некоторых случаях они платные. И во всех случаях сложные в использовании. А нам нужна тулза, которую можно юзать, не покидая студию. На самом деле, Visual Studio предоставляет средство для поиска утечек памяти, но оно неудобно в использовании и недостаточно информативно. Для исправления этих невзгод можно воспользоваться свободной утилитой Visual Leak Detector (VLD). Для его использования надо в Visual Studio указать на библиотечный и заголовочный файлы: <vld.h>. В конце выполнения программы под отладчиком Visual C++, VLD выведет отчет по всем обнаруженным утечкам памяти вместе с номерами строк, где они были выявлены. Кроме того, VLD можно установить с помощью NuGet.

3. Разработка, основанная на тестах (TDD), становится предпочтительным (если не основным) методом разработки программного обеспечения. Почему так произошло и что такое TDD – тема отдельного разговора. Для покрытия тестами C++-кода имеется довольно много фреймворков. Среди них: CppUtest, CppUnit и другие. Между тем, самым удобным и содержащим наибольшее количество полезных средств я считаю GoogleTest. Можно скачать с GitHub’а и установить самостоятельно, предварительно построив фреймворк из исходников. А можно воспользоваться тулзой Extension and Update, входящей в Visual Studio, которая автоматом подключит фреймворк к открытому проекту.

4. Если в качестве системы контроля версий ты используешь GitHub, то, чтобы, не выходя из студии коммитить изменения (и осуществлять другие операции с кодом), рекомендую установить свободную тулзу GitExtension. Она добавит в студию дополнительную вкладку, на которой ты можешь работать с GitHub подобно Team Foundation Server. Но закрытый репозитарий на GitHub стоит денег. Если платить жалко, команда разработчиков небольшая (до 5 человек включительно), можно воспользоваться сервисом BitBucket. Он подобен GitHub, однако для маленьких проектов закрыты репозитарий предоставляется бесплатно. Если же надо работать с Git посредством внешнего клиента (предположим ты не используешь Visual Studio), тогда рекомендую использовать клиент SourceTree. Из всего многообразия существующих Git-клиентов этот, на мой взгляд, самый удобный. К слову, он, как и вышеупомянутый сервис, разработан австралийской компанией Atlassian.

5. И последняя по порядку, но не по значимости незаменимая тулза для программирования на C++ - это библиотека Boost. Многое из того, что сейчас находится в стандартной библиотеке языка взяло свое начало в Boost: умные указатели, r-value ссылки, семантика перемещения и прочее. Кроме имеющихся в STL контейнеров, Boost предоставляет дополнительные. Но Boost этим не ограничивается, по большому счету, это библиотека библиотек. И она среди прочего включает расширенные средства для сетевого программирования, математического моделирования, многопоточного программирования, работой с графами, обобщенного и метапрограммирования, различные алгоритмы и мн. др.

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

вторник, 11 июля 2017 г.

Переосмысление STL через паттерны проектирования

Об изучении паттернов и немного о шаблонах

Юрий «yurembo» Язев

Каким образом мы изучаем STL? Обыкновенно это бывает следующим образом: изучив C++, сразу переходим к изучению STL. Хорошо, если при изучении первого, должным образом отнеслись к шаблонам, обычно этого нет. Их синтаксис пугает, их применение не понятно, решаемые с помощью них задачи покрыты мглой.

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

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

Компоненты STL построены на основе шаблонов с примесью паттернов. Чисто на паттернах ничего построить не удастся, так как последние представляют собой абстракции. Их с некоторыми изменениями можно применить к любому языку программирования. STL включает контейнерные классы, итераторы, адаптеры, функциональные объект и прочее. Устройство этих механизмов легче понять, зная соответствующие паттерны.

Учебники по C++ часто кроме самого языка охватывают стандартную библиотеку и содержащую ею STL. Было бы хорошо, если бы там был раздел, посвященный паттернам. Но в таком случае и так не тонкая книга по основам C++ приобрела бы совсем угрожающий вид. Взгляните на «Язык программирования C++. Специальное издание» Бьерна Стауструпа – внушительная книжка. Но в ней нет ни слова о паттернах. Нельзя объять необъятное. C++ как раз относится к этой теме.

Я могу выделить 3 книги по паттернам проектирования. Библией о паттернах заслуженно считается книга 1995-го года выпуска «Приемы объектно-ориентированного проектирования. Паттерны проектирования», написанная широко известной «бандой четырех», куда входят: Гамма, Хелм, Джонсон, Влиссидес. В ней рассмотрены 23 самых распространенных паттерна, предназначенных для «общего пользования». Материал хорошо структурирован: есть описание каждого паттерна, область его применения, пример использования вместе с исходным кодом на C++ или Smalltalk (ныне незаслуженно забытый язык; yurembo лет 5 назад пытался его изучить, но его применению на нашлось места). Тем не менее, для тех персонажей, кто впервые сталкивается с паттернами, книжка тяжело читается.

Много лет спустя вышла книжка «Паттерны проектирования» Эрика и Элизабет Фриман. У издательства O’Reilly, которое издала эту книгу, есть особая категория «Head First». В книгах, попадающих под эту категорию, материал подается особым образом. Если в процессе чтения обычной книги по программированию читатель ведет беседу с автором, то в «Head First» кроме автора на страницах книги можно встретить других персонажей, которые ведут диалоги между собой наподобие комиксов. Плюс уместные, логически верные иллюстрации помогают лучше усвоить предлагаемый материал.

Материал книги построен относительно языка Java, то есть все примеры приведены на этом языке. Однако для их понимания будет достаточным лишь поверхностного знания языка. Поскольку в первую очередь я ориентирую этот пост на C++-программистов. В книге подробно с примерами и доскональным объяснением описаны 14 паттернов проектирования. Сначала я рекомендую прочесть эту книгу, а потом, когда будет общее понимание паттернов, как их использовать и с чем их едят, для более глубокого усвоения материала перейти к библии «банды четырех».

Примерно в том же году, что предыдущая книжка, в другом издательстве вышла книга «Принципы, паттерны и методики разработки на языке C#» Роберта и Мика Мартин(ов). Рекомендую ее товарищам, которые программируют на C#. Сам ее еще не читал, не было необходимости, но говорят: «хорошая книга».

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

Между тем к этим трем книгам, посвященным использованию паттернов проектирования на разных языках программирования, я могу прибавить еще одну книженцию. Много-много лет назад по своей неопытности (только-только начал изучать C++) я купил книгу «Современное проектирование на C++» Андрея Александреску, предназначенную явно не для начинающих программистов. Эта книга взорвала мне мозг и на многие годы вперед заставила меня искать ответы на появившиеся вопросы, за что я ей и автору благодарен. Книг посвящена обобщенному программированию на C++ с использованием шаблонов, так же в ней описана разработка компонентов библиотеки, созданной автором, на основе паттернов проектирования.

В упомянутых выше книгах обсуждаются паттерны «общего пользования». Они будут одинаково полезны во всех областях разработки программного обеспечения. Вместе с тем существует такие паттерны, которые являются полезными в узком направлении разработки специфического ПО. Например, в программировании многопоточных приложений есть свои паттерны, которые будут бесполезны в других видах ПО. Есть отдельная область применения паттернов – GameDev. Использование общих паттернов там имеет свою специфику. Кроме того, в игрострое есть свои особенные паттерны, которые не будут иметь большого смысла в других областях. Таких областей применения паттернов проектирования ровно столько, сколько видов ПО существует: мобильное, системное, веб и многое другое. Везде есть свои наблюдения, общеизвестные решения распространенных задач, поэтому везде есть паттерны.

И под конец. Изучение STL не представляет проблемы, имеется огромное количество учебников по теме. Все эти книги довольно старые, но при этом они нисколько не утратили своей значимости, вот некоторые из них: «C++ и STL. Справочное руководство» Дэвида Мюссера, Жилмера Дерджа, Атула Сейни. Прекрасное, довольно краткое, но при этом подробное описание STL с примерами использования. Мюссер, к слову, участвовал в разработке черновых версий библиотеки.
«Обобщенное программирование и STL: использование и наращивание стандартной библиотеки шаблонов STL» - более подробное руководство по теме.
«C++. Стандартная библиотека» кроме STL включает описание стандартной библиотеки. Книга еще старее, приведенных выше, но при этом в ней есть описание «скользких» мест C++, которые не освещены в других более современных изданиях.
И моя любимая книга по теме: «Эффективное использование STL» Скотта Мейерса. Крутой чувак. В этой книге он дает 50 классных советов по использованию STL. Каждый из них подкреплен интересным примером.

суббота, 1 июля 2017 г.

О языках программирования и влиянии искусственного интеллекта
Юрий “yurembo” Язев

Развитие цифровых технологий и искусственного интеллекта прямым образом отражается на средствах и методах программирования. На заре информатики и цифровых машин мы (очень обобщенно yurembo имеет в виду программистов) писали программы с помощью перфокарт, то есть прямо в машинных кодах. Затем появился язык ассемблера. На следующем витке развития появились первые языки высокого уровня, позволяющие писать программы на языке близком к человеческому: Fortran, Algol, Basic, Cobol и другие. Следующим уровнем стало структурное программирование, внедрившее процедуры, функции и само-собой структуры, представляющие составные и самостоятельные типы данных: Pascal, C. Одновременно развивались функциональные языки программирования: Lisp, Prolog. Потом появилось ООП, основанное на четырех монументальных принципах: абстракции, инкапсуляции, наследовании и полиморфизме. Это такие современные и не очень языки программирования: Smalltalk, C++, Java, C#.

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

Пока в области алгоритмических языков круче ООП ничего не придумано. Однако происходит бурное развитие функциональных языков: Haskell, F#. Осуществляется разработка систем для упрощения и ускорения разработки с помощью современных и востребованных ООП языков, создание конструкторов, позволяющих собирать программы из готовых блоков, различные CASE-средства. Высокоуровневые компиляторы - это интеллектуальные работники. По этой картине видно, как преобразовывались технологии программирования, улучшались средства разработки программного обеспечения вместе с эволюцией цифровых технологий.

вторник, 20 июня 2017 г.

Писательство, пусть и благородное, всё же довольно одинокое занятие.

Ты сидишь перед экраном компьютера и просто пережёвываешь свой мозг до тех пор, пока тебе не надоест вкус.

Каждое произведение начинается со вспышки вдохновения.
Эти ошеломляющие видения зачастую настолько яркие, что забыть их, кажется, невозможно. И, тем не менее, где-то по дороге ты неизбежно теряешь их из виду. В разгар творческого процесса ты мало что видишь, кроме хаоса, в котором периодически проглядываются вспышки здравого смысла.

четверг, 8 июня 2017 г.

DevGAMM 2017

Конференция разработчиков видео игр

художественный рассказ, многое в нем является плодом воображения автора

 Юрий “yurembo” Язев
независимый игродел

DevGAMM, ровно как КРИ (для тех, кто не в теме: Конференция Разработчиков Игр) в старые добрые времена является самым выдающимся событием (кроме релиза твоей игры, естественно) российской (а так же стран СНГ) игровой индустрии. yurembo посещает игровые конференции с 2009-го года, начав с КРИ. Уже тогда (с 2008-го года) проводился предок DevGAMM’а - FlashGamm, посвященный играм на Flash. Но в то время он длился только один день непосредственно перед КРИ в московской гостинице “Космос”, что на ВДНХ. Сама же КРИ длилась 3 дня. Между тем в 2011-м году КРИ длилась только 2 дня, что стало исключением из правил. В том году мы как раз представляли свой инди-проект “Project Genom”. Но это дела давно минувших дней.

yurembo не посещал FlashGamm, это было не в его интересах. Он очень хладнокровно относился к Flash’у. И все-таки флэш умер. С другой стороны КРИ ему нравилась: много места, много стендов, много косплеерш, интересные и познавательные лекции. Стенды компаний-представителей размещались на первом этаже в длинном, подобно кишке, коридоре перед концертным залом в правом крыле “Космоса”. В конце этого коридора находились небольшие столы инди-разработчиков, представляющих свои проекты. Лекции - незаменимый атрибут девелоперских конференций в “Космосе” проводились в залах на разных этажах правого крыла гостиницы.

Последняя КРИ прошла в 2013-м году. В следующем году FlashGamm преобразовался в DevGAMM, помимо Flash’а стал включать другие игровые и не только технологии: Unity 3D, Unreal Engine (на ту пору 3-ю версию) и другое. Также сменилось место проведения конференции: гостиница “Космос” на гостиницу “Рэдиссон Славянская”. В том 14-м году yurembo не стал принимать участие в игровой конференции, остался дома. Однако еще через год - в 15-м году он снова принял участие в игровой конференции DevGAMM.

В этом году, ровно как и в прошлом, yurembo вновь участвовал в DevGAMM. На этот раз игровая конференция ему понравилась еще больше, и он решил написать об этом немного текста. Во многом его хорошему настроению поспособствовали клевые встречи со знакомыми как на конференции, так и за ее пределами, словно все жители столицы были рады его приезду!

Незадолго до даты проведения DevGAMM’a на свой e-mail я получил письмо с приглашением на конференцию по теме виртуальной реальности VR-today. Ее проведение было намечено на канун DevGAMM’a. Виртуальная реальность в тренде, это модно, это круто, за этим будущее. Пока она никому добра не принесла, но мы верим в ее будущее. С этими словами я запланировал в своем органайзере посещение этого мероприятия.

17-го мая в день вылета из Перми была солнечная, но довольно прохладная погода. В тот же день, подлетая к Москве, в небесах ярко светило солнце. Но как только мы нырнули в облака, мгла окутала наш самолет, подобно погружению в пучину океана. Внизу так же была беспросветная серость. Но дождя не было, поэтому персонажи, любящие дождь, наверное сидели дома.

Из аэропорта я сразу двинул в сторону НИУ ВШЭ, где приютилась Высшая Школа Бизнес-Информатики, в которой проводилась конференция VR-today.


Для краткости: она находится недалеко от станции метро Рижская. Я добрался до места проведения конференции только после обеденного перерыва, успев на 3 завершающих доклада - 50% от общего числа. На входе здания сидел сердитый охранник, пропускал только по списку приглашенных. Конференция вместе с выставочными залами расположилась на втором этаже учебного заведения. Поднявшись туда, я встретил Вячеслава Уточкина - молодого человека на вид лет 30-ти с несколько худощавым телосложением. Он объяснил мне где тут что находится. В коридорах двух зданий, между которыми имеется надземный переход, расположились стенды компаний, представляющие программные и аппаратные технологии для виртуальной реальности. Кроме того, там была компания, не имеющие отношения к VR, а представляющая собой рекрутинговое агентство Spice IT Recruitment. В первом здании (по отношению ко входу на конференцию) был большой актовой зал со сценой, подобный концертному, где, собственно, и проводились лекции - выступления докладчиков.




Продолжение читай на сайте ==>>

пятница, 12 мая 2017 г.

MS Build 2017

Юрий "yurembo" Язев
независимый игродел


Вот и закончилась самая громкая конференция для разработчиков от Microsoft – Build 2017.

Так как MS не заплатила мне еще за прошлую конференцию Connect();, которую я широко освятил, то про Билд я решил не писать подробную статью. Но поскольку ощущаю глубочайшую любовь к технологиям и продуктам Microsoft, то не мог пропустить эту конференцию, ориентированную на разработчиков, и не посмотреть ее ключевые доклады.

Вкратце, о чем было рассказано и что было представлено на данном мероприятии. Громко было представлено грядущее обновление для Windows 10 – Fall Creators Update, которое будет доступно уже этой осенью. Было рассказано о том, что каждый из нас создатель, и PC с Windows 10 – лучший инструмент создателя, ну а кто мог сомневаться? 

Сделаем шаг назад. Вместе с апрельским обновлением - Creators Update MS добавила в ОС поддержку трехмерной графики. Теперь в составе операционки кроме всего прочего есть Paint 3D и средство просмотра 3D-объектов, поддерживающий широкий набор форматов. 


Рис. 1. Средство просмотра 3D-объектов

В Paint 3D можно рисовать как двумерные изображения, так и добавлять заготовленные трехмерные объекты и осуществлять над ними базовые операции в пространстве, как-то: вращение, перемещение (по оси Z). На объемные объекты можно клеить заготовленные наклейки, наносить надписи, настраивать свет. Кроме того, можно, подключившись к сайту remix3d.com, скачать оттуда различные более сложные и иногда даже анимированные 3D-объекты.

Рис. 2. Paint 3D

В следующем обновление для операционки будет содержаться новый видеоредактор – Story Remix. С помощью него в редактируемые ролики можно вставлять трехмерные объекты и анимации с сайта remix3d.com. 

Рис. 3. Сайт remix3d.com

На презентации это выглядело очень круто: с помощью системы искусственного интеллекта отбираются разные ролики, в которых присутствует один и тот же человек, надписи следуют за объектом – прикрепляются к нему, в сцену могут быть добавлены цифровые объекты и другое.

В докладах была представлена Windows 10 S – новая версия Windows 10, которая, по сути, является урезанной версией последней. Буква S, по видимому, означает Starter. У MS уже есть опыт создания урезанных версий своих продуктов, достаточно вспомнить Windows 7 Starter. Windows 10 S предназначена для компьютеров нижней ценовой категории. В этой системе приложения можно устанавливать только из Windows Store. Но не будем о грустном.

Еще одна большая тема, затронутая на конференции – это смешанная, ранее дополненная реальность. Суть в том, что весь Fall Creators Update нацелен на объединение реальности с виртуальной реальностью. Добавление анимаций в видео – это уже пройденный этап, это не круто. А вот смешанная реальность, создаваемая с помощью очков HoloLens, – это реально круто. На этой теме было сконцентрировано внимание на одной из презентаций. Подробно об этом устройстве можно прочесть в моей статье. Осенью к очкам будут добавлены контроллеры. Уже объявлены цены комплектов от Acer и HP. 

В будущем обновлении нас ждет плавный переход к новому интерфейсу Fluent Design System, который, по сути, является приемником Metro. Microsoft будет внедрять его постепенно.

Одно из главных нововведений в Fall Creators Update – это более глубокая интеграция Windows с Android и iOS. Microsoft хочет дать пользователям беспрерывную возможность работы с контентом на любых девайсах, оснащенных любой операционной системой.

суббота, 6 мая 2017 г.

Выставка картин в Чусовом

Юрий Язев

В культурно-деловом центре города Чусового в настоящее время проходит близкая для каждого жителя нашего города выставка картин. Их тематика – это спортбаза «Огонёк» и этнографический парк истории реки Чусовой. Показанные на выставке картины написаны в период за последние 20 лет. 

На картинах, посвященных спортбазе, изображены спортивные объекты «Огонька»: санная трасса, горнолыжные и трассы фристайла. Условно можно отделить картины, посвященные этнопарку. На них изображены исторические строения, а так же большая часть картин показывает людей. В их центре Леонард Постников со своими друзьями: Виктором Астафьевым, Юрием Беликовым, Валентином Курбатовым и другими. И это неспроста, ведь выставка приурочена к 90-летию Леонарда. Поэтому в честь него и этой даты собраны лучшие работы художественного искусства о нем, о его парке и спортивной школе. 90 лет – возраст мудреца.

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

Вход на выставку стоит символическую плату: 10 руб. для взрослых и 5 – для детей. Спешите посетить ее, так как она завершается уже 15-го мая.

Предлагаю взглянуть на небольшое число полотен, но имейте в виду: фотографии нисколько не передают прелесть оригинала:

Участок санной трассы

Леонард Постников


Никита Постников в весьма юном возрасте

Виктор Астафьев




Леонард Постников, Валентин Курбатов, Виктор Астафьев