@hirthwork

Тег til в блоге hirthwork

hirthwork

Оказывается, для подсветки длинных строк, чтобы не вылезать за 80 символов, достаточно сделать set colorcolumn=80 — всё, чёткая вертикальная черта по границе.
А ещё сделал забиндил себе на F4 подсветку линии. Этакий механизм отметки строк. Удобно, когда долгий stack trace внутри одного файла разбираешь. Смотришь, как вызовы по линиям бегают. КДПВ:

hirthwork

Для записи английских текстов, Церковь Святых Последних Дней (основана около 1830г.) изобрела собственный алфавит: https://en.wikipedia.org/wi...eret_(Unicode_block)

А я потом с суррогатными парами ебись. Весь ЦПУ на Юникод ваш ёбаный уходит.

hirthwork

Оказывается, что HTML можно написать так: <a href="http://0xacd916ae">pizdes</a>
Бравзер распарсит шестнадцатеричную чиселку как октеты IPv4.
Интересно к чему ещё меня жизнь не готовила?

hirthwork

Сегодня я узнал, что моя жена — правак.
Ей бомбануло от ролика «поддержим бизнес в трудное время».
Я б не тянул полтора года со свадьбой, если бы сразу сказала.

hirthwork

Сегодня я узнал, что у исполняемых файлов в x86_64 максимальный размер исполняемого файла — 2ГБ. И ещё я узнал, что в нашей системе сборки мы регулярно в этот лимит упираемся.

hirthwork
hirthwork
hirthwork
hirthwork

Здравствуйте, мои маленькие любители поебатися с байткодом. Сегодня я вам расскажу о crucial difference различных access specifiers при объявлении мемберов inner-классов.
Слово в сторону: любой порядочный параноик объявит мембер своего класса как private, а не как либо ещё. Крайне ленивый раздолбай вообще access specifier не напишет. И вот тут-то и зарыта собака.
Возьмём вот такой класс с двумя inner-классами:

public class Main {
    class Inner {
        int field;
    }

    class Pinner {
        private int field;
    }

    int test(final Inner obj) {
        return obj.field;
    }

    int test(final Pinner obj) {
        return obj.field;
    }
}

Ничег сложного, просто два inner-класса, у одного поле int, у другого — private int. Ну и из двух разных функций обращаемся к этим полям.
Скомпилим и посмотрим на байткод:

$ javac Main.java
$ javap -p -c Main.class
Compiled from "Main.java"
public class Main {
  public Main();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  int test(Main$Inner);
    Code:
       0: aload_1
       1: getfield      #2                  // Field Main$Inner.field:I
       4: ireturn

  int test(Main$Pinner);
    Code:
       0: aload_1
       1: invokestatic  #3                  // Method Main$Pinner.access$000:(LMain$Pinner;)I
       4: ireturn
}

Ну ничего себе! Было private int простое, а стало золотое — вместо банального getfield получаем invokestatic, который...

$ javap -p -c Main\$Pinner.class
Compiled from "Main.java"
class Main$Pinner {
  private int field;

  final Main this$0;

  Main$Pinner(Main);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #2                  // Field this$0:LMain;
       5: aload_0
       6: invokespecial #3                  // Method java/lang/Object."<init>":()V
       9: return

  static int access$000(Main$Pinner);
    Code:
       0: aload_0
       1: getfield      #1                  // Field field:I
       4: ireturn
}

... внутри уже сам делает getfield, т.е. на ровном месте получили лишний вызов функции. А ещё когда вы сделаете что-то вроде:

Pinner pinner = null;
return pinner.field;

То в стектрейсе NullPointerException вы получите лишний фрейм с этим самым Main$Pinner.access$000, который неопытного программиста просто вводит в ступор.

В общем, я сейчас борюсь с желанием повсюду в коде поудалять все private.

hirthwork

Учимся говорить ентерпрайзно:
Вместо «ракета взорвалась» — rapid unscheduled disassembly

hirthwork

s/pattern\(.\)/\L\1/g — приведёт символ после pattern к нижнему регистру
Очень удобно, когда массово переименовываешь camelCase переменные убирая первую часть имени

hirthwork

Запросы без заголовка Host: nginx сразу реджектит с 400 Bad Request

hirthwork

new test tl;dr: test который не выставляет exit code в 1 если проверка зафейлилась.

hirthwork

Когда делаешь в shell-скриптах <<<, то создаётся временный файл. Называется он here-document или heredoc. Но это абсолютно неважно, если у тебя в $TMPDIR кончилось место.

hirthwork

ncdu -x /

hirthwork

The <font> tag is not supported in HTML5. Use CSS instead.

hirthwork

/etc/issue

hirthwork

Function names are case-insensitive
Нет, ну ёб твою мать...

hirthwork

Чёрный дятел, которого я сегодня утром видел, называется желна́.

hirthwork

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.