• Microsoft vs IBM: серьёзные изменения в поддержке Java

    • Translation
    Неожиданно для Java-сообщества Microsoft превзошла IBM в представительстве среди Developer Advocate на конференции Oracle Code One.

    Когда-то IBM была, вероятно, доминирующей силой в корпоративном сегменте Java-сообщества. Тем не менее, на Oracle Code One 2019 всё указывало на то, что нас ожидает серьёзный сдвиг в противостоянии Microsoft и IBM.

    IBM всегда вкладывала значительные средства в Java-разработку, в то время как Microsoft не беспокоилась об этом. Но похоже, что IBM собирается выйти из-за стола Java, а Microsoft готовится занять это место.
    Читать дальше →
  • [Екатеринбург, анонс] java.ural.Meetup @3 — анонс третьего Java-митапа + видео докладов с java.ural.Meetup @2

      Приглашаем 21 сентября в субботу принять участие в третьей встрече java.ural.Meetup. Встреча пройдёт в конференц-зале в офисе Контура по адресу ул. Малопрудная, 5. Начало в 11:30.

      Расписание:

      11:30 — 12:00 Регистрация и кофе
      12:00 — 14:30 Три доклада
      14:30 — 15:00 Перерыв (для желающих — экскурсия по офису)
      15:00 — 16:30 Мастер-класс

      Под катом информация по докладам и МК. + бонус: материалы со второй встречи.
      Читать дальше →
    • Представляем Amazon Corretto, бесплатный дистрибутив OpenJDK с долгосрочной поддержкой

      • Translation
      image

      Java является одним из самых популярных языков, используемых клиентами AWS, и мы стремимся поддерживать Java, сохраняя эту поддержку бесплатной. Многие наши клиенты стали беспокоиться о том, что они будут вынуждены платить за LTS-версию Java при выполнении своей рабочей нагрузки. В качестве первого шага мы недавно подтвердили долгосрочную поддержку Java в Amazon Linux. Однако, наши клиенты и более широкое Java-сообщество запускает Java на различных платформах, как на AWS, так и вне её. Вот почему мы рады анонсировать предварительную [preview] версию Amazon Corretto — бесплатного, мультиплатформенного и готового к использованию на продакшене дистрибутива OpenJDK от Amazon.
      «Amazon имеет долгую и глубокую историю с Java. Я очень рад видеть, что работа нашей внутренней критически важной Java-команды становится доступной для остального мира»
      — Джеймс Гослинг [James Gosling, создатель языка Java, работает в AWS с мая 2017 года]
      Читать дальше →
    • [Екатеринбург, анонс] java.ural.Meetup @2 — анонс второго Java-митапа + видео докладов с java.ural.Meetup @1

        В первый день зимы, 1 декабря, приглашаем принять участие во второй встрече java.ural.Meetup, которая пройдёт в конференц-зале в новом офисе Контура по адресу ул. Малопрудная, 5. Начало в 14:00.

        Бонусом публикуем записи докладов со встречи java.ural.Meetup @1, прошедшей 15 марта в Екатеринбурге.

        Что за java.ural.Meetup?


        В начале года среди разработчиков Екатеринбурга разошёлся опрос «А нужны ли новые Java-движухи?». Была собрана положительная обратная связь — так мы решили, что митапам быть. Спустя почти два месяца был анонсирован митап. Ещё через две недели первая встреча java.ural.Meetup собрала более 60 разработчиков из Екатеринбурга. На встрече разработчики из Контура рассказали о своих актуальных задачах.

        Под катом анонс второй встречи и видео докладов с первого митапа.
        Читать дальше →
      • Про версии Oracle JDK 11+ (лицензирование и распространение)

        • Translation
        Вчера на Хабре был опубликован перевод поста «Не попадитесь в ловушку используя Oracle JDK 11» с последующим обсуждением «платности Java», но не всё так страшно, как кажется на первый взгляд — ниже перевод публикации из блога Oracle с официальной позицией по лицензированию и распространению версий JDK 11+.

        Резюме


        Начиная с Java 11, Oracle будет выпускать JDK под лицензией GNU General Public License v2, with the Classpath Exception (GPLv2+CPE) и под коммерческой лицензией для тех, кто использует Oracle JDK как часть продуктов или сервисов Oracle, или кто не хочет использовать открытое программное обеспечение. Эта комбинация из OS-лицензии и коммерческой заменяет старую лицензию BCL (Oracle Binary Code License), которая состоит из коммерческих и бесплатных условий использования.

        Для каждой лицензии будут предоставляться отдельные сборки, но эти сборки будут идентичны функционально, кроме некоторых косметических различий и различий в способе упаковки бинарников, подробно описанных ниже.
        Читать дальше →
        • +17
        • 21.6k
        • 1
      • О стримах и таблицах в Kafka и Stream Processing, часть 1

        • Translation
        * Michael G. Noll — активный контрибьютор в Open Source проекты, в том числе в Apache Kafka и Apache Storm.

        Статья будет полезна в первую очередь тем, кто только знакомится с Apache Kafka и/или потоковой обработкой [Stream Processing].


        В этой статье, возможно, в первой из мини-серии, я хочу объяснить концепции Стримов [Streams] и Таблиц [Tables] в потоковой обработке и, в частности, в Apache Kafka. Надеюсь, у вас появится лучшее теоретическое представление и идеи, которые помогут вам решать ваши текущие и будущие задачи лучше и/или быстрее.

        Содержание:

        * Мотивация
        * Стримы и Таблицы простым языком
        * Иллюстрированные примеры
        * Стримы и Таблицы в Kafka простым языком
        * Пристальный взгляд на Kafka Streams, KSQL и аналоги в Scala
        * Таблицы стоят на плечах гигантов (на стримах)
        * Turning the Database Inside-Out
        * Заключение
        Читать дальше →
        • +19
        • 24.8k
        • 4
      • Альтернативный взгляд на задачу от Одноклассников с JPoint 2018

          Всем привет!

          В последнее время стало модным делать разоблачения на задачи. В посте решил привести свои соображения по задачам Одноклассников. Задачи понравились, но уж больно получились неоднозначными, а в отведённое на листочке место всё не уместить. Обсудим?

          Внимание! В оригинальной статье можно познакомиться с полным условием задач и порешать их самостоятельно.
          Читать дальше →
        • Разбор перформансных задач с JBreak (часть 4)

            Разбор последней четвёртой задачи:

                public double octaPow(double a) {
                    return Math.pow(a, 8);
                }
            
                public double octaPow(double a) {
                    return a * a * a * a * a * a * a * a;
                }
            
                public double octaPow(double a) {
                    return Math.pow(Math.pow(Math.pow(a, 2), 2), 2);
                }
            
                public double octaPow(double a) {
                    a *= a; a *= a; return a * a;
                }

            Условие (упрощённо):
            Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).
            Под катом бенчмарки, куски ассемблера и разбор оптимизаций со стороны JVM.

            Другие публикации серии: Часть 1, Часть 2 и Часть 3.
            Читать дальше →
          • Полный перечень intrinsic-функций в HotSpot в JDK 7, 8, 9 и 10

              Интринсик или intrinsic-функция — функция, которую JIT-компилятор может встроить вместо вызова Java- и JNI-кода с целью оптимизации. Важный вывод из этого — intrinsic-функции не доступны в режиме интерпретатора. По умолчанию в HotSpot используется два JIT-компилятора C1 и C2, таким образом, может быть доступна реализация intrinsic-функции для каждого из JIT-компиляторов. Различия в реализации intrinsic-функций для разных JIT-компиляторов обуславливаются различным внутренним представлением кода (intermediate representation — IR).

              В HotSpot реализовано несколько сотен интринсиков (их количество растёт от релиза к релизу). Описание всех intrinsic-функций можно найти в исходниках OpenJDK в файле vmSymbols.hpp. Ниже приведены полные списки интринсиков для JDK 7 (vmSymbols.hpp), JDK 8 (vmSymbols.hpp), JDK 9 (vmSymbols.hpp) и JDK 10 (vmSymbols.hpp).
              Читать дальше →
              • +31
              • 5.5k
              • 5
            • Разбор перформансных задач с JBreak (часть 3)

                Публикую предпоследнюю часть разбора с третьей задачей. До этого выходил разбор первой задачи и второй задачи.

                Код к третьей задаче:

                    public static double compute(
                            double x1, double y1, double z1,
                            double x2, double y2, double z2) {
                        double x = y1 * z2 - z1 * y2;
                        double y = z1 * x2 - x1 * z2;
                        double z = x1 * y2 - y1 * x2;
                        return x * x + y * y + z * z;
                    }
                
                    public static double compute(
                            double x1, double y1, double z1,
                            double x2, double y2, double z2) {
                        Vector v1 = new Vector(x1, y1, z1);
                        Vector v2 = new Vector(x2, y2, z2);
                        return v1.crossProduct(v2).squared();
                    }
                
                    public final static class Vector {
                        private final double x, y, z;
                
                        public Vector(double x, double y, double z) {
                            this.x = x; this.y = y; this.z = z;
                        }
                
                        public double squared() {
                            return x * x + y * y + z * z;
                        }
                
                        public Vector crossProduct(Vector v) {
                            return new Vector(
                                    y * v.z - z * v.y,
                                    z * v.x - x * v.z,
                                    x * v.y - y * v.x);
                        }
                    }

                Условие (упрощённо):
                Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).
                Читать дальше →
                • +16
                • 3.4k
                • 8
              • Разбор перформансных задач с JBreak (часть 2)

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

                  Код второй задачи:
                      String format(String user, String grade, String company, String message) {
                          return String.format(
                                  "Он, %s, придумал такие %s задачи. Приду на стенд %s и скажу ему %s",
                                  user, grade, company, message);
                      }
                  
                      String format(String user, String grade, String company, String message) {
                          return "Он, " + user
                                  + ", придумал такие " + grade
                                  + " задачи. Приду на стенд " + company
                                  + " и скажу ему " + message;
                      }
                  
                      String format(String user, String grade, String company, String message) {
                          return new StringBuilder("Он, ")
                                  .append(user)
                                  .append(", придумал такие ")
                                  .append(grade)
                                  .append(" задачи. Приду на стенд ")
                                  .append(company)
                                  .append(" и скажу ему ")
                                  .append(message)
                                  .toString();
                      }
                  

                  Условие (упрощённо):
                  Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).

                  Другие публикации серии: Часть 1, Часть 3, Часть 4.
                  Читать дальше →
                • Разбор перформансных задач с JBreak (часть 1)

                    Первая часть — разбор самой холиварной задачи из четырёх:

                        void forEach(List<Integer> values, PrintStream ps) {
                            values.forEach(ps::println);
                        }
                    
                        void forEach(List<Integer> values, PrintStream ps) {
                            values.stream().forEach(ps::println);
                        }
                    
                        void forEach(List<Integer> values, PrintStream ps) {
                            values.parallelStream().forEach(ps::println);
                        }
                    

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

                    Другие публикации серии: Часть 2, Часть 3, Часть 4.
                    Читать дальше →
                  • [Екатеринбург, анонс] Новые Java-митапы в Екатеринбурге: java.ural.Meetup @1

                      Хорошая новость для Java-разработчиков Екатеринбурга (и, может быть, Урала в целом) — запускаем новые Java-митапы в Екатеринбурге.

                      java.ural.Meetup

                      Так сложилось исторически, что почти все активности профессиональных сообществ сконцентрированы в Москве и Санкт-Петербурге. Региональные события либо невероятно редки, либо имеют небольшой охват. И если для решения второй проблемы предстоит проделать большую и продолжительную работу, то с первой мы начали бороться уже сейчас.

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

                      Программа митапа:

                      1. Григорий Кошелев с докладом «Интеграция виртуальных машин .NET и Java».
                      2. Андрей Сталин, Сергей Ануфриев и Евгений Штыков с докладом «Асинхронное микросервисное взаимодействие».
                      3. Алексей Кирпичников с докладом «Высокопроизводительное Java-приложение в сердце стриминговой архитектуры».

                      На первой встрече все докладчики из Контура. Если понравится то, что мы делаем, и захочешь выступить с докладом — пиши.
                      Читать дальше →
                    • Сказ о маленькой стажировке в маленькой компании [Часть II]

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

                        Первую часть можно прочитать по этой ссылке.
                        Читать дальше →
                        • +21
                        • 9.8k
                        • 6
                      • Сказ о стажировке в маленькой компании или как мы с Контуром конкурировали [Часть I]

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

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

                          Во второй части расскажу о том, как всё получилось на самом деле, какие выводы мы сделали и чему научились. Здесь продолжение статьи.
                          Читать дальше →
                          • +14
                          • 11.4k
                          • 4
                        • Передача GPS-трека по SMS

                            У вас прогрет распределённый и отказоустойчивый бэкенд, написано крутое мобильное приложение под все возможные платформы, но, внезапно, выясняется, что ваши пользователи так далеки от цивилизации, что единственный способ связи с ними — это SMS? Тогда вам будет интересно прочитать историю о том, как передать максимум информации, используя этот архаичный канал для передачи данных, на примере GPS-трека.
                            Читать дальше →
                          • Ещё один тип XSS-атаки на сайт

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

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