Обновить

Бэкенд

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

DevOps — это про скорость или про надёжность?

Есть такой вечный спор у костра в лагере айтишников. С одной стороны — бизнес хочет всё «ещё вчера». С другой — инженер внутри нас требует стабильности и предсказуемости.

Так где же истина? Как обычно — посередине, но не совсем. Парадокс в том, что настоящий миддл-разгон начинается именно тогда, когда ты перестаёшь выбирать между «сделать, чтобы работало» и «сделать, чтобы работало завтра».

Правильный вопрос: «Как сделать, чтобы оно работало — и быстро сегодня, и так же стабильно через год?»

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

27-28 сентября мы проведем воркшоп «С нуля в прод за 2 дня» для DevOps-инженеров, которые готовы за два дня пройти весь путь от идеи до работающего продакшен-решения в команде.

Эти два дня вы не будете слушать теорию (хотя немного ее будет), вы пройдёте путь от проектирования инфраструктуры до продакшен-решения — на реальном приложении SlurmTalks (Next.js + Go)

Спикер — Павел Минкин:

  • DevOps-инженер в сфере FinTech

  • Автоматизировал исследования и разработки в области электромобилей

  • Наставник и автор по направлению DevOps в Слёрме

Изучить программу и занять место на воркшопе — через бота.

А чтобы получить скидку на участие, посмотрите запись вебинара «Инфраструктура под ключ за 4 часа» с Павлом Минкиным и Евгением Федосеевым — в ней есть секретный промокод. Действует до 7 сентября!

YouTube

VK Видео

Rutube

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

Мемо: в ожидании 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

Подборка обучающих материалов по языкам программирования от Selectel: Go, Python и JavaScript

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

Go

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

Python

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

JavaScript

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

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

Продакшен, производственная среда или...

Подскажите, пожалуйста, какой термин вам понятнее:

  • продакшен,

  • "боевой" сервер,

  • производственная среда,

  • производственное окружение,

  • промышленная среда,

  • промышленное окружение,

  • live сервер,

  • prod,

  • production,

  • PROD.

Нужно для будущей книги. Хочу написать так, чтобы читатели потом поняли, что я имею в виду.

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

У ИТ-компании «Криптонит» вышел новый выпуск подкаста — на этот раз про Scala! Там обсудили, почему «скалистов» так мало, что эксперты «Криптонита» ждут от новой версии этого языка и почему «в Scala идут те, кому хочется понять этот мир немного лучше».

Смотрите и слушайте на любой удобной платформе. И не забудьте подписаться!:)
VK Видео
YouTube
Rutube
Подкаст в телеграме
Яндекс.Музыка

В выпуске приняли участие сотрудники «Криптонита»:
• Алексей Шуксто, директор департамента разработки;
• Ахтям Сакаев, руководитель направления серверной разработки;
• Юлия Левченкова, директор департамента по управлению персоналом.

Они также обсудили:
• почему «скалисты» живут в Питере;
• может ли PySpark вытеснить Scala;
• планируется ли тотальный переход со Scala на Java;
• советы для тех, кто только открывает для себя Scala и полезные ресурсы для «скалистов».

Заглядывайте к нам на карьерный сайт «Криптонита»! Там как раз есть вакансии в команду Ахтяма.

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

Мы на Let's Go Conf: расскажем, как приручали старый Gateway, и слетаем в космос

В этом году компания МойОфис стала партнёром конференции для Go-разработчиков Let’s GoConf, которая пройдёт 12 сентября в Москве в лофте «Пространство Весна».

В одном из треков выступит Герман Кравец, техлид модуля Календарь почтового сервиса Mailion. В своём докладе он расскажет о том, как команда Mailion работала с «наследием». Представьте: старый Gateway, застрявший на Go 1.19, сложный в поддержке, с самописными генераторами и C++-зависимостями, а конфигурации напоминают древние свитки... Герман поделится тем, как команда справилась с такими вызовами и как изменилась архитектура продукта.

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

Ждём вас на Let’s Go Conf!

Теги:
Всего голосов 18: ↑18 и ↓0+18
Комментарии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

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

Начать разбираться можно тут

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

Лутаем Open Source #24. Они наконец-то починили MongoDB! Перенеся его на PostgreSQL...

DocumentDB – БД от Microsoft, которая состоит из 3-х частей:

  1. PG расширение, добавляющее BSON формат (написанный, на С)

  2. CRUD API поверх него (С)

  3. Сервис трансляции Mongo Query в SQL (Rust)

Для кого это?

И вроде как: "PG – классная база, а MongoDB Query + BSON популярные технологии" – и можно было бы поразмышлять чем это круто, но сначала важно ответить на один туманный вопрос: "кому такая БД может быть нужна?"

Классический PG

Сначала рассмотрим кейс, когда мы накладываем DocumentDB на обычный PostgreSQL.

Те, кто используют MongoDB если попробуют переехать на такой сэтап столкутся с тем, что:

  • Там нет шардинга (и насколько бы он не был сложно реализован в MongoDB, он есть и им активно пользуются)

  • Придется использовать двойной тулинг: Compas, чтобы наблюдать за корректностью данных с MongoDB Query, и SQL если надо посмотреть что там внутри

  • MongoDB поддерживает Uncommitted Read и Write Majority, что странно накладывается на PG: если разраб достаточно продвинутый и намеренно использовал Uncommitted, то с PG он потеряет скорость и Availability из-за PG Committed, а если он использовал Write Majority, то PG не совсем дает такую гарантию (обвал диска при WAL репликации – менее надежен, чем Write Majority)

  • А самое главное: когда ты работаешь с MongoDB ты можешь открывать 1000 коннекшенов и он вполне себе все это сожрет, потому что (1) коннекшен это тред, (2) при запросах нет никакой проверки реляционной целостности, да и в целом проверка сильно проще, чем в PG, а значит придется потанцевать с пуллерами и даже менять где-то запросы, чтобы не упасть по скорости

То есть, у mongo-юзеров это заберет все особенные фичи MongoDB и при этом не даст фишки PostgreSQL.

Distributed PG-like

А что, если мы положим DocumentDB на что-нибудь из серии CockroachDB, YugabyteDB, AWS Aurora, Citus или Neon?

Все 3 проблемы решаются:

  • Шардинг из коробки

  • Достаточно высокая скорость записи и чтения

  • Отсутствие проблем с коннектами

В такой ситуации DocumentDB начинает играть новыми красками.

Но если в Neon и Citus (и может YugabyteDB) еще есть шанс добавить текущий DocumentDB BSON плагин, то в для других представителей придется писать его с нуля (причем под каждый свой, потому что они построены каждый на своем KV хранилище).

Переезд в Linux Foundation

А еще они сейчас в процессе переезда из Microsoft в Linux Foundation, из плюсов они будут полностью под MIT лицензией и пейвола, за который будут прятать полезные фичи, из минусов, Microsoft могут и забросить, а никто другой не подхватить.

Итоги

Неоднозначная технология, пока имеет смысл в каких-то тонких кейсах, но в общем и целом, не вижу пока где тут middle-ground, может, вы что-то подскажете?

P.S.

А еще приглашаю вас к обсуждению в свой паблик в телеграмме 🦾 IT-Качалка Давида Шекунца 💪

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

Если вы сталкиваетесь с задачами оптимизации, но существующие материалы не дают системного понимания — курс «Java Advanced II: высокопроизводительная Java» (JVA-076) для вас. Никакой воды — только лабораторные с разбором реальных инцидентов.

9 сентября на бесплатном вебинаре «Производительность Java под нагрузкой: заглянем под капот» мы детально разберем содержание курса:

➕ Инструменты: JMeter, JMH, JFR, JITWatch — не просто обзор, а решение задач.

➕ JVM: тюнинг GC, анализ JIT, управление флагами.

➕ Hardcore: off-heap память через Unsafe, свои структуры данных.

➕ Архитектура: кэширование и анализ производительности.

Курс для вас, если вы хотите:

✔️ Осознанно подходить к тюнингу JVM.

✔️ Быстро находить и устранять утечки памяти и узкие места

✔️ Принимать архитектурные решения, зная их цену в производительности

✔️ Говорить с эксплуатацией на языке метрик

А вебинар позволит оценить  практическую ценность курса перед принятием решения об обучении.

Дата: 9 сентября

Время: 18:00-19:00 (Мск)

➡️ Регистрация

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

Перфоманс-ревью против лишних сеньоров?

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

Бывало у вас такое: берёте фичу в теханализ, всё расписываете, делаете дизайн, декомпозируете, оцениваете риски. Отдаёте задачу мидлу - и он делает ровно то, что написано. В срок, без лишних нервов. Дал сеньору - и понеслась: беглого взгляда хватило, чтобы объявить твой план ошибкой. Дальше - часы разговоров, где тебе нужно доказывать, что ты не верблюд. Сеньор - избранный богом, он на месте, а твой дизайн - дело рук смертного, значит обречён на ошибки. Не говоря уже о том, что Сеньор жаждет создать очередную оду своему величию, фича при этом - побочный эффект.

Перфоманс-ревью - это не про карьерный рост. Это про то, чтобы в итоге остались люди, которые ещё могут работать!

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

2ГИС зовёт на хакатон: https://hackathon.2gis.ru

4–5 октября, офлайн, Москва. Два дня, чтобы общаться, фигачить, вдохновляться и повлиять на городские сервисы!

Три трека: городские данные с ЦОДД, инклюзия с фондами «Антон тут рядом», «Продвижение», «ЛизаАлерт» и носимые устройства — часы, браслеты, AR и другие гаджеты. Будут онлайн-встречи, чтобы больше узнать про реальные задачи.

Призовой фонд: 1 000 000 рублей и шанс, что проект попадёт прямо в 2ГИС🔥

Регистрироваться можно с командой от 3 до 6 человек или самостоятельно — поможем найти команду в чате!

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

Использование атрибута showon для создания зависимых выпадающих списков в Joomla 5.3.3

Я не раз слышал о том что можно использовать атрибут showon для создания зависимых выпадающих списков, но не понимал как именно использовать. Скрывать один зависимый list и показывать другой мне совсем не представлялось удобным решением. На мой взгляд в зависимом выпадающем списке должна быть загрузка опций или отображение только актуальных.

Удивил меня ChatGPT, когда вместо JavaScript-кода предложил использовать атрибут showon, но не для самого элемента list, а для его опций.

<field
    name="fielda"
    type="list"
    label="FIELDA_LABEL">
    <option value="editor">Editor</option>
    <option value="text">Text</option>
    <option value="textarea">Textarea</option>
</field>

<field
    name="fieldb"
    type="list"
    label="FIELDB_LABEL">
    <option value="0">Always Visible</option>
    <option showon="fielda:text,textarea" value="2">Option 2</option>
    <option showon="fielda:text" value="3">Option 3</option>
</field>

А вот так можно применять атрибут showon в своём элементе, который показывает значения выбранной характеристики товара JoomShopping:

/**
 * @return array
 *
 * @since 1.0.0
 */
protected function getOptions(): array
{
	require_once(JPATH_SITE . '/components/com_jshopping/bootstrap.php');
	$options = parent::getOptions();

	/** @var ProductFieldValueTable $productfieldvalue */
	$productfieldvalue = JSFactory::getTable('productfieldvalue');

	$list              = $productfieldvalue->getAllList();

	$default = $this->element['default'] ?? null;

	if (isset($default) && ((string) $default) === '')
	{
		$options[] = HTMLHelper::_('select.option', '', '');
	}

	foreach ($list as $item)
	{
		$conditions = FormHelper::parseShowOnConditions('extra_field_id:' . $item->field_id, $this->formControl, $this->group);
		$encodedConditions = htmlspecialchars(json_encode($conditions));

		$options[] = HTMLHelper::_(
			'select.option',
			$item->id,
			$item->name,
			[
				'attr'        =>
					[
						'data-showon' => $encodedConditions
					],
				'option.attr' => "optionattr",
			]
		);
	}
	
    return $options;
}
Теги:
Рейтинг0
Комментарии0

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

Новая версия продукта «Форсайт. Умные таблицы»

Друзья, это того стоило! 3 месяца работы – и перед вами новая версия «Форсайт. Умные таблицы» 10.9!
Новая версия кардинально улучшит ваш опыт работы с продуктом.

Вот над чем команда усердно работала в последнее время:

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

Ваши отчеты теперь умеют работать сами
Мы подключили к «Форсайт. Умные таблицы» полноценный объектно-ориентированный язык программирования Fore. С его помощью вы можете превратить повторяющиеся задачи в магию автоматизации. Например, если нужно проверить, какие данные пользователь ввел, добавить новые элементы в справочник или реализовать нетиповую детализацию данных на отдельном листе с произвольным оформлением, Fore поможет решить эти задачи в режиме онлайн подключения к «Форсайт. Аналитическая платформа»

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

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

Пользовательские кнопки на панели инструментов
Теперь вы можете закрепить самые нужные функции и убрать то, чем не пользуетесь на панели инструментов. Нужен уникальный воркфлоу? Создайте свою кнопку и назначьте ей свой макрос Fore, всё произойдет по нажатию.

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

Важно! Новая единица лицензирования
Ранее в целях апробации «Умных таблиц» сервер лицензий использовал единицу лицензирования пользователя «Форсайт. Аналитическая платформа». Начиная с версии 10.9 необходимо запрашивать и устанавливать отдельные лицензии для пользователей «Умных таблиц».

Более детальная информация здесь: https://announce.fsight.ru/fst/10-9/

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

Как правильно откатывать миграции? Если коротко, то никак.

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

Ролбек, в идеале, это просто переключение с одной версии кода на другую. Но ведь тогда возможны ошибки связанные с изменениями в базе? Если делать через жопу, то возможны. При правильном подходе, база всегда обратно совместима как минимум на одну версию. Только в этом случае мы можем обеспечить и бесшовный деплой (zero downtime deploy) и практически моментальный откат.

А это значит, что нельзя менять тип у колонок (если тип сужается), нельзя менять именования таблиц и полей. Если это все таки нужно, то существует немало техник, позволяющих сделать переход через создание новых сущностей и синхронизацией либо через код либо через саму базу (например с помощью триггеров). По этой теме даже написали целую книгу "Refactoring Databases: Evolutionary Database Design".

Получается, что любые ошибки в базе будут только накапливаться? Не совсем. Обратная совместимость обычно нужна только на текущую и следующую версию. Если у нас не коробка, а облачное решение, то одновременно могут работать только две версии. В таком случае, мы без проблем можем писать любые миграции, которые удаляют и меняют все что угодно, что уже не используется. Заметьте, это не откат, а новые миграции.

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

Больше про разработку в моем телеграм-канале организованное программирование

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

Как построить эффективную стратегию бэкапа

Любая стратегия бэкапа проверяется не в теории, а в проде. В блоге «Хайстекс» вышла первая статья, где QA-инженер Юлия Воробьёва показывает как построить систему резервного копирования с Хайстекс Акура и S3-хранилищем Selectel. Реальный кейс и пошаговый разбор: от выбора хранилища до восстановления инфраструктуры. Всё глазами автора, который сам настраивал и тестировал.

Что внутри:

  • Рабочая архитектура. Одно целевое облако с двумя подключениями: к площадке восстановления (поднимаем ВМ при необходимости) и к объектному хранилищу — S3 Selectel, где лежат точки восстановления.

  • Агенты. Внешние для VMware и внутренние в ОС конкретной ВМ. Репликация односторонняя, по защищенному каналу и без просадок продакшена.

  • Расписания и RPO. Расписание от непрерывных запусков до Unix Crontab. Контроль исполнения на стороне Акуры, человеческий фактор «забыл сделать бэкап» исключен. 

  • Retention. Политика на уровне ВМ, группы или всего клиента, под любые контуры и SLA.

  • Хранение в S3. Данные режутся на настраиваемые чанки с метаданными; нулевые блоки не сохраняются, таким образом экономим место и деньги.

  • Восстановление. Предсказуемые сценарии: полный подъем ВМ через Cloud Site и файловое восстановление «на месте» из S3. При необходимости возможны RAW-экспорт и failback.

Бэкап — это не галочка в чек-листе, а процесс, которым нужно управлять, от выбора хранилища до проверенного сценария восстановления. Мы показали рабочую схему без магии и ручной возни. Под катом детали, скриншоты и пошаговые действия. В комментариях можно обсудить ваши кейсы, грабли и метрики: как настраиваете retention, чем меряете RTO/RPO и что помогло сократить простои.

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

API для получения прогнозов по крипторынку от обученных ML-моделей допиливается. Пока только одна пара будет, но зато подъедет и графоний. То что вы видите, скорее всего, пойдет в прод, мне нравится.

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

Давно хотел это написать, но как будто не было триггера и вот в пятницу я его поймал. Объясняю. Хочу выразить благодарность, чуть-чуть извиниться перед разработчиками Intellij Idea и простить их. Вот прям от души.

Когда-то в детстве я 3 года отучился игре на фортепиано, но переходный возраст (пиво, футбол и девки) победил и я ушёл из музыкальной школы. К чему я.. я программист уже 8 лет и я не встречал ничего прекрасней чем Intellij Idea.. ты не разрабатываешь - ты играешь на рояле... это автодополнение или как его назвать, подсказки, я просто в шоке. Не всегда угадывает что я хочу, но часто. Триггер я поймал когда добавлял новый объект в enum вида ERROR_INFO("text") и пока строчил название объекта представлял как лезу в переводчик, чтобы точно грамотно написать на английском текст, а Идея предложила мне текст, который я хотел написать, причём не все слова были в названии объекта.. как итог я прям счастлив от такой супер приятной мелочи (не факт что мелочи) и вот спустя два дня строчу этот пост, т.к. я прям обязан это сделать, не знаю почему. Я понимаю, что нейросети, но один и тот же салат Цезарь каждый повар делает по разному.

То, от чего я прям балдею:

  • shift + f6, переименовывает всё и везде - просто песня

  • ctrl + shifr + backspace - показывает всё что я поменял в классе, а не я глазами ищу строчки

  • ctrl + e - показывает классы в порядке убывания по использованию, не ищешь в браузере слева

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

  • в разделе гита смотришь изменения класса, нажимаешь f4 и тебе открывается этот класс

  • супер поиск ctrl+shift+f или просто два шифта

  • работа с базами данных просто сказка (даже Дата Грип редко открываю, его тоже люблю)

  • офигенные приколы типа ctrl+d с добавлением ниже второй такой же строки, удалить строку со смещением наверх shift+del

  • быстрый переход с ошибки на следующую ошибку с помощью f2

  • ctrl+p показать все ожидаемые параметры в методе

  • ctrl+shift+вверх/вниз гоняет как строку, так и целый кусок :)

  • и ещё дофига всего!!

В общем я счастлив, что моё хобби и работа это одно и то же, а то что есть Идея счастье увеличивает. Извиниться хочу, что я ни разу не покупал подписку. Она мне досталась после прохождения какого-то курса по Java, а сейчас вообще не могу купить, т.к. технически это невозможно из РФ. Здесь я прощаю Jet Brains, без пафоса, понять можно наверное (и на царей жёны давили :) Как смогу - обязательно куплю подписку, потому что это охренеть какой труд и верх перфекционизма для меня как для такого же любителя прекрасного!! И я хотел бы знать - это один такой перфекционист у них всё таки, или целая команда (в плане, что Идея именно такая какая есть). Кто этот "фундамент" образа?

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

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

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

Frontend-разработка. HTML, CSS, JavaScript и фреймворки вроде React или Vue.

Backend-разработка. Python, Java, Node.js, PHP и базы данных (MySQL, MongoDB).

Fullstack-разработка. Backend-язык (Python, Java, PHP, Node.js), JavaScript/TypeScript и один из фреймворков (React, Vue или Angular).

Еще больше курсов

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

Запись вебинара «От кода до запуска: российский стек для Java — Axiom JDK и OpenIDE» доступна для просмотра

Вебинар прошёл, а воспоминания запись осталась.

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

Что обсуждали на вебинаре:

  • Вызовы отечественной ИТ индустрии.

  • Портфолио Axiom JDK.

  • Регуляторика и соответствие стандартам.

  • РБПО: процесс создания доверенных Java продуктов.

  • Зачем OpenIDE разработчику и бизнесу.

  • В чём проблема собрать Intellij IDEA самостоятельно

  • Как будет развиваться OpenIDE.

Запись уже доступна на площадках.

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