• Робот-курьер — доставка за 30 минут, или как в России построить будущее

    Доставить покупку в пригород за 30 минут и за $1 — вызов, который не примет ни один перевозчик. Зато примет робот, который движется по монорельсу. От идеи к первым прототипам: экономика, конкуренты, ошибки и их осмысление. На аперитив — ответ на экзистенциальный вопрос “Зачем?”

    Читать дальше →
  • Dagger 2 для начинающих Android разработчиков — Введение

    • Translation
    Данная статья является первой частью серии статей, предназначенных, по словам автора, для тех, кто не может разобраться с внедрением зависимостей и фреймворком Dagger 2, либо только собирается это сделать. Оригинал написан 18 ноября 2017 года. Изображения и GIF — из оригинала. Перевод вольный.

    image
    Читать дальше →
    • +3
    • 55.8k
    • 6
  • Учим CSS Grid за 5 минут

    • Translation
    Быстро познакомимся с будущим макетов веб-сайтов.

    image

    Grid макеты имеют основополагающее значение для дизайна веб-сайтов, а модуль CSS Grid — это самый мощный и простой инструмент для его создания.

    В этом году модуль также получил нативную поддержку основных браузеров (Safari, Chrome, Firefox), поэтому я считаю, что всем фронтенд разработчикам придется изучать эту технологию в недалеком будущем.

    В этой статье я быстренько расскажу вам об основах CSS Grid.
    Читать дальше →
  • О выборе структур данных для начинающих

    • Translation
    image

    Часть 1. Линейные структуры


    Массив


    Когда вам нужен один объект, вы создаёте один объект. Когда нужно несколько объектов, тогда есть несколько вариантов на выбор. Я видел, как многие новички в коде пишут что-то типа такого:

    // Таблица рекордов
    int score1 = 0;
    int score2 = 0;
    int score3 = 0;
    int score4 = 0;
    int score5 = 0;

    Это даёт нам значение пяти рекордов. Этот способ неплохо работает, пока вам не потребуется пятьдесят или сто объектов. Вместо создания отдельных объектов можно использовать массив.

    // Таблица рекордов
    const int NUM_HIGH_SCORES = 5;
    int highScore[NUM_HIGH_SCORES] = {0};

    Будет создан буфер из 5 элементов, вот такой:



    Заметьте, что индекс массива начинается с нуля. Если в массиве пять элементов, то они будут иметь индексы от нуля до четырёх.
    Читать дальше →
  • Создаём собственный программный 3D-движок

    • Translation
    image

    Часть 1: точки, векторы и базовые принципы


    Современные трёхмерные игровые движки, используемые в крупнейших проектах — это тонкая смесь математики и программирования. Многие программисты игр признают, что всецело понять их очень непросто. Если вам не хватает опыта (или профессионального образования, как мне), эта задача становится ещё более сложной. Я хочу познакомить вас с основами графических систем 3D-движков.

    В этой части мы рассмотрим точки и векторы, а также всё интересное, что с ними связано. Если вы владеете основами алгебры (переменные и математика переменных) и информатики (основы любого объектно-ориентированного языка), то сможете разобраться в этой статье. Но учтите, некоторые из тем будут довольно сложными.
    Читать дальше →
  • Kubernetes на голом железе за 10 минут

    • Translation


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


    По ходу этой статьи мы установим Kubernetes 1.6 на реальную (не виртуальную) машину под управлением Ubuntu 16.04 примерно за 10 минут. В результате у вас появится возможность начать изучать взаимодействие с Kubernetes посредством его CLI kubectl.
    Читать дальше →
  • Сравнение производительности языков на примере простейшего классификатора

      Доброго времени суток, хабр!


      Моим основным ЯП является D. Всегда понимал, что он будет проигрывать C++ из-за сборщика, каких-то высокоуровневых плюшек и т.д. Но никогда не доходили руки проверить насколько. Решил написать простенький классификатор (даже не помню метод как называется) и проверить. Результат меня приятно удивил: версия C++ отработала за 5.47 сек, версия D — за 5.55 сек. «0.08 сек при обработке файла в 74Мб это не так уж и много» — подумал я. Но, на всякий случай, решил попробовать собрать код на D с помощью gdc (dmd как frontend, gnu backend) и тут уже в душу закрались сомнения, что я всё сделал правильно: код отработал за 4.01 сек, что более чем на 20% быстрее версии на С++. Решил собрать с помощью ldc2 (dmd frontend, llvm backend): 2.92(!!) сек. Тут я решил разобраться.
      Читать дальше →
    • Создаём собственный физический 2D-движок: части 2-4

      • Translation
      image


      Оглавление


      Часть 2: ядро движка

      • Интегрирование
      • Метки времени
      • Модульная архитектура
        • Тела
        • Формы
        • Силы
        • Материалы
      • Широкая фаза
        • Отсечение дубликатов контактных пар
        • Система слоёв
      • Проверка пересечения полупространств

      Часть 3: трение, сцена и таблица переходов

      • Трение
      • Сцена
      • Таблица переходов коллизий

      Часть 4: ориентированные твёрдые тела

      • Математика вращения
      • Ориентированные формы
      • Распознавание коллизий
      • Разрешение коллизий

      Читать дальше →
      • +50
      • 23.8k
      • 7
    • Визуализация процесса обучения нейронной сети средствами TensorFlowKit

        Hint
        Перед прочтением этой статьи советую ознакомиться с предыдущей статьей о TensorFlowKit и поставить star репозиторию.

        Я не люблю читать статьи, сразу иду на GitHub
        GitHub: TensorFlowKit
        GitHub: Example
        GitHub: Другое
        TensorFlowKit API
        Посeтив репозиторий, добавьте его в «Stars» это поможет мне написать больше статей на эту тему.

        image

        Начиная работать в сфере машинного обучения, мне было тяжело переходить от объектов и их поведений к векторам и пространствам. Сперва все это достаточно тяжело укладывалось в голове и далеко не все процессы казались прозрачными и понятными с первого взгляда. По этой причине все, что происходило внутри моих наработок, я пробовал визуализировать: строил 3D модели, графики, диаграммы, изображения и тд.

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

        Существуют целые сообщества, решающие такого рода задачи, например Distill, Welch Labs, 3Blue1Brown.

        Читать дальше →
      • Сотня криптовалют, описанных не более чем четырьмя словами

        • Translation


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

        Название        | Токен | Описание                              
        ----------------|-------|------------------------------------------
        Bitcoin         | BTC   | Цифровое золото                             
        Ethereum        | ETH   | Программируемые контракты и деньги        
        Bitcoin Cash    | BCH   | Клон Биткоина                            
        Ripple          | XRP   | Сеть корпоративных платежей и взаиморасчетов
        Litecoin        | LTC   | Ускоренная версия Биткоина                           
        Dash            | DASH  | Клон Биткоина с акцентом на приватность          
        NEO             | NEO   | Ethereum китайского рынка                  
        NEM             | XEM   | Готовые цифровые активы из коробки       
        Monero          | XMR   | Анонимные цифровые деньги                    
        Ethereum Classic| ETC   | Клон Ethereum                          
        IOTA            | MIOTA | Платежи в сфере Интернета вещей              
        Qtum            | QTUM  | Биткоин со смарт-контрактами Ethereum             
        OmiseGO         | OMG   | Банкинг, переводы и биржа
        Zcash           | ZEC   | Анонимные цифровые деньги
        BitConnect      | BCC   | Пирамида Мейдоффа в мире криптовалют 
        Lisk            | LSK   | Децентрализованные приложения на Javascript
        Cardano         | ADA   | Академический подход к умным контрактам
        Tether          | USDT  | Стоит 1 доллар                            
        Stellar Lumens  | XLM   | Цифровые долговые расписки                            
        EOS             | EOS   | Децентрализованные приложения на WebAssembly
        Hshare          | HSR   | Коммутатор для разных блокчейнов                  
        Waves           | WAVES | Децентрализованная биржа и краудфандинг
        Читать дальше →
      • Трёхмерная графика с нуля. Часть 2: растеризация

        • Translation
        image


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

        К сожалению, эта простота имеет свою цену: низкую производительность. Несмотря на то, что существует множество способов оптимизации и параллелизации трассировщиков лучей, они всё равно остаются слишком затратными с точки зрения вычислений для выполнения в реальном времени; и хотя оборудование продолжает развиваться и становится быстрее с каждым годом, в некоторых областях применения необходимы красивые, но в сотни раз быстрее создаваемые изображения уже сегодня. Из всех этих областей применения самыми требовательными являются игры: мы ожидаем рендеринга отличной картинки с частотой не менее 60 кадров в секунду. Трассировщики лучей просто с этим не справятся.

        Тогда как это удаётся играм?

        Ответ заключается в использовании совершенно иного семейства алгоритмов, которое мы исследуем во второй части статьи. В отличие от трассировки лучей, которая получалась из простых геометрических моделей формирования изображений в человеческом глазе или в камере, сейчас мы будем начинать с другого конца — зададимся вопросом, что мы можем отрисовать на экране, и как отрисовать это как можно быстрее. В результате мы получим совершенно другие алгоритмы, которые создают примерно похожие результаты.
        Читать дальше →
        • +36
        • 23.2k
        • 2
      • Настройка валидации DTO в Spring Framework

          Всем привет! Сегодня мы коснёмся валидации данных, входящих через Data Transfer Object (DTO), настроим аннотации и видимости — так, чтобы получать и отдавать только то, что нам нужно.

          Итак, у нас есть DTO-класс UserDto, с соответствующими полями:

          public class UserDto {
          
              private Long id;
              private String name;
              private String login;
              private String password;
              private String email;
          }

          Я опускаю конструкторы и геттеры-сеттеры — уверен, вы умеете их создавать, а увеличивать в 3-4 раза код смысла не вижу — представим, что они уже есть.

          Мы будем принимать DTO через контроллер с CRUD-методами. Опять же, я не буду писать все методы CRUD — для чистоты эксперимента нам хватит пары. Пусть это будут create и updateName.
          Читать дальше →
        • Как быстро спроектировать сайт с помощью CSS Grid

          • Translation
          image

          Модуль CSS Grid — это фантастический инструмент для создания макетов веб-сайтов. Он позволяет вам экспериментировать с макетами быстрее, чем любой другой инструмент, которые я пробовал.

          В этой статье я научу вас, как это сделать.

          Во-первых, я объясню HTML и CSS, которые нам нужны для этой задачи, которую я разбил на четыре части. Как только вы с этим разберетесь, мы перейдем к экспериментам с макетами.

          Если вы совершенно не знакомы с CSS Grid, вам может понадобиться просмотреть мою предыдущую статью Учим CSS Grid за 5 минут.
          Читать дальше →
        • Kotlin code style


            За полтора года работы с языком Kotlin, мы перевели на него все свои проекты и фреймворки. Чтобы разработчики могли быстрее включаться в работу над проектом, а код ревью не превращался в бесконечный спор, мы решили формализовать накопленный опыт и разработали собственный код-стайл.


            Поехали!

            Читать дальше →
          • Трёхмерная графика с нуля. Часть 1: трассировка лучей

            • Translation
            image


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

            В этой работе мы сосредоточимся не на скорости, а на чётком объяснении концепций. Код примеров написан наиболее понятным образом, который не обязательно является самым эффективным для реализации алгоритмов. Есть множество способов реализации, я выбрал тот, который проще всего понять.

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


            Читать дальше →
          • Храните свои сбережения…в бункере

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



              Подземные объекты, окруженные скалой привлекают повышенным уровнем надежности, они достаточно прочны и могут выдержать ядерную атаку. Чаще всего такие дата-центры обладают всего одним входом. Под землей нужный температурный режим регулируется естественным образом, затраты на охлаждение минимальные, что позволяет предоставлять корпоративным клиентам предложения по выгодным ценам. Да и строительство таких серверных ферм зачастую обходится дешевле: перестраивается уже готовый объект, оснащается необходимой инфраструктурой для обеспечения функционирования, а не возводится с нуля.
              Читать дальше →
            • MVP – это не черновой вариант! Точно?



                Что такое MVP?


                MVP (minimum viable product — минимально жизнеспособный продукт) – это продукт, который разрабатывается с максимальной экономией денег и ресурсов, как правило, с единственной целью – проверки гипотезы. Гипотеза, как правило, заключается в необходимости и/или полезности этого продукта.


                MVP ни в коем случае не означает “черновой вариант”, сделанный в спешке, который после завершения выбросят и будут писать с нуля.


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

                Читать дальше →
              • Nuklear+ — миниатюрный кроссплатформенный GUI

                  Nuklear+ (читается как "Nuklear cross", значит "кроссплатформенный Nuklear") — это надстройка над GUI библиотекой Nuklear, которая позволяет абстрагироваться от драйвера вывода и взаимодействия с операционной системой. Нужно написать один простой код, а он потом уже сможет скомпилироваться под все поддерживаемые платформы.


                  Я уже писал на хабре статью "Nuklear — идеальный GUI для микро-проектов?". Тогда задача была простой — сделать маленькую кроссплатформенную утилиту с GUI, которая будет примерно одинаково выглядеть в Windows и Linux. Но с тех самых пор меня не отпускал вопрос, а можно ли на Nuklear сделать что-то более-менее сложное? Можно ли целиком на нём сделать какой-нибудь реальный проект, которым будут пользоваться?

                  Читать дальше →
                  • +16
                  • 14.2k
                  • 7
                • Life extension, part 3 — Современные воззрения на процесс старения



                    …… потому что бояться смерти есть не что иное, как думать, что знаешь то, чего не знаешь. Ведь никто же не знает ни того, что такое смерть, ни того, не есть ли она для человека величайшее из благ, а все боятся ее, как будто знают наверное, что она есть величайшее из зол. Но не самое ли это позорное невежество – думать, что знаешь то, чего не знаешь? ……
                    Платон “Апология Сократа”


                    1. Как современная наука видит старение?
                    2. Есть ли у нас шанс дожить до того момента, когда появится лекарство позволяющее отменить старость и продлить активную жизнь до 120 и более лет?
                    3. Что мне делать прямо сейчас?

                    Попытка дать ответ на эти вопросы под катом, мы продолжаем путешествие по технологиям и понятиям Life extension.

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