Очень сложно проводить код-ревью в таких случаях, так как нужно найти именно те изменения, что решают поставленную задачу.
Вот это, пожалуй, единственное, что герой сделал не так. Изменения "по пути" следовало просто вынести в отдельные коммиты. Так проще проводить ревью, и если какой-то из рефакторингов трогает то, что трогать не надо, то коммит просто дропается, а джун с этого момента знает кодовую базу чуть лучше.
А инициативу, как правило, перестают проявлять буквально после первой подобной претензии и на все время работы, поэтому большого ущерба это едва ли нанесет.
Существование Pydantic показывает, что кому-то это все-таки надо. Вот пример из документации:
from pydantic import ValidationError, validate_call
@validate_call
def repeat(s: str, count: int, *, separator: bytes = b'') -> bytes:
b = s.encode()
return separator.join(b for _ in range(count))
a = repeat('hello', 3)
print(a)
#> b'hellohellohello'
b = repeat('x', '4', separator=' ')
print(b)
#> b'x x x x'
try:
c = repeat('hello', 'wrong')
except ValidationError as exc:
print(exc)
"""
1 validation error for repeat
1
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='wrong', input_type=str]
"""
Да, я вижу проблемы. На списке в несчастные пять тысяч элементов эта функция просто упадет с сами знаете каким исключением, и я даже думать не хочу, какая у нее сложность по памяти. Если на собеседовании написать это на просьбу "calculate the sum of a list of numbers", то интервьювер, боюсь, даже не пообещает перезвонить.
Подобное решение имеет смыл когда требуют сложить список запретив использовать for и while, sum(), и весь itertools скопом, но никак не раньше.
Если это конечный результат, то вы сделали что-то совершенно непохожее. В статье, и до, и после переделки — мнемосхемы, а у вас — сложенные в кучки наборы индикаторов. Это, разумеется, проще нарисовать, но работа с подобны интерфейсом — заметно большая фоновая когнитивная нагрузка, чем мнемосхема.
Стоило бы взять из документации максимально упрощенную схему агрегата и расположить все эти индикаторы и концевики там, где они должны находиться на машине, опционально приправив символами верхнего/нижнего или открытого/закрытого положения. Если какой-то элемент красиво не нарисовать — оставить как есть кружки с подписью, но обязательно в правильном месте.
Посмотрите, как выглядит визуализация датчиков положения какого-то крана. Имея полноценный цветной дисплей высокого разрешения вы можете добиться гораздо лучшего результата.
Но ведь комбинация из кирпичиков не обязательно равна их сумме. Быть готовым к ситуациям "пожар на борту" и "отключение электричества" не значит быть готовым к пожару во время/из-за проблем с электричеством.
$ ls mp/tags
big-jazz mp3 music
$ ls -l mp/tags/music
drwxr-xr-x 0 paul paul 0 2012-04-13 20:00 big-jazz
drwxr-xr-x 0 paul paul 0 2012-04-13 20:00 mp3
Судя по всему произвольные комбинации тегов вполне поддерживаются.
Tagsistant: прямо написано, что поддерживается:
You can even combine the results of more than one query by placing a +/ in between, like in startrek/+/starwars/ which merges the files tagged startrek with the files tagged starwars.
/tag0/tag1 (starting at the tagfs root) retrieves all files that are marked with both tag0 and tag1. Prepending a '-' negates a tag, selecting every file that is not marked with the tag.
А вы точно хорошо искали? Прямо сейчас я вижу в поиске не меньше полудюжины названий, например, здесь. Самые старые из нулевых, самые свежие — годичной давности. Неужели они все не подходят?
Та, которой мне приходилось пользоваться, распространялась в виде одного .jar файла без всяких модулей ядра и работала от простого пользователя.
Третья категория означает допустимость аварийных (у меня в договоре прописаны и плановые) отключений на время до 24 часов несколько раз в год, и, будьте уверены, эти несколько раз не будут распределены равномерно.
Надежность питания от генератора ограничена, помимо всего прочего, надежностью системы поставки топлива, которая, кажется, стандартом не регламентируется.
С другой стороны, в условиях третьей категории переход на генераторы будет происходить регулярно, процедура будет отработанной рутиной, и, соответственно, будет меньше ситуаций, когда приходится ехать на заправку с канистрами или перематывать топливный шланг скотчем.
Вот вам экспрешен (без полного контекста, ибо тот слишком велик), который мне в жизни не просто встретился, но и отнял у меня некоторое количество этой самой жизни:
v = (0, o[w(109)]) (function (e) {
const t = w;
var n;
return (null !== (n = e[t(427)]) && void 0 !== n ? n : 'GET') [t(218)]()
}(t)
Хорошее знание синтаксиса, позволяющее подобные вещи распарсить в уме, может сохранить немало времени и нервов если с ними придется (а за пять лет опыта хоть раз да придется) столкнуться.
Знаете, в критической, или даже просто нештатной ситуации, человек, если он специально или нечаянно для этого не тренировался, имеет свойство действовать и соображать хуже, чем в спокойной обстановке. Тут и нужно-то было, казалось бы, на секунду остановиться и спокойно подумать, но в нештатной ситуации нет этой свободной секунды — ведь девочка плачет.
Иногда помогает нажать End. Если футер все-таки подгрузился, а подгрузка триггерится колесиком, то должно переместить ровно в конец, но без загрузки следующей порции.
У меня такое буквально позавчера было. В Factorio при игре по сети сначала загружается статический файл сохранения, а потом подтягивается и применяется дифф событий, которые произошли на сервере за время, прошедшее с начала загрузки. Хост, ожидая пока я загружусь, подошел к месту с высокой активностью ботов, которые, судя по всему, генерировали события быстрее, чем мой клиент успевал их загружать и применять, в результате чего у меня шкала загрузки натурально поползла влево.
Вот это, пожалуй, единственное, что герой сделал не так. Изменения "по пути" следовало просто вынести в отдельные коммиты. Так проще проводить ревью, и если какой-то из рефакторингов трогает то, что трогать не надо, то коммит просто дропается, а джун с этого момента знает кодовую базу чуть лучше.
А инициативу, как правило, перестают проявлять буквально после первой подобной претензии и на все время работы, поэтому большого ущерба это едва ли нанесет.
В чем минусы распила монолита вы рассказали, а в чем плюсы?
А не бывало чтобы заказчик предъявлял претензии к слишком уж супер стали потому у него обрабатывающее оборудование на такое не рассчитано?
Существование Pydantic показывает, что кому-то это все-таки надо. Вот пример из документации:
Да, я вижу проблемы. На списке в несчастные пять тысяч элементов эта функция просто упадет с сами знаете каким исключением, и я даже думать не хочу, какая у нее сложность по памяти. Если на собеседовании написать это на просьбу "calculate the sum of a list of numbers", то интервьювер, боюсь, даже не пообещает перезвонить.
Подобное решение имеет смыл когда требуют сложить список запретив использовать for и while, sum(), и весь itertools скопом, но никак не раньше.
Если это конечный результат, то вы сделали что-то совершенно непохожее. В статье, и до, и после переделки — мнемосхемы, а у вас — сложенные в кучки наборы индикаторов. Это, разумеется, проще нарисовать, но работа с подобны интерфейсом — заметно большая фоновая когнитивная нагрузка, чем мнемосхема.
Стоило бы взять из документации максимально упрощенную схему агрегата и расположить все эти индикаторы и концевики там, где они должны находиться на машине, опционально приправив символами верхнего/нижнего или открытого/закрытого положения. Если какой-то элемент красиво не нарисовать — оставить как есть кружки с подписью, но обязательно в правильном месте.
Посмотрите, как выглядит визуализация датчиков положения какого-то крана. Имея полноценный цветной дисплей высокого разрешения вы можете добиться гораздо лучшего результата.
![image](https://habrastorage.org/r/w780q1/getpro/habr/comment_images/28a/8ad/6e4/28a8ad6e4b69ffc9137f3c711cc7bc31.jpg)
del
Замечательный ресурс для новичка, ничего не скажешь.
Вы заставили меня перепроверить, я все еще на старой версии и прочитать это целиком можно, уж не знаю, что именно вы понимаете под "нормально".
А каску тоже свою приносить?
Но ведь комбинация из кирпичиков не обязательно равна их сумме. Быть готовым к ситуациям "пожар на борту" и "отключение электричества" не значит быть готовым к пожару во время/из-за проблем с электричеством.
Я поискал за вас.
TSMU:
Судя по всему произвольные комбинации тегов вполне поддерживаются.
Tagsistant: прямо написано, что поддерживается:
jtagsfs:
tagfs:
А вы точно хорошо искали? Прямо сейчас я вижу в поиске не меньше полудюжины названий, например, здесь. Самые старые из нулевых, самые свежие — годичной давности. Неужели они все не подходят?
Та, которой мне приходилось пользоваться, распространялась в виде одного .jar файла без всяких модулей ядра и работала от простого пользователя.
Там прямо в README написано, что она шлет все совпавшие ссылки на свой сервер, вместе с клятвенным обещанием ничего кроме самих ссылок не хранить.
Третья категория означает допустимость аварийных (у меня в договоре прописаны и плановые) отключений на время до 24 часов несколько раз в год, и, будьте уверены, эти несколько раз не будут распределены равномерно.
Надежность питания от генератора ограничена, помимо всего прочего, надежностью системы поставки топлива, которая, кажется, стандартом не регламентируется.
С другой стороны, в условиях третьей категории переход на генераторы будет происходить регулярно, процедура будет отработанной рутиной, и, соответственно, будет меньше ситуаций, когда приходится ехать на заправку с канистрами или перематывать топливный шланг скотчем.
Вот вам экспрешен (без полного контекста, ибо тот слишком велик), который мне в жизни не просто встретился, но и отнял у меня некоторое количество этой самой жизни:
Хорошее знание синтаксиса, позволяющее подобные вещи распарсить в уме, может сохранить немало времени и нервов если с ними придется (а за пять лет опыта хоть раз да придется) столкнуться.
Знаете, в критической, или даже просто нештатной ситуации, человек, если он специально или нечаянно для этого не тренировался, имеет свойство действовать и соображать хуже, чем в спокойной обстановке. Тут и нужно-то было, казалось бы, на секунду остановиться и спокойно подумать, но в нештатной ситуации нет этой свободной секунды — ведь девочка плачет.
FaceID?
Иногда помогает нажать End. Если футер все-таки подгрузился, а подгрузка триггерится колесиком, то должно переместить ровно в конец, но без загрузки следующей порции.
У меня такое буквально позавчера было. В Factorio при игре по сети сначала загружается статический файл сохранения, а потом подтягивается и применяется дифф событий, которые произошли на сервере за время, прошедшее с начала загрузки. Хост, ожидая пока я загружусь, подошел к месту с высокой активностью ботов, которые, судя по всему, генерировали события быстрее, чем мой клиент успевал их загружать и применять, в результате чего у меня шкала загрузки натурально поползла влево.