Бабушка, смотри, я сделал двач! Войти !bnw Сегодня Клубы
Привет, TbI — HRWKA! 1235.1 пользователей не могут ошибаться!
?6910
прекрасное6424
говно5887
говнорашка5512
хуита4695
anime3056
linux2645
music2623
bnw2588
рашка2560
log2337
ололо2113
pic1814
дунч1734
сталирасты1488
украина1437
быдло1434
bnw_ppl1370
дыбр1237
гімно1158

Это чувство, когда JVM от IBM считает себя умнее тебя и приходится идти на ухищрения дабы его наебать и сэкономить памяти на долгоживущих строках:

$ cat Main.java
import java.lang.reflect.Field;

public class Main {
    public static void main(final String... args) throws Exception {
        Field f = String.class.getDeclaredField("value");
        f.setAccessible(true);
        StringBuilder sb = new StringBuilder(40);
        sb.append("01234567890123456789012345");
        String s1 = sb.toString();
        sb.append("hello, world!");
        String s2 = sb.toString();
        Object v1 = f.get(s1);
        Object v2 = f.get(s2);
        System.out.println(v1 == v2);
    }
}

$ javac Main.java
$ java Main
false
$ /opt/ibm/java-x86_64-80/bin/java Main
true
#EPK53Y (1) / @hirthwork / 3260 дней назад

protected Members:If members are declared as protected then these are accessible to all classes in the package and to all subclasses of its class in any package where this class is visible.

#H8UMU8 (0) / @hirthwork / 3266 дней назад

интересная статья как в джаве вызвать незаоверрайженный метод родительского класса не из наследного класса: http://javachannel.org/posts/bypassing-subclass-method-overrides/

#3AF6OO (0) / @hirthwork / 3273 дня назад
Лень ставить netbeans, пилю кусок кода через beanshell
#BF6P2T (0) / @kerrigan / 3280 дней назад
Из документации к Riak (это ещё один распределённый key-value storage): At the moment, there's no object stored in the location where we just attempted a read, which means that we'll get the following response: java.lang.NullPointerException Охрененный дизайн, чо.
#94CQUG (9) / @rmhmlhr / 3280 дней назад

оказалось, что joda-time изкоробки нет метода у DateTimeFormatter, который бы максимальное быстро распарсил из строки столько сколько нужно, и вернул количество символов, на которое нужно отступить

#3Z7TKF (0) / @hirthwork / 3281 день назад

У меня вопрос, но начну с введение в то как я до него дошёл.
Допустим, у нас есть какой-то коллбэк, в качестве примера возьмём FutureCallback из всячески уважаемой мной библиотеки HttpCore.
Допустим также, что мы угорели по асинхронности и поэтому после того как коллбэк завершил свою работу, мы хотим сообщить об этом куда следует. Например, чтобы там новый запрос запустили или ещё чего.
Наивная имплементация будет выглядеть примерно так:

public class CompletingFutureCallback<T> implements FutureCallback {
    private final FutureCallback<? super T> callback;
    private final Runnable completionCallback;

    public CompletionFutureCallback(
        final FutureCallback<? super T> callback,
        final Runnable completionCallback)
    {
        this.callback = callback;
        this.completionCallback = completionCallback;
    }

    @Override
    public void cancelled() {
        callback.cancelled();
        completionCallback.run();
    }

    @Override
    public void completed(final T result) {
        callback.completed(result);
        completionCallback.run();
    }

    @Override
    public void failed(final Exception e) {
        callback.failed(e);
        completionCallback.run();
    }
}

Зоркий глаз сразу скажет: А что если коллбэк был написан говнокодером и он кинет unchecked exception в ответ на вызов cancelled, completed или failed? Тогда completionCallback вызван не будет. Ладно, переделаем на finally. Далее уже рассматриваем рефакторинг одной функции, благо все они однотипные:

@Override
public void cancelled() {
    try {
        callback.cancelled();
    } finally {
        completionCallback.run();
    }
}

Зоркий глаз возразит ещё раз: А что если оба коллбэка написаны одним и тем же говнокодером и completionCallback.run() так же кинет unchecked exception? Да, после того как unchecked exception кинул callback.cancelled(). Даже если мы где-то снаружи ловим все Throwable, то информация о первом эксепшене будет безвозвратно потеряна.
В этот момент перфекционист вырывает клок волос из головы и призывает в помощь try-with-resources:

class Completer implements AutoCloseable {
    private final Runnable completionCallback;

    public Completer(final Runnable completionCallback) {
        this.completionCallback = completionCallback;
    }

    @Override
    public void close() {
        completionCallback.run();
    }
}

public class CompletingFutureCallback<T> implements FutureCallback<T> {
    …
    @Override
    public void cancelled() {
        try (Completer completer = new Completer(completionCallback)) {
            callback.cancelled();
        }
    }
    …
}

Вот теперь всё предельно корректно:
Если callback кинет исключение, то completer.close() так же будет вызван, и если он также кинет исключение, то это второе исключение будет добавлено к первому в список suppressed и при печати стек-трейса его будет видно и можно будет поанализировать.
Ну а если callback отработал как следует, то completer.close() так же будет вызван, а если исключение, if any, будет также проброшено наружу.

#KIFEAY (7) / @hirthwork / 3294 дня назад

Посоветуйте годную гуглгруппу или иной ресурс, куда можно было бы запостить
пост со сравнением двух сходных идиом и чтобы получить нормальную дискуссию.
SO не подходит, потому что у меня скорее не вопрос, а приглашение к обсуждению.
В гуглгруппсы глянул и их там сотни и первые две на полнены вопросами типа
how to hide and show cursor in JTextField? и происками HR

#ZPF3PC (14) / @hirthwork / 3294 дня назад

ну давай по пунктам разберём по ссылке написанное) складывается ощущение что авторы по жизни обиженные, про таких говорят что Брин не хотел, а Пэйдж не старался))

When you add a throw statement to an existing function, you must examine all of its transitive callers.

Ничего не должен, потому что для checked exceptions компилятор сам скажет, где эксепшен забыли обработать или пробросить

functions may return in places you don't expect

Тупо похуй где они вернут, главное что. И в случае checked exceptions явно указывается какие исключения могут возникнуть в конкретной функции

Lots of supporting machinery is needed to make writing correct exception-safe code easy.

Какая разница, где чистить ресурсы в goto statement или в finally? Только checked exceptions и try-with-resources делают многие вещи автоматическими

Turning on exceptions adds data to each binary produced, increasing compile time (probably slightly) and possibly increasing address space pressure.

Пиздёж без пруфов и бенчмарков

For example, invalid user input should not cause exceptions to be thrown

Вот это вообще пушка. Какая им разница, как парсер запроса сообщит наружу об ошибке? Это уже приблуда, которая response генерит пусть перехватить эксепшен и сообщит юзеру, что он мудак. А во внутренние дела парсера пусть не лезет. Эксепшены как раз и прудуманы для того чтобы делегировать обработку ошибок кому надо.

В общем, тебе нужно много думать о своём поведении, стремиться к пробуждению сознания)

#COD9FW (7) / @hirthwork / 3305 дней назад

http://docs.oracle.com/javase/8/docs/api/java/nio/file/DirectoryStream.html:

If an I/O error is encountered when accessing the directory then it causes the Iterator's hasNext or next methods to throw DirectoryIteratorException with the IOException as the cause.

public final class DirectoryIteratorException extends ConcurrentModificationException

Пиздец, блядь. «У нас какая-то хуйня случилась при итерировании по директории!» — «Кидай RuntimeException, чтобы программер заебался дебажить!»
Вот натурально, давно требуется уже интерфейс который бы позволял итерирование, но мог кинуть эксепшен в процессе. Казалось бы — один новый интерфейс и небольшая поправка в JLS. Но нет! Мы будет маскировать IOException под RuntimeException.

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

#JWBD3D (11) / @hirthwork / 3309 дней назад

В классе java.nio.file.Files присутствуют две статические функции для создания директорий:

createDirectory(Path, FileAttributes...)
createDirectories(Path, FileAttributes...)

Активным пользователям mkdir(1) даже не нужно читать доку чтобы знать особенности различия:
Первая создаёт одну папку и ругается если она уже есть.
Вторая создаёт все нужные папки и не ругается если папка уже есть.

В общем, мне было очень приятно обнаружить такую преемственность на уровне флага -p.

#N99UVY (0) / @hirthwork / 3330 дней назад

Мы обожаем self-descriptive имена у функций. Например, вот три строчки из декларации одного интерфейса:

    long intValue();
    double floatValue();
    String stringValue();
#QNEXRT (4) / @hirthwork / 3330 дней назад

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

#PCV7IS (0) / @hirthwork / 3330 дней назад

днище ебаное

Error Message: In a JIT-compiled Java method, a finally block is
not executed when:

1. A multi-type catch block is used to catch more than one type
of exceptions.

2. An exception is thrown from the try block that matches
anything but the first type in the multi-type catch.

3. An exception is thrown from the catch block. It can be a new
exception, or the caught (re-thrown) exception.

© http://www-01.ibm.com/support/docview.wss?uid=swg1IV68110

Оригинальный разбор полётов здесь:
https://www.ibm.com/developerworks/community/forums/html/topic?id=b660d423-abee-4d81-9a82-450824a26298&ps=25

#E3KYQA (12+1) / @hirthwork / 3332 дня назад
>use of '_' as an identifier might not be supported in releases after Java SE 8
#1S1R2L (2+1) / @dzhon / 3333 дня назад
Вчера я захотел написать удобный аплодер на файлопомойки с решарингом ссылки. Примитивнейшее приложение. т.е. чтобы нажал на файлик share, выбрал "расшарить через заливалку", в заливалке выбрал "думп.битчиз" или "имг.лепрозориум", в ответ получил ссылку, которую можно либо скопировать в буфер одной кнопкой либо расшарить через другое приложение, например новый пост в бнвач. На десктопе с кутями за два часа бы написал. На десктопе с консолью за пять минут бы написал. На андроиде я уебал вечер и всё ещё не всё работает СЕРВИСЫ БРОАДКАСТЫ ИНТЕНТЫ ПАРСЕЛЕЙБЛ ЕХАЛА МОЧА ЧЕРЕЗ ЖАБУ ЕБУЩУЮ ГАДЮКУ ПОЕДАЯ ГОВНО
#ORMAY4 (11+5) / @stiletto / 3336 дней назад

Это чувство, когда твой сраный JsonWriter сраные 200тысяч key-value пар общим размером в восемь сраных мегабайт пишет и кодирует из utf-16 в utf-8 целых 250 мс

#AFB7MS (2) / @hirthwork / 3342 дня назад

уж если собрался профилировать скорость, то будь добр -Xdebug из параметров запуска убрать
inb4: хули я тут удаляю

#ZRNA89 (3) / @hirthwork / 3342 дня назад
--
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.