Code Mining
887 subscribers
80 photos
4 videos
8 files
156 links
ML4Code во всей красе, анализ кода и артефактов: лицензии, уязвимости, процессы. Комментарии к актуальным и не очень новостям, аналитика, эпизодический авторский контент, мемасики.

При поддержке: ods.ai, @codescoring
По вопросам — @alsmirn
Download Telegram
Нейросетевое автодополнение для языка R

Видео:
https://www.youtube.com/watch?v=agd9FcGbxN0

Продолжая традицию #видоснавыходные, предлагаем посмотреть видео с выступления Артёма Попова из JetBrains на Data Fest 2021 с рассказом про чудеса автокомплита на трансформерах в любимом отдельными сообществами языке R (Аррр! Рыыы!).

Тезисы от Артёма:
 - мы сделали систему автодополнения кода для R на основе трансформеров, работающую локально на компьютере пользователя;
- какие трюки мы применяли для того, чтобы ускорить и улучшить нашу систему автодополнения;
- с какими трудностями мы столкнулись и как их преодолевали.


Лайки, репосты, все дела 😏.
Эзотерика в программировании и лайвкодинг

Помимо всяких объектно-ориентированных, процедурных, функциональных и т.п. языков программирования, существуют эзотерические языки программирования призванные исследовать границы возможностей разработки языков программирования, доказать концепцию или в качестве произведения программного искусства (или шуточки всякие).

Возможно вы сталкивались с такими как Brainfuck или LOLCODE.

Мы вот тут наткнулись на язычок Orca, с крутой командой разработки и годной философией :).

Orca написана на языке Uxntal, тоже интересный сорт человеко-читаемого ассемблера, который также заслуживает отдельного поста.

Зачем? Для лайвкодинга, например для музыкописателей, примерчик можно посмотреть на видео тут или тут.

Синтаксис кайфовенький, прям. Одна команда - одна буква:
A add(a b): Outputs sum of inputs.
B subtract(a b): Outputs difference of inputs.
C clock(rate mod): Outputs modulo of frame.
D delay(rate mod): Bangs on modulo of frame.

Ну няка же, да?

#языкибываютразные
для атмосферки.
Наброс про безопасную разработку

На нашем курсе по лицензированию свободного программного обеспечения нас спросили: "а что же бывает/делать, если авторы удалили зависимость, которой я пользуюсь в своем проекте?".

С одной стороны, многие (но далеко не все) пакетные индексы имеют зеркала и можно попытаться найти зависимость там. С другой стороны, вы можете вести свою систему хранения используемых артефактов разработки.

С другой стороны, если авторы удаленного пакета ничего не сказали про использование оставшихся копий, то с точки зрения лицензии ничего страшного не произойдет (главное, чтобы она была).

Тем не менее, вспоминаются новости, когда незначимые (11 строк кода, Карл!) npm пакета удалились авторами и у всего мира попадали билды. И весь разработческий мир даже на секундочку задумался о том, что же они потребляют из Open Source и зачем это всё.

Мы уже писали про попытки сделать индексы критичности проектов, но в широкие массы практика проверки сторонних пакетов пока не заходит. Кто-то слышал про SCA (Software Composition Analysis), но пока петух не клюнет.

Вот и ещё шикарная новость из прошлого месяца: довольно используемый (7 млн. загрузок в неделю) пакетик ua-parser-js был взломан. Тредик на Github и Reddit.

Неплохие мысли можно о безопасности фронтовых решений можно почитать тут, но это всё только начало.

Короче, Stay safe.
Cue Data Validation Language

Для тех, кто много работает с конфигами и иными мета-данными в форматах json, yaml и т. п. весьма себе может пригодиться язык CUE (сокращение от Configure Unify Execute).

Может применяться для type-чекинга, задания и проверки схемы данных, кодогенерации (Go, Protobuf), конвертации yaml<->json, поиска по структурам и скриптования всякого.

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

Документация тута. Написан на Go, код можно посмотреть на Github.

#языкибываютразные
jq - легковесный json-процессор

Как быстро поработать с json не прибегая к написанию кода на python (ну например)?

https://stedolan.github.io/jq/

Обалденная тула, которая экономит кучу времени людям работающим со слабоструктурированными машиночитаемыми данными.

Простейший язык запросов в командной строке (хоть к нему нужно и привыкнуть), с хорошей документаицей.

Те, кто работал с sed или awk должны особенно проникнуться ;).

Пара примеров, и вперед, упрощать себе жизнь!

Выбор по ключу
jq '.foo'

Input {"foo": 42, "bar": "less interesting data"}
Output 42

Объединение списков
jq '.a + .b'

Input {"a": [1,2], "b": [3,4]}
Output [1,2,3,4]

Можно многое, короче.

Да, есть онлайн-чекалка.
Добавим ещё полезную обучалку.

#языкибываютразные
Неопределённое поведение: зачем создатели языков заставляют программистов страдать

Сomputer Science Center проводит открытую лекцию Макса Казанцева, Senior Compiler Engineer в Azul Systems.

Лекция пройдёт 20 ноября в смешанном формате: онлайн и очно в НГУ — Новосибирск, ул. Пирогова д. 1, ауд. 2128. Начало в 16:20 НСК (12:20 МСК).

Регистрация: https://compscicenter.timepad.ru/event/1838918/

Программные ошибки, вызванные неопределённым поведением, стоили человечеству миллиарды долларов и миллионы человеко-часов, потраченных на их поиск и исправление. Так зачем же создатели языков программирования так упорно оставляют место для неопределённостей? В этой лекции мы поговорим о тех выгодах, которые языкам даёт возможность «отстрелить себе ногу».

Слушателям достаточно иметь базовые представления о программировании на С++.
GSoC 2022. Теперь не только для студентов!

Пруф.

Из интересной статистики, за всё время существования программы (а она идет с 2005 года), участники написали более 38 млн. строк кода для 715 open source организаций. Т. е. уже больше чем строк в Линукс-ядре. Короче, есть что проанализировать ;).

Каждый год поддерживается более тысячи проектов, вот например проекты 2021 года. Тут и проекты Python Software Foundation и Apache Foundation, есть и поменьше, но не менее интересные.

Короче, если вы не студент, теперь можно.
AWK

Мы уже упоминали awk и sed, так вот, сегодня про первый ;).

Многие относятся к AWK как к тулзе, но немногие знают, что на нем можно прям полноценно писать программы. Весь синтаксис описан в man pages, с огромным количеством примеров и пояснений. Открываешь и пишешь.

Первая версия была разработана ещё в далеком 1977 году небезызвестными создателями: Aho, Weinberger и Kernighan. Да, есть ещё GNU версия, которая называется GAWK, но по сути различия в реализации минимальные.

Что важно знать. Если вам нужно обработать текстовый файл, то далеко не всегда нужно хвататься на python или другие языки, кажущиеся весьма подходящими и для простых задач. Также удобно использовать awk, как и sed в командной строке при соединении в pipe.

Намного быстрее написать one-liner на awk. Умение в синтаксис тренируется за пару вечеров, а потом экономит вам килограммы времени!

Кто не готов читать маны :/, то неплохие статьи есть на хабре, opennet и особенно здесь, по-английски.

#языкибываютразные
Catala - A Programming Language for the Law

И завершая неделю рубрики #языкибываютразные, хотим познакомить вас с предметно-ориентированным языком (DSL), который может заинтересовать тех, кто наводит мосты между юридической формалистикой и миром программирования.

https://catala-lang.org/

Несмотря на относительно смешное, особенно в контексте применения, название, язык назван в честь профессора Пьера Катала, пионера легалтеха в конце 60х годов.

Возможности:
- унифицировать определения;
- проводить формализацию и проверку законов;
- производить соответствующие расчеты и проверку логики.

Язык фундаментален, разрабатывается группой специалистов из French National Research Institute for Computer Science (Inria) и Microsoft Research. Французские корни повсюду, в примерах, в документации, в текстах коммитов, но не сильно мешает восприятию.

Реализация: OCaml & Python.

Github | Syntax | Paper

ЗЫ: вот мы тут задумались, а насколько Catala может помочь в анализе текстов лицензий? Обсудим в комментариях?
T[HR]eads: извлекаем инсайды из переписок технарей и рекрутеров

Продолжая традицию #видоснавыходные, предлагаем посмотреть видео с выступления Михаила Кириллова на Data Fest 2020 с рассказом про анализ почтовой переписки разработчиков и рекрутеров.

Видео: https://www.youtube.com/watch?v=69aXIR1g-LM

Несмотря на то, что мы тут про #codemining, анализ артефактов разработки, таких как тикеты, коммиты и даже почта являются его частью, хоть чаще уходит в такое направление как #processmining. О нем мы ещё обязательно напишем, а пока предлагаем познакомиться с исследованием ребят.

Тезисы от Михаила:
В докладе приводится результат анализа датасета переписки рекрутера и кандидатов ИТ-области. Анализ, в большей степени, классически-статистический, но с применением подходов обработки естественного языка, от токенизации до оценки тональности специализированных текстов. Авторы рассуждают о пользе применения примененных подходов в части оптимизации процессов рекрутмента и делают соответствующие выводы ;)


Лайки, репосты, все дела 😏.
Code Mining
Итак, сегодня, в 19:00 продолжаем курс. Подключиться можно по ссылке: live.ods.ai. Пароль Odscoursefest1. Или прям жмякать по ссылке: https://spatial.chat/s/ods?sp=Odscoursefest1 ЗЫ: мы понимаем, что вы подписывались про канал про ML4Code, скоро пойдут…
02. Open Source Licensing Course. Lecture.pdf
1.8 MB
Делимся слайдами со второй лекции по лицензированию.

Внутри:
- разбор лицензионной чистоты на примере пакета requests
- что делать когда лицензия отсутствует
- какие бывают кастомные нашлепки к лиц. соглашениям
- как учитывать патенты
- как учитывать окружения зависимостей
- какие бывают случаи смены лицензии на примере PonyORM

Предварительно-заключительная лекция будет 18 ноября. До встречи!
ML4Code — большая подборка материалов

Огромная подборка статей, образовательных материалов и эвентов в области ML4Code.

Регулярно обновляется в соответствующем репозитории.

В мемориз, однозначно.
sed — Stream EDitor

Продолжая рубрику #языкибываютразные, напишем про ещё один прекрасный язык и больше-таки инструмент, sed.

Разработан в 1973-1974 годах сотрудником Bell Labs Ли Макмэхоном под UNIX. Синтаксис с тех пор почти не изменился, а востребванность только возросла ;).

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

Всё просто. Отфильтровать, заменить/удалить по шаблону или регулярному выражению, провести хитрые перестановки, это то, зачем вам может быть полезен sed.

Как и всегда, welcome to man pages, но есть и полезные статейки. Например по-русски тут или хорошая коллекция вариантов ежедневного применения на github.
Очередной перенос лекции по лицензированию :/

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

Лекция переносится на 25.11 (тоже четверг).

Тем не менее, наш эксперимент с домашними заданиями продолжается. У нас было два ДЗ, и мы уже получили первые решения (СПАСИБО!).

ДЗ №1. Ручная проверка лицензионной совместимости пакетов django, requests, ignite или выбрать свой. Подробности в слайдах первой лекции.

ДЗ №2. Использовать все доступные средства, чтобы найти open source проекты, в которых действительно происходит передача патентных прав. Подробности в слайдах второй лекции.

Решения направлять на почту Алексею: alexey@profiscope.io.
Code Mining pinned «Очередной перенос лекции по лицензированию :/ Волевым решением, мы снова переносим лекцию, которая была запланирована на завтра (18.11.21). Наш замечательный курс ещё находится в стадии разработки, поэтому многие идеи и материалы рождаются на ходу и требуют…»
Что такое PURL?
#словарькодмайнера

Питонист работает с PyPi и легко ориентируется в названиях подключаемых пакетов. Фронтендер аналогично работает с NPM. Но что если вам надо в рамках одной системы хранить, использовать и различать пакеты из разных экосистем?

Эту задачу и призван решить PURL — package "mostly universal" URL, т.е. практически универсальный URL (идентификатор) пакета. Это далеко не единственная, но наш взгляд одна из самых удачных схем идентификации пакетов, применимая к любому пакетному менеджеру и технологии.

Идентификатор составляют семь компонентов, объединённых в строку:
scheme:type/namespace/name@version?qualifiers#subpath

```- scheme — константа со значением pkg
- type — обозначение пакетного менеджера (из словаря)
- namespace — например, groupId в Maven
- name и version говорят сами за себя
- qualifiers — дополнительная опциональная информация, например указание на архитектуру или операционную систему
- subpath — опциональный путь внутри пакета, относительно его корня

На примерах:


pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie
pkg:gem/ruby-advisory-db-check@0.12.4
pkg:github/package-url/purl-spec@244fd47e07d1004f0aed9c
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?packaging=sources
pkg:npm/foobar@12.3.1
pkg:nuget/EnterpriseLibrary.Common@6.0.1304
pkg:pypi/django@1.11.1
`

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

Подробно изучить стандарт можно по ссылке: https://github.com/package-url/purl-spec
Ключевые моменты из The Forrester Wave: Software Composition Analysis, Q3 2021

https://reprints2.forrester.com/#/assets/2/425/RES176091/report

Отчёт оценивает 10 ключевых игроков на рынке SCA по 37 параметрам из трёх групп: текущее предложение, стратегия, доля рынка. У каждого из представленных участников есть enterprise решения по компонентному анализу и минимум $10 млн выручки за эти продукты.

- средний процент использования open source библиотек в коде вырос с 36% в 2015 до 75% в 2020 году, важность мониторинга уязвимостей и соответствия этих библиотек внутрикорпоративным политикам растёт

- недавний приказ в США обязал всех поставщиков софта государству составлять и сдавать SBOM (Software Bill of Materials) в форматах SPDX или CycloneDx. SBOM — полный список, используемых сторонних компонент с информацией по их лицензиям, авторам и уязвимостям

- самые перспективные фичи SCA провайдеров:
- находить и анализировать не только open source, но и бинарные, непроприетарные компоненты и элементы инфраструктуры
- автоматизировать обновления и фиксы, при этом давать подробную информацию по изменениям и рискам программистам

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

- следом идут
- SonaType с целой линейкой дополняющих продуктов и фокусом на комплексное управление политиками вокруг компонентов
- Snyk с сильным упором на удобство разработчиков, интеграции и глубину анализа уязвимостей
- Veracode со стремлением объединить SCA с функциями SAST (статический анализ на уязвимости)

- из интересных чисел:
- несмотря на свою точность Black Duck получил всего 1 из 5 за качество отчётов
- WS при этом почему-то получил 1 из 5 за подход к рынку
- самые крутые отчёты, похоже, у Snyk, а пользователей больше всего у Sonatype
- прибыльность получила всего 3% веса в разделе стратегии, что кажется очень мало, если мы говорим про бизнес.
Open Source Licensing Course, final

Вот мы и на финишной прямой курса.
Сегодня в 19:00 заключительная лекция.

План лекции:
- множественное и двойное лицензирование;
- картина лицензирования в PyPI и в Data Science;
- свободные и несвободные инструменты для лицензионной чистоты проектов и как с ними работать в рамках CI/CD;
- подведение итогов по домашним заданиям;
- discussion по теме.

Если останутся откртые вопросы, допускаем, что сделаем ещё одну лекцию. Ну а если без вопросов, то мы уже сфокусируемся на записи видосов для широкого распространения.

Встречаемся сегодня в 19:00 в Spatial Chat,
по ссылке: https://spatial.chat/s/ods?sp=Odscoursefest1