Обновить

Все потоки

Сначала показывать
Порог рейтинга

36 бесплатных уроков недели

Привет, Хабр. Делимся подборкой бесплатных открытых уроков, которые пройдут в последнюю неделю января в Otus. Опытные практики проведут занятия онлайн — сможете узнать больше о формате обучения и задать свои вопросы экспертам. Выбирайте свою тему и присоединяйтесь!

26 января, понедельник:

27 января, вторник:

28 января, среда:

29 января, четверг:

Теги:
Всего голосов 1: ↑1 и ↓0+2
Комментарии1

Bare-metal GPU в аренду или покупку: что выбрать 

Выделенные GPU-серверы — это инфраструктура для задач, где важны предсказуемая производительность и полный контроль над ресурсами. Их используют для машинного обучения и AI, обучения и инференса моделей, VDI, рендеринга и других высоконагруженных сценариев, которые плохо масштабируются на shared-решениях или обычных VPS.

В 2025 году рынок таких решений в России вышел из экспериментальной фазы. По данным Рег.облака, компании всё чаще выбирают аренду bare-metal GPU вместо покупки собственного оборудования. Спрос на выделенные GPU-серверы вырос на 45%, а 87% клиентов возвращаются за услугой повторно — в первую очередь в Enterprise-сегменте. Это отражает устойчивый сдвиг в сторону модели аренды на фоне роста цен на инфраструктуру и необходимости гибко управлять вычислительными мощностями. Основной спрос формируют IT-компании и ритейл. Чаще всего GPU используются для задач машинного обучения и AI (60%), а также для VDI (30%) и разовых вычислительных сценариев — например, рендеринга (10%).

GPU-серверы с фиксированными ресурсами и гарантированной производительностью есть и в Рег.облаке. Их выбирают для долгосрочных проектов с ежемесячной оплатой и для небольших задач, где важно быстро получить доступ к мощным вычислениям без капитальных затрат.

Подробнее о том, какие конфигурации востребованы рынком, как сделать выбор между арендой и покупкой и в каких сценариях bare-metal GPU оправданы — на сайте Рег.облака.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии0

Go To Statement Considered Harmful.

Легендарное письмо Эдсгера Дейкстры обсуждалось учёными и программистами довольно долго. Даже сейчас встречаются разные взгляды на присутствие GOTO в программе.

Краткое содержание (парафразирую): GOTO нарушает простую навигацию по коду и, самое главное, возможность сопоставить код с тем, что мы имеем как состояние процесса в определённый момент времени.

Сам Дейкстра пишет, что ничего нового не говорит, о том же уже выступали Тони Хоар, Никлаус Вирт и ряд других учёных.

Дейкста и его коллеги в 1970-х дадут старт “структурному программированию”. В основу ляжет теорема Бёма-Якопини.

Оригинал статьи есть в свободном доступе библиотеки ACM.

Что интересно, этот вариант вырезки содержит и другие письма от 1968 года в редакцию журнала ACM.

К примеру, одно из них про то, что ЯП и их среды не должны быть защищены торговыми марками. Другое про дихотомию килобайты-кибибайты. Ещё одно про необходимость включения пост-мортем дампов (stacktrace или coredump) как обязательную часть высокоуровневых ЯП…

Иногда кажется, что мы застряли в каком-то странном лимбо, где всё уже было придумано или обдумано за нас. Нам же надо только иногда почитывать работы прошлого…

Letters to Editor на сайте ACM: https://dl.acm.org/doi/pdf/10.1145/362929.362947

Теги:
Всего голосов 2: ↑1 и ↓1+2
Комментарии0

Представлен открытый веб-редактор изображений DPaint.js (онлайн-версия) на JavaScript, созданный по образцу легендарного Deluxe Paint, с упором на ретро-форматы файлов Amiga. Помимо современных форматов изображений, DPaint.js может читать и записывать файлы иконок Amiga и изображения IFF ILBM.

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

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Таблицы

Самая недооценённая функция электронных таблиц — таблицы. Что за ерунда, подумает читатель. Дело в том, что есть два английских слова: speadsheet и table. При переводе на русский язык возникает путаница.

Таблица — это набор данных в виде столбцов (как в SQL). Изначально таблицы были реализованы в Excel, а в 2024 появилась поддержка и в Google Sheets.

Пусть есть список сотрудников из трёх столбцов: ID, ФИО и Оклад. Преобразуем его в таблицу. Для этого достаточно в любом месте диапазона с данными нажать сочетание клавиш:

  • Excel: Ctrl + T (⌘ + T)

  • Google Sheets: Ctrl + Alt + T (⌘ + ⌥ + T)

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

Переименуем таблицу в Сотрудники (в Excel это делается не совсем очевидно). Теперь посчитаем сумму окладов двумя способами: с помощью обычных и табличных ссылок.

=SUM(C2:C7)
=SUM(Сотрудники[Оклад])

Или найдём ФИО сотрудника по ID:

=XLOOKUP(4357379;A2:A7;B2:B7)
=XLOOKUP(4357379;Сотрудники[ID];Сотрудники[ФИО])

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

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Глава Pocketpair (компании-создателя Palworld) Такуро Мидзобэ (Takuro Mizobe) сообщил о нестандартном требовании к кандидатам на должности геймдизайнеров в компании — соискатели должны быть активными пользователями платформы Steam с обширной игровой историей. На собеседовании кандидатов просят предоставить скриншоты своей игровой истории Steam и подробно проанализировать игры, в которых они провели больше всего времени. Студия ищет специалистов, которые понимают особенности жанра не только как разработчики, но и как заядлые игроки. Соискатель должен объяснить, почему были приняты те или иные дизайнерские решения в любимых играх и чем они отличаются от конкурентов в своём жанре.

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии0

Представлена открытая ИИ-студия для работы с видео и лицами — VisoMaster Fusion, включая замену лиц, обработку видео и редактирование изображений. Работает локально, без облаков и подписок. Возможности сервиса: реалистичная замена лиц в видео и фото, работа с несколькими персонажами в кадре, инструменты улучшения качества изображения и лица, контроль над параметрами генерации. Подойдёт тем, кто работает с видео, контентом, ИИ-инструментами или просто хочет попробовать современные технологии без ограничений и подписок.

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Crocs и Lego разработали необычную модель обуви сабо в виде больших прямоугольных деталей конструктора. Эту модель компании позиционируют в качестве коллекционной для детей и взрослых.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии1

Коллеги привет, искал себе решение как реагировать на изменения в объекте и нашел отличный сервис, который используется внутри директив таких как NgClass и NgStyle.

KeyValueDiffers позволяет создать KeyValueDiffer для сравнения изменений текущих пар ключ-значение с новыми. Если вы используете иммутабельные объекты, то можно просто обернуть все в эффект, ну а если вы наследники крутого легаси, где все объекты мутируются по ссылке, тогда проверку нужно вешать в DoCheck, чтобы реагировать на каждый тик change detection.

Накидал оба примера, чтобы поделиться с вами:

Иммутабельный с effect:


@Component({
  selector: 'app-test',
  template: ''
})
export class TestComponent {
  public state = input.required<Record<string, string | number>>();
  
  private differs = inject(KeyValueDiffers);
  private differ: KeyValueDiffer<string, string | number> | undefined;

  constructor() {
    effect(() => {
      const currentState = this.state();
      
      // создаем диффер, если он еще не создан
      if (!this.differ) {
        this.differ = this.differs.find(currentState).create();
      }

      // Эффект будет перезапускаться при изменении инпут-сигнала.
      const changes = this.differ.diff(currentState);

      // только если есть изменения
      if (changes) {
        changes.forEachAddedItem((record) => {
          console.log(`В объект добавлена запись: Ключ: ${record.key} | Значение: ${record.currentValue}`)
        });

        changes.forEachChangedItem((record) => {
          console.log(`Изменено: ${record.key} | Новое значение: ${record.currentValue}`)
        });

        changes.forEachRemovedItem((record) => {
          console.log(`Удалено: ${record.key}`)
        });
        
        // Остальные методы forEachItem и forEachPreviousItem по необходимости
      }
    })
  }
}

Легаси подход, которого, надеюсь, ни у кого нет, но на всякий случай :)

@Component({
  selector: 'app-legacy',
  template: ''
})
export class LegacyComponent implements OnInit, DoCheck {
  @Input({ required: true }) state!: Record<string, string | number>;
  
  private differs = inject(KeyValueDiffers);
  private differ: KeyValueDiffer<string, string | number> | undefined;

  ngOnInit() {
    // Создаем диффер при инициализации
    this.differ = this.differs.find(this.state).create();
  }

  // Запускается на каждый тик change detection, так как мутации по-другому не отследим.
  ngDoCheck(): void {
    const changes = this.differ?.diff(this.state);

    if (changes) {
      changes.forEachAddedItem((record) => {
        console.log(`В объект добавлена запись: Ключ: ${record.key} | Значение: ${record.currentValue}`)
      });

      changes.forEachChangedItem((record) => {
        console.log(`Значение изменилось: ${record.key}`)
      });

      changes.forEachRemovedItem((record) => {
        console.log(`Запись удалена: ${record.key}`)
      });

      // Остальные методы forEachItem и forEachPreviousItem по необходимости
    }
  }
}
Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Лучший подарок студенту - новые инструменты для учебы и сэкономленные деньги. В честь Дня студента собрал в один пост студенческие скидки на ИИ-приложения и полезные сервисы, которыми пользуюсь сам для учёбы и личных проектов. Для получения скидки обычно требуется только учебная почта (*.edu). Иногда нужно привязать карту.

Notion (тариф Plus) - бесплатно.
Универсальное рабочее пространство для заметок, баз данных и управления проектами.
Регистрируйтесь с учебной почты (в домене *.edu). Или сначала создайте аккаунт на любой адрес, а затем в профиле смените его на свой .edu. После этого в настройках нажмите Upgrade plan и выберите пункт Get free education plan - тариф обновится автоматически.

Miro (тариф Education) - бесплатно.
Онлайн-доска для совместной работы, мозгового штурма и визуализации идей.
Используйте учебную почту .edu для регистрации. Доступ дали сразу.

GitHub Education - бесплатно.
Помимо GitHub Pro и Copilot Pro, доступны бонусы от партнёров в рамках GitHub Education Pack.
Регистрируйте аккаунт на *.edu почту. Перед отправкой заявки полностью заполните профиль, включите 2FA и укажите Billing information с именем и фамилией так же, как в студенческом. Номер банковской карты можно не добавлять. Заявку проверяют ~5 минут, а все бонусы становятся активны в течение 72 часов.

Perplexity Pro - месяц бесплатно + скидка 75% на продление.
Регистрируйтесь на *.edu почту. В разделе аккаунта нажмите кнопку redeem perplexity pro for education, заполните форму и ждите ответа (до 2 рабочих дней).

Lovable (Pro) - скидка 50%.
Создание веб-приложений с нуля без навыков программирования.
Регистрируем аккаунт на студенческую почту (*.edu).

Bolt.new (Pro) - скидка 50%.
ИИ-сервис для разработки веб-приложений, похожий на Lovable.
Используйте свою учебную почту .edu для регистрации

Windsurf (Pro) - скидка 50%.
IDE со встроенным ИИ-помощником, который пишет и редактирует код.

Framer (Basic) - бесплатно.
Платформа для создания интерактивных прототипов и веб-приложений без кода.
Заполняете форму и прикрепляете фото студенческого. Через пару минут на почту придет подтверждение. Далее в разделе тарифов выбираете апгрейд до Basic и на странице оплаты вводите промо‑код на 100% скидку, который пришел по email. Для активации потребуется зарубежная карта или аккаунт PayPal (списаний не будет).

Beautiful.ai (Pro) - бесплатно
ИИ‑инструмент для автоматического создания презентаций по текстовому запросу или загруженным материалам.
По сути, это аналог более известной gamma.app, но у gamma студенческих тарифов нет. Нужна .edu‑почта. Дают бесплатную годовую подписку Pro.

Obsidian Sync - скидка 40%.
Бесплатное кросс-платформенное приложение для создания заметок и персональной базы знаний на Markdown-файлах с графом связей между заметками.
Тут речь про скидку на их платное решение для облачного хранения и синхронизации.

Есть ещё множество других предложений, но чаще всего они доступны студентам из США и некоторых стран ЕС:
• Google AI Premium - бесплатный год подписки: https://gemini.google/students/
• Figma: https://www.figma.com/education/
• Cursor: https://cursor.com/students
• ChatGPT: https://chatgpt.com/college-students/
• Claude: https://claude.com/contact-sales/education-plan

Подписывайтесь на канал, чтобы быть в курсе новых находок!

Если знаете и о других скидках для студентов - делитесь в комментариях.

Теги:
Всего голосов 6: ↑2 и ↓40
Комментарии4

Открытый проект Mirror ищет скрытые процессы на macOS и следит за тем, чтобы никакой вредный код не потреблял память ПК. Умеет находить скрытые процессы, убивает процессы за один клик, включая даже «невидимые» процессы.

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии3

Открытый проект SubTrackr ищет и мониторит текущие подписки, отслеживает переводы и напоминает о датах списаний:

  • показывает подписки в одном месте;

  • поможет на раз отписаться от ненужных сервисом и не тратить деньги впустую;

  • мониторит траты, даты списаний, а также тематики подписок и их полезность;

  • дает рекомендации;

  • имеет понятный интерфейс и несколько тем для кастомизации;

  • работает полностью локально.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии0

Dcnfk yt c njq yjub& Yt ,tlf! :vb СфзыДщсл и не придётся перепечатывать текст заново.

Ставим AutoHotKey - фреймворк для клавиатурных утилит. Потом пишем скрипт ruen.ahk:

#Requires AutoHotkey v2.0
#SingleInstance Force

; пробегаемся по всем клавишам, удаляем одинаковые в разных раскладках, экраниуем через `
en := "QWERTYUIOP{}|ASDFGHJKL:`"ZXCVBNM<>?~@#$^&qwertyuiop[]asdfghjkl;'zxcvbnm,./``"
ru := "ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё`"№;:?йцукенгшщзхъфывапролджэячсмитьбю.ё"

; собираем карты переключения в обе стороны
en2ru := Map()
for ch in StrSplit(en)
    en2ru[ ch ] := SubStr( ru, A_Index, 1 )
ru2en := Map()
for ch in StrSplit(ru)
    ru2en[ ch ] := SubStr( en, A_Index, 1 )

; общий код для всех хоткеев
Correct() {
    
    backup := ClipboardAll() ; сохраняем буфер, потом восстановим
    
    A_Clipboard := "" ; чистим буфер
    Send "#{Space}^c" ; Жмём Win+Space и Ctrl+C
    ClipWait 0.5 ; дожидаемся копирования в буфер
    
    if A_Clipboard { ; буфер не пустой
        
        result := ""
        mode := "en" ; по дефолту переводим в английский
        
        Loop Parse A_Clipboard { ; для каждого символа из буфера
            
            ; ищем варианты переключений для текущего симовола
            ru := en2ru.Get( A_LoopField, "" )
            en := ru2en.Get( A_LoopField, "" )
            
            if en && ru { ; возможны оба варианта - выбираем прошлый
                result .= mode = "en" ? en : ru
            } else if en {
                result .= en
                mode := "en"
            } else if ru {
                result .= ru
                mode := "ru"
            } else { ; оставляем как есть
                result .= A_LoopField
            }
            
        }
        
        A_Clipboard := result ; пишем в буфер
        Send "^v" ; жмём Ctrl+V
        Sleep 100 ; ждём пока данные заберут
        
    }
    
    A_Clipboard := backup ; восстанавливаем буфер
    
}

; CapsLock - хоткей коррекци выделения
CapsLock:: {
    Correct()
}

; Shift + CapsLock - хоткей коррекции последнего слова
+CapsLock:: {
    Send "^+{Left}" ; Жмём Ctrl+Shift+Left
    Correct()
}

; Ctrl + CapsLock - хоткей коррекции до конца строки
^CapsLock:: {
    Send "+{End}" ; Жмём Shift+End
    Correct()
}

; Ctrl + Shift + CapsLock - хоткей коррекции с начала строки
^+CapsLock:: {
    Send "+{Home}" ; Жмём Shift+Home
    Correct()
}

Даблкликаем по нему, и получаем:

  • переключение раскладки выделенного текста по CapsLock

  • последнего слова - по Shift + CapsLock

  • до конца строки - по Ctrl + CapsLock

  • от начала строки - по Ctrl + Shift + CapsLock

При желании его можно скомпилировать в exe-шник. Интерфейс самого AHK так и сделан.

Из уникальных фичей: переключает одновременно и раскладку введённого текста, и текущую раскладку клавиатуры.

Известные альтернативы:

  • Punto Switcher - 100 метровый звездолёт против 12 у AHK. Автопереключение часто не к месту, а горячую клавишу Break пойди найти на ноуте. Про интеграцию вашего буфра обмена с сервисами Яндекса я даже не заикаюсь.

  • Caramba Switcher - 60 метров и никаких настроек. Переключения по шифту - тот ещё глюкодром, с которым борятся через самообучение.

  • Mahou - поди найти клавиши Scroll и Pause.

  • Остальные лень ковырять - расскажите в комментах кому не влом.

Теги:
Всего голосов 8: ↑8 и ↓0+8
Комментарии2

Ближайшие события

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

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии0

При написании интеграционных тестов для Spring Boot приложения часто возникает проблема, что разработчики бездумно добавляют аннотации @MockBean, @SpyBean, @DirtiesContext или переопределяют прямо в тестовом классе различные property. Всё это приводит к изменению Spring Context, невозможности использовать закэшированный контекст и следовательно созданию нового. Часто создание нового контекста это длительная операция.

Существуют инструменты по отслеживанию этих процессов. Самым простым способом увидеть количество контекстов и количество попаданий в кэш является добавление логирования либо через свойство logging.level.org.springframework.test.context.cache=DEBUG либо настройкой вашего логгера.

Один известный автор статей про тестирование на Java / Spring Boot, Philip Riecks (со товарищи), создал инструмент с открытым исходным кодом Spring Test Profiler при помощи которого можно получить html отчёт о поднимаемых контекстах во время тестов, о количестве и типе бинов в этих контекстах. На Хабре есть перевод его статьи в сообществе Spring АйО.

У нас на проекте стал вопрос, как нам показать разработчикам, что их тест порождает новый Спринг Контекст. Мы решили считать контексты в тестах и при превышении ожидаемого количества падать. Это "руинит" сборку и CI/CD пайплайн.
Для этого мы добавили реализацию интерфейса ContextCustomizer

class LimitingSpringContextCustomizer implements ContextCustomizer {

    private static final AtomicInteger CONTEXT_COUNTER = new AtomicInteger();
    private static final int EXPECTED_SPRING_TEST_CONTEXT_COUNT = 16;

    @Override
    public void customizeContext(ConfigurableApplicationContext context, MergedContextConfiguration mergedConfig) {
        int numberOfContexts = CONTEXT_COUNTER.incrementAndGet();
        log.info("Number of Spring Test Contexts: {}/{}", numberOfContexts, EXPECTED_SPRING_TEST_CONTEXT_COUNT);
        Assert.state(numberOfContexts <= EXPECTED_SPRING_TEST_CONTEXT_COUNT,
                () -> "Number of test contexts exceeds configured maximum: " + EXPECTED_SPRING_TEST_CONTEXT_COUNT);
    }

    @Override
    public boolean equals(Object obj) {
        return (obj != null) && (getClass() == obj.getClass());
    }

    @Override
    public int hashCode() {
        return getClass().hashCode();
    }
}

Здесь, согласно документации интерфейса ContextCustomizer необходимо корректно переопределить методы equals и hashCode.

WARNING: implementations must implement correct equals and hashCode methods since customizers form part of the MergedContextConfiguration which is used as a cache key.

Далее добавляем фабрику.

class LimitingSpringContextCustomizerFactory implements ContextCustomizerFactory {

    @Override
    public ContextCustomizer createContextCustomizer(Class<?> testClass,
                                                     List<ContextConfigurationAttributes> configAttributes) {
        return new LimitingSpringContextCustomizer();
    }
}

Затем регистрируем эту фабрику при помощи spring.factories чтобы она применялась ко всем тестам.
Для этого создаём в тестовых ресурсах файл по пути src/test/resources/META-INF/spring.factories со следующим содержимым

org.springframework.test.context.ContextCustomizerFactory=\  
com.mycompany.app.support.spring.LimitingSpringContextCustomizerFactory

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

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

Теги:
Всего голосов 6: ↑5 и ↓1+4
Комментарии0

Данные есть, ясности нет: как принимаются сложные решения в IT

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

Со стороны кажется, что проблема в расчётах.
На практике гораздо чаще она в другом.

Когда информации достаточно, но решения всё равно «ломаются»

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

В инженерных дисциплинах принято проверять модели в приближённых к реальности условиях - через валидацию и эксперименты.
В IT-проектах такой «аэродинамической трубы» чаще всего нет.

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

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

В этот момент формально решение ещё обсуждается, но фактически оно уже принято.

Почему опыт и интеллект не всегда спасают

Парадоксально, но чем выше уровень экспертизы, тем изощрённее могут быть рационализации.

Мозг легко находит логичные объяснения, почему нужно ускориться, почему риски допустимы, почему «потом разберёмся».

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

О паузе как инструменте управления

В работе с решениями есть простой, но недооценённый принцип: если между реакцией и действием остаётся пауза - остаётся выбор.

Пауза не даёт готового ответа и не снимает неопределённость. Но она возвращает управление из режима реакции в режим осознанного решения.

Когда паузы нет, решение принимается автоматически: из тревоги, из защиты, из спешки.

Когда пауза есть, появляется возможность задать неудобный вопрос, пересмотреть допущения или честно признать, что данных всё ещё недостаточно.

Почему это важно в IT (и не только)

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

Устойчивость систем, команд и бизнесов начинается не с идеальной аналитики, а со способности выдерживать неопределённость и не торопиться «закрыть вопрос» любой ценой.

Иногда лучший ход - это не выбор варианта, а умение вовремя остановиться и дать себе время подумать.

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии2

Представлен бесплатный открытый проект HeartMuLa, который генерирует музыку на уровне платных ИИ-студий. Это полноценная музыкальная «студия всё в одном»: можно создавать треки по описанию, делать песни в стиле любимых артистов и работать с готовым аудио.

Что умеет HeartMuLa:

  • пишет тексты песен через встроенный чат-бот;

  • генерирует треки с вокалом и текстом длиннее 4 минут;

  • можно загрузить любой аудиофайл, и ИИ перенесёт его вайб и стиль в новый трек;

  • работает даже на слабом железе: локальная версия требует всего ~3 ГБ видеопамяти;

  • простой и понятный интерфейс. Фактически: бесплатный аналог Suno, но без подписок, ограничений и облака;

  • можно ставить локально и делать музыку прямо на своём ПК.

Теги:
Всего голосов 4: ↑2 и ↓2+2
Комментарии6

Колоноскопия: инструкция по подготовке без стресса

Здравствуйте, уважаемые читатели Хабр!

Недавно я, доктор Царьков, директор Клиники  колопроктологии и малоинвазивной хирургии, опубликовал на этом ресурсе статью “Колоноскопия как прививка от рака" Этот материал вызвал живую дискуссию, чему я, конечно, очень рад, поскольку это показывает, что тема актуальна. А раз так, то есть надежда, что кто-то из вас придет на колоноскопию просто для профилактики и, значит, не пополнит ряды моих пациентов с раком кишечника.

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

И если сама процедура (если проводить под седацией) в сознании людей — это что-то вроде «лечь и поспать», то подготовка — тот самый стоп-кран, который останавливает многих. Строгая диета, 3-4 литра не самого приятного раствора…

Пациенты «спотыкаются» именно на этом этапе: недопивают препарат, готовятся кое-как. Результат — «синий экран» во время исследования. Кишечник не очищен, врач ничего не видит, процедуру останавливают, а вы зря потратили время, деньги и нервы. Идете на второй круг. В общем, неоптимально.

 Как же провести очистку кишечника с минимальными неудобствами и без ошибок?

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

1. Выбор лекарства

Вам не обязательно пить 4 литра. Современные средства позволяют очиститься всего 1.5-2 литрами (вместо традиционных 3-4), причем на качество подготовки кишечника это не влияет. Просто выбирая поинтересуйтесь тем,  сколько придется пить. Меньше объем — выше шанс на то, чтобы допить до конца.

Теперь о том, как пить:

· Запивайте препарат - используйте осветленный яблочный/виноградный сок без мякоти или зеленый чай. Это приглушит неприятный вкус.

· Разбавьте раствор соком лимона или  или положите дольку на язык — помогает нивелировать неприятное послевкусие.

· Пейте через трубочку. Серьезно. Так раствор минует большую площадь вкусовых рецепторов на языке. 

· Раствор должен быть холодным, можно со льдом. Теплый  пить категорически не рекомендуется (поверьте, это весьма неприятно).

· Маленькими порциями. Не пытайтесь «опрокинуть литр залпом». Это способно вызвать тошноту. Делайте заходы по 200-250 мл с паузами.

2. Многозадачность и движение

· Фоновая задача. Поставьте интересный фильм, сериал, лекцию. Ваша цель — отвлечь мозг от основного процесса. Сделали глоток — вернулись к просмотру.

· Не ложитесь! После каждой порции — активность. Пройдитесь по квартире, сделайте легкие приседания. Есть даже специальное упражнение от тошноты во время подготовки к колоноскопии. Исходное положение: стоя (ноги вместе, руки вдоль тела). Делаем медленный глубокий вдох через нос, поднимаем руки через стороны вверх и встаем на носки (все одновременно). Резко выдыхая через рот, опускаем руки и падаем на пятки. И так пока тошнота не пройдет.

РЕЗЮМЕ

1. Выбираем препараты с меньшим объемом.

2. Охлаждаем раствор, пьем через трубочку.

3. Лимон, виноградный/яблочный соки без мякоти,  зеленый чай  — отличное подспорье.

4. Ставим фоном фильм, пьем порционно.

5. После каждой порции — двигаемся. Не ложимся!

Теперь о том, чего НЕ надо делать  — о распространенных ошибках, которые сведут на нет всю подготовку. 

Качественная подготовка — это львиная доля успеха всей процедуры. Сделайте ее правильно, и сама колоноскопия под седацией (во «сне») пройдет легко и информативно (при условии, что делать ее будет грамотный специалист на оборудовании экспертного уровня).

Теги:
Всего голосов 6: ↑3 и ↓3+2
Комментарии2

Внедряем data culture

Рассказываю, как сделать свою компанию дата-ориентированной:

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

2. Опишите ключевые метрики и методологию их расчёта, правила сбора. Важно договориться, какие понятия вы используете. Например, как вы понимаете, что продажа совершилась?  Если считать продажей только подписанный договор — то «предоплата» или «устная договорённость» в расчёт не идут. 

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

3. Ответственный за данные должен иметь полномочия вносить изменения в процессы Если в CRM 30% сделок не доводятся до финального статуса — значит, отчёты будут неточными, и об этом нужно не просто сообщить, а изменить процесс. Поэтому у человека, отвечающего за данные, должны быть полномочия предлагать и внедрять изменения: переработать форму ввода, изменить структуру карточки сделки, договориться с руководителями отделов о новых правилах заполнения и т.д. 

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

5. Начните анализировать статистику за большие периоды и строить предположения на их основе. Именно на больших периодах начинают проявляться закономерности: как сезонность влияет на продажи, какие каналы работают стабильно, а какие дают всплески и провалы. Тут уже можно задавать себе стратегические вопросы — сколько мы заработаем при росте трафика х2, выдержит ли команда увеличение заявок, когда возникнет кассовый разрыв и т.д. Спустя время точность вашего прогнозирования может достигать 80-90%.

6. Введите культуру эксперимента. Эксперимент — это временное и контролируемое изменение одного элемента в системе с заранее зафиксированной метрикой успеха. Он позволяет объективно понять, работает гипотеза или нет. Например, вы не просто “меняете посадочную страницу”, а запускаете вариант с новой формулировкой оффера, чтобы проверить, поднимется ли конверсия с 1,5% до 2%.

Вместо «давайте попробуем» начните задаваться вопросом: какой показатель мы хотим изменить, за счёт какого действия, и как поймём, что это сработало? Любая change-инициатива должна иметь цель в цифрах и ограниченный по времени “тестовый период”.

Теги:
Рейтинг0
Комментарии0