Многие популярные приложения для iOS и Android содержат жестко закодированные, незашифрованные учетные данные для облачных сервисов, включая Amazon Web Services (AWS) и Microsoft Azure Blob Storage, предупреждают в Symantec. В результате пользовательские данные и исходный код уязвимы перед потенциальными злоумышленниками.
Всем привет! Меня зовут Александр Разинков, я разрабатываю системный софт в компании YADRO. В этом посте я расскажу о стресс-тестировании нашего RISC-V-кластера с помощью… Quake 2! Почему «квейк»? RISC-V активно развивается как основная application-платформа в мире, и игры — это хороший способ проверить возможности ядер, драйверов GPU и экосистемы в целом. В некоторых важных аспектах игры дают значительно большую нагрузку, чем стандартные программные тесты, особенно на память и интерконнект.В х…
Размер платы немного больше пятирублёвой монетыВ данной статье речь пойдет про использование платы Luckfox Pico Mini. Я расскажу про особенности, её настройку, а также о том как запускать на ней нейронные сети для детекции объектов с камеры (Yolov8). Всё дальнейшее повествование опирается на желание автора использовать устройство для обработки изображений нейронными сетями в реальном времени (или почти). При этом обработка изображений не может работать изолированно от других устройств общей сис…
ПредысторияНедавно я начал готовить очередной Kubernetes кластер на Bare Metal серверах для одного из наших проектов дабы съехать с Google Cloud и снизить расходы на инфраструктуру примерно в 4 раза, получив при этом в 4 раза больше ресурсов vCPU/RAM/SSD (да и производительность сетевых дисков в облаках оставляет желать лучшего).В качестве ОС я решил взять горячо мной любимую Talos Linux, которая позволяет очень просто развернуть Kubernetes-кластер на любом окружении, легко обновлять его компон…
Каждый программист хоть раз слышал о принципах SOLID. На собеседованиях и экзаменах в вузах многие из нас пытались вспомнить, о чем же был тот самый принцип Лисков. Однако вряд ли цель преподавателей и интервьюеров — заставить нас заучивать строчки из учебников. SOLID действительно помогает писать качественный код, когда во всем разберешься! Если вы этого еще не сделали, добро пожаловать под кат. Еще раз взглянем на то, как устроены всем известные принципы. Обещаю — без духоты, все рассмотрим…
Микроконтроллеры STM32 и GigaDevice GD32 часто сравнивают из-за схожей архитектуры и совместимости. GD32 является своеобразным «клоном» STM32, использующим такое же ядро ARM Cortex-M. Основное отличие между ними — это цена, так как GD32 обычно дешевле, что делает его привлекательным для проектов с ограниченным бюджетом. Однако несмотря на схожесть, существуют различия в характеристиках и уровне поддержки, которые могут повлиять на выбор между этими двумя семействами микроконтроллеров. Различи…
Привет! Ты читаешь эту статью, а значит интересуешься Go и хочешь прокачать свои навыки в многопоточности. Наверняка ты уже знаком и активно пользуешь примитивы многопоточного программирования (горутины, каналы, мьютексы). В этой статье я постараюсь рассказать о том как их компоновать в самые популярные паттерны для поддержки масштабируемости и удобства сопровождения будущих систем.Почему же многопоточность так важна? Сегодняшние приложения должны быть быстрыми и отзывчивыми, а для этого нужно …
Меня часто спрашивают, почему указатели лучше? Шёрт побери, вот почему!Описание функций меняющих местами значения переменных: 1. Функция с указателями: func swapValues(first, second *int) { fmt.Println("Перед:", *first, *second) temp := *first *first = *second *second = temp fmt.Println("После:", *first, *second) }Эта функция использует указатели на целые числа (*int). При вызове функции передаются адреса переменных, что позволяет функции изменять реальные …
Релиз версии Go 1.23 добавил поддержку итераторов и пакет iter. Теперь можно перебирать константы, контейнеры (map, slice, array, string) и функции. Сначала создание итератора показалось мне неудобным, хотя в то же время его использование выглядело простым.Моя проблема с подходом к итераторам в Go заключается в том, что их нельзя «связывать» так,как это можно делать в JavaScript:[1,2,3,4] .reverse() .map(e => e*e) .filter(e => e % 2 == 0) .forEach(e => console.log(e)) Р…