• Не попадитесь в ловушку используя Oracle JDK 11

    Привет, Хабр! Представляю вашему вниманию перевод статьи «Do not fall into Oracle's Java 11 trap» автора Stephen Colebourne.

    Java 11 была официально выпущена. Это мажорный релиз, имеющий долгосрочную поддержку (LTS — long-term support). Однако Oracle приготовила ловушку (намеренно или случайно).

    Ловушка


    В течение 23 лёт разработчики привыкли загружать JDK с сайта Oracle и использовать его бесплатно. Введите «JDK» в свою любимую поисковую систему, и верхняя ссылка будет вести на страницу загрузки Oracle Java SE (я намеренно не предоставляю ссылку). Но этот запрос и эта ссылка теперь являются ловушкой.

    Oracle JDK, на который ссылаются почти все поисковые запросы, теперь является коммерческим, и не является бесплатным.
    Читать дальше →
  • Обработка ошибок в Go 2

      title


      Буквально пару дней назад в Денвере закончилась очередная, уже 5-я по счёту, крупнейшая конференция по Go – GopherCon. На ней команда Go сделала важное заявление – черновики предварительного дизайна новой обработки ошибок и дженериков в Go 2 опубликованы, и все приглашаются к обсуждению.


      Я постараюсь подробно пересказать суть этих черновиков в трёх статьях.


      Как многим, наверняка, известно, в прошлом году (также на GopherCon) команда Go объявила, что собирает отчёты (experience reports) и предложения для решения главных проблем Go – тех моментов, которые по опросам собирали больше всего критики. В течении года все предложения и репорты изучались и рассматривались, и помогли в создании черновиков дизайна, о которых и будет идти речь.


      Итак, начнём с черновиков нового механизма обработки ошибок.

      Читать дальше →
    • Встречайте псевдоконсоль Windows (ConPTY)

      • Translation
      Статья опубликована 2 августа 2018 года

      Это вторая статья про командную строку Windows, где мы обсудим новую инфраструктуру и программные интерфейсы псевдоконсоли Windows, то есть Windows Pseudo Console (ConPTY): зачем мы её разработали, для чего она нужна, как работает, как её использовать и многое другое.

      В прошлой статье «Тяжкое наследие прошлого. Проблемы командной строки Windows» мы рассказали о предпосылках появления терминала и эволюции командной строки в Windows, а также начали изучать внутреннее устройство Windows Console и инфраструктуры Windows Command-Line. Мы также обсудили многие преимущества и главные недостатки консоли Windows.

      Один из недостатков заключается в том, что Windows пытается быть «полезной», но мешает разработчикам альтернативных и сторонних консолей, разработчикам служб и т.д. При создании консоли или службы разработчикам нужно иметь доступ к каналам связи, по которым их терминал/служба обменивается данными с приложениями командной строки, или предоставлять доступ к ним. В мире *NIX это не проблема, потому что *NIX предоставляет инфраструктуру «псевдотерминала» (PTY), которая позволяет легко создавать коммуникационные каналы для консоли или службы. Но в Windows такого не было…

      … до настоящего времени!
      Читать дальше →
    • Куда податься тем, кто принял решение уйти с Ubuntu Unity



        Canonical не так давно заявила о прекращении работы над Unity и Mir. Тем не менее, паниковать не стоит, здесь далеко не все потеряно. Конечно, жаль, что не будет развиваться мобильная версия проекта, но все остальные ветки явно не собираются «усыхать». За время работы над ними компании Canonical у Unity появилось множество преданных поклонников, которые будут продолжать разработку уже своими силами.

        Сообщество в настоящее время формирует устойчивый центр, который и будет заниматься развитием Unity. Во всяком случае, фиксить баги и патчить уязвимости будут и дальше. Но все же в отношении всего проекта сохраняется неопределенность, и рассчитывать на то, что Ubuntu Unity будет активно развиваться и дальше не стоит. На что стоит выбрать, если принято решение о смене Unity на что-то другое?
        Читать дальше →
      • Создание игры на Unreal Engine 4 за 150 часов (видео + исходники)

          Приветствую, Хабр! Хотел бы познакомить вас с относительно небольшим проектом, который я сделал c нуля примерно за 150 часов (50 заходов ~3 часа каждый) на Unreal Engine 4. Проект я делал в прямом эфире только на стримах раз в неделю (в общей сложности ушел год), попутно отвечая на вопросы пользователей.

          Сам проект не предназначался как коммерческий. Целью я ставил на практике показать всю сложность разработки игр, а именно такие проблемы, как:

          • Планирование и прототипирование проекта
          • Продумывание и реализация архитектуры проекта и отдельных его компонентов
          • Реализация интерфейса пользователя
          • Отладка и исправление ошибок
          • Работа с ассетами и графикой

          image

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

          Если вам интересны подробности проекта, записи стримов, исходники и прочее, читайте далее.
          Читать дальше →
        • Windows 10 Creators Update: что нового в Bash/WSL и Windows Console

          • Translation
          Когда вышел Windows 10 Anniversary Update (AU), подсистема Windows Subsystem for Linux (WSL) была ещё далека от завершения и страдала от многих несовместимостей, особенно с популярными средствами разработки вроде node.js, Java и др.

          Однако было важно передать эту восхитительную новую функцию в руки реальных пользователей, чтобы мы могли узнать у них — у ВАС — что именно необходимо WSL, что работает, что не работает и т.д.

          И сообщество ответило!

          Таким образом, этот новый релиз подсистемы Windows для Linux и консоли Bash создан вами и для вас!
          Читать дальше →
        • НДС и фрилансеры, работающие с Upwork

          • Tutorial
          Статья изложенная ниже — рассматривает лишь один из аспектов касающихся уплаты налогов при работе с Upwork. В данный момент существует более полное руководство — Легальный вывод средств с Upwork в РФ.



          Те, кто выводят средства с Upwork легально, вздрогнули, когда Upwork предложил «упрощенный» документооборот. В первую очередь потому, что этот документооборот подразумевал декларацию комиссий Upwork и уплату с них НДС.

          Прореагировав на шквал возмущений, на неопределенный срок Upwork вернулся к старому документообороту. Напряженное ожидание, когда же Upwork прекратит работу со старыми договорами закончилось неожиданно — 3 июля 2016 года были внесены изменения в Налоговый кодекс, вступившие в силу с 1 января 2017 года. Отныне закону до лампочки, какие договора используются — НДС теперь надо платить всем. Подробнее проблема описана в статье Налоговый cуслик — 2.

          Развернувшиеся на тостере дебаты о том, как ко всему этому относиться, еще продолжаются. Но выпущенное 3 дня назад Эльбой обновление, в том что платить НДС все-таки надо (хотя бы с точки зрения закона) убедило почти всех.

          image
          Читать дальше →
        • Релиз CLion 2017.1: C++14, C++17, код на дизассемблере в отладчике, Catch, MSVC и многое другое

            Привет, Хабр! Спешим поделиться радостной новостью – мы выпустили первый в этом году релиз нашей кросс-платформенной IDE для C и C++, CLion 2017.1!

            image


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

            • Поддержка C++14 (всё кроме constexpr)
            • Начальная поддержка C++17 (мы начали с самой востребованной возможности – nested namespaces)
            • Возможность конвертировать тип переменной в auto
            • Во время отладки программы, при отсутствии файлов с исходным кодом можно переходить на код на дизассемблере (disassembly view)
            • Поддержка фреймворка для юнит-тестирования Catch
            • Значительное ускорение отклика редактора при печати кода (Zero Latency Typing)
            • И, наконец, экспериментальная поддержка компилятора Microsoft Visual C++!

            И это еще не все! Читайте подробности ниже.

            Кстати, попробовать все новые возможности можно на небольшом демо-проекте, который мы специально подготовили для этих целей.
            Читать дальше →
          • Что я изменил бы в Go

            • Translation

            image


            В течение полугода я программировал преимущественно на Go. И я разочарован. По двум причинам:


            • В Go особенно трудно придерживаться функциональной парадигмы. По сути, язык препятствует функциональному программированию. Меня это разочаровало, потому что в императивном коде, который я пишу, большое количество шаблонных кусков. К тому же, как мне кажется, в этом случае выше риск ошибок, в отличие от использования функциональных абстракций.
            • Я считаю, что Go упускает свои шансы. В программных языках появились замечательные нововведения (особенно в сфере проверки и вывода типов — type inference), делающие код безопаснее, быстрее и чище. Мне хотелось бы, чтобы Google использовала своё влияние, чтобы поддержать некоторые из этих идей.

            Я не первый, кто воспринимает Go подобным образом. Вот публикации других людей, разделяющих мои впечатления:



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

            Читать дальше →
          • Обзор IntelliJ IDEA 2017.1: Java 9, Kotlin 1.1, Spring, Gradle, JavaScript, Go и многое другое

              Привет Хабр! Спешу поделиться хорошей новостью. Работа над IntelliJ IDEA 2017.1 закончена, и новую версию IDE можно наконец скачать и попробовать. В этом обновлении исправлены многие важные баги а также появились улучшения для многих поддерживаемых языков, фреймворков и встроенных инструментов. Ниже краткий обзор наиболее важных изменений.


              Читать дальше →
            • Почему Kotlin отстой

                Эта статья родилась по мотивам вот этой статьи в виде полу-шутки. В той статье большая часть "проблем" является либо синтетическими и крайне редко используемыми, либо притянутыми за уши из-за ожидания соответствия языка теоретической парадигме которой, по мнению автора, язык должен соответствовать. С другой стороны не упомянуты вещи, которые мне лично действительно усложняют жизнь.

                Читать дальше →
              • Автоматические объекты компилятора

                  Статья основана на версии Kotlin «1.1-М04».


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


                  В Java существует только один способ создания элемента кода – это лямбда-выражение, которое может реализовывать только функциональный интерфейс (подробнее см. в документации на Java). В Kotlin существует несколько различных способов описать объект, содержащий пользовательский код.


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


                  fun Action( cb:()->Unit ) { cb() }
                  fun Test() {
                    Action{
                      // Этот блок кода будет выполнен в функции
                    }
                  }

                  Как это реализовано и чем чревато использование такого кода в программе?


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


                  Читать дальше →
                • IDEA пора закапывать?

                    В этой статье я хочу поднять тему старения компаний и извечный вопрос: что делать простым пользователям? На примере IDEA. С графиками деградации и загнивания.

                    Тем, кто интересуется теорией, советую ознакомиться с недавно опубликованной замечательной статьёй "Биологические предпосылки деградации компаний". Я же хочу обсудить вполне конкретную ситуацию, как пример того, когда хорошие вещи начинают отдавать неприятным душком.
                    Читать дальше →
                  • Грааль и Трюфель (Graal & Truffle)

                    • Translation
                    Малоизвестный исследовательский проект, который может значительно ускорить инновации в проектировании языков программирования

                    От переводчика


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


                    Введение


                    Со времён расцвета компьютерной индустрии многие были увлечены квестом в поисках идеального языка программирования. Квест очень сложный: создание нового языка — задача не из лёгких. И очень часто в процессе происходит дробление сложившейся экосистемы программирования и возникает необходимость заново строить базовые инструменты для нового языка: компилятор, отладчик, HTTP стек, IDE, библиотеки и бесконечное число базовых блоков пишутся с нуля для каждого нового языка. Совершенство в дизайне языков программирования недостижимо, и новые идеи возникают постоянно. Мы похожи на Сизифа: приговоренного богами на вечное толкание камня в гору, чтобы в итоге увидеть, как тот скатывается вниз снова и снова … целую вечность.


                    Как можно разорвать этот порочный цикл? Давайте помечтаем, чего бы нам хотелось.

                    Читать дальше →
                  • learnopengl. Урок 1.6 — Текстуры

                    • Translation
                    • Tutorial

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


                    Читать дальше →
                    • +26
                    • 69k
                    • 6
                  • Классы типов в Scala (с небольшим обзором библиотеки cats)

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

                      Читать дальше →
                    • Ревью кода в распределенной команде

                      • Translation


                      Здесь описаны мои исследования, как сделать ревизию кода в команде более приятным занятием, которое может дать новый опыт всем участникам. У нас полностью географически распределённая команда, все коммуникации выполняются через интернет, и зачастую асинхронно. Мы используем Trello для описания возможностей продуктов, поодиночке создаём код, отправляем в GitHub пулл-реквесты, а также пользуемся встроенной в GitHub функцией их ревью. Это отличается от просмотра кода лицом к лицу в офисе и даже по видеочату.

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

                      • Translation


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

                      Вот первичный анонс о внедрении нового сборщика, датированный августом 2015-го:

                      В Go создаётся сборщик мусора (GC) не только для 2015 года, но и для 2025-го, и ещё дальше… Сборщик в Go 1.5 возвещает о наступлении будущего, в котором паузы на сборку больше не являются барьером для перехода на безопасный язык. Это будущее, в котором приложения без труда масштабируются вместе с оборудованием, и по мере роста мощности оборудования сборщик мусора больше не является сдерживающим фактором при создании более качественного, масштабируемого ПО. Go — хороший язык для использования как минимум в ближайший десяток лет.

                      Создатели утверждают, что они не просто решили проблему пауз на сборку мусора, а пошли куда дальше:

                      Одним из высокоуровневых способов решения проблем с производительностью является добавление GC-настроек (knobs), по одной на каждую проблему. Программист может менять их, подбирая наилучшую комбинацию для своего приложения. Недостатком этого подхода является то, что при внедрении каждый год одной-двух новых настроек через десять лет придётся законодательно регулировать труд людей, которые будут менять эти настройки. Go не пошёл по этому пути. Вместо кучи настроек мы оставили одну и назвали её GOGC.

                      Более того, освободившись от бремени поддержки десятков настроек, разработчики могут сосредоточиться на улучшении runtime’а приложения.

                      Не сомневаюсь, что многие пользователи Go были просто счастливы получить новый подход к runtime’у в Go. Но у меня есть претензии к этим заявлениям: они выглядят как недостоверный маркетинговый булшит. А поскольку они раз за разом воспроизводятся в Сети, пришло время подробно с ними разобраться.
                      Читать дальше →
                    • Как писать меньше кода для MR, или Зачем миру ещё один язык запросов? История Yandex Query Language

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



                        Очень скоро мы поняли, что тут мог бы здорово помочь общий высокоуровневый язык запросов, который бы предоставлял единообразный доступ к уже имеющимся системам, а также избавлял от необходимости заново реализовывать типовые абстракции на низкоуровневых примитивах, принятых в этих системах. Так началась разработка Yandex Query Language (YQL) — универсального декларативного языка запросов к системам хранения и обработки данных. (Сразу скажу, что мы знаем, что это уже не первая штука в мире, которая называется YQL, но мы решили, что это делу не мешает, и оставили название.)

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

                        Читать дальше →
                        • +99
                        • 24.3k
                        • 4
                      • Java-ресурсы, на которые есть смысл подписаться

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



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

                          Поэтому, во-первых, мы сейчас перезапустили сайт JUG.ru, чтобы исправить это. А во-вторых, раз русскоязычные регулярно обновляемые ресурсы в дефиците, вспомнили, какие есть англоязычные, и делимся результатами с Хабром. Разумеется, в текст вошло далеко не всё возможное, и будем только рады дополнениям в комментариях.
                          Читать дальше →