• Рекомендации по написанию кода на C# от Aviva Solutions

    Представляю вашему вниманию перевод документа "Coding Guidelines for C# 3.0, 4.0 and 5.0".

    Целью создания этого списка правил является попытка установить стандарты написания кода на C#, которые были бы удобными и практичными одновременно. Само собой, мы практикуем то, что создали. Эти правила являются одним из тех стандартов, которые лежат в основе нашей ежедневной работы в AvivaSolutions. Не все эти правила имеют четкое обоснование. Некоторые из них просто приняты у нас в качестве стандартов.

    Статический анализатор кода VisualStudio (который также известен как FxComp) и StyleCop могут автоматически применять многие из правил кодирования и оформления путем анализа скомпилированных сборок. Вы можете сконфигурировать их таким образом, чтобы анализ производился во время компиляции или был неотъемлемой частью непрерывной или ежедневной сборки. Этот документ просто добавляет дополнительные правила и рекомендации, но его вспомогательный сайт www.csharpcodingguidelines.com предоставляет список правил анализа кода, необходимых в зависимости от того, с какой базой кода вы работаете.
    Читать дальше →
  • Как происходит рендеринг кадра в GTA V

    • Перевод
    Серия игр Grand Theft Auto прошла долгий путь с момента своего первого релиза в 1997 году. Примерно 2 года назад Rockstar выпустила GTA V. Просто невероятный успех: за 24 часа игру купило 11 миллионов пользователей, побито 7 мировых рекордов подряд. Опробовав новинку на PS3, я был весьма впечатлен как общей картинкой, так и, собственно, техническими характеристиками игры.

    Ничто так не портит впечатление от процесса, как экран загрузки, но в GTA V вы можете играть часами, преодолевая бескрайние сотни километров без перебоев. Учитывая передачу солидного потока информации и свойства PS3 (256 Mb оперативной памяти и видеокарта на 256 Mb), я и вовсе удивился, как меня не выбросило из игры на 20-ой минуте. Вот где чудеса техники.

    В этой статье я расскажу о проведенном анализе кадра в версии для ПК в среде DirectX 11, которая съедает пару гигов как оперативки, так и графического процессора. Несмотря на то, что мой обзор идет со ссылкой на ПК, я уверен, что большинство пунктов применимо к PS4 и в определенной степени к PS3.

    Анализ кадра


    Итак, рассмотрим следующий кадр: Майкл на фоне любимого Rapid GT, на заднем плане прекрасный Лос-Сантос.

    image

    Осторожно! Трафик!
    Читать дальше →
  • «IT — это достаточно бедная индустрия» — интервью с Дмитрием Нестеруком из JetBrains

      Всем привет. Это снова «Без слайдов», и сегодня у меня для вас интервью с Дмитрием Нестеруком aka mezastel, техническим евангелистом компании JetBrains. Дмитрия я знаю довольно давно и, не скрою, сам очень долго ждал момента, когда мы наконец поедем на студию и запишемся. Уж больно много вопросов у меня к нему накопилось.



      Мы больше часа беседовали с Дмитрием, но не успели затронуть даже половины тем, которые хотелось обсудить. Что Дмитрий успел рассказать мне:
      • Чем технический евангелист отличается от Developer Advocate
      • Как работает евангелизм в JetBrains
      • О восприятии мира настоящими гиками
      • Почему IT — это бедная индустрия
      • Про маржу и инвестиции российских аутсорсеров
      • Про то, какие enterprise решения позорят индустрию и почему
      • Насколько далека JetBrains от своего простого потребителя
      • Об том, как индустрия видеоигр смогла «вырастить» под себя целый сектор железа
      • Что сейчас творится на рынке видеокарт
      • Что еще могут придумать компании, для того, чтобы программы работали быстрее
      • О том, как будет выживать ReSharper и о 64-битных IDE от Microsoft


      Вот видео, а под катом, как обычно, текстовая версия этого интервью.


      (на одиннадцатой минуте нет звука, к сожалению.)
      Читать дальше →
    • Создание The Blacksmith: подготовка сцен, шейдинг и освещение

      • Перевод
      В предыдущих статьях из этой серии мы рассказывали о команде создателей ролика The Blacksmith, а также о его художественном оформлении. Теперь мы рассмотрим создание ролика с технической точки зрения и затронем аспекты подготовки сцен, шейдинга и освещения в Unity 5.


      Читать дальше →
    • Анализ резюме с HeadHunter. Кто сколько зарабатывает и в каких отраслях работает

        Недавно, на хакатоне от Petamelon нам в руки попал датасет с ~6 000 000 резюме с НН. Там, естественно, не было никаких персональных данных и контактов, но было много других интересных вещей: ожидаемая зарплата, возраст, пол, примерный адрес, образование и индустрии, в которых человек ищет работу. Было решено попробовать использовать эти данные в нашем проекте про выбор школ. Идея заключалась в том, чтобы определить в каких индустриях работают выпускники школ и сколько примерно зарабатывают. Но я, конечно, не удержался и построил кучу других бесполезных, но прикольных таблиц и графиков.

        Распределение резюме по возрасту имеет интересную форму и как будто разделено на две части: до окончания института и после:


        В Москве с возрастом ожидаемая зарплата выходит на плато в ~50 000 рублей:

        Читать дальше →
      • Подводные камни Entity Framework и производительность

          При работе с Entity Framework, как и с любым другими ORM, часто возникают вопросы, связанные с его производительностью. Многие разработчики из-за незнания нюансов делают ошибки, приводящие к плохим результатам. Затем, во время анализа проблем и поиска решений, недостаточно разобравшись в вопросе, приходят к выводу, что улучшить ситуацию можно только переходом на другой ORM или отказом от него вообще. Хоть в некоторых ситуациях такое решение может оказаться разумным, зачастую не все так плохо — просто нужно знать нюансы. В этой статье я попытался собрать те подводные камни, с которыми мне чаще всего приходилось сталкиваться на практике.
          Читать дальше →
        • Введение в OpenSceneGraph

          OpenSceneGraph — это кроссплатформенная библиотека с открытыми исходниками для разработки высокопроизводительных 3D-приложений. Это не игровой движок, связывающий пользователя по рукам и ногам заложенными в него ограничениями, а именно библиотека — набор полезных модулей, которые отлично работают как поодиночке, так и в сборке.



          Ядро OpenSceneGraph, собственно граф сцены, — довольно тонкая обёртка вокруг OpenGL, позволяющая задавать иерархию объектов и выполнять над ними любые желаемые преобразования:
          • изменять характеристики узлов (двигать объекты в пространстве, назначать им материалы, свойства освещённости, шейдеры и прочие режимы и атрибуты OpenGL);
          • перестраивать дерево любым желаемым образом (создавать и удалять объекты, перелинковывать их к другим узлам графа);
          • делать обход графа, выполняя для каждого их узлов какие-либо действия;
          • ну и конечно рендерить сцену при помощи OpenGL.

          Читать дальше →
        • Неконстантные константные выражения

          • Перевод
          // <какой-то код>
           
          int main ()
          {
                  constexpr int a = f ();
                  constexpr int b = f ();
           
                  static_assert (!= b, "fail");
          }

          Можно ли в приведенном выше фрагменте вместо комментария вставить такое определение f (), чтобы a получила значение, отличное от b?

          “Разумеется, нет!” — скажете вы, немного подумав. Действительно, обе переменные объявлены со спецификатором constexpr, а значит, f () тоже должна быть constexpr-функцией. Всем известно, что constexpr-функции могут выполняться во время компиляции, и, как следствие, не должны зависеть от глобального состояния программы или изменять его (иными словами, должны быть чистыми). Чистота означает, что функция при каждом вызове с одними и теми же аргументами должна возвращать одно и то же значение. f () оба раза вызывается без аргументов, поэтому должна оба раза вернуть одно и то же значение, которое и будет присвоено переменным a и b… правильно?

          Еще неделю назад я знал, что это правда, и действительно думал, что невозможно пройти static_assert в приведенном выше фрагменте, не допуская неопределенного поведения.

          Я ошибался.
          Увиденное под катом уже не развидеть
        • Код 15-летней давности и газета объявлений

          Увидев переводную публикацию о поддержке древнего как кости мамонта legacy-кода, не могу не поделиться историей из своего опыта, а заодно, и призвать написать тех, кто также как и я сталкивался с подобными задачами. Да и за державу обидно — почему подобные публикации – в основном, переводные? У нас есть и было немало программистов-самородков, ваяющих свое, ни с чем не совместимое программное обеспечение – свои собственные СУБД, графические интерфейсы, драйвера для промышленного оборудования собственной разработки. По работе я немало сталкивался с творениями местных кулибиных, и еще расскажу про них, если будет интерес.

          Случилась эта история в 2001 году и началась с того, что в FIDO-шной конференции $CRACK$.TALKS
          Читать дальше →
        • Использование QCustomPlot для создания анимированных графиков

          image

          При решении различных аналитических задач может потребоваться real-time построение графиков, где функция зависит от времени. В этой статье я поделюсь своим опытом решения задачи анимирования графиков в Qt, используя QCustomPlot.
          Читать дальше →
          • +17
          • 19,3k
          • 5
        • Бинарные деревья поиска и рекурсия – это просто

          Существует множество книг и статей по данной теме. В этой статье я попробую понятно рассказать самое основное.

          Бинарное дерево — это иерархическая структура данных, в которой каждый узел имеет значение (оно же является в данном случае и ключом) и ссылки на левого и правого потомка. Узел, находящийся на самом верхнем уровне (не являющийся чьим либо потомком) называется корнем. Узлы, не имеющие потомков (оба потомка которых равны NULL) называются листьями.

          image
          Рис. 1 Бинарное дерево
          Читать дальше →
          • +21
          • 220k
          • 7
        • 19 советов по повседневной работе с Git

          • Перевод
          • Tutorial


          Если вы регулярно используете Git, то вам могут быть полезны практические советы из этой статьи. Если вы в этом пока новичок, то для начала вам лучше ознакомиться с Git Cheat Sheet. Скажем так, данная статья предназначена для тех, у кого есть опыт использования Git от трёх месяцев. Осторожно: траффик, большие картинки!

          Содержание:
          1. Параметры для удобного просмотра лога
          2. Вывод актуальных изменений в файл
          3. Просмотр изменений в определённых строках файла
          4. Просмотр ещё не влитых в родительскую ветку изменений
          5. Извлечение файла из другой ветки
          6. Пара слов о ребейзе
          7. Сохранение структуры ветки после локального мержа
          8. Исправление последнего коммита вместо создания нового
          9. Три состояния в Git и переключение между ними
          10. Мягкая отмена коммитов
          11. Просмотр диффов для всего проекта (а не по одному файлу за раз) с помощью сторонних инструментов
          12. Игнорирование пробелов
          13. Добавление определённых изменений из файла
          14. Поиск и удаление старых веток
          15. Откладывание изменений определённых файлов
          16. Хорошие примечания к коммиту
          17. Автодополнения команд Git
          18. Создание алиасов для часто используемых команд
          19. Быстрый поиск плохого коммита

          Читать дальше →
        • Пешком по тайлам



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

            Ни один из известных нам сервисов не строил маршрут из точки А до точки Б там, где нет тропинок и тротуаров, зато полно заборов и домов причудливых очертаний.

            2ГИС решил эту проблему. Мы научились строить маршруты для пешеходов по растеризованной карте местности. Карта формально представляется графом с вершинами на регулярной решётке в местах, где пешеход может находиться физически.

            Принято считать, что такой способ строить маршруты неприемлем, потому что съедает много ресурсов. Под катом — как мы с этим справились.
            Читать дальше →
          • Умный дом: защита от протечек воды, система Аквасторож

              Я уже писал про составные части умного дома — систему управления освещением. Умный дом, как и любой робот должен подчиняться трем законам робототехники, третий из которых гласит: робот должен заботиться о своей безопасности в той мере, в которой это не противоречит Первому и Второму Законам. Т.е. одной из задач умного дома — заботиться о своей сохранности, не допускать взломов, пожаров, затоплений, и прочих повреждений. Вот о защите от протечек и затопления мы сегодня и поговорим.
              image
              Аквасторож — это система которая автоматически перекрывает воду при обнаружении затопления. Прорвало трубу — вода хлещет на пол, попадает на сенсор, и сервопривод перекрывает краны на стояках. Конечно, от мокрых полов это вас не спасет — часть воды все равно окажется на полу, но ремонт обезопасит, а заодно и оградит от компенсации после затопления соседям ниже. Посмотрим, разберем систему Аквасторож на части и узнаем, так ли она хороша?
              Читать дальше →
            • Принцип разделения ответственности и ORM

              • Перевод
              Я бы хотел обсудить принцип разделения ответственности (Separation of Concerns, SoC) в контексте ORM, а также посмотреть почему этот принцип так важен. Также мы рассмотрим примеры нарушения границ ответственности между доменной логикой и логикой сохранения данных.
              Читать дальше →
            • Развёртывание приложений Qt в Windows


                Вступление


                Добрый день, уважаемые читатели! Совсем недавно я завершил разработку одного своего приложения на Qt, и мне захотелось создать профессиональную программу установки, чтобы всё было «как у взрослых». Как оказалось, сделать это непросто, учитывая, что на официальном сайте инструментария информации по развёртыванию почти нет. В данной статье рассмотрены некоторые этапы подготовки программ на Qt версии 5.2 или выше для распространения на компьютеры других пользователей. Итак, вот план руководства:

                1. Подготовка проекта Qt к развёртыванию
                2. Компоновка дистрибутива программы
                3. Подписание кода и создание установщика

                Не будем терять времени и приступим к работе.
                Читать дальше →
              • Объединяем Qt и AdMob

                  image
                  В один момент понадобилось мне интегрировать рекламу в мобильное приложение на Qt и я был сильно удивлен, обнаружив, что решений, в общем-то, и нет. Нет, есть конечно, V-Play AdMob плагин, но вы меня извините, 160 баксов за то, что можно сделать за выходные — это чересчур. Последующие поиски привели меня к этой статье на хабре, которая послужила материалом для Android реализации, а в итоге получился небольшой фреймворк, для работы с AdMob рекламой на IOS и Android.
                  Читать дальше →
                  • +10
                  • 7,7k
                  • 2
                • Кросс-компиляция Qt5 под Linux для Win x32/x64/static/shared

                  Цель статьи


                  Документирование получения системы кросс-компиляции под Linux для Windows x32/x64/static/shared и сборка последней на момент описания Qt 5.4.1 в лайт-версии (для указанных четырех целей). Для себя, глубоко-обожаемого, ну и для пользы обществу.

                  Назначение


                  Многие разработчики приходят к выводу, что использование *nix (в частности Linux) более предпочтительно для разработки приложений, используя фрэймворк Qt. И тому есть причины. Qt изначально ориентирована на *nix инструментарий, типа autotool, make, perl… И второй момент, под никсами есть прекрасный инструмент — valgrind, под виндой порта пока его не видел. Ну и последняя причина: просто удобно иметь набор инструментария для создания приложений под различные целевые платформы — в одном месте.

                  Почему лайт-версия Qt5


                  Фрэймворк-Qt имеет модульную структуру, но, увы, не совсем совершенную. Некоторые зависимости от внешних библиотек «вешаются» не на модуль, требующий эти библиотеки, а на Qt5Core. Иными словами, нужна вам эта библиотека, или нет — вынь да положЪ в дистрибутив. Пример тому «монстрик» — библиотека ICU. Весит она почти 25 метров! Зависимость вешается, как я упоминал выше, на Qt5Core… а требует ее модуль Qt5WebKit (который по сути в 99% случаев не используется, по крайней мере мной). Что делаем? Вырезаем и отрезаем. Хотите получить фулл-версию Qt5? Об этом упомяну в заключении. Поехали.
                  Читать дальше →
                • (Перевод) Введение в разработку C++ в UE4 Часть 2

                  • Перевод
                  • Tutorial
                  Часть 1. Введение. Создание класса и добавление свойств. Расширение класса С++ с помощью Blueprint.
                  Часть 2. Классы геймплея. Структуры. Отражение (reflection) в Unreal. Object/Actor итераторы. Менеджер памяти и сборщик мусора.
                  Часть 3. Префиксы в именах классов. Целочисленные типы. Типы контейнеров. Итераторы контейнеров. Цикл For-each, хеш-функции.
                  Часть 4. Unreal Engine 4 для Unity разработчиков.
                  Часть 5.…

                  image

                  От Автора: Начало лето выдалось жарким на проекты, поэтому оформление перевода долго откладывал, дальше будет быстрее.

                  Эта статья является продолжением перевода части документации по UE4. Оригинальную статью вы можете найти пройдя по это ссылке.
                  Далее
                  • +28
                  • 48,2k
                  • 1
                • Как программисту заработать на фондовом рынке, думая только о коде: Конкурс StockSharp и ITinvest



                    В нашем блоге мы уже публиковали истории о том, как программисты зарабатывали на фондовом рынке, применяя свои знания новых технологий (например, машинного обучения). В комментариях к подобным материалам некоторые пользователи Хабра говорили о том, что их смущает необходимость рисковать при работе на бирже своими собственными деньгами.

                    Сегодня мы подробнее расскажем о том, как можно заработать на фондовом рынке, занимаясь только программированием, и не вкладывая собственных средств. Сделать это можно участвуя в специальном конкурсе разработчиков от проекта StockSharp и ITinvest.
                    Читать дальше →