• Сетевой код для бедных

    • Перевод

    Чем больше узнаёшь в своей области знания, тем чётче понимаешь, что никто не может знать всего.

    По какой-то причине (за что, господи, за что?) моей областью стала разработка игр. Каждый, кто работает в этой сфере, скажет вам: никогда не добавляй сетевой многопользовательский режим в уже готовую игру, никогда, пьяный ты клоун.

    Как бы то ни было, я именно это и сделал, и ненавижу себя за это. На удивление, вышло замечательно. Никто из нас не знает всего.

    Проблема №1: ресурсы


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

    Сериализировать весь меш? Не стоит, у клиента он уже есть на диске.

    Передавать имя файла? Не-а, малоэффективно и небезопасно.

    Ну ладно, может быть, просто строковый идентификатор?

    К счастью, прежде чем у меня появилось время на реализацию собственных бредовых идей, я посмотрел доклад Майка Эктона, в котором он говорил об опасностях «ленивого принятия решений». Смысл в следующем: строки позволяют разработчикам лениво игнорировать принятие решений до момента создания работающего приложения, когда исправлять ошибки уже поздно.
    Читать дальше →
  • Восстание одной маленькой своенравной нейросети, или как сделать codewar-игру за 3 дня

    • Tutorial
    На день рождения FirstVDS мы уже третий раз запускаем квест. Раньше он был только для админов, в этом году решили добавить задание для программистов.

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

    Хотелось что-то нетривиальное и с визуальным интерфейсом — чтобы игрок сразу видел результат, так же интереснее. Вспомнили конкурсы mail.ru в стиле codewar и решили сделать что-то подобное.

    В чём суть: участнику нужно написать эффективный код, который будет «соперничать» с кодом условного противника.
    Читать дальше →
  • Образовательные стриминговые каналы программистов


      Источник Twitch


      Удивительно, но люди действительно хотят смотреть на то, как вы пишите код. В 2014 году появился даже специальный сайт Livecoding.tv (сейчас он называется LiveEdu), на котором каждый желающий разработчик может всему миру показать процесс работы в режиме реального времени.


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

      Читать дальше →
    • Температура и давление фантастики, 2/3

        Часть 2. Прогулка


        Первая часть

        Во-первых, огромное спасибо за такое количество хороших и осмысленных комментариев. Лишь недостаток времени не позволяет детально на них все ответить. Но я ценю и дополнения, и ссылки на нечитанную фантастику (сколько же её!), и поправки. Спасибо!

        В этом разделе не будет большой глубины. А будет небольшая экскурсия по окраинам pT-диаграммы, редко посещаемым даже популяризаторами науки. Зачем? Чтобы показать, что богатство миров и явлений, скорее всего, отнюдь не убывает при удалении от привычного нам «центра мира условий». И что, наверное, в тех местах может происходить что-то интересное и сюжетообразующее… при условии, что хоть один профессиональный писатель сможет качественно это помыслить. Но это — отдельная тема для обсуждения в третьей части. Здесь же у нас будут просто далёкие миры. Не в парсеках далёкие, но оттого не менее труднодостижимые.

        Юпитер


        Вот так он выглядит снаружи:


        Читать дальше →
      • OK Google, заведи мне машину

        • Tutorial


        Будущее всё ближе. Лет 10 назад я и не мог подумать, что буду заводить машину с помощью голосовой команды!

        Последние годы я с интересом наблюдал за бурным развитием голосовых ассистентов. После выхода Google Home Mini, решил что и мне уже пора попробовать, так как цена стала более-менее адекватной для «игрушки». Первый проект — интеграция голосового помощника с GSM модулем StarLine для автозапуска, контроля координат, напряжения аккумулятора и других параметров, отдаваемых сигнализацией автомобиля. Итак, поехали?
        Читать дальше →
      • Поиск пути в играх Tower Defense

        • Перевод
        [Прим. пер.: в оригинале статьи есть интерактивные демо, которые я продублировал с помощью видео. Для большей наглядности рекомендую изучить примеры в оригинале.]

        В играх жанра Tower Defense (TD) множество врагов стремится добраться в одну точку. Во многих играх TD существует заранее заданный путь или несколько путей. В некоторых, в том числе в классической Desktop Tower Defense можно размещать башни в произвольных местах, и они становятся препятствиями, влияющими на пути врагов. Запустите демо и нажимайте на карту, чтобы возводить или убирать стены:


        Читать дальше →
        • +21
        • 15,7k
        • 3
      • FSE кодирование

          Finite State Entropy (FSE) – алгоритм энтропийного кодирования, чем-то похожий и на алгоритм Хаффмана, и на арифметическое кодирование. При этом он взял лучшее от них обоих: работает так же быстро, как хаффмановский, и со степенью сжатия как у арифметического кодирования.

          FSE принадлежит семейству кодеков ANS (Asymmetric Numeral Systems),  изобретённых Яреком Ду́дой. На основе его исследований Ян Колле разработал оптимизированный вариант алгоритма, впоследствии названный FSE.

          В заметках Яна Колле непросто разобраться, поэтому я изложу объяснение в несколько ином порядке, более удобном для понимания, на мой взгляд.


          Читать дальше →
          • +41
          • 11,4k
          • 6
        • Восемь советов начинающему юзабилисту


            College by DamaiMikaz

            Привет, Хабр! Меня зовут Ольга Шуберт, я занимаюсь UX-проектированием игровых проектов Mail.ru Group. В последнее время все чаще замечаю живой интерес к юзабилити игр со стороны и крупных разработчиков, и начинающих стартапов. Где найти специалистов? Как и где обучиться азам? Может ли вчерашний геймдизайнер стать UX-проектировщиком? Собрав в кучу самые распространенные вопросы начинающих юзабилистов, я сформировала короткий список советов, которые помогут преодолеть непростой карьерный путь.
            Читать дальше →
            • +36
            • 12,7k
            • 8
          • Выбор правильной стратегии обработки ошибок (части 3 и 4)

            • Перевод

            image


            Части 1 и 2: ссылка


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


            Для проверки условия библиотека С предоставляет макрос assert(), но только если не определён NDEBUG. Однако, как и в случае со многими другими вещами в С, это простое, но иногда неэффективное решение. Главная проблема, с которой я столкнулся, — глобальность решения: у вас есть утверждения либо везде, либо нигде. Плохо это потому, что вы не сможете отключить утверждения в библиотеке, оставив их только в собственном коде. Поэтому многие авторы библиотек самостоятельно пишут макросы утверждений, раз за разом.

            Читать дальше →
            • +26
            • 10,5k
            • 3
          • Тестирование GUI приложений с помощью оптического распознавания текстов

            Функциональное тестирование интерфейса (GUI) приложений — задача очень важная, нужная, но не всегда тривиальная. Основной вопрос тут: как сэмулировать работу пользователя? Простого, рядового пользователя, которому придется непосредственно изо дня в день работать с вашим софтом.

            Казалось бы, причем здесь распознавание текстов?
            Читать дальше →
          • Рюкзак для гика: несколько вариантов от Madrobots



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

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

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

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

              UPD (13 марта 2015): Заменил несколько плагинов на более актуальные + решил проблему с импортом CSS файлов внутрь SCSS

              Читать дальше →
            • Неприлично простая реализация неприлично простого алгоритма генерации лабиринта

                Продолжение этой статьи об очень простом алгоритме генерации прямоугольных лабиринтов. В этой статье я приведу мою реализацию алгоритма на С++, а также покажу несколько дополнительных функций, которые породил мой скучающий мозг. Если осмелитесь продолжить читать, убедитесь, что ознакомились с моей предыдущей статьей. Глянули? Молодцы, продолжаем.
                Читать дальше →
              • Хиты Geek сезона-2016

                  Новый год — время подведения итогов. Для любого бизнеса — это горячая пора, которая буквально обескровливает команду. А тут ещё распродажи 11.11, потом чёрная пятница и сразу новогодние скидки… Ни дня на передышку. Весь год мы не только рассылали посылки во все концы, выбирали товары, отдавали их на обзоры, но и писали посты на Geektimes, чтобы рассказать о самом интересном, необычном и выгодном.


                  Читать дальше →
                • ТОП-10 новогодних подарков по данным продаж Madrobots



                    Мы в Madrobots, как и все другие интернет-магазины, стараемся анализировать свою работу в течение года. Среди прочих моментов, которые мы анализируем — объем продаж различных товаров. Продажи тщательно отслеживаются, а результаты анализа текущей ситуации мы используем для создания плана работ/продаж на грядущий период (год, месяц, неделя).

                    На днях решили в очередной раз посмотреть, какие товары у нас продаются лучше всего, и составили своеобразный топ-10. В общем, решили поделиться этой информацией с читателями Geektimes. Возможно, кто-то тоже занимается продажами, и эта информация будет интересной. Ну, а гикам можно будет понять, что сейчас в России в тренде. В следующий раз, кстати, проведем оценку самых продаваемых товаров с Amazon, точнее, товаров с площадки Amazon Launchpad.
                    Читать дальше →
                  • Подборка русских и зарубежных фантастических книг за год



                      Почти два года назад мы делали подборку любопытных фантастических книг, вышедших в 2014 году. И в начале этого года мы решили поддержать это начинание — предлагаем вам одни из самых интересных, по мнению читателей, фантастических произведений, вышедших в 2016-м (как на русском, так и на английском).
                      Читать дальше →
                    • Самые востребованные языки программирования 2016

                        Под конец этого непростого года наша служба исследований собрала двадцатку самых востребованных языков программирования на hh.ru. По каждому языку отдельно посчитали динамику за год. А по первой пятерке заодно посмотрели изменения за 5 лет.

                        Что произошло: PHP в этом году стал самым востребованным у работодателей, отняв пальму первенства у Java. За год выросли оба, но PHP вырос сильнее. Go и Swift «выстрелили» на 161% и 100% соответственно, хотя до лидеров по количеству вакансий им еще далеко. А вот Python заметно сдал позиции, сразу на 32%.

                        Если сравнить с индексом TIOBE, то сразу заметно, что PHP у нас заметно выше, а Visual Basic, например, заметно ниже. Go рванул и там и тут, а вот Objective-C у TIOBE в лидерах роста, а у нас он упал на 9%. С у них, кстати, упал сильнее всех, а у нас, наоборот, вырос на 46%.


                        А где же 1С, спросите вы? В табличку не включили, но если интересно, то все неплохо: 2015 — 9 473, 2016 — 13 735. Прирост: 45%. В абсолютных цифрах — самый востребованный язык.
                        Посмотреть динамику первой пятерки за 5 лет
                      • Стильный код на Python, или учимся использовать Flake8

                        • Tutorial

                        Автор: Анатолий Соловей, developer

                        Язык программирования Python очень востребован на современном рынке, он развивается изо дня в день, и вокруг него сложилось активное сообщество. Во избежание конфликтов между разработчиками-питонистами, создатели языка написали соглашение PEP 8, описывающее правила оформления кода, однако даже там отмечено, что:
                        Many projects have their own coding style guidelines. In the event of any conflicts, such project-specific guides take precedence for that project.

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

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

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

                        На помощь в этом случае приходят линтеры — инструменты, контролирующие оформление кода в проекте. Именно они помогают поддерживать его чистоту и, в нашем случае, предотвращать создание коммитов, которые могут содержать ошибки. Я для контроля качества использую Flake8 и сейчас постараюсь объяснить, почему выбрал именно его, и расскажу, как его настроить, чтобы получить максимальный результат. Заинтересовались? Добро пожаловать под кат.
                        Читать дальше →
                      • Пролетая над долиной Маринера



                          Если в новогодние каникулы у вас окончательно испортилась погода, и посмотреть на небесные красоты нельзя, то есть еще минимум два интересных варианта. Можно открыть какую-нибудь из немаленького набора программ-планетариев. А можно, набравшись храбрости, преодолеть ненулевой порог вхождения и научиться летать с честной ньютоновской физикой в Orbiter. Благо, кроме недели отдыха, есть отличный повод — в этом году после шестилетнего перерыва вышла новая версия.
                          Читать дальше →
                        • Генетический алгоритм своими руками

                          Генетический алгоритм — способ оптимизации, какой-либо функции. Но, в нашем случае, мне просто был интересен принцип его работы, своеобразное моделирование эволюции. Ну и чтобы проэволюционировать самому.
                          Мы имеем абстрактное поле, в котором есть организмы (синие и бирюзовые клетки), еда (зеленые) и яд (красные).


                          image


                          У созданий всего 64 гена, но можно ввести всего лишь 10 первых.


                          Читать дальше →