Pull to refresh
52
2.8
Send message

Озадачился вопросом, а может ли AI помочь в написании гитарных табулатур. Я могу снять на слух партию ударных, но остальное выше моих сил. ChatGPT и Gemini ответили уклончиво и галлюцинативно. Поиск вывел на платный сервис klang.io - но на данный момент ему не по зубам даже изолированная басовая дорожка. Выдает полный бред.

И тут выяснилось, что на популярнейшем сервисе songsterr эта фича живет, что называется без всякой славы, как минимум с весны 2024! Бесплатно! И оно работает! Закинул несколько песен жанров metal, postrock, psychedelic rock и что могу сказать:

  • Ударные снимает почти идеально, требуется минимальная доводка.

  • Электрогитары снимает похуже. В хитрых соло захлебывается. Иногда выдумывает. Иногда мажет мимо ритма.

  • Бас может сильно упростить. Если партия плотная и бас нечеткий, то просто кладет восьмые тоникой. Иначе может прописать бас даже лучше гитар.

  • Аппликатуры выдает вполне человеческие, но иногда странно выбирает позицию. Для себя я бы переделал.

  • Пока что любую песню приводит к инструментовке 2 гитары, бас, ударные. Темп понимает, но строй инструментов приводит к E standart.

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

Tags:
Total votes 2: ↑2 and ↓0+2
Comments0

Недавно в очередной раз одернул своего джуна, когда он хотел написать такое

if (someVar != null) {
  ...
} else {
  throw new NullpointerException()
}

Да, руками кидать NPE - это дичь. Но мне не нравится сам факт броска исключения посреди разухабистого бизнес процесса. От меня сразу же следует вопрос: это так и должно быть по спеке? Не должно. А значит - разработчик халтурит. Он или не разобрался в бизнес-процессе сам, или не напряг аналитика/лида/архитектора и не выяснил, что система должна делать в исключительной ситуации. throw здесь означает: "ой все, пусть оно как-нибудь само".

Лично мои правила по исключениям в Java/Kotlin:

  • Перед очередным throw ответь на 2 вопроса: а) кто адресат этого сообщения? б) что адресат должен сделать при получении? Нет ответов - не кидай исключение, а вместо этого лучше разберись в процессе.

  • Располагай весь кидающий исключения код компактно и предсказуемо. Например, пусть исключения кидают только валидаторы на входе хэндлеров, но не сервисы и не репозитории.

  • Пиши код как конечный автомат. Абсолютно любая дичь на входе должна быть ожидаема алгоритмом и должна приводить к чему-то на выходе, но не к истерике "ой, все".

  • Если чувствуешь в себе силы джедая, то изучи функциональный подход к обработке ошибок через алгебраические типы данных

  • Любое исключение в логах или в Sentry - повод не только исправить баг, но и поработать над собой

Total votes 10: ↑7 and ↓3+4
Comments7

Я задаю вопросы про паттерны на собесах

Постоянно встречаю на хабре мнение, что спрашивать на собесе про паттерны не комильфо. В случае с джунами - да. Там важнее понять мотивацию и потенциал роста до самостоятельной боевой единицы, нежели послушать про "я читал, что есть билдер, а еще есть фабрика".

Но не вижу ничего противоестественного в этом вопросе для других категорий соискателей.

Во-первых, кто-то своей собственной рукой пишет "design patterns" в разделе "навыки". За язык никто не тянул, как говорится.

Во-вторых, паттерн в широком смысле, а не только паттерн ООП, есть стандартное решение стандартной проблемы. Это идиома архитектурного стиля, фреймворка или языка. Это про стандартизацию, на которой держится любое производство. Мне важно, чтобы потенциальный коллега а) не удивлялся идиоматичному коду б) сам производил идиоматичный код, а не изобретал колесо.

В-третьих, паттерны - повсюду. Опять же потому, что в целом по индустрии колесо изобретать не любят. В этом плане данная тема ничем не хуже темы структур данных, реляционных БД, многопоточки и т.п. Так зачем делать из нее табу?

Возможно, неприятие вызывает сама форма вопросов. Я считаю, что трясти с кандидата UML-диаграммы или энциклопедические определения - такой же бред, как вращать деревья на доске. Мой обычный вопрос: "Хорошо, вы рассказали про @Transactional. А какую проблему в целом решает прокси?". Вопрос простой для тех, кто в работе мыслит за рамками "делал таски, правил баги".

Total votes 9: ↑8 and ↓1+7
Comments2

Information

Rating
1,259-th
Registered
Activity

Specialization

Backend Developer
Senior
Java
Kotlin