• Курс пиксель-арта 3

      Это перевод публикации «Les Forges Pixel Art Course».

      Часть 1: Правильные инструменты
      Часть 2: Линии и кривые
      Часть 3: Перспективы
      Часть 4: Тень и свет
      Часть 5: Палитры цветов
      Часть 6: Сглаживание
      Часть 7: Текстуры и размытие
      Часть 8: Мир тайлов

      Часть 3: Перспективы


      Проблема перспективы в 2D играх, это вопрос который возникает часто, и это возможно то, почему так много любительских игр имеют множество противоречивостей в этой области. В частности эта часть адресуется к типичным перспективам в RPG, так что если вы ищете информацию о виде сбоку или от первого лица, вам следует поискать где-нибудь ещё. Это важно, помнить что перспектива — это «искусство представления трёхмерных объектов на плоской поверхности (в данном случае это ваш экран) как их увидел бы наблюдатель.»
      Читать дальше →
    • Кассовый разрыв: главная причина закрытия магазинов у новичков



        Эта толстая полярная лисичка подкрадывается ровно в тот момент, когда владелец думает, что у него всё хорошо. Типовой сценарий: открыл магазин в сентябре, круто отторговал Новый год, отбил вложения 10 марта, пережил летний несезон на маленькой точке, ко второму Новому году немного расширился и закончил сезон очень славно. Образовалось 2-3 свободных миллиона, на которые очень хочется купить большую сверкающую машину. Или мороженого. На все. Душа просит.

        Итог — из бизнеса вынимается достаточно большая сумма.

        А впереди несезон. Затраты выросли (аренда больше, продавцов больше), прибыли же могут оказаться на уровне первого года. Расходы становятся больше доходов, «подушки» нет — на резервные средства было куплено мороженое ещё в марте. Три основных расхода (80% по общей доле) — это закупка товара, аренда, зарплата. Глядя, что можно срезать, владелец начинает закупать чуть меньше товара и сокращает рекламу. Мол, всё равно товара же меньше. Прямое следствие — штопор, ведущий к закрытию.

        Но давайте посмотрим всё в числах. Предположим, у нас есть очень единичная точка в регионе, которая делает 5 миллионов рублей выручки в год. Обычно это один из нескольких магазинов, но в нашем примере он будет единственным.
        Читать дальше →
      • Вы — не Google

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

        Рациональные люди не принимают решения таким образом. Но именно так программисты часто решают использовать что-то вроде MapReduce.

        Вот как комментировал этот выбор Joe Hellerstein своим студентам (на 54-той минуте):

        Дело в том, что в мире сейчас есть где-то 5 компаний, обрабатывающие данные подобных объёмов. Все остальные гоняют все эти данные туда-сюда, добиваясь отказоустойчивости, которая им на самом деле не нужна. Люди страдают гигантоманией и гугломанией где-то с середины 2000-ых годов: «мы сделаем всё так, как делает Google, ведь мы же строим один из крупнейших (в будущем) сервисов по обработке данных в мире!»

        image

        Сколько этажей в вашем датацентре? Google сейчас строит четырёхэтажные, как вот этот в Оклахоме.
        Читать дальше →
      • Способы диагностики PostgreSQL — Владимир Бородин и Ильдус Курбангалиев

          Одним из самых популярных докладов конференции PG Day в 2015 году стал рассказ Владимира Бородина и Ильдуса Курбангалиева о ситуациях, когда посгресовым базам становится плохо, надо их диагностировать и искать узкие места. Все примеры в докладе взяты из реальной практики Яндекса, сопровождаются иллюстрациями и подробным рассказом о поиске «боттлнека». Не смотря на то, что проблемы рассматривались в разрезе 9.4 и 9.5 версий базы данных, общая ценность и практическая применимость советов Владимира и Ильдуса остается неизменной. Рады предложить вам транскрипцию этого доклада.

          Вступление Ильи Космодемьянского: сейчас у нас будет рассказ о том, как жить, если очень хочется иметь Oracle, а его нет. На самом деле, это полезный доклад, потому что одна из проблем, которую мы сейчас имеем – это проблема средств диагностики. Средства диагностики местами не достают, местами, вместо привычных средств диагностики нужно использовать довольно сложные тулзы, которые вообще предназначены для разработчиков Linux, а не для DBA. У DBA зубы начинают болеть, когда они смотрят на эти скрипты. И вот ребята из Яндекса и PG Pro расскажут о методах диагностики Postgres, которые они применяют, как ими пользоваться и немного расскажут о том, как они собираются улучшить этот мир.


          Читать дальше →
        • Анимации на GPU: делаем это правильно

            Думаю, все уже знают, что современные браузеры умеют рисовать некоторые части страницы на GPU. Особенно это заметно на анимациях. Например, анимация, сделанная с помощью CSS-свойства transform выглядит гораздо приятнее и плавнее, чем анимация, сделанная через top/left. Однако на вопрос «как правильно делать анимации на GPU?» обычно отвечают что-то вроде «используй transform: translateZ(0) или will-change: transform». Эти свойства уже стали чем-то вроде zoom: 1 для IE6 (если вы понимаете, о чём я ;) для подготовки слоя для анимации на GPU или композиции (compositing), как это предпочитают называть разработчики браузеров.


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

            Читать дальше →
          • Чем плохо быть full stack разработчиком

              Введение


              Прежде всего определимся с терминами. Есть много разных представлений о том, кто же такой full stack разработчик, кто-то даже вполне обоснованно считает, что такие разработчики — это миф, но в этой статье будет иметься в виду разработчик, который обладает знаниями и умениями, позволяющими с нуля написать некий софт и вывести его в продакшн. При этом софт может быть рассчитан на web платформу, мобильные приложения или десктопные. Идеальный full stack разработчик — это тот, кто владеет в какой-то мере всеми платформами и может разработать и установить на них свой софт. Но это действительно скорее миф.
              Неплохое определение с quora.com
              Когда люди ищут full stack разработчика, они ожидают увидеть поющего и танцующего техномага.
              Ну или хотя бы кого-то, кто не будет слишком сильно жаловаться, когда его попросят поработать вне его зоны комфорта.

              Возможно, по заголовку кому-то покажется, что это жалобный пост, который говорит о том, как плохо живётся неквалифицированному школьнику, который похватал всего из разных статей в интернете. Нет, пост не жалобный, мы говорим про full stack, а не full slack, и в конце будет так же рассмотрен список плюсов. И мы будем рассматривать не школьника, а разработчика с опытом работы в пять и более лет. Просто посмотрим, какие минусы есть в таком развитии.
              Читать дальше →
            • От песка до процессора

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

              image

              Как и обещал – подробный рассказ о том, как делают процессоры… начиная с песка. Все, что вы хотели знать, но боялись спросить )

              Читать дальше →
            • Рецепты тестирования Ruby и Rails приложений

              • Tutorial
              image

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

              Кому это будет интересно?

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

              Читать дальше →
            • Автоматизированное тестирование контроллеров в Rails

              Привет, Хабр! Давно манят меня лавры быть автором, и вот, наконец, настал тот светлый час, когда я допинал себя представить на твой суд мой небольшой опус.

              Изучая на досуге Ruby и Rails, пробуя то RSpec, то вдруг Minitest, дошёл я до создания web-приложения с фронтэндом на JavaScript и бэкендом на Ruby, торчащим наружу REST API на базе обычных контроллеров Rails. Я использую Rails, хотя это совершенно не принципиально. Описанный ниже подход применить можно к чему угодно.

              Тут следует сделать небольшое отступление. По натуре я человек требовательный, и всячески борюсь за доказанную стабильность кода (на словах-то уж точно). А уж когда речь заходит о безопасности пользователей в моём приложении, без тестов, хотя бы показывающих, что абы кто мои данные не получит, я чувствую себя совсем не комфортно. Начинаю грустить и вообще никакой код не писать. Даже если я — один-единственный пока пользователь.

              Казалось бы, всё очень просто: берём RSpec и пишем тесты. Но это же скучно! Для каждого контроллера, для каждого поддерживаемого метода проверить, как минимум, что без выданного ранее токена пользователь получит от ворот поворот — это ж сколько одинакового кода надо написать! А дальше как? Контроллеров всё больше, тесты копировать скучно, да и в возможностях подходы менять я остаюсь ограничен. Пойди-ка все эти тесты потом перепиши, если я захочу, например, версию API передавать не в URL, а в заголовке, или наоборот. В общем, задумал я написать генератор.
              Постановка задачи
            • Различные методы загрузки ассоциаций в Ruby on Rails

              Rails предоставляют нам 4 различных способа загрузки ассоциаций: preload, eager_load, includes и joins. Рассмотрим каждый из них:

              Preload


              Этот метод загружает ассоциации в отдельном запросе:
              User.preload(:posts).to_a
              
              # =>
              SELECT "users".* FROM "users"
              SELECT "posts".* FROM "posts"  WHERE "posts"."user_id" IN (1)
              

              Т.к. preload всегда создает два отдельных запроса, то мы не можем использовать таблицу posts в условии выборки:
              User.preload(:posts).where("posts.desc='ruby is awesome'")
              
              # =>
              SQLite3::SQLException: no such column: posts.desc:
              SELECT "users".* FROM "users"  WHERE (posts.desc='ruby is awesome')
              

              А таблицу users – можем:
              User.preload(:posts).where("users.name='Neeraj'")
              
              # =>
              SELECT "users".* FROM "users"  WHERE (users.name='Neeraj')
              SELECT "posts".* FROM "posts"  WHERE "posts"."user_id" IN (3)
              

              Читать дальше →
              • +34
              • 28.9k
              • 2
            • Работа в одиночку очень сложна

              • Translation
              От переводчика: не торопитесь, прочитав заголовок, бурчать что-то вроде «Спасибо, капитан», и скроллить дальше. Название статьи не совсем отражает её содержание, сама она несколько о другом: о творческом процессе и возможности выразить себя в создании нового. Ну и немного об одиночестве, конечно.

              По какому-то безумному совпадению, которое я никогда не пойму, моя игра Pinstripe (над ней я работаю уже почти 4 года) была показана на церемонии Game Awards 2015. Было чрезвычайно странно наблюдать, как Марк Хэмилл и Кифер Сазерленд обсуждают игры, в то время как моё лицо крупным планом показывают на всех проекторах. Я очень доволен, не поймите неправильно, но я также хочу быть откровенным: это стало первым за четыре года реальным подтверждением того, что да, работа над проектом в одиночку стоила того. Кроме ощущения счастья и возможности рассказать свою историю «одинокого волка» тысячам людей в Лос-Анджелесе, есть ещё несколько преимуществ работы в одиночку.
              Читать дальше →
            • Убийцы оптимизации

              • Translation
              image

              В этом посте изложены советы, как не написать код, производительность которого окажется гораздо ниже ожидаемой. Особенно это касается ситуаций, когда движок V8 (используемый в Node.js, Opera, Chromium и т. д.) отказывается оптимизировать какие-то функции.
              Читать дальше →
            • Архитектура open source-приложений: Как работает nginx

              • Translation


              Мы в «Латере» занимаемся созданием биллинга для операторов связи и рассказываем на Хабре о разработке своего продукта, а также публикуем интересные технические переводные материалы. И сегодня мы представляем вашему вниманию адаптированный перевод одной из глав книги «Архитектура open-source-приложений», в которой описываются предпосылки появления, архитектура и организация работы популярного веб-сервера nginx.
              Читать дальше →
            • Ресурсы для дизайнеров и front-end-разработчиков

              • Translation
              Ниже представлена подборка инструментов для дизайнеров и front-end-разработчиков. Мы настоятельно рекомендуем вам просмотреть их все. Надеемся, что вы найдете для себя что-то полезное.

              Читать дальше →
              • +19
              • 60.1k
              • 7
            • Разработка быстрых мобильных приложений на Android. Часть вторая

              • Translation
              • Tutorial
              В Edison мы часто сталкиваемся с оптимизацией мобильных приложений и хотим поделиться материалом, который считаем крайне полезным, если вы решаете одну из двух задач: а) хотите чтобы приложение меньше тормозило; б) хотите сделать красивый, мягкий и гладкий интерфейс для массового пользователя.

              Предлагаем вашему вниманию первую часть перевода статьи Udi Cohen, которую мы использовали как пособие для обучения молодых коллег оптимизации под Android.

              (Читать первую часть)


              Читать дальше →
              • +24
              • 29.2k
              • 5
            • Программирование — не тяжелый физический труд, но все равно отстой

              Peter Welch
              30 апреля 2014 г.
              Об авторе. Peter Welch писатель и программист, автор книги «And Then I Thought I Was a Fish», автор блога «Still Drinking».


              Изображение: Joe Raedle/Getty Images

              Каждый мой друг, хотя бы дважды в неделю поднимающий на работе что-то тяжелее ноутбука, рано или поздно в разговоре невзначай бросает что-то вроде: «Бро, ты не пашешь на износ. Я только что отработал 4700-часовую неделю, копая тоннель под Мордором, используя отвертку»

              Они правы. Мордор — отстой, и копание тоннеля гораздо трудозатратнее, чем тыкание в клавиши, если конечно вы не муравей. Но для галочки, давайте договоримся о том, что стресс и безумие — это плохо? Отлично.
              Добро пожаловать в мир программирования
            • Тонкости ES6: Коллекции (часть 1)

              • Translation
              Ранее на этой неделе (статья от 19 июня — прим.) спецификация ES6, официально названная ECMA-262, 6th Edition, ECMAScript 2015 Language Specification, преодолела последний барьер и была утверждена как стандарт Ecma. Мои поздравления TC39 и всем остальным, кто помогал. ES6 закончен!

              Даже лучше: больше не надо будет ждать следующего обновления 6 лет. Комитет собирается выпускать новую версию в срок около года. Предложения по ES7 уже примаются!

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

              Читать дальше →
            • Simplify.js — JavaScript-библиотека для упрощения ломаных линий

                Рад представить вашему вниманию еще одну крохотную, но полезную open-source-утилиту своего авторства — Simplify.js.



                Simplify.js — очень быстрая реализация упрощения ломаных линий на JavaScript. Изначально написав ее для Leaflet (библиотеки для интерактивных карт), после небольшого эксперимента по оптимизации захотелось выпустить ее в качестве отдельной библиотеки без зависимостей, которую можно использовать как в браузере, так и на серверных платформах, таких, как Node.js, и применять и для 2D, и для 3D-точек.

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

                Читать дальше →
              • 9 фактов, которые знают программисты, и не знают все остальные

                • Translation
                image

                Факт 1


                Под капотом самых критичных программ, которые вы используете на ежедневной основе (Mac OS X или Facebook) содержится ужасное количество хаков и костылей, которые с трудом уживаются друг с другом. Это как если бы вы разобрали боинг 747 и увидели, что топливопровод держится вешалкой для одежды, а шасси смотаны изолентой.

                Бен Черри
                Читать дальше →
              • Несколько интересностей и полезностей для веб-разработчика #29

                  Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

                  HumHub



                  Открытая социальная сеть, построенная на Yii — достойный аналог Diaspora. Разработчики вообще говорят, что это фреймворк, который предоставляет инструменты для лёгкой и продуктивной командной работы. Гибкая модульная система и ряд плагинов: заметки, таск-менеджер, календарь, голосование, рассылки и др. Еще HumHub — это очень красиво. Клевый современный интерфейс, асинхронность, всплывающие подсказки и прочие детали.

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