Check Levi9 best QA positions to Backbase team!
×Закрыть

Ошибки в коде, которые вы до сих пор не исправили

У вас есть такие?
Покажете?
Язык программирования: js, php, java

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Недавно в легаси коде нашел такое чудо

   try {
            List<String> items = repository.findItems();
            String item = items.get(0);
        } catch (NullPointerException | IndexOutOfBoundsException ex) {
            log.error("Error while getting data");
        }

да проще надо быть. в самом начале программы try, в самом конце catch. (сам лично видел)

А вы отладчиками пользуетесь? Или отладчиками должны пользоваться отладчики? (О! Изобрел новую профессию)

Раз вы все здесь такие умные — попробуйте собрать золото в этой игре:
giprozhorka.space/mix
Юзайте левую и правую кнопки мышки, красный квадратик это наш главный герой — именно он таскает и толкает камни, переходит с цвета на цвет и переставляет камни вокруг себя (если есть свободное место)
И да, ошибок в этой игре нет.

А копіпасти є
if (
(base_color[0] == color[0]) &&
(base_color[1] == color[1]) &&
(base_color[2] == color[2]) &&
(base_color[3] == color[3])
) {
continue;
}

У вас багато амбіцій, для розвитку це тільки +, та над якістю коду треба працювати, спробуйте різні лінтери

Тестировщик для программиста как кнут, а зарплата как пряник

Щось я клацав-клацав... так нічого і не зрозумів: права кнопка в принципі нічого не робить, а ліва за якимось абсолютно незрозумілим принципом то змінює кольори, то ще щось. Якщо вже робити гру про квадратики, краще б Ви на щось отаке орієнтувались: gameaboutsquares.com

Спасибо за проявленный интерес. Но вы видимо спешите играть. Здесь не нужно спешить. Враги не подкрадутся из-за угла. Это пошаговая стратегия. Можно посидеть полюбоваться. Правая кнопка делает, но для этого нужно найти такой цвет, который не содержит золотого квадратика в себе. Левая передвигает красный квадратик, но недоступны свободные пространства, гл. герой перемещается по стенам, по потолку, полу. Попробуйте начать новую игру. Если нет пространств вы можете создать его, как раз передвигая квадратики. Посмотрите видео про игру, может тогда станет понятнее. youtu.be/4OOZyURoag8

Я теж бачу якийсь набір кольорових квадратиків. Клацаю лівою кнопкою — кольори іноді міняються, а іноді ні.

Это игра в которой загадкой является управление игрой. Необходимо понять, в каждом лабиринте, какие функции вам доступны, а какие нет. Это не баг, это фича. А сейчас я бы разрабатывал, рендомное генерирование правил для каждого уже генерируемого рендомно лабиринта (в плане рендомного наложения ограничений на виды перемещений, например, и др.) если бы у меня была такая возможность. Видите ли, в этой игрушке вариантов развития событий больше чем в шахматах. Никогда вам с ней скучно не будет.

Это игра

Скоріше головоломка ніж гра тоді.

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

Любимое место ошибки между креслом и монитором

’Работает — не трогай’ 100 раз доказано :D

Ищу работу тестировщика. Удаленно.

На Djinni краще спробуй, там хороший шанс

Where is code, there is a bug until the constructive proof of its absence was provided.

Прям трудами Дейкстры повеяло :)
А по делу — полностью согласен

Прям трудами

гомотопической теории типов повеяло

Все переходим на SML?

На хаскель, скалу, окамл, ирдис, агду, coq.

Вот только запроса со стороны бизнеса на это все почти нет.

Он есть, но его достаточно мало, не все могут из надёжности извлечь профит.

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

не все могут из надёжности извлечь профит

дело не только в профите, а в том, что код довольно быстро устаревает, бизнес-логика расширяется и переделывается. При этом держать постоянно на проекте юникорна с phd по теории типов может быть накладно, в случае чего заменить некем, так что тут даже не вопрос денег встает в первую очередь. Я общался с людьми, которые работают на фирмах, где подобное в почете, но даже там не особо заигрываются с этим.

Одне популярне IDE не підтримувало повноцінно cats, коли працював з цією бібліотекою: при кліку по місці виклику не відбувався перехід до місця реалізації. Напевно, розробники IDE не вірили, що достатньо людей цим користується. :)

Если вы про идею, то с тем как она краснит давно и результативно борятся. Там макросы уже поддерживаются, коты не краснят в большинстве случаев. Там даже прикрутили сёрч по использованию имплиситов и показ неявных параметров. Я в ней работаю, никаких особенных нареканий нет, хотя при желании хайлайт кода можно сломать.

Так, про ідею. Я мав на увазі якраз серч. Коли хотів подивитися в реалізацію методу, доводилося робити повний пошук по проекту і повний перебір по всьому знайденому. Не дуже ефективно. Якщо вже прикрутили, це добре.

Червоніння — це інша проблема. Пам’ятаю, щоб з IDE кліком запустити тест після змін у коді з котами, доводилося щоразу робити sbt clean... %)

Искать реализацию тайпкласса надо через implicit search потому что вам нужен инстанс а не интерфейс.

Як шукати через implicit search? Я просто підводжу мишку до місця виклику методу і при затисненому Ctrl роблю лівий клік мишкою.

Ctrl+Shift+p. для аргументов имплиситов. Ctrl + shift + q для самих имплиситов.

Цікаво, не знав, що є ще такий альтернативний пошук. У мене на Ctrl+Shift висить зміна мови, але дякую, буду мати на увазі.

Затем чтобы не писать говнокод/мучатся с нырянием в выход разных аннотаций/рефлексии и прочих фреймворков. Чтобы писать прозначный и компайл-тайм проверяемый код построенный , там нужно меньше тестировать и делать рантайм-проверок где можно сделать компайл-тайм проверку.

То что код «корректный» не значит что он соотвецтвует требованиям.

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

Ток в мире пони требования зафиксированы сразу, и не поменяются на 360 через месяц, а также все девелоперы с первого раза их прально поняли и сделали.

Я конечно понял что вы имели в виду, но «на 360» это как бы в том же направлении.

К чему ты клонишь? Если меняются требования надо менять код, и на этом всё.

Это названия покемонов)?

если это не стёб, то мне вас жаль.

Не надо меня жалеть) Все гуд)

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

Ошибки бывают разные и по коду абсолютно не понять — это ошибка или фича.

Ну например, возьмем классику в БД, когда движение по складу ведется в одной табличке, куда складывается дата, название товара, стоимость и движение. Казалось бы — это избыточность и надо бы табличку разбить на части, вынести отдельно как минимум товар. И это — ошибка в схеме БД.
Но нет — вся БД живет на мискуле и имеет миллионы записей. Если ее разбить на части то при запросе она джойнами выжирает всю память например.

Еще пример — по коду все циклы развернуты, вместо того чтоб сделать цикл с итерацией 5 раз, там накопипащен одинаковый код 5 раз. Ошибка? Индусы? Ну конечно же нет!
Просто этот код выполняется на крайне медленном процессоре в системе с большим объемом памяти. И вот так нерационально выжрав память можно экономить драгоценные процессорные такты.

Флаги оптимизации по скорости. Как минимум. Хз для какого языка этот пример, но в С/С++ флаг Os заоптимизирует по размеру (сделает 5 итераций цикла), а O3 вполне может превратить этот цикл в линейный код.

Может превратить, а может и не превратить. Но процессор участвует в синхронизации каналов и «может» приводит к их рассинхронизации.
Потому что там есть точный рассчет по числу процессорных тактов, который надо выдерживать между итерациями. И их приходится вручную добивать нопами.

И где твой компилятор теперь?

Потому что там есть точный рассчет по числу процессорных тактов, который надо выдерживать между итерациями.

Рилтайм-система какая-то?
Представь что в момент выполнения прилетает прерывание. И обрабатывается. И где твой точный расчет по числу процессорных тактов теперь?

В этой системе нет прерываний вообще. Архитектурно не предусмотрено.

Это не является ошибками. Ошибкой является ТЕОРИЯ, в которой стоимость хранения предполагается бесконечно выше стоимости обработки. На чём опытные программисты эту теорию вертели?

Давай намекну: есть ещё более сырая форма записи, не поддающаяся никакому прощению теоретиков баз данных. Это логи. Почему они существуют и работают не только лишь везде? Да потому что не допустили туда теоретиков, а когда допустили — были уже устоявшиеся каноны, и много они напаскудить уже не могли.

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

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

Разогнать процессор условно можно — наращиванием их количества. Но всё равно упрёшься в бутылочное горлышко, и вынужден будешь поднимать кластера. А значит что? Привет, родненькое дублирование, как мы по тебе соскучились! Только теперь всё это в режиме горящей жопы и неимоверными требованиями к скорости и задержкам сети.

Условно можно похудеть — отпилить часть тела. Но на практике это такая же чушь, как наращивать число процессоров.
Программа работает в один поток и остальные твои процессоры будут делать ничего.

Кластер не нужен абсолютно — остатки товаров более чем за три года консолидируются и таким образом размер данных не растет и всегда актуален.

Как тебе такое, Илон Маск?

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

Не то чтобы ошибка, люблю ради эстетического наслаждения:

let bool = ‘true’;

if ((JSON.stringify(bool.toString().toLowerCase().toLocaleLowerCase().valueOf().substring(0)).length === 4 && 
bool.toString().toLowerCase().toLocaleLowerCase().valueOf().substring(0,).endsWith(‘ue’)) {
   // do something for ‘true’
} else if ((JSON.stringify(bool.toString().toLowerCase().toLocaleLowerCase().valueOf().substring(0)).length === 5 && 
bool.toString().toLowerCase().toLocaleLowerCase().substring(0).valueOf().endsWith(‘se’)) {
 // do something for ‘false’
} else {
// here something for neither true or false, I dunno, some shit. 
}

Зате на змінних зекономили. Треба у всьому бачити позитив.

Ой, тут здається зовсім все погано. Зате коду багато, активність в тайм трекері висока буде.

Насправді щось схоже я бачив в індійському кіно. Чи то не кіно було...

Сказать где вылетит ошибка? На старом айфоне, откуда зашли со старого браузера Сафари, который не понимает let.
Да, макодрочеры — они такие.

Ну хоть === использует, а не месиво из неявных привидений.

ЗЫ спасибо, напомнил почему я забил на фронт-энд )))

Ну хоть === использует, а не месиво из неявных привидений.

А вот эта ошибка будет исправлена в следующей версии.

А вот эта ошибка будет исправлена в следующей версии.

в следующей версии ES, ты имел в виду?
Добавят операторы ~== и ====, означают «ну типа равно» и «очень равно».
Правда, окажется, что и эти операторы покрывают не все, и нужен еще оператор ==~== «а может все-таки равно, если сначала не равно?»

Нет, в смысле напишу так:

parseInt((JSON.stringify(bool.toString().toLowerCase().toLocaleLowerCase().valueOf().substring(0)).length) == 4
== 4

А вдруг в следующих версиях ЕС .ленгс будет возвращаться как «4».
Тогда все, сломан твой код :)

devspace.com.ua, фільтр по кількості спеціалістів, до 80, зникає після перезавантаження, TypeScript

Не ставит один чекбокс (самый нижний) после reload. А вот если отмечено два чекбокса (включая самый нижний) то ставит оба после релоада. Если не нажать кнопку Шукати или лупу сбоку от инпута поиска, то не ставит чекбоксы. Если нажать после релоада ставит все, кроме самого нижнего, но если будет отмечено несколько, то сохраняет состояние. Очень сильно похоже на неправильную обработку границы. Но вообще нужен весь проект чтобы понять что происходит.

Ця помилка мені зрозуміла, буде якесь дуже просте виправлення, в 1-2 лінії коду

А где код, который работает с чекбоксами? Где код который сохраняет состояние? Что применяете, какие фреймворки, api, библиотеки, давайте исходники всего, что касается данной области. Тогда возможно найду, где баг.

Це благодійний фонд «Не залишимо баг наодинці»?

Поки рано відкривати код цього проекту, виправив)

Ок. Когда тестировал больше всего напрягало, что фильтр сам закрывался. Ведь как надо? Один раз фильтр открыл — то, что он открыт где-то запомнилось в сессии или куках и все. А он постоянно закрывался сам. Сдается мне, что это скорее баг чем фича.

Это карту надо постоянно маленькой делать, имхо. А фильтр надо постоянно открытым держать. Чтобы юзер при желании карту сам раскрывал, если маленькой будет недостаточно.

Подписаться на комментарии