Pull to refresh

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

Open source *Programming *Perfect code *Delirium coding GitHub *

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

Читать далее
Total votes 15: ↑14 and ↓1 +13
Views 5.2K
Comments 8

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

ЦИТМ Экспонента corporate blog C *Industrial Programming *Programming microcontrollers *Matlab *

Всем привет!

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

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

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

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

Читать далее
Total votes 4: ↑2 and ↓2 0
Views 770
Comments 0

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

Programming *Machine learning *Artificial Intelligence

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

Читать далее
Total votes 21: ↑6 and ↓15 -9
Views 9K
Comments 9

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

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

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

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

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

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

Programming *
Первый этап — разбор синтаксиса нашего джей-скрипа — пройден; подбираемся к генерации кода.

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

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

  1. Выбор кода
  2. Компиляция
  3. Выполнение
  4. Backpatching
Читать дальше →
Total votes 53: ↑51 and ↓2 +49
Views 9.7K
Comments 14

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

Programming *
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. Что получилось?
Читать дальше →
Total votes 62: ↑60 and ↓2 +58
Views 4.9K
Comments 11

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

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

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

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

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

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

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

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

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

.NET *
Sandbox

Введение


В данной статье я расскажу про то, как можно добавлять свой код в существующие .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 код классов и методов и т.д. работая напрямую с потоком байтов, представляющим сборку. Таким образом, с помощью данной библиотеки можно как угодно (в пределах предусмотренного) изменять имеющуюся сборку.
Читать дальше →
Total votes 49: ↑45 and ↓4 +41
Views 18K
Comments 14

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

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

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

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

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

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

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

Website development *JavaScript *
Tutorial
Translation
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>

Читать дальше →
Total votes 22: ↑14 and ↓8 +6
Views 1.1K
Comments 14

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

Acronis corporate blog JavaScript *C++ *
С добрым понедельником, хабровчане!

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

Читать дальше →
Total votes 16: ↑14 and ↓2 +12
Views 7.8K
Comments 3

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

Abnormal programming *C++ *C# *


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

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

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

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

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

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

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

Website development *Python *Programming *FPGA *
Всем привет!

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

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

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


Если интересно, добро пожаловать под кат!
Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Views 18K
Comments 14

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

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

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

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

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

Конечные автоматы в среде динамического моделирования SimInTech. Часть 3. Переходим к коду Си

Programming *System Analysis and Design *C *Industrial Programming *SCADA *
Tutorial
В первой и второй части была рассмотрен пример создания системы управления на основе логики «конечных автоматов» и создана модель регулятора нагревателя.

В этой части будет показано как из SimInTech сгенерировать код Си, реализующий программу управления на основе логики «конечных автоматов», а потом отдалить в MS Visual Studio 2015 совместно с моделью объекта в SimInTech.
Читать дальше →
Total votes 9: ↑9 and ↓0 +9
Views 9.6K
Comments 8
1