Показаны сообщения с ярлыком java. Показать все сообщения
Показаны сообщения с ярлыком java. Показать все сообщения

пятница, 22 сентября 2023 г.

Java без java-desktop

Сегодня коллега по JetBrains пришёл хвастаться своей реализацией diff viewer для браузера. Он в каком-то исследовательском отделе питерской лабы работает, который разрабатывает шустрый редактор для Web. Пишут на Java 21 и немного на Kotlin, но Java2D (даже java-desktop) не используют.

суббота, 17 июня 2023 г.

CodeForces

Мишка продолжает решать задачи не только с предыдущих ЕГЭ по информатике, но и на CodeForces. Вчера у него не сошлась мемная задача и он позвал меня. Ему все числа печатали как нули...

Он предпочитает решать на C, ибо писать чтение входных данных проще. Сначала я посоветовал ему переписать тот же алгоритм на Java и он сработал как надо. То есть дело не в этом.

Потом мы вставили отладочную печать в сишный код и обнаружили, что sqrt из math.h для любых чисел возвращает 0. Это только на серверах CodeForces, локально программа работает правильно. Куда можно пожаловаться - мы так и не нашли...

среда, 14 июня 2023 г.

CodeForces

В процессе подготовки к ЕГЭ по Информатике Мишка решает разные задачи не только с предыдущих ЕГЭ по информатике, но и на сайте CodeForces. Пару дней столкнулся с такой задачей на динамическое программирование.

Мы с ним совместными усилиями придумали алгоритм, но он не работал. Сначала он писал Превышено ограничение времени на тесте 6, потом Неправильный ответ на тесте 6.

Я подключился на Java, но тоже отвалился по времени на тесте 6. Потом подумал и объединил два вызова print - это позволило мне отвалиться по времени на тесте 8. Это показало мне, что алгоритм правильный и, в результате, я добился полного решения. Использование StringBuilder и одного вызова print сильно ускорило приложение за счёт использования памяти.

После этого я долго пытался понять, что не так с его кодом на C. И всё-таки нашёл ошибку - он выводит результат в формате "%d ". И заменой его на "%lld " я получил полное решение.

четверг, 2 июня 2022 г.

И каков результат?

Прикольную задачку обнаружил на просторах Интернет - даже меня заставила задуматься:
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i)

воскресенье, 22 мая 2022 г.

Второй тур

Сегодня в МФТИ турнир по информатике в формате CodeForces. Мишка решил четыре задачи на Python, но две из них превысили ожидаемое время. Я захотел ему помочь, попытавшись переписать его алгоритмы на Котлин, но меня подвела последняя IDEA.

Я минут 15 убил на попытки создать простой Котлин-проект, чтобы можно было вызывать main, но двумя разными способами у меня сделать это не получилось. А ведь полгода назад это работало как часы. Пришлось плюнуть и переписать на Java. Хорошо, что простые Java-проекты там ещё не сломаны.

Задачи заковыристые, с подвохом. Имея набор тестов можно было бы додебажиться до правильного решения, но их не дают - приходится черепанить. Первая задача - самая прикольная, ибо куча слов в описании математически сводится до варианта:
print(n == 1 ? 1 : 0)

четверг, 2 сентября 2021 г.

Алгоритм НОД

Мишка тут пишет свой Minecraft с блэкджеком и Graphics2D. Понадобилось ему посчитать наибольший общий делитель. И вот что он нашёл на просторах StackOverflow. Красиво:
int a = Math.abs(first);
int b = Math.abs(second);
while (a != 0 && b != 0) {
    if (a > b) a %= b;
    else b %= a;
}
int r = a + b;

понедельник, 12 июля 2021 г.

ГовноКод

Интересно иногда посмотреть на то, как лучше не писать, пока внезапно не обнаруживаешь свой код. С другой стороны, комментарии показывают, что это не совсем ужас-ужас.

Лично я могу привести тут свои аргументы, почему это у меня так получается. Только затем, чтобы не писать скобки тут:
"time: " + (ms2 - ms1) + " ms"

А комментарии про оптимизацию на кофеварках - какая-то дичь...

пятница, 9 июля 2021 г.

Настырный HR

Некоторое время назад получил такое письмо:
Сергей, добрый день!
Я искала лучших Java разработчиков и нашла ваше резюме. Хочу предложить вам рассмотреть позицию в компании реклама. Вот некоторые детали:
Это развивающийся стартап...
Интересно, где нашла? Никакой конкретики по зарплатам и задачам, посему просто выбросил. Но они продолжают писать:
Хотела узнать, прочитали ли моё предыдущее письмо, а то, переживаю, вдруг не дошло. Я буду рада рассказать подробнее, когда вам было бы удобно созвониться?
Созвониться? Зачем? Но они продолжают настаивать:
Ну что ж, так и не дождалась ответа от вас, видимо совсем вас не убедили мои аргументы :) В любом случае, была бы рада узнать, какие проекты вам могли бы быть интересны в будущем, чтобы предлагать более релевантные. Останемся на связи?
Какие аргументы? В чём убедили? Похоже кто-то слил резюме в рекрутинговое агенство, а те и рады стараться...

воскресенье, 23 мая 2021 г.

О программировании

Недавно прочитал, что пять часов отладки помогут сэкономить пять минут на чтение документации.

Однако, за последние годы я убедился, что эти пять минут на чтение устаревшей документации не избавят вас от пяти часов отладки. Но это не отменяет важности чтения документации.

четверг, 17 декабря 2020 г.

среда, 2 декабря 2020 г.

IntelliJ IDEA 2020.3

Встречайте новую версию!
А мы начинаем работы над следующим релизом...

понедельник, 16 ноября 2020 г.

Java var

В очередной раз делал рефакторинг и обратил внимание, что IDEA предлагает сделать var для неё. Весьма удивился, ибо это был не Kotlin, а Java. Оказывается этот JEP появился ещё в Java 10. И даже на habr его обсуждали. Надо будет поизучать, что я ещё мог пропустить. А ведь когда в Oracle работал - был на острие, а сейчас наш master работает только на Java 8 и на Java 11.

вторник, 28 июля 2020 г.

IntelliJ IDEA 2020.2

Встречайте новую версию! Там и про моё написали:
В новом окне Problems вы увидите список ошибок и предупреждений для текущего файла с описаниями проблем. Кликните правой кнопкой мыши по ошибке, чтобы перейти к проблемной строке, и исправьте ее с помощью Alt+Enter.

вторник, 2 июня 2020 г.

Ссылка на метод

Я уже писал про ссылку на метод, но у неё оказался ещё забавный side effect. Рассмотрим два способа передать метод для отложенного создания некоего класса:
  1. EventQueue.invokeLater(() -> new FooBar())
  2. EventQueue.invokeLater(FooBar::new)
Отличия этих способов проявляются при первом обращении к классу FooBar. В первом случае сначала будет сделан запрос, а потом уже загружен класс с диска и создан, а во втором - сначала загружен с диска. Это заметно влияет на startup performance...

воскресенье, 17 ноября 2019 г.

Swing Monsters


О какой раритет внезапно обнаружился на просторах сети...

суббота, 16 ноября 2019 г.

JFuture 2019

Провели конференцию. На сами выступления я не попал, но обратил внимание, что многие делали презентации с использованием Kotlin. На стенде основной наплыв был в перерывах, но и между ними приходили люди, так что скучать нам не приходилось. Я отвечал за организацию игры Code Golf, поэтому сталкивался только с Java-разработчиками.

Конференция была русскоязычная и с общением проблем не было. Однако, удалось пообщаться с нашим докладчиком Mala Gupta и я понял, что из-за долгого отсутствия опыта у меня есть проблемы с восприятием английской речи “на слух”. Надо чаще ездить по конференциям и практиковаться.

вторник, 12 марта 2019 г.

Java.net blog post

Написал очередную статью про разное поведение обработчика клавиатуры на разных платформах. Пишите комментарии...

среда, 6 марта 2019 г.

Java.net blog post

Не прошло и трёх лет и написал очередную статью в продолжение этой темы. Пишите комментарии...

четверг, 28 февраля 2019 г.

Исключительный СберБанк

В нашем новом офисе неделю назад появился банкомат Райфа, а сегодня рядом появился ещё и банкомат Сбера. Судя по тому, что видно на экране, там используется Java, которая кинула что-то типа MoneyIsOverException.

Куда катится оракул?

Мы сейчас переводим IDEA с JDK 8 на JDK 11 и обнаружили забавный баг: после нажатия правой кнопки Alt перестаёт работать левый Alt, а значит лесом идёт вся навигация и большинство пользовательских шорткатов - помогает только перезапуск IDE.

За дело взялся я и обнаружил, что ещё три года назад в Oracle поменяли файл AWTEvent.m, пытаясь сделать из правой кнопки Alt что-то вроде AltGr для macOS. Проанализировав изменения я осознал, что они завели статическое поле altGRPressed = NO, которое меняют на YES при первом нажатии правого Alt. И больше никто и никогда не ставит это поле в состояние NO.

Пытаюсь разобраться во всей этой машинерии, ибо простой фикс мне не нравится. Наверняка там будут ещё сюрпризы...