METANIT.COM – Telegram
METANIT.COM
5.77K subscribers
1.64K photos
79 videos
9 files
981 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Google выпустил новые версии фреймворка Flutter и языка Dart - Flutter 3.38 и Dart 3.10. Основные нововведения.

#### Нововведения в Dart
- Dot Shorthands
Новая фича, позволяющая опускать типы, которые Dart может вывести автоматически, для более краткого кода. Примеры: .start вместо MainAxisAlignment.start или .all(8.0) вместо EdgeInsets.all(8.0).
Преимущества: Уменьшает boilerplate-код, повышает читаемость и ускоряет разработку. Поддерживает именованные конструкторы. Активировано по умолчанию в Dart 3.10 и Flutter 3.24.

#### Нововведения в Flutter
##### Улучшения веб-разработки
- Файл конфигурации `web_dev_config.yaml`:
Новый файл в корне проекта для настройки хоста, порта, сертификатов и заголовков при запуске flutter run.
Преимущества: Обеспечивает консистентность настроек в команде и упрощает управление.
- Настройки прокси:
Поддержка прокси в конфиг-файле для переадресации запросов на другие серверы.
Преимущества: Упрощает разработку веб-клиентов с динамическими эндпоинтами.
- Расширенный Hot Reload на веб:
Stateful hot reload включен по умолчанию с -d web-server, поддерживает несколько браузеров одновременно.
Преимущества: Ускоряет итерации без перезапуска приложения.

##### Улучшения фреймворка
- OverlayPortal:
Добавлен overlayChildLayoutBuilder для рендеринга детей в любом Overlay вверх по дереву виджетов; Overlay.of стал надежнее.
Преимущества: Упрощает создание глобальных UI-элементов (например, уведомлений), игнорируя ограничения родителя.
- Навигация на Android:
Predictive back transitions включены по умолчанию в MaterialApp (предпросмотр домашнего экрана при свайпе назад); дефолтный переход — FadeForwardsPageTransitionsBuilder.
Преимущества: Соответствует нативному поведению Android для плавного UX.
- Интеграция с десктопом (Windows):
Доступ к списку подключенных дисплеев с деталями (разрешение, частота обновления, физический размер).
Преимущества: Позволяет реализовывать продвинутый менеджмент окон.
- Устойчивость фреймворка:
Обработка ошибок в lifecycle-методах виджетов (например, didUpdateWidget) без каскадных сбоев; ResizeImage теперь правильно реализует равенство для кэширования.
Преимущества: Повышает стабильность и предсказуемость.
- Другие фиксы:
Исправление RSuperellipse для больших радиусов углов (рендерит "pill"-форму); улучшенная детекция локали через Intl.Locale API; фикс IME на Samsung с аппаратными клавиатурами.

##### Обновления Material и Cupertino
- Миграция на WidgetState:
Переход от MaterialState к WidgetState для единообразного управления состояниями (pressed, hovered, disabled) в виджетах вроде IconButton, ElevatedButton, Checkbox.
Преимущества: Упрощает теминг; существующий код не ломается.
- IconButton.statesController:
Новый свойство для программного контроля состояний.
Преимущества: Для кастомных интерактивных дизайнов.
- Badge.count.maxCount:
Ограничение отображаемого счетчика (например, "99+" для 100+).
Преимущества: Улучшает читаемость UI.
- InkWell.onLongPressUp:
Колбэк для действий при завершении долгого нажатия.
Преимущества: Тоньше контроль жестов.
- CupertinoSlidingSegmentedControl.isMomentary:
Свойство для временных селекций без сохранения.
Преимущества: Соответствует iOS-поведению.
- CupertinoSheet:
"Stretch"-эффект при перетаскивании полностью развернутого листа.
Преимущества: Больше нативности iOS.
- Фиксы: Улучшения в DropdownMenuFormField, SegmentedButton и др.

##### Улучшения скроллинга
- Sliver-робастность:
Фиксы в SliverMainAxisGroup и SliverCrossAxisGroup для жестов, hit-testing, оверскролла и фокуса.
Преимущества: Более предсказуемые сложные скролл-лейауты.
- SliverGrid.list:
Новый конструктор для создания гридов из списка детей.
Преимущества: Упрощает кастомные ScrollView.
- Навигация фокуса:
Улучшения в вложенных скроллах с разными осями (вертикальный список с горизонтальными каруселями).
Преимущества: Избегает неожиданных прыжков фокуса для клавиатуры/D-pad.
👍3👀2🥰1👏1
##### Улучшения доступности
- Дефолтная доступность на iOS:
Включена по умолчанию через WidgetsFlutterBinding.instance.ensureSemantics.
Преимущества: Упрощает отладку.
- Отладка Semantics Tree:
debugDumpSemanticsTree включает результаты валидации ввода текста.
Преимущества: Быстрее диагностика.
- SliverSemantics:
Новый виджет для аннотаций sliver-деревьев (заголовки, роли, лейблы) в CustomScrollView.
Преимущества: Лучшая поддержка screen readers.
- Виджеты: Доступность по умолчанию в CupertinoExpansionTile, объявления в AutoComplete, большие тач-таргеты в TimePicker.

##### Поддержка iOS и деплой
- Платформенная поддержка: Полная совместимость с iOS 18, Xcode 16, macOS 15.
- Devicectl: Новый метод деплоя через CLI Xcode 16 без запуска IDE.
Преимущества: Ускоряет тестирование на физических устройствах.
- UIScene Lifecycle: Обязательная миграция для iOS 18+; ручная или авто-миграция.
Преимущества: Будущая совместимость.

##### Поддержка Android
- 16KB Page Size: Обновление NDK до r28 для Android 15+ (требование Google Play к ноябрю 2025).
Преимущества: До 30% быстрее запуск на high-RAM устройствах.
- Фикс утечки памяти: В Activities при уничтожении (с 3.22.0).
- Зависимости: Совместимость с Java 17, KGP 2.2.0, AGP 8.7.1, Gradle 8.9; дефолтные API-уровни (compileSdk 35, targetSdk 35, minSdk 24).

##### Улучшения движка
- Performance Overlay: Рефакторинг для эффективности (статья обрывается, но подразумевает оптимизации).

Эти обновления делают Flutter более зрелым для кросс-платформенной разработки, с акцентом на веб, доступность и нативную интеграцию.

https://blog.dart.dev/announcing-dart-3-10-ea8b952b6088
https://blog.flutter.dev/whats-new-in-flutter-3-38-3f7b258f7228
🔥4👍2👏1
СТРАТЕГИИ МАСШТАБИРОВАНИЯ В ПРОЕКТИРОВАНИИ СИСТЕМ
(описание в следующем посте)
3👍3👏1
СТРАТЕГИИ МАСШТАБИРОВАНИЯ В ПРОЕКТИРОВАНИИ СИСТЕМ
(продолжение предыдущего поста)

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

1. ВЕРТИКАЛЬНОЕ МАСШТАБИРОВАНИЕ (УВЕЛИЧЕНИЕ МОЩНОСТИ)

→ Увеличение ресурсов одного сервера (процессор, оперативная память, хранилище).
→ Простота внедрения — не требует изменений кода.
→ Ограничено максимальной производительностью оборудования.
→ Применяется для небольших и средних систем до перехода на распределённое масштабирование.

*Пример:* модернизация сервера базы данных с 8 ГБ ОЗУ до 64 ГБ ОЗУ.

2. ГОРИЗОНТАЛЬНОЕ МАСШТАБИРОВАНИЕ (РАСШИРЕНИЕ)

→ Добавление новых серверов или узлов для обработки растущего трафика.
→ Обеспечивает распределение нагрузки и резервирование.
→ Широко используется в облачных и распределённых архитектурах.
→ Управляется с помощью балансировщиков нагрузки и систем обнаружения сервисов.

*Пример:* добавление новых экземпляров веб‑серверов или серверов баз данных за балансировщиком нагрузки.

3. МАСШТАБИРОВАНИЕ БАЗ ДАННЫХ

Реплики для чтения:
несколько копий базы данных только для чтения, повышающих производительность операций чтения.

Главный узел для записи:
единственный главный узел обрабатывает все операции записи для обеспечения согласованности данных.

Шардинг:
данные распределяются по нескольким базам данных (шард‑серверам) на основе идентификатора пользователя или региона.

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

4. СТРАТЕГИИ КЭШИРОВАНИЯ

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

Типы кэшей:
- кэши на уровне приложения (в оперативной памяти, например, в Node.js или Java);
- распределённые кэши (например, Redis, Memcached);
- CDN‑кэши (например, Cloudflare, Akamai) для статического контента.

→ Снижают задержки и ускоряют время отклика.

5. БАЛАНСИРОВКА НАГРУЗКИ

→ Распределение входящего трафика между несколькими серверами.
→ Предотвращает перегрузку и повышает отказоустойчивость.
→ Могут использоваться алгоритмы: Round Robin, Least Connections, IP Hash.
→ Распространённые инструменты: Nginx, HAProxy, AWS ELB, Google Cloud Load Balancer.

6. АСИНХРОННАЯ ОБРАБОТКА

→ Вынесение ресурсоёмких или длительных задач в фоновые процессы.
→ Реализуется с помощью систем очередей сообщений (например, Kafka, RabbitMQ, SQS).
→ Ускоряет обработку запросов и повышает общую масштабируемость.

7. АВТОМАТИЧЕСКОЕ МАСШТАБИРОВАНИЕ

→ Автоматическая регулировка ресурсов в зависимости от спроса.
→ Реализуется через облачные сервисы (например, AWS Auto Scaling или Kubernetes Horizontal Pod Autoscaler).
→ Обеспечивает баланс между эффективностью затрат и производительностью.

8. СЕТЬ ДОСТАВКИ КОНТЕНТА (CDN)

→ Доставка статических ресурсов (изображений, CSS, JS) с географически распределённых краевых серверов.
→ Снижает задержки и нагрузку на основной сервер.
→ Повышает глобальную масштабируемость веб‑приложений.

9. ПАРТИЦИОНИРОВАНИЕ И РАСПРЕДЕЛЕНИЕ ДАННЫХ

→ Разделение больших наборов данных между узлами или регионами.
→ Снижает конфликты и повышает скорость выполнения запросов.
→ Используется в распределённых базах данных (Cassandra, MongoDB, DynamoDB).

10. МАСШТАБИРОВАНИЕ НА ОСНОВЕ СОБЫТИЙ И МИКРОСЕРВИСНАЯ АРХИТЕКТУРА

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

Некоторые рекомендации
❤‍🔥6👍32
→ Вертикальное масштабирование → быстро, но ограничено.
→ Горизонтальное масштабирование → распределённое и гибкое.
→ Кэширование + балансировка нагрузки → повышают эффективность.
→ Автоматическое масштабирование + асинхронная обработка → динамическое управление ресурсами.
→ Шардинг + репликация → обеспечивают масштабируемость данных.
❤‍🔥4👍3🔥2
Резюме ML-специалистов втрое больше, чем вакансий

Машинное обучение (machine learning, ML) закрепилось как одно из самых привлекательных направлений в IT. Рынок труда тоже расширяется, но делает это неравномерно: работодатели не поспевают за ростом числа специалистов. Так, если за год количество резюме соискателей выросло почти втрое, превысив более 5000 штук, то бизнес, в свою очередь, наращивает спрос, но осторожно и под конкретные проекты: число вакансий в годовом выражении выросло на 37% - до 920.
Основной рост обеспечивают молодые специалисты в возрасте 18–24 лет, которые приходят через образовательные треки, хакатоны, онлайн-курсы и программы переобучения. За год число таких специалистов выросло до 2600, что почти в три раза превышает показатели прошлых лет.

Однако аналитики видят в этих результатах реализацию угрозы для IT-специалистов со стороны алгоритмов, которые уже вытесняют первых с рынка

Что касается зарплатных ожиданий и рыночных предложений, то в 2024–2025 году медианное предлагаемое ML-специалистам вознаграждение (то есть показатель, равноудаленный от самого большого и самого маленького значения) выросло до 217 700 рублей против 183 300 рублей годом ранее (+18,8%). При этом медианные ожидания соискателей снизились — с 153 800 рублей до 106 100 рублей (-30,9%). Такой разрыв (более 111 000 рублей) указывает на дисбаланс, говорится в исследовании: часть специалистов занижают ожидания, чтобы повысить шансы на трудоустройство, а работодатели, напротив, демонстрируют готовность платить больше, чем рассчитывают соискатели. При этом стоит учитывать, что компании не всегда указывают уровень зарплаты в вакансии — особенно в нижнем сегменте, где условия предлагаются индивидуально или фиксируются на этапе офера.

Согласно данным вакансий работодателей, ML-специалисты должны владеть Python, SQL, PyTorch и библиотеками глубокого обучения. Среди новых требований — опыт в разработке API, работа с облачными платформами и ML-инфраструктурой (Docker, MLflow, TensorFlow Serving).

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

https://www.forbes.ru/tekhnologii/549732-problema-lisnego-celoveka-rezume-ml-specialistov-vtroe-bol-se-cem-vakansij
🤔8🔥1👏1😁1🤬1😢1
В руководство по C# и .NET добавлена новая статья про Расширения типов, которые позволяют добавлять новые компоненты - методы, свойства и операторы к уже существующим типам без создания нового производного типа, перекомпиляции или иного изменения исходного типа
https://metanit.com/sharp/tutorial/3.18.php
#csharp #dotnet
👍353🔥2🥱2🖕1
Управление памятью в Linux
(продолжение в следующем посте)
5🔥1🥰1
Управление памятью в Linux
(продолжение предыдущего поста)

1. Введение.

→ Система управления памятью в Linux контролирует, как операционная система использует оперативную память (RAM), пространство подкачки (swap) и виртуальную память.
→ Ядро гарантирует, что каждый процесс получает необходимый объём памяти, сохраняя при этом стабильность и производительность системы.
→ В Linux используется система виртуальной памяти, которая предоставляет каждому процессу собственное изолированное адресное пространство.

2. Виртуальная память

→ Виртуальная память позволяет процессам работать так, будто у них есть доступ к большому непрерывному объёму памяти — даже если физическая оперативная память меньше.
→ Linux сопоставляет виртуальную память с физической с помощью таблиц страниц.
→ Обеспечивает:
 → Изоляцию между процессами;
 → Эффективное использование оперативной памяти;
 → Поддержку крупных приложений.

3. Страничная организация памяти (paging)

→ Память разделена на небольшие блоки фиксированного размера — страницы (обычно 4 КБ).
→ Ядро загружает страницы программы в оперативную память по мере необходимости.
→ Если оперативная память заполнена, неиспользованные страницы перемещаются в пространство подкачки.
→ Страничная организация повышает эффективность многозадачности.

4. Роль блока управления памятью (MMU, Memory Management Unit)

→ MMU — это аппаратный компонент, который преобразует виртуальные адреса в физические.
→ Сохраняет преобразования в кэше, называемом TLB (Translation Lookaside Buffer, буфер ассоциативной трансляции).
→ Быстродействие доступа к памяти зависит от эффективного использования MMU и TLB.

5. Распределение физической памяти

→ В Linux используются два основных распределителя памяти:
 → Система buddy (Buddy System) — выделяет большие непрерывные блоки памяти.
 → Распределитель slab (Slab Allocator) — выделяет память для объектов ядра (inodes, дескрипторы файлов).

→ Обеспечивает минимальную фрагментацию и более быстрое выделение памяти.

6. Пространство подкачки (swap)

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

→ Команды:
 → swapon -s — просмотр информации о swap;
 → free -h — проверка использования swap.

7. Зоны памяти

→ Linux разделяет физическую память на зоны в зависимости от аппаратных ограничений:
 → ZONE_DMA — память, используемая для прямого доступа к памяти (DMA).
 → ZONE_NORMAL — обычная память, доступная ядру.
 → ZONE_HIGHMEM — верхняя память, не отображаемая напрямую ядром (в 32‑битных системах).

→ Помогает ядру распределять память в зависимости от архитектуры системы.

8. Кэширование и буферы

→ Linux использует свободную память для кэширования, чтобы повысить производительность.
→ Типы:
 → Page Cache — хранит недавно использованные файлы.
 → Buffer Cache — хранит метаданные для ускоренного доступа к диску.

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

9. OOM Killer (Out‑of‑Memory Killer, «убийца при нехватке памяти»)

→ Когда память и swap полностью использованы, Linux запускает OOM Killer.
→ Выбирает и завершает процессы, потребляющие много памяти, чтобы освободить оперативную память.
→ Предотвращает зависание системы.

10. Инструменты мониторинга памяти

→ Распространённые команды для проверки использования памяти:
 → free -h — обзор оперативной памяти и swap;
 → top — использование памяти процессами в реальном времени;
 → htop — интерактивный монитор памяти;
 → vmstat — статистика виртуальной памяти;
 → cat /proc/meminfo — подробная информация о памяти.

11. Интерфейсы памяти в /proc

→ Linux предоставляет информацию о памяти через файловую систему proc:
 → /proc/meminfo — обзор памяти;
 → /proc/<pid>/maps — структура памяти процесса;
 → /proc/<pid>/smaps — детальное использование по сегментам памяти.
8👍2💯2
→ Полезно для отладки утечек памяти и анализа распределения памяти процессами.

12. NUMA (Non‑Uniform Memory Access, неоднородный доступ к памяти)

→ На серверах с несколькими процессорами время доступа к памяти зависит от процессора.
→ Linux поддерживает распределение памяти с учётом NUMA для оптимизации производительности.
→ Гарантирует, что процессы используют память, расположенную ближе к процессору, на котором они выполняются.
6🔥1🥰1
Как с помощью Python проверить использование памяти
#python
💩20👍5🔥3👏2
This media is not supported in your browser
VIEW IN TELEGRAM
Теория графов наглядно на примере кубика-рубика
🤓32🤔176👍3🤯3😐1
AOT-компиляция приложения на C# с каждой новой версии .NET все производительнее и производительнее. Так, .NET 10 показывает снижение размера бинарника на 13,9%
С другой стороны, обычный Hello World размером в 1 Мб по сравнению с 10 Кб аналогичной программы на Си это, конечно, дико.
👍32🔥2👏1🤔1🤡1
Хабр и ЭКОПСИ провели масштабное исследование на основании опроса более 30000 айтишников и составили новый рейтинг IT-брендов работодателей.

Основные тренды: компании перестраиваются, команды меняются, новых работодателей почти нет, а конкуренция обострилась и среди специалистов, и среди компаний, рост зарплат в IT-сфере замер, повышение производительности труда (прежде всего, за счёт сокращения издержек). Из-за высокой ключевой ставки ЦБ многим закредитованным компаниям трудно поддерживать инвестпроекты и развивать новые направления. В результате за этот год мы увидели серию масштабных сокращений сотрудников. Часть компаний прекратила активный найм, другие существенно сокращают бюджеты на «нецелевые расходы».

1-ое место рейтинга заняла Авиасейлс (привлекательность — 91%, узнаваемость — 97%). Авито на 2-м (привлекательность — 88%, узнаваемость — 98%). На 3-м месте 2ГИС: ее привлекательность — 86%, узнаваемость — 97%.

Полный обзор: https://habr.com/ru/specials/965986/
🔥2🥰2👏1😁1
Rust опередил C/C++ по объёму кода, добавляемого в платформу Android

Использование Rust при разработке системных компонентов Android началось в 2020 году. В 2025 году объём нового кода на Rust в Android превысил объём добавляемого за год кода на C и C++.

Кроме того, в 2025 году впервые доля уязвимостей, вызванных ошибками при работе с памятью, оказалось меньше 20% от общего числа уязвимостей. Для сравнения в 2024 году этот показатель в Android составлял 24%, а в 2019 году - 76%. При этом средний показатель по индустрии продолжает оставаться на уровне 70%.

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

https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html
26🤮15👍4🔥2🤔2👎1💊1