• Фантом: большая сборка мусора
    0

    Это не проблема, т.к. файлов на выходе у программ считанные единицы. А вот объектов, которые используются в процессе генерации этих файов — миллиарды. И память для них утекает в каждом первом приложении. В нынешнем мире достаточно прибить процесс и перезапустить его, вуаля — проблема решена. Кажется, что рядом с персистентной моделью памяти в любом случае должна быть какая-то неперсистентная, которую можно безболезненно вайпнуть и не потерять действительнно важные объекты. Либо нужна другая модель виртуальной машины, такая, которая бы by design не допускала утечек памяти. Например, если разделить память на 2 части: персистентные данные (аналог файлов) и неперсистентные (аналог оперативной памяти), то можно попробовать сделать что-то вроде этого:


    with (use persistentData) {
        // Код для обработки каких-то данных, который ограничен возможностями по передаче ссылок
        // на созданные внутри объекты. Все объекты в рамках этого кода могут (и должны) быть удалены
        // автоматически, как только обработка завершена.
    }

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

  • Docker + IPv6 = ❦
    0
    Да, про это есть в посте, ну видимо остаётся только ждать, пока они это починят.
  • Docker + IPv6 = ❦
    0
    Из комментария не смог понять, какую задачу вы решаете :) вам нужен свой DNS-сервер именно для докера? а зачем?
  • Фантом: большая сборка мусора
    +2
    А что предполагается делать с приложениями, у которых просто течёт память? Согласно персистентной модели, приложение запускается один раз и на всю жизнь. Пусть это какой-нибудь Office, в нём пользователь создаёт какие-то документы. Этими документами он обменивается с другими приложениями/устройствами. Но вот память течёт и течёт. Можно ли будет остановить это и не потерять созданные документы? Как это будет выглядеть с точки зрения пользователя?
  • Континуации в Java
    0
    Ещё есть jcoro https://habrahabr.ru/post/269021/
    (на правах рекламы)
  • GoddamnConsole — библиотека для проектирования консольного UI
    +1
    А мне норм ) Проблем с этим не испытывал. Но от хорошего pull request'а не откажусь
  • GoddamnConsole — библиотека для проектирования консольного UI
    0
    Да, к сожалению, это так. Выяснилось, что это мало кому нужно. Хотел заняться ей плотнее после выхода .NET Core, но там отпилили режим build --native, а очень хотелось попробовать именно в этом режиме позапускать. Но в любом случае, буду пробовать портировать на .NET Core, а там может быть и нативный режим прикрутят.
  • GoddamnConsole — библиотека для проектирования консольного UI
    0
    Что же вам не понравилось?
  • Затмение на острове Java или внимательней читайте стэктрейсы
    +3
    Загрузку внешних схем из XML можно отключить. Тут есть варианты: https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing (см параграф с Java).

    А диагностировать неудачный коннект можно было ещё попробовать с помощью dtrace.
  • Iosevka — ещё один шрифт для кодинга
    0
    Source Code Pro пока никто не переплюнул.
  • Кому и зачем все-таки нужен Go?
    +1
    Мой опыт показывает, что деплоить war намного менее удобно, чем запускать jar со встроенным сервлет-контейнером. По пунктам.

    1. Редеплой часто бывает не production-ready. Например, в jboss as в своё время редеплой хоть и работал, но периодически глючил.
    2. Деплой через cargo — медленный и неудобный для разработки, а безопасность его под вопросом в продакшене. Медленный — потому что копируются все ресурсы приложения, а потом вся эта штука разворачивается контейнером. При использовании встроенного сервлет-контейнера достаточно лишь перезапустить процесс. Ничего копировать и распаковывать не нужно. Это что касается окружения разработки. А чтобы не велосипедить на скриптах при деплое в продакшене, можно сделать deb-пакет, например, или использовать контейнеры. Дополнительный плюс такого подхода будет в том, что не придётся долго рассказывать админам, как выполняется деплой. Обновил пакет — и всё работает. Что же касается безопасности деплоя через сокет в продакшене, достаточно отметить, что были эксплоиты для различных серверов приложений, которые эксплуатировали дырки в админках. Конечно, эти порты наружу не будут открыты, но в случае эмбеддед сервера этой проблемы вообще нет.
    3. Не в курсе про томкат, может быть там все действительно хорошо с zero downtime, но я бы поостерёгся редеплоить приложения в продакшене (см первый пункт).

    Сравнить скорость cargo и ембеддед можно легко, если есть в наличии проект, war которого занимает мегабайт 70. cargo будет деплоить эту штуку сильно дольше, чем просто запустится новый java-процесс. А высокая скорость рестарта при разработке — высокая производительность программистов, то есть наше всё.
  • Автоматизация тестирования вебсайта: Pytest, Allure, Selenium + несколько секретных ингредиентов
    0
    Оказалось, что pytest-xdist конфликтует с Allure Pytest Adaptor. Начали разбираться, проблема известная, уже длительное время обсуждается и не решена. Также готового решения для наследовании тестовых данных по локалям найти не удалось,


    Мой коллега pupssman пофиксил эту штуку и даже предложил пулл реквест: github.com/allure-framework/allure-python/pull/80
    Попробуйте )
  • JCoro — асинхронность на сопрограммах в Java
    0
    Посмотрел на Vertx-Sync, там написано, что оно работает на базе Quasar, который, как я понимаю, использует аналогичные jcoro механизмы. Ну то есть там тоже есть восстанавливаемый контекст выполнения и инструментирование байт-кода. Так что даже не знаю, что проще — взять одну jcoro или пробовать vertx-sync, который зависит от quasar и vertx, которые сами по себе не маленькие :)
  • JCoro — асинхронность на сопрограммах в Java
    0
    Предполагаю, что написанием этого неудобного кода :) не знаю, как решить эту задачу удобно и без сопрограмм.
  • JCoro — асинхронность на сопрограммах в Java
    0
    Кажется, это те же коллбеки, записанные иначе (заранее сохранённые в отдельную переменную и потом использованные). Но дело даже не в том, что коллбеки плохи сами по себе. Проблема в неудобствах, которые возникают, когда нам нужно результат одной операции передать в следующую. Плюс, надо как-то уметь обрабатывать ошибки. А если писать синхронный код, таких проблем не возникает — всё просто и понятно. В этом суть подхода.
  • JCoro — асинхронность на сопрограммах в Java
    0
    Круто! Я не решился на статический анализ, решил для начала размечать аннотациями вручную. Статический анализ действительно хорошо работает в этом месте?
  • JCoro — асинхронность на сопрограммах в Java
    0
    Конечно, надёжнее, ведь там не инструментируется байт-код :) но, я надеюсь, что и этот механизм будет доведён до должного уровня доверия
  • JCoro — асинхронность на сопрограммах в Java
    0
    Может быть, я не туда смотрю, но тут всё на коллбеках: github.com/vert-x3/vertx-rx/blob/master/rx-java/src/main/asciidoc/java/index.adoc#async-result-support
  • JCoro — асинхронность на сопрограммах в Java
    0
    Там нужно писать коллбеки, именно этого и хочется избежать.
  • JCoro — асинхронность на сопрограммах в Java
    0
    Согласен, поддержки на уровне языка очень не хватает…
  • JCoro — асинхронность на сопрограммах в Java
    0
    В том, что не нужно использовать promises и коллбеки, а можно просто писать код, как если бы он был синхронным.
  • JCoro — асинхронность на сопрограммах в Java
    0
    Если писать сервер, то этот ужасный код будет только в самом верху стека обработки запроса, далее писать код можно обычными методами, только следя за аннотациями на точках восстановления. А все асинхронные операции достаточно один раз обернуть в сопрограммы и положить в утилитный класс, и больше его не трогать, а пользоваться ими как синхронными вызовами. См пример
  • Spring + Hibernate для новичков
    0
    В последнее время для персистенси предпочитаю использовать MyBatis 3 на аннотациях. Прикрутил к нему плагин для FreeMarker, и всё вообще идеально. Никаких сложных statefull фреймворков, всё на кончиках пальцев, и не многословно )
  • 10 вещей, которых вы не знали о Java
    +2
    Часто бывает надо написать код, в котором 100% никогда не будет исключения (а если будет, то это уже сигнал к тому, что программа в этом окружении вообще неработоспособна. Например, UnsupportedCharacterEncoding), но который требует обрамления в try-catch.

    Ещё бывает ситуация, в которой хочется на некоторый блок действий глобально повесить try-catch(Throwable) и если произойдет любое исключение, считать, что операция в целом зафейлилась. А не разбираться с каждым конкретным исключением, которое может случиться внутри этого блока.

    > Никто не мешает заворачивать их вызовы в try/catch и пробрасывать дальше как unchecked
    Только это и остаётся. Но это замусоривает код. Возвращаясь к примеру с UnsupportedCharacterEncoding, можно отметить, что если нужно написать метод, который занимает 5 строчек, а теперь приходится к нему добавить еще 5 строк try-catch-rethrow RuntimeException, то это же чистый мусор.

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

    Про пункт с не очень опытным программистом. Эта проблема решаема статическим анализатором (и в IDE?), который бы говорил «чувак, возможно ты пропустил исключение здесь!».
  • 15 советов и хитростей инструментов разработчика Chrome, которые вы обязаны знать
    0
    Подскажите, пожалуйста, инструмент для записи таких гифок? А, это перевод…
  • Грабли, .NET, COM и dynamic
    +5
    Стиль хорош, но все-таки есть непонятные места. Я вроде в контексте, но уж очень много пропусков в логических цепочках. В конце как минимум нужно дописать то, что получилось в виде «а теперь мы можем сделать то-то и то-то таким вот образом». И пример кода, который работает.
  • Как оказалось, знают все, а понимают не все. Транзакции в mysql и SELECT FOR UPDATE
    0
    С неоткатываемым сервисом видимо придётся реализовывать протокол двухфазного коммита, как предлагали выше.
  • Как оказалось, знают все, а понимают не все. Транзакции в mysql и SELECT FOR UPDATE
    0
    По-моему, блокировка не лучший способ решения проблемы. Тут скорее всего надо делать просто транзакцию, которую потом можно откатить в случае чего. Но в этом случае АПИ тоже должен поддерживать некий откат, т.к. при конфликтующих транзакциях коммит не пройдёт, надо сделать откат в АПИ, и далее повторить попытку. Поправьте плз, если это решение плохо.
  • Поиск жилья без посредников в 21-м веке
    +1
    Попробуйте просто поискать вконтакте по записям. Часто бывают объявления от реальных людей (не репосты ссылок на сайты типа avito), дальше можно просто списываться с человеком. Есть еще пара групп вконтакте, которые называются что-то вроде «Без посредников»: они закрытые (доступ дают в течение дня-двух) и там банят агентов. Там каждый день появляются объявления. За 1-2 недели вполне можно найти несколько подходящих вариантов, ну и далее посмотреть их, выбрав один самый лучший для вас.

    Действительность документов собственника проверить можно (и нужно) при личной встрече. Если сдают квартиру родственника, то можно спросить документы, подтверждающие родство (свидетельство о рождении, например, если дочь поменяла фамилию после свадьбы).
  • Странный глюк Git, чуть не стоивший 10 часов работы
    +2
    Так вы сделали pull & push или rebase?
  • Утечка памяти с ThreadLocal
    0
    Как я понимаю, проблемы бы не возникло, если бы ключи внутри мапы ThreadLocalVariable -> ThreadLocalValue были бы тоже weak?
  • Console Audio Tools — пакет утилит для проверки и конвертации аудиофайлов
    0
    А исходный код не выложен? Не нашёл ссылки на репозиторий в sourceforge.
  • Беззнаковая арифметика в Java
    0
    Это здорово, что в 8 появились! А я смотрел в доках к семёрке, поэтому и не увидел. Но всё равно пока придётся уж иметь в виду ручные реализации деления и сравнения, поддержка семёрки всё-таки желательная вещь сейчас.
  • Беззнаковая арифметика в Java
    +9
    ulongDiv(10, 3) возвращает 5
  • Беззнаковая арифметика в Java
    0
    Эта операция (инвертирование знака) проецирует пространство значений [0;2^32-1] на [-2^31;2^31-1] для обоих операндов. Далее производится обычное сравнение. Например, было число -1 (0xffffffff), оно станет 0x7fffffff. Было число 10 (0x0000000a), станет -10 (0x8000000a). 0x7fffffff > 0x8000000a.
  • Беззнаковая арифметика в Java
    0
    Оп-па, а я и забыл про rotateLeft-Right. Спасибо. А про Integer(Long).compare(divide)Unsigned() не понял — в стандартной библиотеке вроде бы такого нет.
  • Майское хабрасоревнование: делаем свой ГЛОНАСС
    +5
    На мой взгляд, было бы технологичнее развернуть систему наподобие ejudge, чтобы можно было онлайн проверять свои решения. А задачка интересная, жаль, что не смогу поучаствовать :)
  • Атаки нулевого дня, APT-атаки и защита от них с использованием решений Check Point
    0
    А если разработчик зловреда напишет код, который выполняет вредные действия скажем в 50% случаев?
  • Атаки нулевого дня, APT-атаки и защита от них с использованием решений Check Point
    0
    И сколько виртуального времени может пройти так?
  • Исключение — твой друг
    0
    Да я как-то больше сервер-сайд, а там логи всегда доступны. Про десктоп согласен.