@hirthwork

Тег java в блоге hirthwork

hirthwork
18 Oct 2017
hirthwork

Ну пиздец, теперь весь код с синхронайзедов на локи переписывать: https://www.ibm.com/develop...-jtp10264/index.html

hirthwork
05 Oct 2017
hirthwork

минутка рекламы: http://www.twmacinta.com/myjava/fast_md5.php — охуенная реализация, которая работает в два раза быстрее родной реализации MD5 в джаве // завтра катну в продакшен и посмотрю что распидорасит

hirthwork
07 Aug 2017
hirthwork
Map<String, Integer> m = ...;
Number n = m.getOrDefault(key, new Double(0.5d));

Не компилится. А всё потому, что авторам лень было сделать эту функцию дженериком. Говно, кароч
// Плюсопетухи приглашаются покукарекать о том что это ненужно, потому что у них такого нет

hirthwork
12 Jul 2017
hirthwork

Не используйте FilterOutputStream — это говно: http://grepcode.com/file/re...utputStream.java#120

hirthwork
11 Jul 2017
hirthwork

знатно объебался со своим повсеместным использованием try-with-resources
уж если возможна в логике ситуация, когда close вызывать не нужно, то и нехуй try-with-resources тогда в этом месте использовать

hirthwork
20 Jun 2017
hirthwork

Б-же, благослови изобретателей diamond operator и type intersection

hirthwork
20 Jun 2017
hirthwork

Как же я, блядь, ненавижу ёбаный type erasure. Напрочь убивает все позывы к метапрограммированию.

hirthwork
20 Jun 2017
hirthwork

Я пока точно не уверен, но скорее всего через полчаса вы получите очередную порцию нытья про то что type erasure в джаве — ёбаное говно.

hirthwork
15 Mar 2017
hirthwork

Почему есть static String Objects.toString(Object), но нет static T Objects.clone(T)? Сука, я как плебей должен ручками на null проверять?

hirthwork
10 Mar 2017
hirthwork

дваждымандопроёбище блядь
оказывается, что java не перечитывает /etc/resolv.conf, если он изменился. нужно изъёбываться и вызывать через JNI res_init(3), чтобы изменения подхватились
подробности тута и по ссылкам: https://groups.google.com/f...sympathy/Z8t06cqaWQE

hirthwork
09 Mar 2017
hirthwork

запустил простенький бенчмарк с -server. работа с простыми объектами стала в два раза медленнее, а вот работа с атомиками чуть быстрее

hirthwork
15 Feb 2017
hirthwork

Не используйте glob'ы в java.nio.file.Files — это говно

hirthwork
10 Feb 2017
hirthwork

Шёл 2017 год, но чтобы получить количество секунд с начала эпохи всё ещё нужно ебаться одним из способов на выбор:
a) System.currentTimeMillis() / 1000 — блядь, всю жизнь мечтал магические константы по коду расставлять
б) Instant.now().getEpochSecond() — 2 (две) аллокации объектов, 2 (два) целочисленных деления и ещё горстка арифметических операций на сдачу
в) TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()) — Больше текста, больше текста! // пожалуй на этом варианте и остановлюсь. Главное — не заглядывать больше в реализацию TimeUnit

hirthwork
26 Jan 2017
hirthwork
hirthwork
22 Jan 2017
hirthwork

это чувство, когда понадобилось множественное наследование

hirthwork
20 Jan 2017
hirthwork

Неожиданно ленивая загрузка классов в Java иногда помогает найти race condition даже без нагрузочного тестирования сервиса. Вчерашний пример. Было:

void consume(final PipedInputStream in) throws IOException {
    while (true) {
        int read = in.read(buf);
        ....
    }
}

Стало:

void consume(final PipedInputStream in) throws IOException {
    try (InputStream in = new ThirdPartyWrapper(in)) {
        ....
    }
}

Поскольку класс ThirdPartyWrapper использован был впервые и это вообще был первый вызов функции consume, то JVM запустила ClassLoader, который загрузил класс из jar-ника, который сам по себе довольно тяжёлый, да ещё и на медленном HDD находится.
Короче говоря, от вызова функции до чтения первого байта при первом запуске стало проходить несколько миллисекунд. За это время другой тред стал успевать испортить данные в стриме и сделать его нечитабельным. Вот так я обнаружил race condition, который более-менее стабильно воспроизводится. А с этими вашими плюсцами мне б проблему пришлось в продакшене ловить

hirthwork
28 Dec 2016
hirthwork

socket.getOutputStream().flush() не делает нихуя
всё потому что SocketOutputStream является наследником FileOutputStream, который во flush() не делает нихуя
всё потому что они работают напрямую с файловым дескриптором и вызывают write(2), который не буферизует нихуя
на самом деле в сокете буферизует, но только если включен Nagle's algorithm a.k.a. TCP delay, который включен по умолчанию и выключается при помощи TCP_NODELAY

hirthwork
13 Dec 2016
hirthwork

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

hirthwork
09 Dec 2016
hirthwork

знали бы вы как мне порой не хватает private-наследования

hirthwork
24 Nov 2016
hirthwork

Есть две опенсорсных либы. На одной FFI точеный, на другой stderr дроченый. Какую грязью изгадишь, какую в продакшен покатишь?

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

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