• Откуда растут ноги у Java Memory Model

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

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

    Но все уже осознали, ведь жить с этим как-то надо. А Java программисты даже неплохо живут. Потому что в Java есть модель памяти — Java Memory Model (JMM), которая предоставляет достаточно простые правила для написания корректного многопоточного кода.

    И правил этих достаточно для большинства программ. Если вы их не знаете, но пишите или хотите писать многопоточные программы на Java, то лучше как можно скорее ознакомиться с ними. А если знаете, но вам не хватает контекста или интересно узнать откуда растут ноги у JMM, тогда статья может вам помочь.
    Читать дальше →
  • Встраиваем интерпретатор Python в java-приложение с помощью проекта Panama

      Пару дней назад увидел твит Брайана Гетца, но только сегодня дошли руки поиграться с примерами.

      image

      Про это и хочу кратко рассказать.

      О проекте Panama на Хабре уже писали, поэтому просто покажу пару простых примеров того, как можно применить native binder.
      Читать дальше →
      • +10
      • 2,2k
      • 9
    • Жизненный цикл статьи на Хабре: пишем хабрапарсер

        Привет Хабр!

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



        Для сбора статистики воспользуемся Python, Pandas, Matplotlib и Raspberry Pi.

        Тех кому интересно, что из этого получилось, прошу под кат.
        Читать дальше →
      • Куда деваются программисты после 40



          — Вам уже 45? Но у нас коллектив очень молодой. Вы уверены, что хотели бы у нас работать?
          — Да, конечно! Я много наслышан о вашей компании. Это мечта всей моей жизни!
          — Ну ладно. Вот вам простой вопросик. Что означает буква L в аббревиатуре SOLID?
          — Liskov Substitution Principle.
          Читать дальше →
        • Релиз-кандидат JDK 12: Shenandoah, G1, JMH, Arm64. Баги в Swing наносят ответный удар

            240 дней прошло с момента выпуска JEP 3: JDK Release Process, и адская машина по производству новых версий останавливаться не желает. А значит, настало время очередного релиз-кандидата. Это период, когда все мосты сожжены, баги с приоритетами P2-P5 уже ничего не значат, и дни до релиза сочтены.


            Читать дальше →
          • Fortnite — это будущее, но по довольно неожиданным причинам

            • Перевод
            image

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

            В 2018 году можно было многое прочитать про Fortnite, и ещё большему у неё научиться. «Эта игра» и в самом деле является будущим индустрии развлечений (а также самой серьёзной угрозой для современных медиагигантов). Но, вероятно, не совсем в том смысле, в котором вы думаете. Реальные возможности Fortnite намного шире и значительней, чем тот эффект, который игра имеет сегодня. На самом деле, большинство рассказов об успехе Fortnite излишне броски, даже если в них критически воспринимается её долговременная эволюция.

            Нам предстоит многое разобрать, поэтому для начала я проанализирую этот ажиотаж, а потом перейду к тому, во что превратится Fortnite и расскажу о том, почему Epic Games имеет уникальную возможность реализации этого потенциала.
            Читать дальше →
          • Подробности о JavaScript-объектах

            • Перевод
            • Tutorial
            Автор материала, перевод которого мы сегодня публикуем, говорит, что в JavaScript-объектах содержится много такого, о существовании чего можно и не подозревать, пользуясь ими в повседневной работе. Объекты в JavaScript очень легко создавать, с ними удобно работать, они кажутся понятными и гибкими сущностями, и многие программисты попросту не задумываются о том, что на самом деле устроены объекты не так уж и просто.


            NB: Информацию из публикации на практике следует применять крайне аккуратно и под присмотром более опытных коллег.
            Читать дальше →
          • Пишем XGBoost с нуля — часть 1: деревья решений

            • Tutorial


            Привет, Хабр!

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

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


            Читать дальше →
            • +74
            • 10,7k
            • 3
          • Redux. Простой как грабли

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

              TL;DR: базовая логика redux помещается в 7 строк JS кода.

              О redux вкратце (вольный перевод заголовка на гитхабе):
              Redux — библиотека управления состоянием для приложений, написанных на JavaScript.

              Она помогает писать приложения, которые ведут себя стабильно/предсказуемо, работают на разных окружениях (клиент/сервер/нативный код) и легко тестируемы.
              Я склонировал репозиторий redux, открыл в редакторе папку с исходниками (игнорируя docs, examples и прочее) и взялся за ножницы клавишу Delete:

              • Удалил все комментарии из кода
                Каждый метод библиотеки задокументирован с помощью JSDoc весьма подробно
              • Убрал валидацию и логирование ошибок
                В каждом методе жёстко контролируются входные параметры с выведением очень приятных глазу подробных комментариев в консоль
              • Убрал методы bindActionCreators, subscribe, replaceReducer и observable.

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

              А теперь давайте разберём то, что осталось
              Читать дальше →
            • «Ищите истории, которые драйвят»: подкаст о подкастах, работе редактора и карьере в медиа

                Это — подкаст с теми, кто создает контент. Гость сегодняшнего выпуска — Дарья Черкудинова — автор подкаста «НОРМ» [Telegram] [iTunes] и главный редактор издания «Секрет фирмы».


                Читать дальше →
                • +23
                • 1,4k
                • 2
              • Вуайеризм тестировщика: как правильно подглядывать за людьми и зачем это нужно

                  Насколько UX — зона ответственности тестировщиков? Ранее Антонина Хисаметдинова на конференции по тестированию Heisenbug рассказывала о правильном отображении ошибок, и расшифровка того доклада собрала на Хабре множество просмотров. А в декабре на Heisenbug 2018 Moscow она говорила о том, зачем тестировщику подглядывать за пользователями — и этот доклад тоже был отлично принят зрителями. Так что теперь мы и для него подготовили текстовую версию.


                  Читать дальше →
                • «Современный» C++: сеанс плача с причитаниями

                  • Перевод

                  Здесь будет длиннющая стена текста, с типа случайными мыслями. Основные идеи:


                  1. В C++ очень важно время компиляции,
                  2. Производительность сборки без оптимизаций тоже важна,
                  3. Когнитивная нагрузка ещё важней. Вот по этому пункту особо распространяться не буду, но если язык программирования заставляет меня чувствовать себя тупым, вряд ли я его буду использовать или тем более — любить. C++ делает это со мной постоянно.

                  Блогпост «Standard Ranges» Эрика Ниблера, посвященный ренжам в C++20, недавно облетел всю твиттерную вселенную, сопровождаясь кучей не очень лестных комментариев (это ещё мягко сказано!) о состоянии современного C++.



                  Даже я внёс свою лепту (ссылка):


                  Этот пример пифагоровых троек на ренжах C++20, по моему, выглядит чудовищно. И да, я понимаю, что ренжи могут быть полезны, проекции могут быть полезны и так далее. Тем не менее, пример жуткий. Зачем кому-то может понадобиться такое?

                  Давайте подробно разберём всё это под катом.

                  Читать дальше →
                • Суровая сибирская JVM: большое интервью об Excelsior JET

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


                    В Новосибирске вот уже 18 лет делают свою собственную JVM, написанную полностью самостоятельно и востребованную далеко за пределами России. Это не просто какой-то форк HotSpot, делающий всё то же самое, но чуть лучше. Excelsior JET — это комплекс решений, позволяющих делать совершенно другие вещи в плане AOT-компиляции. «Пфф, AOT есть в GraalVM», — можете сказать вы. Но GraalVM — это всё ещё очень исследовательская штука, а JET — это проверенное годами решение для использования в продакшене.


                    Это интервью с одними из разработчиков Excelsior JET. Надеюсь, оно окажется особенно интересно всем, кто хочет открыть для себя новые вещи, которые можно делать с Java. Либо людям, которые интересуются жизнью JVM-инженеров и сами хотят в этом поучаствовать.


                    Читать дальше →
                    • +63
                    • 8,4k
                    • 9
                  • Как стать разработчиком игр, если ты риелтор

                      Добрый день, Хабр.

                      Два года и несколько месяцев назад, я написал здесь свой первый и единственный пост, как, не имея никакого опыта разработки игр, я создал свое первое android-приложение. Пусть и потратил на это весь свой тогдашний отпуск. Хотя игрой это было и сложно назвать, хе-хе.

                      image

                      Вы тепло приняли этот пост и это дало мне хороший толчок в нужном направлении. За эти два года я попробовал и научился многому: работал с 3D моделями, знакомился с C++, рисовал текстуры, записывал звуки, писал тексты и диз-доки, но самое главное – я нашел для себя подходящую среду разработки, а именно — божественный Unreal Engine 4.

                      Я не решался ничего писать до тех пор, пока не смогу сделать что-то, что сможет порадовать хотя бы меня. И, думаю, мне это удалось. Довольно приятно видеть тот большой и тернистый путь, который был пройден, чтобы, начав с картинки в начале статьи, дойти до того, что под катом ;)
                      Читать дальше →
                    • Я растерял веру в разработку, выгорел, но меня спас культ инструмента



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

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

                        Чем бы оно ни было, я эту фигню не понимал никогда.

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

                          19 декабря 2018 года кабинет министров Германии согласовал закон о квалифицированной трудовой иммиграции (Fachkräfteeinwanderungsgesetz). Благодаря ему будет легче мигрировать квалифицированным работникам из стран, не входящих в Европейский Союз. Но эти изменения коснутся только квалифицированных рабочих. Немцы рассчитывают, что специалисты из России, Украины, Индии, Китая и других стран восполнят дефицит кадров. Сразу отмечу, что речь не идет о неквалифицированной или низкоквалифицированной работе.

                          Читать дальше →
                        • Экстремальное масштабирование в Alibaba JDK

                            Многие с подозрением относятся к перспективе чего-нибудь форкнуть и дописать самостоятельно. Зачастую цена слишком высока. Особенно странно слышать о собственных JDK, которые якобы есть в каждой достаточно крупной компании. Что за чертовщина, с жиру бесятся? В этой статье будет подробный рассказ о компании, которой всё это приносит реальную коммерческую выгоду, и которая проделала чудовищную работу, ведь они:


                            • Разработали мультитенантную виртуальную Java-машину;
                            • Придумали механизм работы объектов, не приносящих оверхеда на сборку мусора;
                            • Сделали что-то вроде аналога ReadyNow из Azul Zing;
                            • Запилили собственные корутины с yield-ами и континуациями (и даже готовы поделиться опытом с Loom, о котором я писал осенью);
                            • Прикрутили ко всем этим чудесам собственную подсистему диагностики.

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



                            Доктор, откуда вы берёте такие картинки? Уголок «обложек O'Reilly»: бэкграунд для КДПВ предоставлен Joshua Newton и изображает священный танец Сангьянг Джаран в городе Убуде, Индонезия. Это классический балийский перформанс, состоящий из огня и трансового танца. Человек с непокрытыми пятками двигается вокруг костра, разведённого на кокосовой шелухе, распихивая ногами разное и танцуя в трансовом состоянии под действием конского духа. Идеальная иллюстрация для собственного JDK, правда?

                            Читать дальше →
                          • JAVA SOUND API основы

                            Привет, Хабр! Представляю вашему вниманию перевод статьи «Java Sound, Getting Started, Part 1, Playback».

                            Звук в JAVA, часть первая, Начало. Проигрывание звука



                            Это начальный из серии в восемь уроков, который полностью ознакомит вас с Java Sound API. 
                            Читать дальше →
                          • Изучение английского — непопулярное мнение

                              Всем привет.

                              Очередная статья от «курсов изучения английского» сподвигла меня написать свои заметки. Этой статьёй я надеюсь ответить на некоторые вопросы изучающих язык и отговорить от глупых советов «запомнить вот эти 10/15/20 слов/конструкций», которые подаются как некие секреты языка.

                              Сейчас я использую лишь 2 языка: русский и английский, хотя в разное время учил также украинский, немецкий и французский. Английский изучаю с 6 лет и мне повезло с преподавателями (хоть и не со всеми), где-то со старших классов школы имею уровень C1-C2. Хочу поговорить как о планировании в изучении языка, так и о каких-то приёмах.
                              Читать дальше →
                            • Велосипедофобия

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


                              Я почему раньше злой был? У меня просто велосипеда не было.

                              Чтож, приступим к лечению..