Как стать автором
Обновить

Исследование: Copilot в 40 % случаев генерирует код с ошибками и уязвимостями

Время на прочтение 5 мин
Количество просмотров 5.3K
Open source *Программирование *Совершенный код *Кодобред GitHub *

Специалисты инженерной школы Тандона Нью-Йоркского университета решили проверить инструмент программирования Copilot на GitHub с точки зрения безопасности. Они обнаружили, что примерно в 40 % случаев код, сгенерированный помощником, содержит ошибки или уязвимости.

Читать далее
Всего голосов 15: ↑14 и ↓1 +13
Комментарии 8

Вебинар «Разработка встраиваемых систем с помощью модельно-ориентированного проектирования»

Время на прочтение 2 мин
Количество просмотров 798
Блог компании ЦИТМ Экспонента C *Промышленное программирование *Программирование микроконтроллеров *Matlab *

Всем привет!

На этом вебинаре расскажем:

- Как генерировать высококачественный и оптимизированный C/C++ код из моделей Simulink для использования в серийных системах

- Как осуществлять сборку, профилирование и верификацию сгенерированного кода на целевых процессорах на примере процессора компании Миландр

 → Регистрация и подробное описание

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

DeepMind обучила нейросеть AlphaCode понимать задачи программирования

Время на прочтение 2 мин
Количество просмотров 11K
Программирование *Машинное обучение *Искусственный интеллект

Инженеры подразделения Alphabet DeepMind AI разработали систему искусственного интеллекта AlphaCode, которая может генерировать код и решать задачи из чемпионатов по программированию. Нейросеть обучали пониманию постановки задачи и поискам её решения.

Читать далее
Всего голосов 21: ↑6 и ↓15 -9
Комментарии 9

Обновление GitHub Copilot запретило раскрывать секретные ключи и токены

Время на прочтение 2 мин
Количество просмотров 743
Информационная безопасность *Программирование *GitHub *Искусственный интеллект

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

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

Создание UML по существующему PHP коду

Время на прочтение 2 мин
Количество просмотров 13K
UML Design *
Когда большинство проектов давно находятся на стадии поддержки, а не разработки, то поддержание документации в актуальном виде зачастую не проводится. Тогда довольно полезно будет получить диаграмму UML по существующему коду. Это также необходимо в случае, если предпроектная документация велась не полностью или проектированию подвергались не все части системы. Вопрос особенно актуален, когда появляется новый разработчик.

В этой статье я рассмотрю 2 скрипта, реализованных на PHP:
  • Консольный скрипт php2xmi
  • Библиотека PHP_UML
Читать дальше →
Всего голосов 17: ↑15 и ↓2 +13
Комментарии 5

Компиляция страниц ASP.NET: генерация кода

Время на прочтение 10 мин
Количество просмотров 7.1K
.NET *
Сейчас пришла пора разобраться с тем, что происходит с кодом от момента написания ASPX/ASCX- разметки и CS-кода до момента их физического выполнения в виде некоторого скомпилированного кода на сервере.
Читать дальше →
Всего голосов 16: ↑10 и ↓6 +4
Комментарии 4

Компиляция. 6: промежуточный код

Время на прочтение 17 мин
Количество просмотров 9.8K
Программирование *
Первый этап — разбор синтаксиса нашего джей-скрипа — пройден; подбираемся к генерации кода.

Начнём с генерации п-кода (промежуточного переносимого псевдокода) — нечто вроде «абстрактного машинного языка». Его выбирают так, чтобы
  • его было легко генерировать;
  • его было легко обрабатывать.
Обработка п-кода — это, как правило, его переработка в исполнимый машинно-зависимый код. Тем не менее, можно ограничиться лишь генерацией п-кода, и объявить его готовой скомпилированной программой. Запуск такой программы будет, по сути, интерпретацией п-кода. У этого подхода всё больше и больше сторонников; так что и мы для начала ограничимся компиляцией в п-код.

Далее в посте:

  1. Выбор кода
  2. Компиляция
  3. Выполнение
  4. Backpatching
Читать дальше →
Всего голосов 53: ↑51 и ↓2 +49
Комментарии 14

Компиляция. 7: назначение регистров

Время на прочтение 18 мин
Количество просмотров 4.9K
Программирование *
File names are infinite in length, where infinity is set to 255 characters.
--Peter Collinson: The Unix File System

Итак, у нас есть программа на п-коде, и в её распоряжении неограниченное количество регистров (т.е. 255). Число регистров у реального процессора куда меньше (предположим, четыре). Что будем делать?

Далее в посте:

  1. Разбор п-кода
  2. Время жизни
  3. Реализация
  4. Простые оптимизации
  5. Расщепление версий
  6. Работа с памятью
  7. Что получилось?
Читать дальше →
Всего голосов 62: ↑60 и ↓2 +58
Комментарии 11

Компиляция. 9: исполняемый код

Время на прочтение 19 мин
Количество просмотров 5.5K
Программирование *
Напоминаю, что мы пишем компилятор для игрушечного языка джей-скрип. Начали с компиляции в п-код, потратили немало сил на его оптимизацию, и приготовились к заключительному этапу компиляции — к выводу машинно-зависимого выполнимого кода.
Никаких замысловатых алгоритмов тут уже нет: по большому счёту, только замена одной системы команд на другую.

Далее в посте:

  1. Выбор кода
  2. Загрузчик
  3. Изменения в п-коде
  4. Генерация
  5. Что получилось?
Читать дальше →
Всего голосов 53: ↑52 и ↓1 +51
Комментарии 10

Компиляция. 10: компиляция в ELF

Время на прочтение 13 мин
Количество просмотров 6.4K
Программирование *
В прошлый раз мы ограничились компиляцией джей-скрипа в файл в нашем собственном формате, которому требовался специальный загрузчик. Кроме того, мы задумали было пару оптимизаций исполнимого кода, требующих анализа соседних команд.

Далее в посте:

  1. Оптимизация «в глазок»
  2. Стандартные функции
  3. Вывод в ELF
  4. Как это работает?
  5. Что получилось?
Читать дальше →
Всего голосов 57: ↑55 и ↓2 +53
Комментарии 9

Инъекции MSIL кода в стороннюю сборку при помощи Mono.Cecil. Реализация принципов АОП в NET

Время на прочтение 12 мин
Количество просмотров 18K
.NET *
Из песочницы

Введение


В данной статье я расскажу про то, как можно добавлять свой код в существующие .NET сборки и о том, как это связано с аспектно-ориентированным программированием. Статья будет сопровождаться работающими примерами, так как я считаю, что код — это лучший способ донести идею.

Многие .NET разработчики знают, что для доступа к объектам чужой сборки можно использовать Reflection. С помощью типов из System.Reflection мы можем получить доступ ко многим объектам .NET сборки, просмотреть их метаданные, и даже использовать те объекты, доступ к которым ограничен (например, private методы чужого класса). Но использование Reflection имеет свои ограничения и главная причина этому — данные, с котороми вы работаете через Reflection, все еще считаются кодом. Таким образом, вы, к примеру, можете получить CodeAccessSecurity exception, если сборка, к которой вы пытаетесь применить Reflection, запрещает это. По этой же причине Reflection работает довольно медленно. Но наиболее важным для данной статьи является то, что стандартный Reflection не позволяет изменять существующие сборки, только генерировать и сохранять новые.

Mono.Cecil


Качественно иной подход предлагает бесплатная библиотека с открытым исходным кодом Mono.Cecil. Главное отличие подхода Mono.Cecil от подхода Reflection в том, что данная библиотка работает с NET сборкой как с потоком байт. При загрузке сборки, Mono.Cecil разбирает PE заголовок, CLR заголовок, MSIL код классов и методов и т.д. работая напрямую с потоком байтов, представляющим сборку. Таким образом, с помощью данной библиотеки можно как угодно (в пределах предусмотренного) изменять имеющуюся сборку.
Читать дальше →
Всего голосов 49: ↑45 и ↓4 +41
Комментарии 14

Безопасные платежи с помощью кодов ActivateTo (Часть I)

Время на прочтение 2 мин
Количество просмотров 1.3K
Блог компании PAYSTO
Онлайновая продажа товаров и удаленная работа, когда заказчик и исполнитель не встречаются лично, подразумевают некий риск. Даже при условии, что оплата произведена и продукт отправлен потребителю, средства или важные конфиденциальные данные могут перехватить или просто похитить с помощью фишинга, кардинга или фрода онлайновые мошенники. Безопасные и гарантированные платежи в закрытой среде необходимы, и в этом предпринимателям и потребителям их продуктов поможет услуга ActivateTo от PaySto.
Читать дальше →
Всего голосов 3: ↑1 и ↓2 -1
Комментарии 0

Безопасные платежи с помощью кодов ActivateTo (Часть II)

Время на прочтение 3 мин
Количество просмотров 1.3K
Блог компании PAYSTO
Первая часть описания сервиса ActivateTo была посвящена общим принципам его работы, тому, кто может стать его пользователем, и какие выгоды несет ActivateTo выбравшим его предпринимателям. Напомню, что благодаря этой услуге от компании PaySto продавцы веб-сервисов и товаров могут получать оплату в безопасной среде, с гарантией и максимальной выгодой для себя.
Читать дальше →
Всего голосов 5: ↑3 и ↓2 +1
Комментарии 0

Полуавтоматическая конвертация лени в код

Время на прочтение 7 мин
Количество просмотров 6.3K
Программирование *.NET *C# *
Всем доброго дня. Сегодня я хочу поговорить об автоматической генерации кода C#. Например, свойства в классах, описывающих сущности предметной области, обычно описываются по совершенно одинаковой схеме. И мне элементарно лениво писать для каждого примитивного свойства одинаковые конструкции. Немного спасает применение сниппетов и активных шаблонов, но когда приходит нужда что-то поменять в этой схеме, то приходится перелопачивать кучу кода. Так почему бы это однообразие не генерировать автоматически в процессе сборки?
В какой-то момент кинетическая энергия творчества ненадолго пересилила потенциальную энергию лени, и результатом этого стала маленькая библиотечка для автоматической генерации некоторых исходных файлов программы на основе внешних данных. Приглашаю под кат всех ленивых (в хорошем смысле этого слова) разработчиков на C#.
Читать дальше →
Всего голосов 33: ↑29 и ↓4 +25
Комментарии 17

DOM-библиотека Laconic

Время на прочтение 2 мин
Количество просмотров 1.1K
Разработка веб-сайтов *JavaScript *
Туториал
Перевод
Laconic обеспечивает интуитивный подход к генерированию DOM джаваскриптом. Исходный код Laconic выложен на Гитхабе.

При использовании стандартного DOM API для создания вложенных друг в друга элементов простой таблицы потребовался бы вот какой код:

ворох кода
var firstTh = document.createElement('th');
firstTh.appendChild(document.createTextNode('first name'));
var secondTh = document.createElement('th');
secondTh.appendChild(document.createTextNode('last name'));
var firstTr = document.createElement('tr');
firstTr.appendChild(firstTh);
firstTr.appendChild(secondTh);
var firstTd = document.createElement('td'); 
firstTd.appendChild(document.createTextNode('Joe'));
var secondTd = document.createElement('td'); 
secondTd.appendChild(document.createTextNode('Stelmach'));
var secondTr = document.createElement('tr');
secondTr.appendChild(firstTd);
secondTr.appendChild(secondTd);
var table = document.createElement('table');
table.appendChild(firstTr);
table.appendChild(secondTr);
document.body.appendChild(table);

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

$.el.table(
  $.el.tr(
    $.el.th('first name'),
    $.el.th('last name')),
  $.el.tr(
    $.el.td('Joe'),
    $.el.td('Stelmach'))
).appendTo(document.body);

Laconic добавляет в пространство имён $.el по одному методу для каждого из известных элементов HTML. Этим методам при их запуске передаётся список аргументов, имеющий переменную длину и состоящий из дочерних элементов, строк, чисел, или массивов элементов этих типов. Первым аргументом метода может быть необязательный объект, содержащий атрибуты элемента. Вот пример:

$.el.div({'class' : 'example'}, 
  $.el.div('content'));

Код этого примера создаст такую структуру элементов:

<div class='example'>
  <div>content<div/>
</div>

Читать дальше →
Всего голосов 22: ↑14 и ↓8 +6
Комментарии 14

DSL на JavaScript для C++ или кодгенератор — это просто!

Время на прочтение 8 мин
Количество просмотров 7.8K
Блог компании Acronis JavaScript *C++ *
С добрым понедельником, хабровчане!

Ковырялся давеча с одним универсальным, и потому до неприличного мощным, интерфейсом доступа к данным на Python-е. Неприличная мощь выражается в виде множества параметров на все случаи жизни, зачастую крайне экстравагантные и нужные только в 5% случаев. В итоге приходится дублировать всю пачку параметров и деталей даже в прямолинейных запросах, что вызывает пессимизм и желание заняться чем-то другим. И тут вспомнилась мне аналогичная история из моего далекого прошлого, которой и делюсь.

Читать дальше →
Всего голосов 16: ↑14 и ↓2 +12
Комментарии 3

Дилетант и back-инжиниринг. Часть 2: Каркас

Время на прочтение 15 мин
Количество просмотров 16K
Ненормальное программирование *C++ *C# *


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

Я пытаюсь восстановить исходники по .dll-библиотеке и .pdb-базе. Использование IDA конечно принесло кое-какие результаты, но не удовлетворительные. Возможно я просто недостаточно усидчив. Поэтому я начал с другой стороны — с восстановления каркаса проекта библиотеки. Так как у меня есть .pdb-база я вполне могу это сделать. Теоретически. Теоретически, потому что в базу записывается информация с препроцессированых файлов, а не с исходников. А значит нужно работать дальше.
Читать дальше →
Всего голосов 27: ↑20 и ↓7 +13
Комментарии 3

Быстрая и удобная генерация IL

Время на прочтение 14 мин
Количество просмотров 19K
Блог компании Контур .NET *Assembler *C# *
Из песочницы
Я много раз сталкивался с задачей динамической генерации кода (например, при написании эффективного сериализатора или компилятора DSL). Это можно делать разными способами, какой из них лучший – дискуссия для отдельной статьи. По ряду причин я предпочитаю Reflection.Emit и CIL (Common Intermediate Language) и расскажу, с какими проблемами пришлось столкнуться на этом пути, а также об их решении: умной обертке над ILGeneratorGroboIL из библиотеки Graceful Emit.

Хочу отметить при этом, что иногда встречаются ситуации, когда у нас нет большого выбора: например, при написании сериализатора необходимо иметь доступ к приватным полям, и приходится использовать IL. Кстати, известный сериализатор protobuf-net содержит несколько сотен IL-инструкций.

Если вы ни разу не сталкивались с использованием IL-кода, то статья может показаться сложной для понимания, поскольку содержит много примеров кода с использованием IL. Для получения базовых знаний рекомендую прочитать статью Introduction to IL Assembly Language.
Читать дальше →
Всего голосов 28: ↑27 и ↓1 +26
Комментарии 22

Как Python и Jinja могут облегчить жизнь FPGA разработчику

Время на прочтение 14 мин
Количество просмотров 18K
Разработка веб-сайтов *Python *Программирование *FPGA *
Всем привет!

Так бывает, что используемые языки программирования накладывают ограничение на то, что мы хотим сделать, доставляя неудобство при разработке. Что с этим делают разработчики? Либо смиряются, либо как-то пытаются выйти из положения.

Один из вариантов — использование автогенерации кода.

В этой статье я расскажу:
  • как можно обойти одно из ограничений языка Verilog, применяемого при разработке ASIC/FPGA, используя автогенерацию кода с помощью Python и библиотеки Jinja.
  • как можно ускорить разработку IP-ядер, сгенерировав модуль контрольно-статусных регистров из их описания.


Если интересно, добро пожаловать под кат!
Читать дальше →
Всего голосов 18: ↑17 и ↓1 +16
Комментарии 14

Автоматизированное тестирование контроллеров в Rails

Время на прочтение 5 мин
Количество просмотров 7.8K
Ruby *TDD *Ruby on Rails *
Recovery mode
Привет, Хабр! Давно манят меня лавры быть автором, и вот, наконец, настал тот светлый час, когда я допинал себя представить на твой суд мой небольшой опус.

Изучая на досуге Ruby и Rails, пробуя то RSpec, то вдруг Minitest, дошёл я до создания web-приложения с фронтэндом на JavaScript и бэкендом на Ruby, торчащим наружу REST API на базе обычных контроллеров Rails. Я использую Rails, хотя это совершенно не принципиально. Описанный ниже подход применить можно к чему угодно.

Тут следует сделать небольшое отступление. По натуре я человек требовательный, и всячески борюсь за доказанную стабильность кода (на словах-то уж точно). А уж когда речь заходит о безопасности пользователей в моём приложении, без тестов, хотя бы показывающих, что абы кто мои данные не получит, я чувствую себя совсем не комфортно. Начинаю грустить и вообще никакой код не писать. Даже если я — один-единственный пока пользователь.

Казалось бы, всё очень просто: берём RSpec и пишем тесты. Но это же скучно! Для каждого контроллера, для каждого поддерживаемого метода проверить, как минимум, что без выданного ранее токена пользователь получит от ворот поворот — это ж сколько одинакового кода надо написать! А дальше как? Контроллеров всё больше, тесты копировать скучно, да и в возможностях подходы менять я остаюсь ограничен. Пойди-ка все эти тесты потом перепиши, если я захочу, например, версию API передавать не в URL, а в заголовке, или наоборот. В общем, задумал я написать генератор.
Постановка задачи
Всего голосов 12: ↑9 и ↓3 +6
Комментарии 12
1