Обновить

Разработка

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

Представлен бесплатный ресурс GoalKicker с книгами по IT-тематике от проджект-менеджмента и UX-райтинга до тем по алгоритмам, структурам данным и низкоуровневым языкам, включая ОС и архитектуру компьютеров,.Bash, UNIX, Linux, гайды по работе с командной строкой и прочими тулзами типа Vim, книги по самым востребованным на рынке языкам программирования, всё о работе с базами данных от основ до построения связанных таблиц и интеграции их в системы.

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

Фото из офиса xAI стало вирусным прямо перед запуском Grok 4 — и это совсем не то, чего можно было ожидать. Высокотехнологичная штаб-квартира превратилась в настоящий палаточный лагерь. В связи с тем, что последние усилия по выпуску чат-бота была уже на подходе, работа над ним шла настолько интенсивна, что разработчикам буквально приходится ночевать в палатках. Один из членов команды xAI даже пошутил: «Это не может быть наш офис — здесь должно быть гораздо больше палаток».

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

ИБ-ДАЙДЖЕСТ INFOWATCH

Крупнейшая кибератака на банки Бразилии
Сотрудник C&M Software продал хакерам аутентификационную информацию для доступа к системе компании через свой компьютер — в результате кибератаки со счетов были украдены сотни миллионов реалов.

Новые документы по безопасности КИИ
ЭАЦ InfoWatch подготовил актуальный на июнь 2025 перечень нормативных актов по безопасности КИИ.

Финляндия извлекла урок из кибератаки
Национальный центр кибербезопасности Финляндии поделился практическими методами противодействия атакам на базе инцидента ИБ в администрации Хельсинки — тогда хакерам удалось похитить около 10 млн документов и ПДн 300 тыс. жителей города.

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

ИСКЛЮЧЕНИЕ БЛОКИРОВОК ДЛЯ KNOX СЕРВИСОВ: ENROLLMENT SQUID

Захотелось пустить трафик Android устройства Samsung при первом включении через прокси и посмотреть его логи. Куда на самом деле оно ходит и для чего. Дело в том, что корпоративные политики безопасности некоторых организаций ограничивают права доступа сотрудников в интернет из внутренней сети компании. Однако, когда компания начинает использовать KNOX сервисы, то необходимо разрешить доступ к их серверам.

Cуществует официальная инструкция от Samsung. Она определяет список доменов или IP адресов, необходимых для первоначального включения мобильного устройства или factory reset, когда происходит настройка облачных KNOX сервисов: Knox Mobile Enrollment, Knox Configure, Knox Manage и так далее. Менять корпоративные политики компании и делать whitelist всех возможных IP дело затруднительное, потому что облачные KNOX сервисы используют в большинстве своём Amazon AWS с динамическим распределением IP адресов, а список диапазонов чрезвычайно большой.

Поэтому IT-служба безопасности может сделать простой DMZ (demilitarized zone) Ubuntu Squid прокси для его использования внутри сети организации c разрешённым доступом ко всем диапазонам IP. Прокси, который будет пропускать трафик и использоваться исключительно для целевых доменов, необходимых, чтобы активировать устройства.

Squid.conf настройки

acl enrollment_domains dstdomain .samsung.com .samsungknox.com .secb2b.com .samsunggsl.com

На разные домены нижнего уровня этих четырех адресов KNOX B2B сервисов идут обращения при первом включении устройств. Также необходим трафик и на google сервисы:

 .google.com
.gstatic.com
.gvt1.com
.gvt2.com
.gvt3.com
.googleapis.com
.googleusercontent.com

Для полного счастья Android Setup Wizard, чтобы он не переживал, список можно дополнить иными сервисными адресами, без которых он может обойтись, но так или иначе «стучится» по ссылкам, содержащим следующие строки:

.samsungdm.com
.samsungapps.com
.samsungmobile.com
.bixbyllm.com
.sbixby.com
.samsung-sm-ds.com
.ospserver.net (сервера обновлений)
.samsungcloud.com
.samsungcloudplatform.com

И http_access deny !enrollment_domains, чтобы использовался прокси только для активации устройств или обновлений. Помимо ситуации с политиками компании может оказаться так, что ограничивают право доступа в интернет не корпоративные политики, а провайдер. Тогда на линии провайдера, который работает хорошо, вы ставите такой прокси и пускаете через него enrollment трафик, как в описанном примере. По мотивам обзора новинок XCover7 Pro и TabActive5 Pro

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

Хорошо ли вы разбираетесь в Python?

В Академии Selectel есть небольшой тест на владение синтаксисом Python. Он позволит оценить свои знания и отыскать пробелы. Вопросы подобраны для тех, кто уже не пугается None, но продолжает разбираться, что происходит «под капотом». Бонусом — подборка полезных материалов для изучения Python!

Пройти тест →

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

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

Как в нашей народной, старой и доброй — эталонной сетевой модели OSI.

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

Закладывается экспертный орган, который разрабатывает обязательное внедрение Парадигмы. Закладывается стандарт. Пример — протокол IPv6. Плавный переход.

Мал по малу стандарт получает настоящий знак качества, и через десять лет, — те кто не пишут код в рамках модели, не получают «значок», и в итоге не попадают в магазин андройд или яблока. Точка. Ваше ПО мертво само сабой. И рынок цел и хомяки довольны.

Пример: Возвращаясь к модели OSI, где чисто гипотетически — создаем надстройку для производителей ПО, Операционных Систем и Железа.

Чисто иллюзорно представим:

на восьмой уровень прописываем достаточные и необходимые правила(Парадигмы) и способы взаимодействия конечного кода — для слоя ОС;

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

В итоге с определенной долей вероятности, со временем, ваше ПО, ваша ОС или ваша Железка, — просто не попадет ни на рынок связи, не на военный рынок и не на потребительский рынок с рынком бизнесса. Ибо не будет соотвествовать стандартам качества. Simple.

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

Joomla: как тестировать? Всего 8 минут.

Над CMS Joomla постоянно ведётся работа: создаётся новый функционал, исправляются ошибки, делаются мелкие правки. Разработка ведётся на GitHub. Изменения оформляются в виде Pull Request (PR). Для того, чтобы изменения могли войти в ядро - их обязательно должны успешно протестировать минимум 2 человека КРОМЕ автора изменений. А помочь с большинством PR можно очень и очень быстро, это не занимает много времени, чему подтверждением служит это видео.

Смотреть видео на YouTube

Смотреть на Vk Video

Смотреть на RuTube

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

🔮 14 день делаю Конструктор форм в режиме Build in public

Добавил ИИ-магии в наш конструктор форм!

Честно говоря, я сам офигел от того, что получилось закодить!

Можно создавать красивые и удобные формы буквально за секунды с помощью ИИ. Достаточно просто написать запрос, например:

«Сделай форму регистрации на мероприятие»

или

«Сделай форму для заявок на консультацию психолога»

- и всё! Форма генерируется автоматически, остаётся только немного поправить и подогнать под себя.

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

🤔 Как вам такая магия? Пора уже слезать с Гугл Форм? планирую релиз уже в Августе!

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

DCAP как необходимый компонент комплексной защиты: как бизнесу сохранить данные и не повестись на маркетинговые уловки

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

В статье для ICT Online руководитель направления DCAP ГК InfoWatch Олег Митичкин рассказывает, как сейчас в России развиваются DCAP-системы и удается ли им учесть российскую специфику и требования регуляторов.

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

Фича ради фичи

Как легко потерять смысл разработки, добавляя “полезности”

  • Сделаем ещё кнопку, она “точно нужна”

  • Добавим фильтр, и сортировку, и модалку, ну мало ли

  • Вот бы выгрузку в Excel, и график, и пуши!

…Проект набирает скорость. Только куда?

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

Парадокс: чем больше фич, тем хуже продукт

Потому что он уже не про ценность, а про “галочки” и “давайте сделаем ещё”.

У фичи должен быть KPI, надо ставить вопрос «а что изменится от нее?». Также их надо подчищать, если старые не используются: «больше ≠ лучше»

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

Один парень заметил это, и сделал элементарный плагин для интеграции Notion с Google Sheets, на чем начал зарабатывать хорошие деньги.
Людям не нужно «все и сразу», им нужна качественная точечная фича

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

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

Бесплатные курсы Route 256 от Ozon Tech для Go-инженеров уровня middle

Route 256 — это эффективная прокачка знаний и навыков работы с микросервисами. Программа курса составлена ведущими экспертами Ozon Tech — командой, которая разрабатывает сервисы, выдерживающие экстремальные нагрузки до 382 000 RPS.

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

Как минимум, они бустанут ваше портфолио. Как максимум, вы получите оффер в команду. Заходите на сайт Route 256, изучайте требования и подавайте заявку.

Отборочный контест уже 3 августа!

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

Аркадный автомат на RISC-V: сбиваем астероиды с микроконтроллером MIK32 АМУР

Вадим Новиков решил реализовать игровую физику в условиях bare metal, используя свой предыдущий опыт на C++/SFML. В проекте использовалась плата Elbear Ace-Uno на базе микроконтроллера MIK32 АМУР, SPI OLED-дисплей SSD1306 разрешением 128×64 и джойстик HW-504 (KY-023), а также модули SPI (цифровой интерфейс передачи данных), аналого-цифровой преобразователь для калибровки и чтения положения джойстика и GPIO для вывода настройки и ввода состояния кнопки.

Код на C включал непрозрачные типы, которые позволяют реализовать подобие инкапсуляции из ООП. С ними можно объявить в заголовочном файле указатель на некую структуру, но не определять ее. А в единственной трансляции определить структуру и статические функции для взаимодействия с внутренними полями, которые недоступны извне. И поместить туда, соответственно, реализацию открытого интерфейса. Вместо использования регистров напрямую Вадим подключил библиотеку hardware abstraction layer (HAL), чтобы впоследствии было проще портировать проект на STM32 и другие микроконтроллеры.

Результатом работы стала Asteroids — реинкарнация классической игры эпохи аркадных автоматов. Корабль игрока непрерывно выпускает снаряды. После столкновений снаряда с астероидом исчезают оба объекта, при столкновении с кораблем — только астероид. Астероиды, вышедшие за нижнюю границу, возвращаются сверху экрана. Корабль же выйти за границы экрана не может.

Это лишь один из интереснейших проектов, реализованных студентами по итогам последнего потока курса YADRO по программированию микроконтроллеров на RISC-V. Интересно узнать о других проектах? Мы уже рассказали о них в статье.

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

Эффективные хеш-таблицы на Go

В Go нет недостатка хеш-таблиц. Вы всегда можете использовать встроенную map[Key]Val, с ошеломительной скоростью обладающую непревзойденным удобством! А изобилие типов Keyразрешенных к использованию, способно довести до изумления!

Вот только ни указатель, ни слайс не подходят... Невозможно подсунуть свои операции (равенства и хеширования). Но хоть со скоростью все хорошо! (извините, не удержался)

Итого, мне пришлось написать HashMap[K, V any], закрывающую проблемы.

------------------8<------------------

В это трудно поверить, но:

  • Без резервирования памяти (конфигурация R0), map[uint64]uint64 работает в 1.93 раза медленнее UintMap! И производит в 5.64 раза больше мусора!!

  • А с полным резервированием (R1), в 1.72 раза медленнее! И аж в 16.5 раз больше мусора!!!

Вдумайтесь! На коленке написанная хеш-таблица для целых чисел UintMap почти в два раза обгоняет ЖУТКО оптимизированную нативную map[uint64]uint64!! И существенно менее мусорит!!!

Но раз трудно поверить, то давайте проверим:

func MyUintMap() {
    const N = umN

//R0|    um := lib.NewUintMap(0)
    um := lib.NewUintMap(N) //R1|

    for i := uint64(0); i < N; i++ {
        um.Findsert(i, i+N)
    }
    lib.Assert(um.Size() == N)

    cnt := 0
    for i := uint64(0); i < N; i++ {
        if *um.Val(um.Find(i)) == i+N {
            cnt++
        }

        if um.Find(i+N) == -1 {
            cnt++
        }
    }
    lib.Assert(cnt == N*2)

    for i := uint64(0); i < N; i++ {
        um.Delete(i)
    }
    lib.Assert(um.Size() == 0)
}

func GoUintMap() {
    const N = umN

//R0|    m := make(map[uint64]uint64)
    m := make(map[uint64]uint64, N) //R1|

    for i := uint64(0); i < N; i++ {
        m[i] = i + N
    }
    lib.Assert(len(m) == N)

    cnt := 0
    for i := uint64(0); i < N; i++ {
        if m[i] == i+N {
            cnt++
        }

        if _, ok := m[i+N]; !ok {
            cnt++
        }
    }
    lib.Assert(cnt == N*2)

    for i := uint64(0); i < N; i++ {
        delete(m, i)
    }
    lib.Assert(len(m) == 0)
}

Здесь всего-то лишь вставка, два поиска и удаление. Запустите go test -bench=UintMap -benchmem и увидите сами. Вот только можно ли ругать Google за неэффективный map[uint64]uint64?

------------------8<------------------

Итоги?

  1. Смело берите HashMap[K, V any] для слайсов и указателей!

  2. Немного оптимизированная BytesMap -- лучший выбор для []byte.

  3. Интересно оптимизированная UintMap -- это выбор для целых чисел. Разберитесь, что там "не так", и используйте за основу.

И как всегда, исходный код, подробности и пару неудачных шуток вы можете найти в моей статье https://ders.by/go/hashmap/hashmap.html

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

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

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

Вообще, как помог понять эксперимент, большая часть моих запросов идёт по одному из 3 путей:

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

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

Это частично устраняется более подробным формулированием запроса ("что значит ABC в контексте X"), но... зачем писать больше?

Наоборот, поиск подробной информации по какому-то вопросу. Поиск тут нужен только для того, чтобы выйти на статью, где будут расписаны все детали. Короткая выжимка от ИИ обычно неплоха, но закрывает только 60-70% тех самых интересных мне деталей, так что всё равно приходится нырять в первоисточники.

Сюда же, кстати, можно отнести поиск изображений чего-то. Тот же Perplexity выдаёт и картинки, но 3-4 штук не всегда достаточно.

И, наконец, просто использование поисковика для ленивого перехода на нужный сайт. Ну да, это как в Гугле писать "Яндекс", но иногда это... проще?

И вот эти три сценария - это примерно 90% запросов в омнибоксе браузера. Моего, your mileage may vary. Так что пока я всё же предпочту оставить поиск поиском, а нейросетям выделю постоянное место в боковой панели браузера и закреплённые вкладки.

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

Привет! Такое важное дело:

Мы в Хабре ищем к нам в команду старшего PHP-разработчика — можно работать удаленно.

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

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

Посмотреть вакансию

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

Подключайтесь к вебинару по сетевой безопасности в ЦОД

В 12:00 (мск) в прямом эфире расскажем, как повысить безопасность инфраструктуры и приложений. Рассмотрим тонкости построения доступа к системе и сетевую архитектуру при использовании IaaS. Особенно полезно будет пользователям выделенных серверов и облачных сервисов Selectel.

Программа вебинара

  • Роль NGFW в эшелонированной защите приложений и данных компании, обзор решений сетевой безопасности Selectel.

  • Ключевые сценарии применения NGFW для задач бизнеса.

  • Демонстрация кейсов.

  • Вопросы и ответы.

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

Смотреть трансляцию

📱на YouTube

📱в VK

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

Компания xAI вместе с Илоном Маском представила новую нейросеть Grok 4. В ней сделан упор на рассуждениях и академических способностях. Маск заявляет, что это «самый умный ИИ в истории человечества».

Среди достоинств Grok 4 разработчики проекта выделили:

  • в AIME 25 (математической олимпиаде) Grok 4 выдала 100% правильных ответов;

  • в тесте Humanity’s Last Exam нейросеть набрала 44,4% при использовании многоагентной архитектуры. С этим тестом почти никто не справляется; без многоагентного режима — 25%, что все ещё больше других моделей;

  • Grok 4 способен сам вести бизнес — он делает это в шесть раз эффективнее, чем если бы человек занимался этим сам;

  • превзошла PhD-уровень во всех предметных тестах, включая математику, программирование и физику;

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

  • способна открывать новые законы физики, и эту особенность Маск будет использовать для колонизации Марса;

  • большой вероятностью предсказывает различные спортивные события, например, исход чемпионата по баскетболу, просто сканируя Polymarket;

  • в 10 раз мощнее, чем Grok 3;

  • создаёт готовые игры всего по одному промпту, ИИ способен собирать шутеры за пару часов, налету подтягивать 3D-модели из сети и даже натягивать на них текстуры;

  • в голосовом режиме Grok 4 научилась шептать, петь, менять интонации и отвечать быстрее ChatGPT.

Новая модель Grok 4 станет доступна подписчикам Supergrok за $30 в месяц. Также будет прокачанная версия Grok 4 Heavy за $300 в месяц. xAI готовит отдельную модель Grok 4 для кодинга — построенную специально для программистов.

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

Nvidia стала первой в истории компанией с капитализацией в $4 трлн (больше крипторынка, который весь составляет $3,6 трлн). Это происходит на фоне бума нейросетей.

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

Evolution free tier — ежемесячный объем облачных ресурсов, за которые не нужно платить 🙌 

❓ Что за инструмент? Evolution free tier позволяет бесплатно использовать ресурсы платформы Cloud.ru Evolution. С free tier доступны виртуальные машины, объектное хранилище S3 и ресурсы для запуска контейнеров.

🖥 Особенности и преимущества. Во free tier вам доступны три сервиса:

  1. Evolution Compute — виртуальная машина в следующей конфигурации: 2 vCPU (Intel Gold 6248R, 3 ГГц), 4 ГБ RAM (DDR4), 30 ГБ дискового пространства (SSD NVMe) и безлимитный исходящий трафик.

  2. Evolution Object Storage — объектное хранилище S3 с ежемесячным объемом бесплатных ресурсов: 15 ГБ хранилища, 100 000 операций PUT, POST, LIST, миллион операций GET, HEAD и 10 ТБ исходящего трафика.

  3. Evolution Container Apps — сервис для разработки и запуска контейнеров. В месяц доступны: 120 vCPU × час и 480 ГБ RAM × час.

Чтобы начать работу, достаточно выбрать готовый образ и приобрести публичный IP.

✍️ Где, как и для чего использовать. Evolution free tier подойдет для тестирования облачных сервисов и разработки небольших проектов: менеджера паролей, telegram-бота, сайта для личного блога или портфолио. Еще можно развернуть облачное хранилище для фото, видео и документов. Или развернуть собственный игровой сервер в Minecraft ⛏️

А чтобы быстрее запустить проект, используйте нашего нового AI-помощника Клаудию. Он подберет конфигурацию виртуальной машины, развернет ее, создаст SSH и виджеты мониторинга, настроит алертинг за вас.

Чтобы погрузиться в детали, читайте статью про сценарии использования Evolution free tier. В ней мы рассказали об опыте тех, кто уже запустил свой сайт, сделал учебный проект, начал тестировать гипотезы с бесплатными ресурсами облака.

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

Человек-комбайн

Почему зависимость от одного специалиста может утопить всю команду. Выглядит как супергерой. На деле — одиночка, от которого зависит всё.

Это «человек-комбайн». Его любят, на него надеются, он незаменим. До тех пор, пока всё не рухнет.

Первый этап

Команда обращается за всем именно к нему: помощь, проверка, советы. Он — живая документация и мозг проекта.

Для бизнеса всё выглядит отлично: «три в одном, да ещё и без лишних затрат».

Второй этап

Постепенно «комбайн» устаёт: таски неинтересные, общения слишком много, помощи просят постоянно.

Он начинает раздражаться, отказывать, “зависимые” замыкаются. Процессы начинают проседать — но пока это незаметно сверху.

Третий этап

Бизнес не замечает проблему, а специалист уже морально ушёл. Проходит немного времени, и вот он увольняется. И…

Судный день

Без него — никто не знает, как деплоить, где что лежит, как починить баг.

Документации нет, у разработчиков паника.

Прод падает. Клиенты жалуются. Команда — в ступоре.

Восстановление занимает недели. А иногда — проект просто не поднимается.

Как не угодить в ловушку?

Раздавайте ответственность. Не сливайте всё на одного “самого умного”. Растите дублирующих специалистов. Пишите документацию. Один супермен — это риск, а не преимущество.

Коромысло с одним ведром — всегда перевесит в одну сторону.

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

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