Где блекджек, где мои шлюхи? Ничерта не работает! Войти !bnw Сегодня Клубы
УНЯНЯ. У нас есть немножечко инфы об этом пользователе. Мы знаем, что он понаписал, порекомендовал и даже и то и другое сразу. А ещё у нас есть RSS.
Теги: Клубы:

Давно искал пичку на эту тему, неожиданно в треде про Who Killed Captain Alex нашёл почти то что искал, не то, но всё же на случай важных переговоров сгодится: https://scontent-ams.xx.fbcdn.net/hphotos-xpa1/v/t1.0-9/11183461_10153259624093764_6062047641116055302_n.jpg?oh=8dc175bffdc1984fb06bbd93f1cc50f0&oe=55D73893

#AB5IW9 (3) / @hirthwork / 3764 дня назад

Ксюха, тебе нравится что ли делать мне НЕПРИЯТНО?

#N3V649 (2) / @hirthwork / 3764 дня назад
bnw

мне не нравится когда меня рекомендит тигрч, когда она это со мной делает, я получаю сообщение 6 more users received it, а вот когда меня каментит горен, то сразу 20 пользовательских мозгов были засраны моим постом

#9MMIDB (18+3) / @hirthwork / 3764 дня назад

весь тред охуенный. вы можете дальше ныть, а реальные пацаны фильмы будут снимать: https://www.facebook.com/ViralThread/videos/602106589931187/

#567MZH (0+1) / @hirthwork / 3764 дня назад

бнвач, а чо эта у меня дикое желание ещё раз попробовать пересесть с вима на емакс? и чо это у меня ощущение, что я опять скажу, что емакс для говноедов?

#PH8FHY (25+1) / @hirthwork / 3764 дня назад

У меня вопрос, но начну с введение в то как я до него дошёл.
Допустим, у нас есть какой-то коллбэк, в качестве примера возьмём 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 / 3764 дня назад

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

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

путь к успеху: начало https://v1.std3.ru/70/40/1427403964-7040334ac7b8e3c3a8cde205f43d6b7f.jpg

#4F0FHW (2+3) / @hirthwork / 3764 дня назад

13го числа превысил скорость под камерой, 15го выписали постановление и штраф, 16го утром пришла смска про штраф, утром же его и оплатил. 16го числа в 16:12 пришла смс что до гибдд дошла оплата штрафа. конец истории? нет, 20го числа гибдд убило дерево и отправило мне постановление с квитанцией по почте. правильно, зря я что ли за фотосессию машины пицот рублей заплатил.

#M4GJIC (2) / @hirthwork / 3765 дней назад

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

#0OA2BK (10+4) / @goren / 3765 дней назад

6.39км за 38:21

#EYSSB6 (2) / @hirthwork / 3766 дней назад
Лайк если настолько солипсист, что когда ищешь вещь думаешь "надо *придумать* где она".
#STVKOM (2+3) / @mugiseyebrows / 3766 дней назад

What if your names arent Alica and Bob. Does this still work?

#TBEQ9E (0+5) / @ninesigns / 3766 дней назад

не смешно зато про хохлов https://v1.std3.ru/0c/ef/1429604774-0cef1cb73aaa413fa7b78066954bbb3c.jpg

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

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