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

tfw список ошибок компиляции уже помещается на экран

#ZO3YOT (4+1) / @hirthwork / 3752 дня назад

Пока я жду когда же кофе начнёт действовать, давайте поговорим о бенчмарках. Нет, я не предлагаю ставить phoronix test suite и бряцать своими железками, поговорим о муках выбора между двумя имплементациями функции.
Допустим я написал функцию f(const char,size_t) которая делает преобразование данных и делает это хорошо (но долго). Допустим я написал функцию f2(const char,size_t), которая делает то же самое преобразование и тоже делает это хорошо (и тоже долго). Как определить какая функция работает быстрее (на сферических данных в вакууме)?
Обычно я запускаю каждую функцию по сто раз (или по десять, если они реально медленные) и засекаю, сколько времени функции потратили на выполнение ста итераций, и вывожу количество затраченных миллисекунд в консоль. От запуска к запуску цифры скачут на 10-15%. Тогда я пишу ещё один внешний цикл, который запускает сто итераций десять раз и выводит лучшие времена среди этих десяти. Цифры теперь скачут на 5% — тут уже ничего не поделать, фрагментация памяти, случайные контекст свитчи, фазы луны. Можно увеличить количество итераций и тогда разброс стабилизируется, но всё равно мне ни разу не удалось сделать его менее одного процента, а время выполнения бенчмарка всё растёт и растёт.
Вопрос, как правильно выбирать критерий останова для подобных бенчмарках? Как сделать запуски сферическими в вакууме, чтобы ничего программе не мешало? callgrind не предлагать — он меряет количество выполненных процессорных операций, которое не обязательно отражает точное время (ибо кэшмиссы и прочее).

#OMQRIH (25) / @hirthwork / 3755 дней назад

тем временем количество авто-тестов в рабочем проекте достигло четырёхсот. code coverage 38%

#9H47OS (0) / @hirthwork / 3812 дней назад

ты открываешь им свои исходники, а они не контрибьютят фиксы

#PNFIUK (7+1) / @hirthwork / 3830 дней назад

Collections.unmodifiableCollection(...) не проксирует вызовы hashCode() и equals(Object). Хочешь класть в хэшмап — заворачивай в .unmodifiableList или .unmodifiableSet

#9298R1 (0) / @hirthwork / 3846 дней назад

tfw двое суток гоняешься за багой в HTTP-сервере, которая проявляется даже когда просто идёшь на ручку /ping, а оказывается что бага в реализации обработчика /ping, а не в самом HTTP-сервере. Я мудак и даже /ping без багов реализовать не могу

#R6X44E (2) / @hirthwork / 3853 дня назад

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

#8IWF8L (4) / @hirthwork / 3854 дня назад

аххх, обожаю запах свежих кордампов по утрам

#JFQMFX (0) / @hirthwork / 3856 дней назад

tfw просматриваешь байткод, чтобы найти lookupswitch в performance-critical функции и заменить его вручную на лукап в таблице. mfw функция начинает работать двое быстрее.

#UOK1XN (15) / @hirthwork / 3857 дней назад

tfw самописный json-парсер оказывается в три раза быстрее того что используется сейчас в продакшене

#959XWH (15) / @hirthwork / 3858 дней назад

вот есть всякие ragel, bison, lex, они все генерят DFA в итоге. А есть parser generator'ы которые работают на базе pushdown automaton (a.k.a. автомат с магазинной памятью)

#JA82P1 (2) / @hirthwork / 3858 дней назад

в джаве нет множественного наследования (почти), нет метапрограммирования,у каждого объекта есть монитор, на который можно залочиться и которому можно нотифаи слать, все методы — виртуальные, в любой момент можно взять и перегрузить. есть gc, который позволяет не париться по поводу эксепшенов в деструкторе и прочих неподходящих местах. Программиста не спрашивают надо это ему или нет, ему просто дают кучу ништяков и при этом загоняют в новые рамки, чтобы он себе в ногу не выстрелил. Всё это напоминает Золотой Путь Бога-Императора Дюны, насильное принуждение программиста к спокойствию. Осталось выяснить, к какому Кразилецу нас готовит Гослинг

#QUNU2E (3) / @hirthwork / 3866 дней назад

ну охуеть теперь, живёшь себе, думаешь что джаву знаешь, а оказывается у строк оператор += есть.

#RKG511 (22) / @hirthwork / 3867 дней назад

tfw когда на коленке написанная оттормаживающая http-прокся хорошо держит нагрузку и даже не сегфолтится. алсо, практика показала, что https://github.com/square/tape довольно шустро позволяет сохранять данные в файловую очередь и вычитывать. рекомендую

#24JJ9T (2) / @hirthwork / 3869 дней назад

если вывернулся и избежал переизобретения велосипеда добавлением костыля, то это вин или успех?

#7ZGFZD (12) / @hirthwork / 3872 дня назад

дизлайк, если тоже пидарас, который заворачивает IOException в RuntimeException

#GM5SP5 (1) / @hirthwork / 3874 дня назад

лайк, если все структуры объявляешь как классы, чтобы потом не было путаницы с forward declarations

#ZQNWTM (6) / @hirthwork / 3877 дней назад

пока вы тут в вену ставитесь, реальные пацаны реальные проекты мутят: https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition/ найдено тут: http://thread.gmane.org/gmane.comp.misc.suckless/15363/focus=15364

#C77T7B (8+1) / @hirthwork / 3881 день назад

использование #pragma once - это грех или тяжкий грех?

#09J5E2 (6) / @hirthwork / 3884 дня назад

как прекратить программировать и пойти спать?

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

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