Компания Meta* представила четыре новых поколения специализированных чипов для искусственного интеллекта - MTIA 300, 400, 450 и 500, - разработанных для того, чтобы сделать эксплуатацию ИИ на своих платформах более экономичной.
Кажется, мы приближаемся к моменту, когда генерация кода перестанет быть игрушкой и станет обычным инструментом разработки. Уже сейчас можно попросить модель написать API, SQL-запрос или даже кусок архитектуры сервиса. Но что будет дальше, когда такой подход станет стандартом? Изменится ли профессия разработчика или просто появится ещё один инструмент вроде IDE?
В этой статье я попробую разобрать, как генерация кода может изменить сам процесс разработки. Не в теории, а с инженерной стороны: архитектура, поддержка, технический долг, debugging и то, как вообще читать код, который писал не человек.
Пару месяцев назад я решил провести небольшой эксперимент. Попробовать писать сервис почти полностью через генерацию кода. Не просто отдельные функции, а прямо весь сервис: API, базу данных, обработчики.
Честно говоря, в какой-то момент стало немного странно. Ты вроде разработчик, но код пишет не совсем ты.
Возникает ощущение, будто ты больше архитектор или редактор кода.
И тут появляется вопрос.
Если генерация станет стандартом, кем вообще будет программист?
Тем, кто пишет код? Тем, кто проверяет код? Или тем, кто придумывает системы, которые этот код потом генерируют?
Panasonic столкнулась с проблемами при выполнении заказов на свой флагманский Blu-ray-рекордер DMR-ZR1 в Японии. Из-за чрезвычайно ограниченных запасов устройств японская компания сделала официальное заявление и извинилась за нехватку. Panasonic осталась единственным крупным поставщиком рекордеров Blu-ray, поэтому дефицит, вероятно, будет сопровождаться повышение цен. Сейчас стоимость DMR-ZR1 составляет $2,3 тыс.
Вообще история началась 23 июля. Тогда аккаунт с 23+ тысячами подписчиков попал в блок. «Ну и ладно, не в первый раз» - подумала я. Уж я то точно знаю, что нужно делать:) Однако это было начало конца… (впрочем, эта история с двумя концами 😁)
Я включила режим терминатора и начала хреначить как не в себя, перестроила регулярные метрики в бизнесе, сходила к нескольким психологам, прорыдалась, написала бесконечное количество запросов в техподдержку, пообщалась с коллегами, знакомыми (и мужу досталось, конечно) - в общем, переживала эту жесть, как могла.
Но 5 августа пришел “приговор” от службы поддержки LinkedIn - "аккаунт заблокирован НАВСЕГДА!"
И что, все усилия, которые я и команда вкладывали ежедневно на протяжении 3,5 лет, оказались… напрасны?
Всем привет! Я Игорь Эльяс — бэкенд-разработчик, сейчас работаю в МТС Веб Сервисы. Однажды мне досталась задача «перенести приложение в другую БД, за XX времени», где ХХ — короткий интервал с точки зрения потенциального объема работ при подходе «переделываем все по-нормальному — на Entity Framework» :-)
Проект на C#, изначальная БД — MS SQL + мы использовали самодельный ORM. Возможно, вы сейчас подумали — «очередное легаси!». И да и нет. Проект родился еще во времена Framework 2.0, но регулярно обновлялся и сейчас работает на .NET8. Он пережил десятки циклов рефакторинга, поэтому не безнадежен для доработок.
В материале расскажу, что мы в итоге решили со всем этим делать, почему и для чего выбрали именно Dapper, а еще — познакомлю вас с мощным, но малоизвестным инструментом Dynamitey, благодаря которому удалось выполнить все в срок и без лишний приключений.
Когда я пишу эту статью, то чувствую себя довольно глупо. На самом деле, это история с моралью «Прежде, чем действовать, изучи вопрос и понимай, в чём заключается твоя цель, потому что иначе потеряешь много времени».
Я продолжаю работать над проектом PSRayTracing. Как ни стараюсь я положить его на полку, время от времени слышу о чём-то «новом» и задаюсь вопросом: «а можно ли засунуть это в мой трассировщик лучей, чтобы выжать из него ещё немного скорости?». На этот раз такой темой стали аппроксимации Паде. Моя цель заключалась в обеспечении более быстрых (и точных) тригонометрических аппроксимаций.
Увы, это не помогло... однако я обнаружил нечто иное, позволившее существенно ускорить мой трассировщик!
Мы живем в эпоху, когда ИИ стал доступен каждому. Но за магией PyTorch скрывается колоссальная инженерная работа и сложные вычислительные процессы, которые для большинства остаются черным ящиком.
Это третья статья из цикла От MNIST к Transformer, цель которого пошагово пройти путь от простого CUDA ядра до создания архитектуры Transformer - фундамента современных LLM моделей. Мы не будем использовать готовые высокоуровневые библиотеки. Мы будем разбирать, как все устроено под капотом, и пересобирать их ключевые механизмы своими руками на самом низком уровне. Только так можно по настоящему понять как работают LLM и что за этим стоит. В этой статье мы перейдем от матриц к такому понятию как тензоры, напишем умножение тензоров, так же создадим свой первый линейный слой или полно-связную нейронную сеть. И наконец напишем сеть для распознования mnist датасета.
Приготовьтесь, будет много кода на C++ и CUDA, работы с памятью и погружения в архитектуру GPU. И конечно же математика что за этим стоит. Поехали!
Настройка электронной подписи (ЭП) в Linux — это всегда приключение. Но попытка завести плагин Госуслуг на свежей Ubuntu 24.04 LTS превращается в настоящий хардкорный квест. Официальные инструкции безнадежно устарели, инсталляторы выдают ошибки, а техническая поддержка обычно разводит руками.
В этой статье я пошагово разберу, как заставить всё это работать, когда «всё против вас»: от конфликтов OpenSSL 3.0 до капризов Wayland и Native Messaging.
"Работа программиста 1С в аутсорсинге часто связана с собеседованиями. При смене работы также нужно пройти интервью, — рассказывает моя коллега Ирина, программист 1С. — Последнее время часто стали спрашивать о транзакциях в 1С и просить решить задачи, связанные с ними. В этой статье рассмотрим примеры задач, ошибки и правильные ответы".
Транзакция — это логическая группа операций, которую нужно выполнить целиком или не выполнять вовсе.
Простой пример из жизни. Вы хотите записать несколько документов одновременно. Если запись одной из них упала, надо откатить все изменения, чтобы не получить получастичное состояние.
В 1С транзакции помогают обеспечить атомарность, целостность и согласованность данных.
Спецпроект из трех материалов анализирует развитие иншуртеха, цифровизацию страховых компаний и новые риски бизнеса.
Диджитал-интегратор AGIMA совместно с деловым изданием «Инк.» выпустил исследование, посвященное развитию онлайн-страхования в России. Проект включает три аналитических материала о цифровой трансформации страхового рынка, ключевых технологических трендах и новых страховых продуктах. Исследование основано на отраслевой аналитике и комментариях экспертов и предназначено для предпринимателей и компаний, которые выбирают страховые решения для бизнеса.
Наконец-то работа с PEM в Java становится похожа на API, а не на набор ручного парсинга, Base64 и странных телодвижений.
Справка: PEM или Privacy-Enhanced Mail - это текстовый контейнер для криптографических данных. Проще говоря – это способ хранить или передавать ключ, сертификат или другой crypto-объект не в бинарном виде, а в текстовом.
Раньше с PEM работали так:
String pem = "-----BEGIN PUBLIC KEY-----\n"
+ Base64.getMimeEncoder(64, "\n".getBytes())
.encodeToString(publicKey.getEncoded())
+ "\n-----END PUBLIC KEY-----";
А в обратную сторону, но уже с ручной нормализацией PEM, Base64-декодированием и KeyFactory:
String normalized = pem
.replace("-----BEGIN PUBLIC KEY-----", "")
.replace("-----END PUBLIC KEY-----", "")
.replaceAll("\\s", "");
byte[] der = Base64.getDecoder().decode(normalized);
PublicKey key = KeyFactory.getInstance("EC")
.generatePublic(new X509EncodedKeySpec(der));
По факту PEM в Java долгое время был не отдельным API, а набором низкоуровневых шагов, которые разработчик собирал руками.
А теперь это выглядит так:
var encoder = PEMEncoder.of();
String pem = encoder.encodeToString(keyPair);
var decoder = PEMDecoder.of();
KeyPair decoded = decoder.decode(pem, KeyPair.class);
То есть ключевую пару можно закодировать в PEM и декодировать обратно буквально в несколько строк.
Во втором preview:
PEMRecord переименовали в PEM
добавили decode()
расширили поддержку KeyPair и PKCS8EncodedKeySpec
упростили шифрование через EncryptedPrivateKeyInfo
А так, как все это дело еще в preview, не забываем использовать --enable-preview.
❓ Минус еще один кусок криптографической копипасты из Java-кода.PEM в Java постепенно перестает быть унылым?
Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.
Понятие контейнер сейчас активно применяется в контексте Docker и аналогичных решений по контейнеризации. Однако, в языке C++ контейнеры существуют уже очень давно и являются фундаментальной частью Standard Template Library (STL). Они предоставляют готовые реализации наиболее часто используемых структур данных, избавляя разработчика от необходимости писать их с нуля.
Контейнеры C++ можно разделить на несколько основных категорий. Последовательные контейнеры (Sequence Containers) хранят элементы в линейной последовательности, при этом порядок элементов определяется позицией добавления. Ассоциативные контейнеры (Associative Containers) автоматически сортируют элементы по ключу. При этом, они обеспечивают достаточно быстрый поиск (O(log n)). Неупорядоченные ассоциативные контейнеры (Unordered Associative Containers) хранят элементы в хеш-таблицах. Обеспечивают поиск в среднем за O(1). Адаптеры контейнеров (Container Adapters) предоставляют ограниченный интерфейс поверх других контейнеров.
В рамках данной статьи мы будем говорить об использовании библиотеки Ranges для работы с контейнерами.
Меня тут давно донимает вопрос снижения энергопотребления в квартире, так как ежемесячный расход электроэнергии каждый месяц переваливает за 300 киловатт. В связи с этим решил понаблюдать за работой домашнего видеорегистратора. Для этих целей крутится небольшой сервачок (Debian Linux) на MiniITX с Ryzen 3 3200GE, который обслуживает несколько IP-камер и пишет их с помощью Xeoma (а также параллельно крутит Home Assistant).
Подключил умную розетку к этому устройству на месяц и выяснил, что устройство ежемесячно потребляет 64 киловатта.
Далее попытался понять, как мне снизить энергопотребление и выявил интересную особенность... К серверу подключён монитор, который в графическом интерфейсе отображает картинку с видеокамер. В таком режиме работы процессор нагружен на 80-90% по всем ядрам.
Спустя четыре года после продажи прав на головоломку Wordle газете New York Times создатель игры Джош Уордл запустил новый игровой проект под названием Parseword. Новинка оказалась сложнее предшественницы, пишет Verge.
Плутоний — это вещество, имеющее широкий спектр применений, от устроения ядерного армагеддона до повседневной защиты от пожаров. Этот химический элемент массово производился в ядерных реакторах со Второй мировой войны, в отработанном ядерном топливе он встречается в различных изотопных составах, по которым можно определить такие параметры конструкции реактора, как выгорание топлива, исходная степень обогащения урана и спектральные характеристики нейтронов. Советский Союз изготовил больше плутония, чем любая другая страна. Основная его часть предназначалась для благородной цели сдерживания капиталистического империализма, однако малая доля досталась и ионизационным датчикам дыма наподобие КИ-1, РИД-1 и РИД-6М. (Буржуазные поджигатели войны предпочитали и по-прежнему предпочитают использовать для этого америций-241.) Время от времени жители бывшего СССР пытаются продавать плутоний из старых датчиков дыма на чёрном рынке ядерных технологий, считая, что их товар привлечёт бешеные деньги террористов, стремящимся развязать ядерную войну. Чуть ниже мы подробнее рассмотрим вероятность этого.
Мне были любопытны технические характеристики плутония из советских датчиков дыма, поэтому я нашёл старый датчик КИ-1 и извлёк из него источник. Конструкция источника во многом походит на конструкцию источников детектирующих камер в виде тюбика помады из первых датчиков Pyrotronics, производившихся в США. Советский выполнен из латуни и немного шире, чем аналогичный Pyrotronics. На внутренней осевой резьбе закрепляется крышкообразная защита от альфа-частиц, закрывающая полосу, которая содержит активный осадок; таким образом регулируется степень ионизации, производимой источником в камере, а также чувствительность датчика. Ниже я опишу свой анализ гамма- и альфа-излучения этого источника, а также поделюсь своими выводами о возрасте, активности, способе производства и пригодности этого плутония для ведения ядерной войны.
Попадая в подсеть контроллера домена, первое, что делает любой пентестер, это перебор учётных записей пользователей (Kerbrute атака). Существует много статей об этом типе эксплуатации, но в каждом источнике авторы используют заранее подготовленный словарь (Смиты, Джоны, Уайты...), который не слишком точно соответствует реальной жизни. Сегодня мы попытаемся заполнить этот пробел и создать универсальный рабочий словарь для атаки Kerbrute в российской среде AD.
Первое, что нам нужно сделать — понять, как администраторы создают учётные записи в домене, а точнее — каков шаблон имён пользователей. Лучшей практикой для корпоративных имён пользователей является сочетание фамилии человека и первой буквы его имени, например в моём случае — iglinkin@corporate.local или i.glinkin@corporate.local. Шаблон зависит от политики безопасности компании и может выглядеть так: ivanglinkin@corporate.local, glinkini@corporate.local, glinkin.i@corporate.local, glinkinivan@corporate.local, или даже просто фамилия — glinkin@corporate.local
Для более точного определения формата пентестеры изучают сайты организаций и посещаемых ими публичных мероприятий: там как раз и указан верный формат. Например, в Microsoft используют формат ИФамилия@microsoft.com: John Winn имеет почту jwinn@microsoft.com.
Как мы можем видеть, фамилия является основной частью корпоративного логина. Имя не так важно, так как используется только первая буква, поэтому нам даже не нужно знать настоящее имя — достаточно просто добавить букву перед или после фамилии. Следовательно, следующий самый сложный и одновременно важный этап — собрать данные о фамилиях.
Мониторя интернет, я нашёл интересный источник https://woords.su/full-name/russian-surnames: в нём содержится почти полный список русских фамилий, в том числе уже c окончаниями "а" для женской половины. Ну а дальше дело техники: создаем скрипт, for p in {1..2234}; do curl -shttps://woords.su/surnames/russian/page-$p | grep "<tr><td>" | sed 's/<tr><td>/\n/g' | sed 's/<\/td><td>/\n/g' | cut -d "/" -f 5 | cut -d "\"" -f 1 | sed 's/surname-//g' >> surnames.txt; done который парсит все фамилии и кладет в файлик surnames.txt.
Далее генерируем простой словарь с буквами. Его можно даже создать вручную, там всего-то будет 28 букв (минус Ë, Й, Ъ, Ы, Ь - так как с них имена не начинаются): a, b, v, g , d, e, zh, z, i, y, k, l, m, n, o, p, r, s, t, u, f, h, ts, ch, sh, shch, yu, ya.
Последний шаг — это добавить каждую букву перед каждой фамилией. Что может быть проще? for name in $(cat one_letter.txt); do for surname in $(cat lastnames.txt); do echo $name$surname; done;done Полный список username'ов будет состоять из чуть более 9 миллионов. Достаточно много, но, как показывает моя практика, они перебираются за 1.5 часа через kerberos_enumusers от метасплоита.
Используя этот универсальный метод, можно... в общем, можно сделать массу того, чего делать не стоит ибо большой брат придет за вами. А для исследовательских целей велком ко мне на 📱 GitHub и скачивайте уже подготовленные словари для ваших текущих проектов.
Cтарший инженер-программист в организации JavaScript Infrastructure & Terminal Experience компании Bloomberg Джейсон Уильямс опубликовал пост, в котором рассказал, как он вместе с командой реализовывал библиотеку Temporal вместо Date для различных типов дат и времени. Автор выступает делегатом TC39 (группы экспертов из Ecma International, отвечающей за стандартизацию и развитие языка JavaScript) и имеет опыт стандартизации функций, реализации языка и участия в крупных проектах с открытым исходным кодом. Джейсон также является создателем движка Boa JavaScript.
Долгое время в российском ИТ считалось, что для серьёзного карьерного роста разработчику нужно переезжать в Москву или Санкт-Петербург. Там концентрировались продуктовые компании, архитектурные команды и самые высокие зарплаты.
Но за последние несколько лет рынок изменился: многие разработчики работают в столичных компаниях, не переезжая туда физически.
Мы решили посмотреть на цифры и проверить, насколько релокация сегодня влияет на карьеру ИТ-специалистов. Собрали статистику рынка и результаты нескольких опросов — в том числе нового исследования getmatch и Островка.
В роли эксперта, который давно в теме корпоративных мессенджеров (ресёрч-разработка-внедрение), нашёл несколько ограничений, которые можно обойти сегодня и получить обновления завтра. Экосистема бизнес-продуктов Яндекса заметно развивается в последние годы. И замечательный поиск, как вишенка на торте.