• Hammock Driven Development — Rich Hickey (с русским переводом)

    • Перевод
    Всем привет!

    Я сделал перевод и набил субтитры на отличный доклад Рича Хикки — Hammock Driven Development (Разработка через гамак). Впервые на русском языке.

    Доклад впервые был представлен в 2010 году на первой конференции Clojure Conj.
    Читать дальше →
  • АНБ, Ghidra и единороги

      АНБ, Ghidra и единороги

      На этот раз взгляд команды PVS-Studio привлекла Ghidra — большой и злой фреймворк для ревёрс-инжиниринга, с помощью которого можно анализировать различные бинарные файлы и делать с ними всякие страшные вещи. Наиболее интересно в нём даже не то, что он бесплатен для использования или отлично расширяется плагинами, а то, что написали его в АНБ и выложили исходники на GitHub для всех желающих. С одной стороны, кажется, что у АНБ-то точно достаточно ресурсов для поддержания кодовой базы в чистоте. А с другой, не очень знакомые с ней новые контрибьюторы могли за прошедшее время случайно добавить незамеченных багов. Поэтому, вооружившись статическим анализом, мы решили поискать слабые места в этом проекте.
      Читать дальше →
    • Metastocle — децентрализованное хранилище данных

        image


        Что делать, если нужно хранить разнообразные данные децентрализованно? Объекты, массивы, даты, числа, строки, да что угодно. Обязательно ли придумывать мощную СУБД для этого? Ведь часто нам просто нужно хранить и получать данные распределенно, открыто, но максимально просто и без особых притязаний.


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

        Читать дальше →
      • Краткий обзор NLP библиотеки SpaСy

        Обработка естественного языка(Natural Language Processing — NLP) сегодня становится очень востребованной, так как людям несомненно проще общаться с машинами также, как они общаются с людьми.


        image


        Поэтому сейчас, вместе с быстрым развитием этой области, всё больше сервисов используют NLP: чат-боты, в которых больше не нужно выбирать готовые ответы, голосовые ассистенты, электронная почта, чтобы автоматически сортировать письма и так далее. В этом посте я хочу рассказать об относительно новой Python библиотеке SpaCy, которая стала, если не индустриальным стандартом, как кричат заявляют сами создатели на сайте библиотеки: https://spacy.io/, то как минимум одним из самых популярных и удобных решений. Приятного чтения!

        Читать дальше →
      • Locks in PostgreSQL: 3. Other locks

        • Перевод
        We've already discussed some object-level locks (specifically, relation-level locks), as well as row-level locks with their connection to object-level locks and also explored wait queues, which are not always fair.

        We have a hodgepodge this time. We'll start with deadlocks (actually, I planned to discuss them last time, but that article was excessively long in itself), then briefly review object-level locks left and finally discuss predicate locks.

        Deadlocks


        When using locks, we can confront a deadlock. It occurs when one transaction tries to acquire a resource that is already in use by another transaction, while the second transaction tries to acquire a resource that is in use by the first. The figure on the left below illustrates this: solid-line arrows indicate acquired resources, while dashed-line arrows show attempts to acquire a resource that is already in use.

        To visualize a deadlock, it is convenient to build the wait-for graph. To do this, we remove specific resources, leave only transactions and indicate which transaction waits for which other. If a graph contains a cycle (from a vertex, we can get to itself in a walk along arrows), this is a deadlock.


        Read more →
      • Уроки электронного голосования в Московскую Городскую Думу 2019 года

          Продолжаем говорить о деятельности ДИТ Москвы (смотрите наши предыдущие посты), но одновременно и переходим к следующей теме, внезапно ставшей актуальной и набравшей обороты — теме электронного голосования.

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

          В общем, спрос встретился с предложением — и повалили законопроекты. Партиям разрешили проводить праймериз через Госуслуги/ЕСИА, регионы один за другим рапортуют о стремлении организовать ДЭГ (дистанционное электронное голосование) уже в сентябре на местных выборах.

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

          Поэтому мы решили посвятить разбору этих вопросов небольшой цикл статей и встреч:

          1. Алексей Щербаков — «Уроки электронного голосования в Московскую Городскую Думу 2019 года»
          2. Олег Артамонов — «Дистанционные электронные голосования: архитектура доверенной электоральной системы»
          3. Круглый стол «Нажми на кнопку: теория и практика электронных голосований»



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

          Читать дальше →
        • Облачно-ориентированный обмен сообщениями на платформе Red Hat OpenShift с использованием Quarkus и AMQ Online

            Всем привет! Вот и он – наш заключительный пост из серии про Quarkus! (Кстати, смотрите наш вебинар «Это Quarkus – Kubernetes native Java фреймворк». Покажем, как начать «с нуля» или перенести готовые решения)



            В предыдущем посте мы рассмотрели соответствующие инструменты, с помощью которых можно количественно оценить улучшения, полученные в результате модернизации Java-приложений.
            Читать дальше: Облачно-ориентированный обмен сообщениями...
          • Практикумы от IBM: Quarkus (сверхбыстрая Java для микросервисов), Jakarta EE и OpenShift


              Всем привет! Мы уже тоже подустали от вебинаров, их количество за последние пару месяцев перевалило все возможные границы. Поэтому для хабра стараемся подбирать для вас самые интересные и полезные).

              На начало июня (надеемся, лето все-таки наступит) мы запланировали несколько практических сессий, которые, уверены, будут интересны разработчикам. Во-первых — расскажем про serverless и новейший сверхбыстрый quarkus (как вам, например, 14мс холодного старта?), во-вторых — Альберт Халиулов расскажет про особенности облачной разработки на Jakarta EE, Microprofile и Docker (каждому участнику выдадим готовую виртуалку для практикума). Ну и наконец 9 июня Валерий Корниенко расскажет как можно развернуть свой OpenShift в IBM Cloud за пару минут. Интересно? Если да — детали под катом.
              Читать дальше →
            • Компилируем Spring Boot-приложение в нативное с помощью GraalVM

              • Перевод
              Перевод статьи подготовлен в преддверии старта курса «Разработчик на Spring Framework».





              Привет, любители Spring’а! Добро пожаловать в очередной выпуск Spring Tips. Сегодня мы поговорим о недавно реализованной поддержке компиляции Spring Boot-приложений в GraalVM. Мы уже говорили о GraalVM и нативных приложениях в другом выпуске Spring Tips в теме про Spring Fu.



              Немного вспомним, что такое GraalVM. GraalVM — замена стандартного компилятора C1 в OpenJDK. Подробнее об использовании GraalVM вы можете послушать в моем подкасте Bootiful Podcast с Крисом Талингером (Chris Thalinge) — контрибьютором GraalVM и инженером Twitter. При определенных условиях GraalVM позволяет быстрее запускать обычные Spring-приложения и, хотя бы по этой причине, он заслуживает внимания.
              Читать дальше →
            • Как инстаграмные антипрививочники продвигают свои теории заговора

              • Перевод
              Пандемия коронавируса породила новую волну вирусной (во всех смыслах) дезинформации.


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

              Во времена COVID-19 проблема только обострилась. Пандемия коронавируса привела к новому всплеску вирусной дезинформации, широко поддерживаемой движением против вакцинации. Модераторы Facebook с запозданием реагируют на заявления о контенте, потенциально нарушающим правила социальной сети.
              Читать дальше →
            • 450 бесплатных курсов от Лиги Плюща

              • Перевод
              image


              Информационные технологии позволяют получить невероятно крутые образовательные ресурсы в один клик. Бесплатно.

              Я сейчас решаю задачу, как из огромной массы жизненно важного контента выбрать тот, который стоит попробовать в первую очередь, как «разметить данные», чтобы нейросеточка у подрастающего поколения обучилась более эффективно. (ontol.org, «Выгорание», «Удаленка», телеграм-канал).

              Предлагаю вашему вниманию полную подборку всех бесплатных курсов от Лиги Плюща.

              Лига плюща (The Ivy League) — ассоциация восьми частных американских университетов, расположенных в семи штатах на северо-востоке США. В состав лиги входят: Брауновский университет (Brown University), Гарвардский университет (Harvard University), Дартмутский колледж (Dartmouth College), Йельский университет (Yale University), Колумбийский университет (Columbia University), Корнеллский университет (Cornell University), Пенсильванский университет (University of Pennsylvania), Принстонский университет (Princeton University).

              Эти университеты выпустили около 500 онлайн-курсов, 450 из которых сейчас доступны.

              Оглавление


              Computer Science (37)
              Data Science (18)
              Программирование (8)
              Гуманитарные науки (80)
              Бизнес (72)
              Art & Design (20)
              Наука (32)
              Социальные науки (74)
              Здоровье и медицина (32)
              Инженерия (15)
              Образование и преподавание (21)
              Математика (14)
              Личностное развитие (7)

              Читать дальше →
              • +23
              • 23,1k
              • 5
            • Высокоскоростной Apache Parquet на Python с Apache Arrow

              • Перевод
              Всем салют. Уже на следующей неделе стартуют занятия в новой группе курса «Data Engineer», в связи с этим делимся с вами еще одним интересным переводом.




              На протяжении всего прошлого года я работал с сообществом Apache Parquet над созданием parquet-cpp — первоклассной C++ Parquet реализации для чтения/записи файлов, подходящей для использования в Python и других приложениях для работы с данными. Уве Корн и я разработали Python интерфейс и интеграцию с pandas в рамках кодовой базы Python (pyarrow) в Apache Arrow.
              Читать дальше →
            • Ревью курса от Lightbend Academy — Reactive Architecture

                P.S. Сразу скажу курс на английском — поэтому здесь он вам пригодится;


                Цель осветить курс, который по-моему мнению прекрасно построен и проработан для тех, кто интересуется архитектурой ПО — а в частности распределенной. > Итак здесь остается — то что чувствую, и то что интересным показалось мне.


                image


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


                К примеру предлагаю рассмотреть 2 кейса из первого и последнего курса:


                1 — Вы задаете вопрос управляющему бизнеса — как ресторан управляет персоналом? Бизнес отвечает и вы понимаете, что в этом случае они действуют сопоставимо с одним из принципов реактивных систем, а именно — Эластичностью — вот оригинальная вырезка

                Читать дальше →
              • Скриптовый язык JavaPath для доступа к сложным структурам данных

                В статье рассматривается декларативный скриптовый язык JavaPath как альтернатива использованию Java Reflection и способ избежать "сервисного ада" в обособленных приложениях использующих сложные структуры данных.


                Описание проблемы


                Рассмотрим глубоко вложенную структуру


                class A{
                   B b;
                }
                class B{
                   C c;
                }
                class C{
                   String name;
                }

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


                private A a;
                public void setNameService(String name) {
                    a.b.c.name = name;
                }

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


                private A a;
                public void setNameService(String name) {
                    if(a == null) {
                        a = new A();
                    }
                    if(a.b == null) {
                        a.b = new B();
                    }
                    if(a.b.c == null) {
                        a.b.c = new C();
                    }
                    a.b.c.name = name;
                }
                Читать дальше →
              • Почему Flutter побеждает?

                  Последний год я так или иначе пишу приложения на Flutter для iOS и Android. До этого у меня был и есть 5 летний опыт работы с Xamarin. Это были замечательные 5 лет. Благодаря Xamarin и моей любви к этому фреймворку я, в принципе, перешел в стан разработчиков, этот инструмент помог заработать мне немалых денег, знаний и найти замечательных коллег. Так почему же сейчас я пишу на Flutter? Короткий ответ, потому что Flutter покрывает все потребности кросс-платформенной разработки.


                  Немного истории


                  Поправьте меня если я не прав, но 2009 год был во многом ключевым для мобильной разработки в целом и кроссплатформенной разработки в частности. В 2009 вышел iPhone 3gs, который позволял запускать сторонние приложения из AppStore. Впервые эта возможность появилась в годом ранее в iPhone 3g, но по настоящему массовым, «народным» айфоном стал 3gs. Опять же, годом ранее, в сентябре 2008 Android был представлен публике и в 2009 многие производители телефонов стали пробовать Android для своих новый моделей телефонов. Весной 2009 компания Nitobi представила PhoneGap — новый фреймворк для создания кроссплатформенных приложений на основе HTML5, CSS и JS. В том же году, в сентябре компания Ximian выпустила MonoTouch, который позволял писать iOS приложения с использованием Mono и C#. В том же 2009, в декабре, компания Rovio Entertainment выпустила игру для iOS и, на минуточку, Maemo, которая во многом положила начало индустрии мобильных игр — Angry Birds. Последний пример здесь не случайно.
                  Читать дальше →
                • Варим байткод на кухне JVM

                    Меня зовут Александр Коцюруба, я руковожу разработкой внутренних сервисов в компании ДомКлик. Многим разработчикам, пишущим на Java, с опытом приходит понимание внутреннего устройства JVM. Чтобы облегчить этот путь Java-самурая, я решил простым языком изложить основы виртуальной машины Java (JVM) и работы с байткодом.

                    Что такое таинственный байткод и где он обитает?

                    Постараюсь ответить на этот вопрос на примере приготовления солений.


                    Читать дальше →
                  • Кто создал Java: главное про Джеймса Гослинга


                      Java-разработчики знают, что язык и платформу создал Джеймс Гослинг, но зачастую на этом знания о нём и заканчиваются. Кто это вообще такой? Что ещё он делал в жизни? Почему перестал участвовать в работе над Java?


                      Мы считаем, что такие люди заслуживают большего внимания. Поэтому, во-первых, Джеймс появится на нашей онлайн-конференции JPoint и ответит там на многие вопросы. А во-вторых, в этом посте мы расписали заметные вехи его жизни до, во время и после работы над Java. Как он успел насолить Ричарду Столлману? Почему по изначальному плану язык Java вообще не должен был появиться? Какое отношение Гослинг имеет к подводным роботам?

                      Читать дальше →
                      • +52
                      • 10,8k
                      • 9
                    • Flutter под капотом

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

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

                        Поскольку у Flutter открытые исходники, я решил разобраться с тем, что же там под капотом (on the Dart side of the Force), и поделиться этим с вами.


                        Читать дальше →
                      • Annotations for Concurrency in Java. Our approach to coloring threads

                          At Miro, we always try to improve the maintainability of our code by using common practices, including in matters of multithreading. This does not solve all the issues that arise because of the ever-increasing load, but it simplifies the support: it increases both the code readability and the speed of developing new features.

                          Today (May 2020) we have about 100 servers in the production environment, 6,000 HTTP API requests per second and more than 50,000 WebSocket API commands, and daily releases. Miro has been developing since 2011; in the current implementation, user requests are handled in parallel by a cluster of different servers.

                          image
                          Read more →
                        • Quarkus: модернизация приложений на примере helloworld из JBoss EAP Quickstart (продолжение)

                            Всем привет – с вами пятый пост из нашей серии про Quarkus! (Кстати, смотрите наш вебинар «Это Quarkus – Kubernetes native Java фреймворк». Покажем, как начать «с нуля» или перенести готовые решения)



                            В предыдущем посте мы рассмотрели модернизацию Java-приложений с помощью поддерживаемых Quarkus технологий (CDI и Servlet 3) на примере программы helloworld из репозитория Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart. Сегодня мы продолжим тему модернизации и обсудим вопрос потребления памяти.
                            Читать дальше: Модернизация приложений на примере helloworld из JBoss EAP Quickstart