Обновить
512K+

Веб-разработка *

Делаем веб лучше

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

Мемо: в ожидании Python 3.14

Финальный релиз Python 3.14 запланирован на 7 октября 2025. Уже вышел RC2 (14 августа), а финальный кандидат RC3 ожидается 16 сентября.
Этот пост — краткая шпаргалка, чтобы помнить, какие изменения стоит протестировать и чего ждать в новой версии.

1. Свободная многопоточность (Free-Threaded Python, без GIL)

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

# Включение free-threaded режима при сборке
# ./configure --disable-gil
import threading

def cpu_bound_task(n):
    return sum(i*i for i in range(n))

threads = [threading.Thread(target=cpu_bound_task, args=(10**6,)) for _ in range(4)]
[t.start() for t in threads]
[t.join() for t in threads]

Free-Threaded Python теперь не будет экспериментальным и будет официально поддерживаться, но пока пока будет являться опциональным, по умолчанию остаётся GIL.

2. Отложенная оценка аннотаций типов

Зачем нужно: ускорение работы и избавление от кавычек при forward references. Появился новый модуль annotationlib для работы с аннотациями.

# from __future__ import annotations
import annotationlib

class Node:
    def __init__(self, value: int, next: Node | None = None):
        self.value = value
        self.next = next

print(annotationlib.get_annotations(Node.__init__))

Аннотации больше не обрабатываются при определении функций, классов и модулей. Они сохраняются в специальных функциях аннотирования и обрабатываются при необходимости.
Импорт from future import annotations можно удалить при поддержке Python 3.14 и новее.

3. Template-строки (t-строки)

Зачем нужно: безопасное форматирование строк, полезное для веба и DSL, расширение возможностей f-строк.

name = "<script>alert('xss')</script>"
age = 25

tpl = t"Hello {name}, you are {age}"
safe = tpl.format(name=escape_html(name), age=age)
print(safe)

4. Zstandard-сжатие

Зачем нужно: современный алгоритм сжатия, быстрее gzip и удобнее для больших блоков данных.

import compression.zstd

data = b"Large dataset" * 1000
compressed = compression.zstd.compress(data, level=3)
decompressed = compression.zstd.decompress(compressed)

print(f"Ratio: {len(data) / len(compressed):.2f}")

5. Удалённая отладка процессов

Зачем нужно: можно подключать отладчик к работающему приложению без перезапуска и накладных расходов.

import sys
import pdb

# Подключение отладчика к работающему процессу
sys.remote_exec("""
import pdb; pdb.set_trace()
""", target_pid=12345)

# Безопасное выполнение кода в удаленном процессе
result = sys.remote_exec("print('Debug info:', some_variable)", target_pid=12345)

6. Экспериментальный JIT-компилятор

Зачем нужно: ускорение выполнения вычислительно интенсивных задач.

# Включается флагом при запуске
# python --jit script.py

def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

# JIT автоматически оптимизирует "горячие" функции
result = fibonacci(35)  # Заметно быстрее с JIT

7. REPL с подсветкой синтаксиса

Зачем нужно: удобнее писать и отлаживать код прямо в интерактивной оболочке.

>>> def hello(name: str) -> str:
...     return f"Hello, {name}!"
>>> hello("World")
'Hello, World!'

Что стоит попробовать?

  1. Потестировать free-threaded режим на CPU-нагруженных задачах.

  2. Перейти на новый синтаксис аннотаций без кавычек.

  3. Проверить t-строки в веб-шаблонах и DSL.

  4. Протестировать zstd для больших массивов данных.

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

Подробнее на python.org: What’s new in Python 3.14

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

Раскопал интересный тип поля в Joomla - Groupedlist.

В процессе работы над компонентом нужно разделить опции выпадающего списка на группы. Я писал ранее как это сделать просто в коде тут: статья, пост.

Но как сделать такой список для использования в описаниях форм в xml? Первой мыслью было сделать свой тип поля, расширяющий стандартный \Joomla\CMS\Form\Field\ListField. Однако, в ядре Joomla нашёлся уже готовый класс поля для группированных списков \Joomla\CMS\Form\Field\GroupedlistField. Он расширяет напрямую FormField и имеет 2 метода - getGroups() и getInput().

В getInput() вызывается метод getGroups() для получения массивов с группами опций и его можно было спокойно заменить на getcollectLayoutData(), где этой работе самое и место, но это не слишком принципиально. И там и там работа делается. Поэтому нас интересует именно метод getGroups().

Мы создаём свой класс поля, расширяем GroupedlistField. Делаем обязательно свой $type для поля и реализуем метод getGroups(). Всё.

<?php
use Joomla\CMS\Form\Field\GroupedlistField;
use Joomla\CMS\HTML\HTMLHelper;

class ServerschemelistField extends GroupedlistField
{
    // type совпадает с именем файла и класса
    // без суффикса 'Field'
    protected $type = 'Serverschemelist';

    /**
     * Method to get the field options.
     *
     * @return  array  The field option objects.
     *
     * @throws  Exception
     *
     * @since  1.0.0
     */
    protected function getGroups(): array
    {
        // наши группы
        $group1 = [];
        $group2 = [];
        // Собираем первую группу опций
        foreach ($data as $item) {
            $optionattr = [];
            // Атрибуты для <option>
            if ($something_happend) {
                $optionattr['option.attr'] = [
                    'selected' => 'selected',
                    'onclick'  => 'earthQuake()',
                    'showon'   => 'field1:value1000',
                ];
            }

            $group1[] = HTMLHelper::_(
                'select.option',
                $item->option_value,
                $item->option_label_text,
                $optionattr
            );
        }
        // Аналогично собираем $group2
        // ...
        $groups = [
            ['Имя группы 1'] = $group1,
            ['Имя группы 2'] = $group2,
        ];
        // В parent::getGroups() будут значения
        // из xml-описания формы, если они есть.
        // Соединяем их с нашими.
        return array_merge(parent::getGroups(), $groups);
    }
}
Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

В видео поговорим про то, как отключить табы в vscode, и как навигироваться по файлам без них. Отформатируем визуальное отображение одного оставшегося таба. А еще бонусом расскажу про Cooklang – язык для кулинарии и разметки рецептов.

Какие способы навигации удобнее табов? Будем использовать cmd+p для Command Pallete, cmd+d для Open Recent, alt+<right> и alt+<left> для навигации по позициям курсора в разных файлах.

Конфиг выпуска:

{
  "workbench.editor.showTabs": "single",
  "workbench.editor.showIcons": false,
  "workbench.editor.labelFormat": "medium",
  "breadcrumbs.enabled": false,
}

Горячие клавиши:

{
  {
      "key": "alt+left",
      "command": "workbench.action.navigateBack"
  },
  {
      "key": "ctrl+-",
      "command": "-workbench.action.navigateBack"
  },
  {
      "key": "alt+right",
      "command": "workbench.action.navigateForward"
  },
  {
      "key": "ctrl+shift+-",
      "command": "-workbench.action.navigateForward"
  },
  {
      "key": "cmd+d",
      "command": "workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup",
      "when": "!activeEditorGroupEmpty"
  },
  {
      "key": "ctrl+tab",
      "command": "-workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup",
      "when": "!activeEditorGroupEmpty"
  },
}

Полный конфиг: https://github.com/sobolevn/dotfiles

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

Репозиторий react-bits содержит тысячи анимированных компонентов на React для создания веб-проектов и интерфейсов, а также большое количество элементов — кнопки, карточки, меню, необычные курсоры, анимированные списки и декоративные фишки. Каждый из компонентов можно протестировать в браузере — проверить работу и то, как он будет смотреться в вебе. Элементы интегрируются в проект за один клик.

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

Лайфхак по нейронкам №89: лоцируй связанный код

Когда-то писал о подходах, которые в эру нейронок получили еще аргументов к применению: WYNWYN и Vertical Slice – принципам, говорящим, что надо писать только то, что нужно и там где нужно.

Недавно работал с кодовой базой, где код обработки http запросов (авторизация, пойти в бд, посчитать что-то, сделать запрос в стороннюю систему, смерджить результат и отдать) лежал в папках по категории (все обращения в бд в одной папке, все модели в другой, все обращения к API в третьей, все операции по мерджу в четвертой, и т.д.).

Когда я пытался попросить нейронку (платные Claude, Codex, Gemini) что-то сделать с этими ручками, то для решения ей приходилось каждый раз собирать полный контекст папок, и как только она осознавала бесполезность сего предприятия, резко обрезала контекст, недобирала нужного кода и отвечала нерабочим куском галлюцинации.

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

Решил сделать эксперимент: сложил весь связанный код в одно место (причем не ctrl-c-v, а ctrl-x-v), запустил нейронку и да, она сначала прочитала весь связанный код из папок, и уже после пыталась добирать доп контекст из сторонних, но теперь ответы и код были почти 100% попаданием в мой запрос (опять же, в меру их текущих возможностей).

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

И тут важно сделать несколько умозаключений:

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

  • Лоцирование связанного кода – одно из прекрасных решений этой задачи

  • На самом деле, для людей это работает точно так же – иметь возможность зайти в одно место и прочитать весь связанный код – ускоряет и улучшает итоговый результат, который выдают ~кожаные мешки~ мы

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

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

Калькулятор для бэклога: как пользовательский опыт может влиять на продуктовую приоритезацию

Собрались как-то UX-исследователь и эксперт по клиентскому опыту RUTUBE и решили разработать методологию, чтобы обосновано отвечать на вопрос: «Почему вы считаете, что именно это важно для пользователей?». Что из этого получилось, смотрите в выступлении на конференции Research Expo.

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

Больше о том, как разрабатывают медиасервисы, читайте в телеграм-канале Смотри за IT. Там делимся опытом и рассказываем о жизни в цифровых активах «Газпром-Медиа Холдинга» таких, как PREMIER, RUTUBE и Yappy.

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

HR-собеседование: почему не стоит задавать технические вопросы

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

На остальных собеседованиях меня спрашивали про ООП, связи таблиц в базе данных и типы данных в JS. На первый вопрос я уже могу не помнить ответа, так как пишу на функциях 5 лет. Второй вопрос — вообще не мой конек. Третий — вроде имеет смысл, но что HR этим проверяет? 🤔

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

Почему технические вопросы на HR-этапе — это плохо?

  1. HR может неправильно оценить ответ. Если кандидат скажет что-то сложное, HR не поймет, правда это или блеф. Если ответ будет неверным, HR может пропустить хорошего специалиста. 😕

  2. Создаётся ложное впечатление о компании. Кандидат думает: «Если HR лезет в технические детали, что будет на реальном собеседовании?» 😲 Это отпугивает сильных разработчиков, которые ценят время. ⏰

  3. HR-этап должен фильтровать другое. Мотивация, ожидания по зарплате, готовность к условиям работы (офис, гибрид, удалёнка). Умение коммуницировать, работать в команде, адаптироваться к процессам. 💼

Вывод

HR-собеседование должно помочь кандидату и компании понять, подходят ли они друг другу по культуре, запросам и ценностям, а не проверять знание фреймворков. Оставьте техническую часть технарям. 🛠️

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

Представлена библиотека красочных анимаций на чистом JS для разных проектов All-in-one animation engine. Все анимации интегрируются за один клик и разобраны по типам: скроллбары, загрузчики, меню, переходы, счётчики или просто стилизованные элементы.

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

WT Yandex map items v.2.1.0 модуль для Joomla.

Выводит материалы Joomla в виде меток на Яндекс.Карты. Используется API 3.0.

v.2.1.0. Что нового?

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

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

CSS классы для маркеров карты.
Всем маркерам карты добавлен CSS-класс wt-yandex-map-items-marker. Для просмотренных маркеров (по которым кликали) добавляется CSS-класс wt-yandex-map-items-marker-viewed, что позволит выделять просмотренные маркеры с помощью стилей в CSS-файлах вашего шаблона. Также для контейнеров маркеров ymaps на карте добавлены data-атрибуты: data-module-id - id модуля и data-marker-id - id маркера.

Обработка GET-параметров в URL.

Карта может реагировать на GET-параметры в url:

  • map[zoom] - устанавливает параметр масштаба.

  • map[center_latitude] и map[center_longitude] - широта и долгота центра карты.

  • map[marker_id] - id маркера, на котором центрируется карта. Таким образом вы можете создавать ссылку на карту с указанием конкретного маркера, на котором карта сфокусируется после загрузки маркеров. Например, https://site.ru/map?map[marker_id]=18465. Или же ссылку с указанием конкретных координат: https://site.ru/map?map[zoom]=16&map[center_latitude]=51.529706&map[center_longitude]=46.033922

Страница расширения

GitHub расширения

Видео-обзор на Youtube

Видео-обзор на VK Видео

Видео-обзор на Rutube

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

Как сделать так, чтобы дизайнер и фронтендер не ругались

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

1. Больше общаться.

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

Кроме того, если подключать фронтендера на этапе разработки прототипа, он сразу сможет подсказать, что будет сделать легко, а что сложно.

2. Следить за актуальностью UI-кита.

Это база. Чтобы всем было удобно работать, в макете должен быть UI-кит. Разработчик сразу будет видеть, какие шрифты и UI-элементы возникнут в проекте. И конечно, UI-кит важно оперативно обновлять и сообщать об этом отделу фронтенда.

3. Внедрять общий процесс на всех уровнях.

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

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

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

Совет по Joomla: расположение полей Form в параметрах модулей и плагинов.

Обычно поля настроек модулей и плагинов идут столбиком - сверху вниз. Название поля находится слева, а само поле - справа. В вёрстке админки мы видим div.control-group, в котором находятся label и поле. Посмотрим как можно просто кастомизировать админку.

Название поля НАД полем - parentclass="stack".

Если в XML-манифесте модуля или плагина добавить к полю атрибут parentclass, то мы можем указывать любые CSS-стили для div.control-group. Если указать CSS-класс stack, то название поля встанет над самим полем. Это удобно для больших сабформ - экономится место на экране.

<field type="text"
     name="map_center"
     label="MOD_WTYANDEXMAPITEMS_MAP_CENTER"
     description="MOD_WTYANDEXMAPITEMS_MAP_CENTER_DESC"
     default="51.533562, 46.034266"
     hint="51.533562, 46.034266"
     parentclass="stack"
/>

2 и более полей в ряд в параметрах модуля/плагина - классы span-*

Мы можем 2 или 3 небольших поля поставить рядом (для десктопов). Табы настроек являются grid-сеткой из 4-х колонок. Для поля можно указать ширину в виде количества колонок. Нам нужно в parentclass добавить класс span-*-inline. Допустимы числа от 1 до 4.

span-1-inline - поле будет шириной в 1 колонку сетку. span-4-inline - ширина в 4 колонки, равносильно поведению по умолчанию. Этот код выведет 2 поля в админке в параметрах модуля рядом на десктопах. Поскольку используется также класс stack - название поля будет над самим полем.

<field type="list"
     name="map_zoom"
     label="MOD_WTYANDEXMAPITEMS_MAP_ZOOM"
     default="7"
     parentclass="stack span-2-inline"
     filter="integer">
          <option value="0">0</option>
          <option value="1">1</option>
          <option value="21">21</option>
</field>
<field type="list"
     name="map_type"
     label="MOD_WTYANDEXMAPITEMS_MAP_TYPE"
     parentclass="stack span-2-inline"
     default="scheme">
          <option value="scheme">MOD_WTYANDEXMAPITEMS_MAP_TYPE_MAP</option>
          <option value="satellite">MOD_WTYANDEXMAPITEMS_MAP_TYPE_SATELLITE</option>
</field>

Чат русскоязычного сообщества Joomla

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

Совет по Joomla: расположение полей Form в параметрах модулей и плагинов.

Обычно поля настроек модулей и плагинов идут столбиком - сверху вниз. Название поля находится слева, а само поле - справа. В вёрстке админки мы видим div.control-group, в котором находятся label и поле. Посмотрим как можно просто кастомизировать админку.

Название поля НАД полем - parentclass="stack".

Если в XML-манифесте модуля или плагина добавить к полю атрибут parentclass, то мы можем указывать любые CSS-стили для div.control-group. Если указать CSS-класс stack, то название поля встанет над самим полем. Это удобно для больших сабформ - экономится место на экране.

<field type="text"
     name="map_center"
     label="MOD_WTYANDEXMAPITEMS_MAP_CENTER"
     description="MOD_WTYANDEXMAPITEMS_MAP_CENTER_DESC"
     default="51.533562, 46.034266"
     hint="51.533562, 46.034266"
     parentclass="stack"
/>

2 и более полей в ряд в параметрах модуля/плагина - классы span-*.

Мы можем 2 или 3 небольших поля поставить рядом (для десктопов). Табы настроек являются grid-сеткой из 4-х колонок. Для поля можно указать ширину в виде количества колонок. Нам нужно в parentclass добавить класс span-*-inline. Допустимы числа от 1 до 4.

  • span-1-inline - поле будет шириной в 1 колонку сетку.

  • span-4-inline - ширина в 4 колонки, равносильно поведению по умолчанию.

Этот код выведет 2 поля в админке в параметрах модуля рядом на десктопах. Поскольку используется также класс stack - название поля будет над самим полем.

<field type="list"
     name="map_zoom"
     label="MOD_WTYANDEXMAPITEMS_MAP_ZOOM"
     default="7"
     parentclass="stack span-2-inline"
     filter="integer">
          <option value="0">0</option>
          <option value="1">1</option>
          <option value="21">21</option>
</field>
<field type="list"
     name="map_type"
     label="MOD_WTYANDEXMAPITEMS_MAP_TYPE"
     parentclass="stack span-2-inline"
     default="scheme">
          <option value="scheme">MOD_WTYANDEXMAPITEMS_MAP_TYPE_MAP</option>
          <option value="satellite">MOD_WTYANDEXMAPITEMS_MAP_TYPE_SATELLITE</option>
</field>
Теги:
Рейтинг0
Комментарии0

Я узнал о... #3: DevOps фреймворк DORA

DORA - это DevOps фреймворк из 4-х метрик, которые помогают оценить эффективность и качество релизного процесса.

Фреймворк придумала компания с таким же названием (DevOps Research and Assessment). Скорее всего, чтобы проще продавать свой консалтинг. В 2018-м году эту компанию купил Google Cloud и сделал своей... командой.

Вообще, про эти метрики в том или ином виде я знал. Но не знал, как они систематизированы и по-умному называются.

Собственно, сами метрики:

1) Частота деплоя (deployment frequency)

Показывает, насколько адекватный уровень автоматизированного тестирования. И умеет ли команда релизить точечно, а не сразу всё.

Критерии:

  • отлично: несколько раз в день;

  • хорошо: раз в 1-7 дней;

  • средне: несколько раз в месяц;

  • плохо: реже, чем раз в месяц.

2) Время от коммита до деплоя (Lead Time)

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

Критерии:

  • отлично: меньше дня;

  • хорошо: от 1-го до 7 дней;

  • средне: 7-30 дней (*по оценке компании DORA, я бы сказал, что это плохой результат);

  • плохо: дольше месяца.

3) % сбоев после релиза (Change Failure Rate)

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

Критерии (% релизов, которые привели к сбою):

  • отлично: <5%;

  • хорошо: <10%;

  • средне: <15%;

  • плохо: >15%.

4) Скорость восстановления (Mean Time To Recovery)

Показывает, как быстро мы поднимаем прод, если он сломался (упал, пришёл DDOS, выключились сервера). А ещё, умеем ли мы определять и измерять сбои. Упавшим продомом считается или факт того, что существенная часть системы недоступна, или коммит с hotfix'ом.

Критерии (как быстро поднимаем прод):

  • отлично: меньше часа;

  • хорошо: меньше дня;

  • средне: меньше дня;

  • плохо: больше дня.

Когда это нужно?

Для себя я выделил три критерия, когда эти метрики имеет смысл считать:

  1. Когда есть конкретный продукт в активной стадии развития с постоянной командой хотя бы из 3-5 разработчиков. Т.е. это не что-то, что получает несколько фич в месяц или находится в стадии активного саппорта.

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

  3. Когда СТО\CIO нужны хоть какие-то метрики для отчётности. Чтобы объяснить инвесторам или нетехнической части C level'a, что в компании или команде хороший DevOps процесс (или, наоборот, плохой).

DORA метрики измеряются через GitLab или почти любую другую систему CI \ CD. GitLab умеет считать всё это из коробки. За исключением, наверное, падения прода (что тоже можно добавить вручную или вебхуками \ alert manager'ами).

---

Мой Telegram канал про разработку.
Мой open source проект для бекапа PostgreSQL - GitHub.

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

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

Просмотр кода в интерфейсе Amvera Cloud

Мы сделали возможность просмотра содержимого файлов репозитория в интерфейсе.

Раньше было сложно понять, какая версия файла загружена в облако. 

Теперь можно зайти в файл в разделе Репозиторий и посмотреть его содержимое.

Amvera – облако для простого запуска проектов со встроенным CI/CD (деплой идёт через Git или загрузку файлов в интерфейсе). C Amvera вам не нужно думать о настройке NGINX, виртуальных машин и другой инфраструктуры.

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

Unit-тесты во фронтенде: развеиваем мифы

После статьи о навыках джуниоров многие не согласились с моей оценкой unit-тестов. Давайте посмотрим, где они действительно полезны, а где создают иллюзию ценности.

Если вы начинающий разработчик, вас наверняка убеждали:
«Без unit-тестов никуда! Всё должно быть покрыто тестами!»
Но так ли это на самом деле?

Где unit-тесты полезны:

  • Бизнес-логика и утилиты (форматирование данных, расчёты)

  • Кастомные хуки (управление состоянием, формы)

  • Критичные функции (редкий зверь во фронтенде)

Где они бесполезны (и даже вредны):

  • UI-компоненты (скриншотные тесты часто ломаются из-за изменений вёрстки)

  • API с моками (моки не показывают реальное поведение сервера)

  • Тестирование библиотек (проверяете чужой код)

Что использовать вместо?

  1. Интеграционные тесты — проверяют реальные сценарии

  2. Zod для валидации API — предотвращает ошибки из-за неожиданных данных

  3. Ручные проверки — быстрее и точнее, чем скриншотные тесты

Для джуниора unit-тесты — не приоритет. Важнее:

  • Глубокое изучение фреймворка

  • Умение работать с API

  • Навык чтения и отладки кода

Не стоит тратить время на «тесты ради тестов». Сосредоточьтесь на том, что действительно поможет в работе.

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

Представлен открытый проект Open Lovable, который клонирует любые сайты за один клик. Не надо учить дизайн и разметку — система генерит любые лендинги и сайты. Работает просто — получает URL и выдаёт результат. Можно контролировать стили и редактировать проект прямо на ходу — достаточно вписывать команды в чат с нейросетью. Сервис полностью клонирует ресурсы — от дизайна и разметки до бизнес-логики и всего функционала. Внутри — самые хайповые и мощные нейронки прямо сейчас — GPT-5, Claude 4.1, Grok 4 или Gemini 2.5 Pro. Код Open Lovable лежит тут. В вебе доступен — здесь.

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

В SpaceWeb запустили конструктор сайтов с ИИ

Новый день – новый релиз! Сегодня рассказываем о новой фиче — интегрировали в конструктор сайтов SpaceWeb искусственный интеллект. В обновленной версии можно быстро запустить сайт и подготовить референсы для клиентских проектов. Интерфейс генератора сайтов максимально удобен и интуитивен: с помощью функции перетаскивания и поддержки искусственного интеллекта можно легко настроить сайт под свои нужды и сделать его уникальным. 

Что делает ИИ в конструкторе?

  • Генерирует контент: автоматически создает заголовки, тексты и разделы сайта.

  • SEO-оптимизирует: формирует мета-заголовки, мета-описания и ключевые слова, помогая продвигать сайт в поисковых системах.

  • Обновляет и редактирует сайт: быстро и легко вносит изменения в структуру, контент и оформление.

  • Адаптирует веб-ресурс под задачи бизнеса: в конструктор встроено 200 шаблонов, среди которых обязательно найдется подходящий.

В конструктор также интегрированы инструменты для онлайн-торговли, есть большой выбор плагинов, подключена защита от DDoS уровня L3-L4, автоматически фильтрующая трафик от сетевых и транспортных атак. Создавать сайты можно сразу на нескольких языках, благодаря автоматической поддержке более 50 языков. Тарификация зависит от числа сайтов, объема диска и количества шаблонов. Протестировать новый сервис можно уже сейчас на сайте.

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

А вы уже пробовали запустить свой проект с помощью бесплатного объема облачных ресурсов Evolution free tier?

Тогда поделитесь опытом и мнением — опрос займет не больше 5-7 минут.

Пройти опрос 👈

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

Текущие условия:

  • виртуальная машина в конфигурации 2vCPU, 4 ГБ RAM, диск 30 ГБ;

  • ежемесячный объем хранилища S3 — 15 ГБ, 100 000 операций PUT/POST/LIST, 1 000 000 операций GET/HEAD, 10 ТБ исходящего трафика;

  • ежемесячный объем ресурсов для запуска контейнеров — 120 vCPU x час, 480 ГБ RAM х час.

Этого хватит, чтобы хранить важные данные, развернуть сервер Minecraft, запустить умного Telegram-бота с AI, опубликовать персональный сайт или реализовать любые другие сценарии.

Узнать больше про free tier и попробовать 🕹️

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

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

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

Почему я больше никогда не буду использовать сервис bitly?

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

Long story short: помогают тут ребятам с одним оффлайн проектом, нужно было быстро сделать QR код для флайеров, google выдает миллион сервисов для генерации, выбрал первый попавшийся “Create Your Free QR Codes”.  Удачно все сделал, заказали флаеры, не смотря на то, что по пути на каждому этапе было Free через 2 недели (когда уже все напечатано) прилетает вежливое “Oh no! Your Dynamic QR Codes will expire in 3 days”. И конечно же он перестанет работать если не заплатить ($20/month). 

Масштаб “потерь” - $40, но я готов заплатить $200 чтобы объяснить они строян бизнес на скаме и для кармы это вредно. 

Конечно же я не один такой, и большинство “сжимают зубы” и платят.  Например на редите 230 комментариев. 

Как вы поступаете в такой сиутации?  Я как-то с детства считаю что нельзя потокать и платить. 

Мои действия:

✅ никогда в жизни ни на одном из моих проектов не будет использоваться сокращалка Bitly

✅ написал далобу в FTC

✅ написал отзыв на Google Maps (там таких много)

☑️ найду и напишу отзывы на других сервисах

✅ попрошу вас помочь мне и присоединиться

P.S. Ресеч показал, что это не просто какие-то горе стартаперы, а проект компании Bitly (рейтинг 1.6 на Trustpilot).

Если вам нечем заняться и вам не сложно уделить 2-5 минут своего времени. 

Промпт для генерации отзыва:

Write a concise, neutral review of qr-code-generator.com (Bitly) in plain, easy-to-read language, 80-120 words. Context: It appears in Google for queries like "free qr code generator." During setup, the process is presented as free; any expiration notice, if present, seems absent or buried in terms. About 14 days later, the QR may be deactivated behind a paywall, leaving printed materials unusable unless payment is made to reactivate. The system does not allow converting that now paid QR to a free static code or redirecting it without payment. Many users report similar experiences online, including numerous Reddit comments. Keep the tone calm, factual, and non-accusatory. Do not include personal info or insults. Write in your own words.

Места куда стоит запостить отзыв:

- Google Maps (Bitly Office Google Maps)

- Trust Pilot

- G2

- Capterra


P.P.S. Есть кто-то из СМИ хочет изучить эту историю и написать подробнее - я буду рад ответить на вопросы и предоставить материалы. 

P.P.P.S. Особенно иронично выглядит позиция “Head of Happiness” в подписи письма

#justice 

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