• Советы по оптимизации кода на Java: как не наступать на грабли

    • Перевод
    Добрый вечер, коллеги.

    Перевод статьи, который мы вам предложим сегодня, призван помочь ответить на вопрос: а назрела ли необходимость целой книги по оптимизации кода на Java? Надеемся, что материал не только покажется вам интересным, но и пригодится на практике. Пожалуйста, не забудьте проголосовать.
    Читать дальше →
  • JavaScript. Работаем с исключениями и данными в конструкциях async/await без блоков try-catch

    • Перевод
    Появившиеся в JavaScript новые асинхроные конструкции async/await выглядят проще, чем Promise, и, конечно, значительно читабельнее, чем «callback-джунгли». Но одна вещь беспокоила меня — это использование try-catch. Сначала я подумал, что это не проблема, но, к несчастью, мне пришлось работать с цепочкой вызовов API, в которой каждый вызов API имел свое сообщение об ошибке, которое должно было прологировано. Вскоре я понял, что создаю «try/catch-джунгли», которые ничем не лучше «callback-джунглей».
    Читать дальше →
  • Инверсная кинематика в двухмерном пространстве

    • Перевод

    Часть 1. Математика



    Введение


    Мы так привыкли к взаимодействию с окружающим нас миром, что не задумываемся о том, насколько сложно двигаются наши руки и ноги. В академической литературе задача управления манипулятором робота называется инверсной кинематикой. Кинематика обозначает "движения", а понятие "инверсная" связано с тем, что обычно мы не управляем самой рукой. Мы управляем «двигателями», поворачивающими каждую отдельную часть. Инверсная кинематика — это задача определения того, как перемещать эти двигатели, чтобы сдвинуть руку в конкретную точку. И в своём общем виде эта задача чрезвычайно сложна. Чтобы вы понимали, насколько она сложна, то можете вспомнить о таких играх, как QWOP, GIRP или даже Lunar Lander, в которой вы выбираете не куда двигаться, а какие мускулы (или ускорители) приводить в действие.

    Задача управления подвижными приводами распостраняется даже на область робототехники. Вас не должно удивлять то, что на протяжении веков математики и инженеры смогли разработать множество решений. В большинстве 3D-редакторов и игровых движков (в том числе и в Unity) есть наборы инструментов, позволяющих выполнять риггинг человекоподобных и звероподобных существ. Для различных схем (манипуляторов роботов, хвостов, щупалец, крыльев и т.д.) встроенных решений обычно не существует.
    Читать дальше →
    • +36
    • 5,9k
    • 3
  • Весенние митапы (и один летний) от Альфа-Банка


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

      Если у вас осталось свободное время – приглашаем на наши весенние митапы:

      • IBMi-MeetUp: авто-тестирование на IBMi
      • React Moscow Meetup 4
      • QAчественное общение: боли в тестировании
      • MskDotNet Meetup

      Подробности под катом.
      Читать дальше →
    • Противостояние: итоги


         
        Прошла долгожданная кибербитва «Противостояние», развернувшаяся на базе восьмого ежегодного ИБ-форума Positive Hack Days. Рассказываем от лица непосредственных участников соревнования — команд Jet Secuirty Team и Jet Antifraud Team, о самых ярких технических подробностях состязания хакеров с защитниками. Грязные трюки нападающих, нестандартные способы взлома, хитроумные ловушки и сюрпризы защитников — все это ждет вас под катом.
        Читать дальше →
        • +22
        • 4,7k
        • 1
      • The Java Language Specification. Chapter 17. Threads and Locks (Перевод. Часть 1)

        Привет, Хабр! Представляю вашему вниманию перевод статьи «The Java Language Specification (Chapter 17. Threads and LocksОригинал.

        Глава 17. Треды и блокировки (Chapter 17. Threads and Locks)

        В то время как большая часть дискуссий в предыдущих главах касалась только поведения кода, исполняемого одновременно и как единое утверждение или выражение одновременно, т.е. в одном треде, JVM (Java virtual machine) может поддерживать одновременно несколько тредов исполнения. Эти треды независимо друг от друга используют код, который действует на значения и объекты, находящиеся в общей памяти (shared main memory). Треды могут поддерживаться за счет использования множества аппаратных процессоров, временным разделением одного аппаратного процессора или временным разделением нескольких аппаратных процессоров.

        Треды представлены классом Thread. Единственный способ, каким пользователь может создать тред — это создать объект этого класса; каждый тред ассоциируется с каким-то объектом. Тред начнет свое исполнение, когда будет вызван метод start() на соответствующем Thread-объекте.
        Поведение тредов, особенно когда синхронизация выполнена некорректно, может быть непонятно и не соответствовать ожиданиям. Эта глава описывает семантику многопоточного программирования; она содержит правила, согласно которым значения можно увидеть для чтения в общей памяти, которая обновляется множеством тредов. Так как спецификация аналогична Memory Models для различных архитектур, эта семантика известна как Memory Model языка программирования Java. Когда не будет возникать путаницы, мы просто будем называть эти правила "Memory Model".

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

        17.1 Синхронизация (17.1. Synchronization)
        Читать дальше →
      • Ой, у вас баннер убежал!

        Ну. И что?
        Реклама
      • Итоги PHDays 8: Games Over



          Восьмой международный форум по практической безопасности Positive Hack Days подошел к концу. Более 5200 участников на площадке в Москве наблюдали за перехватом радиоэфира сотового оператора, взломом банкомата, накруткой умного электросчетчика (одному из участников было 12 лет!) и десятками других хакерских активностей. Настоящая драма произошла в финале противостояния атакующих и защитников города.
          Читать дальше →
        • Приглашаем на хакатон M.SMART от «М.Видео»



            Друзья, приглашаем вас на наш первый хакатон, посвящённый разработке VR- и AR-продуктов. Хакатон пройдет в два этапа, заочный и очный. В рамках заочного этапа, который продлится с 18 по 28 мая, будут отобраны лучшие заявки от участников. Очный этап пройдет со 2 по 3 июня и будет впервые организован в одном из наших магазинов бытовой техники и электроники. Всё это время магазин будет открыт для посетителей, которые смогут наблюдать за хакатоном и процессом кодинга!

            Мы верим, что будущее за VR- и AR-решениями, поэтому ищем специалистов, которые смогли бы предложить интересные проекты для нашего бизнеса и всего, что с ним связано, в том числе в сфере обучения самих сотрудников «М.Видео». Нам нужны не только разработчики, программисты, дизайнеры, но и менеджеры, способные органично внедрить предложенные идеи в нашу бизнес-модель и выстроить простые и понятные процессы использования VR/AR/MR-технологий среди сотрудников и клиентов «М.Видео».
            Подробности проведения хакатона
          • Компактный сериализатор для кэша c использованием System.Reflection.Emit



            В современных сервисах без кэша никуда: доступ к данным в персистентной базе – дело долгое и затратное, поэтому добавление промежуточного хранилища для наиболее часто используемых данных значительно его ускоряет. Держать в кэше информацию можно самую разную и в разной форме: и строки, и списки, и состояние сессии, и многое другое. В данной статье речь пойдёт об одном из способов хранении в кэше «плоских» объектов, не имеющих вложенных классов и циклических ссылок.
            Читать дальше →
          • GraalVM: смешались в кучу C и Scala

            • Tutorial

            Не знаю, как на вас, а на меня в последнее время производят сильное впечатление статьи про новые Java-технологии — Graal, Truffle и все-все-все. Выглядит так, как будто раньше ты придумал язык, написал интерпретатор, порадовался какой язык хороший и погрустил, какой медленный, написал к нему нативный компилятор и/или JIT, а ведь нужен ещё отладчик… LLVM есть, и на том спасибо. После прочтения этой статьи сложилось (несколько гротескное) впечатление, что после написания интерпретатора специального вида работу можно, в принципе, и завершать. Ощущение, что теперь кнопка "Сделать зашибись" стала доступна и программистам-компиляторщикам. Нет, конечно, JIT-языки медленно стартуют, им нужно время на прогрев. Но, в конце концов, время и квалификация программиста тоже не бесплатные — в каком бы мире информационных технологий мы бы жили, если бы до сих пор писали всё на ассемблере? Нет, может, всё бы, конечно, и летало (это если программист грамотно инструкции разложил), но вот насчёт суммарной сложности активно используемых программ у меня есть некоторые сомнения...


            В общем, я прекрасно понимаю, что в дилемме «затраченное программистом время vs идеальность полученного продукта ("ручная работа")» границу можно двигать до скончания веков, поэтому давайте сегодня просто попробуем воспользоваться традиционной библиотекой SQLite без подгрузки нативного кода в чистом виде. Будем использовать уже готовую truffle-реализацию языка для LLVM IR, зовущуюся Sulong.

            Читать дальше →
            • +17
            • 3,1k
            • 1
          Самое читаемое