Как стать автором
Обновить
142
0
Виктор @TyVik

Full-stack developer

Отправить сообщение

Что делает ChatGPT… и почему это работает?

Уровень сложности Средний
Время на прочтение 75 мин
Количество просмотров 145K

То, что ChatGPT может автоматически генерировать что-то, что хотя бы на первый взгляд похоже на написанный человеком текст, удивительно и неожиданно. Но как он это делает? И почему это работает? Цель этой статьи - дать приблизительное описание того, что происходит внутри ChatGPT, а затем исследовать, почему он может так хорошо справляться с созданием более-менее осмысленного текста. С самого начала я должен сказать, что собираюсь сосредоточиться на общей картине происходящего, и хотя я упомяну некоторые инженерные детали, но не буду глубоко в них вникать. (Примеры в статье применимы как к другим современным "большим языковым моделям" (LLM), так и к ChatGPT).

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

У вас нет причин использовать alpine для python-проектов

Время на прочтение 9 мин
Количество просмотров 10K

По мотивам моего доклада на PyCon "Контейнеризация Python без боли". На своей практике я постоянно сталкиваюсь со спорами какой базовый образ лучше использовать для проектов: alpine или debian. Аргументы есть и у той, и у другой стороны, но мне это настолько надоело, что я решил сам разобраться и наконец-то поставить точку. В конце концов "В наше время верить нельзя никому, даже себе. Но мне - можно." (с)

Читать далее
Всего голосов 19: ↑17 и ↓2 +15
Комментарии 20

Работа над PEG на Core Developer Sprint

Время на прочтение 7 мин
Количество просмотров 1.1K

В этой статье я не буду рассказывать о новых фичах генератора парсера — я достаточно описал его в предыдущих частях. Вместо этого хочу рассказать что я делал на Core Developer Sprint на прошлой неделе, прежде чем всё сотрётся из моей памяти. Хотя большая часть материала так или иначе всё равно касается PEG. Так что мне придётся показать некоторый код, который задаёт направление в реализации PEG-парсера для Python 3.9.



Каждый год в течение последних четырёх лет группа разработчиков ядра Python собирается на недельный спринт в экзотическом месте. Эти спринты спонсируются принимающей стороной и PSF. Первые два года мы были у Facebook в Mountain View, в прошлом году была очередь Microsoft в Bellevue, а на этот спринт выбрали офис Bloomberg в Лондоне. (Должен сказать, что он выглядит довольно круто.) Слава core-разработчику Pablo Galindo Salgado за организацию!

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

Реализация остальных возможностей PEG

Время на прочтение 6 мин
Количество просмотров 1.6K

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



Мы рассмотрим следующие фичи PEG:

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

Мета-грамматика для PEG парсера

Время на прочтение 8 мин
Количество просмотров 1.7K

На этой неделе мы делаем генератор парсеров «самостоятельным», то есть он будет генерировать свой собственный парсер.



Итак, у нас уже есть генератор парсера, часть которого является парсером грамматики. Мы могли бы назвать это мета-парсером. Мета-парсер работает аналогично сгенерированным: GrammarParser наследуется от Parser и использует тот же механизм mark() / reset() / hope(). Тем не менее, там всё это было написано вручную. Но правильно ли это?

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

Добавление экшенов в грамматику PEG

Время на прочтение 3 мин
Количество просмотров 1.2K

Грамматика становится ещё лучше, если вы можете добавить (некоторую) семантику в соответствии с правилами. В частности, для анализатора Python, который я разрабатываю, мне нужно возвращать узел AST из каждой альтернативы, поскольку я хочу придерживаться текущей реализации AST в CPython.



Многие грамматики используют соглашение, позволяющее добавлять экшены к правилам — обычно это блок кода внутри {фигурных скобок}. Точнее, они привязаны к альтернативам. Код в этом блоке пишется на том же языке, что и остальной компилятор, например, на C, дополненный некоторой возможностью ссылки на элементы в альтернативе. В оригинальном pgen Python я не добавил этот функционал, но для нового проекта мне бы хотелось его реализовать.

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

Леворекурсивные PEG грамматики

Время на прочтение 9 мин
Количество просмотров 3.8K

Я упоминал о левой рекурсии как о камне преткновения несколько раз, и пришло время разобраться с этим. Основная проблема заключается в том, что парсер с лево-рекурсивным спуском мгновенно падает из-за переполнения стека.



Рассмотрим это гипотетическое правило грамматики:


expr: expr '+' term | term
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 1

Визуализация работы PEG парсера

Время на прочтение 4 мин
Количество просмотров 2.5K

В прошлый раз получился простой генератор парсера PEG. Сейчас же я покажу, что на самом деле делает сгенерированный парсер при разборе программы. Я погрузился в ретро-мир ASCII-арта, в частности, библиотеку с именем «curses», которая доступна в стандартной поставке Python для Linux и Mac, а также как дополнение для Windows.




<В конце статьи под спойлером приводится gif. Мне он показался более понятным, нежели статичная картинка>

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

Генерация PEG-парсера

Время на прочтение 6 мин
Количество просмотров 2.3K

Теперь, когда я набросал основу самописного парсера, давайте перейдём к генерации его методов из грамматики, как я и обещал. Также покажу как реализовать packrat-парсер с помощью декоратора @memoize.



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

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

Реализация PEG парсера

Время на прочтение 8 мин
Количество просмотров 5.2K

Вдохновленный лишь частичным пониманием PEG, я решил попробовать его реализовать. Результат может получиться и не самым лучшим среди парсеров PEG общего назначения — их уже много (например, TatSu написан на Python и генерирует код Python) — но это хороший способ разобраться в PEG. В дальнейшем я хочу заменить им текущую реализацию парсера в CPython.



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

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

PEG парсеры

Время на прочтение 7 мин
Количество просмотров 13K

Несколько лет назад меня кто-то спросил имеет ли смысл превести Python на PEG-парсер (или на грамматику PEG; я не помню точно кто и когда это было). Тогда я немного посмотрел на него, но так и не пришёл к какому-либо выводу, а потому и отбросил эту тему. Недавно я узнал больше о PEG (Parsing Expression Grammars, грамматике по парсингу выражений), и теперь я думаю, что это интересная альтернатива самописному генератору парсеров, который был разработан 30 лет назад, когда только начинал работать над Python. Я назвал его «pgen», и это был, наверно, первым фрагментом кода, который я написал для Python.



Причина, по которой я сейчас заинтересован в парсере PEG, заключается в том, что меня несколько раздражают ограничения pgen. Он построен на собственной реализации LL(1), которая имеет ряд допущений. Например, мне не нравились грамматические правила, которые могли бы генерировать пустые строки, поэтому я запретил их. И тем самым упростил алгоритм для создания таблиц синтаксического анализа. Я также изобрёл свою собственную EBNF-подобную грамматическую нотацию, которая мне до сих пор очень нравится.

Читать дальше →
Всего голосов 25: ↑25 и ↓0 +25
Комментарии 9

GeoPuzzle — собери мир по кусочкам

Время на прочтение 11 мин
Количество просмотров 15K
image

Хочу рассказать о проекте, который развивал последние пару лет. Называется он GeoPuzzle и представляет собой игру-паззл на политической карте мира. Цель — расставить кусочки-страны на свои места. Идея подсмотрена в статье «Головоломка Mercator для знатоков географии», также в детстве играл в тетрис из стран (ещё под DOS), но название программы уже не припомню. Я был настолько вдохновлён идеей, что захотел сделать полноценный продукт, интересный не только школьникам, но и знатокам географии. За развитием проекта можно наблюдать на GitHub.
Читать дальше →
Всего голосов 57: ↑53 и ↓4 +49
Комментарии 44

AsyncIO для практикующего python-разработчика

Время на прочтение 16 мин
Количество просмотров 380K
Я помню тот момент, когда подумал «Как же медленно всё работает, что если я распараллелю вызовы?», а спустя 3 дня, взглянув на код, ничего не мог понять в жуткой каше из потоков, синхронизаторов и функций обратного вызова.

Тогда я познакомился с asyncio, и всё изменилось.
Читать дальше →
Всего голосов 22: ↑21 и ↓1 +20
Комментарии 12

Получаем фотографии NASA с Марса с помощью aiohttp

Время на прочтение 5 мин
Количество просмотров 14K
Я большой фанат книги «Марсианин» Энди Вейера. Читая её, мне было интересно, что же Марк Уотни чувствовал, гуляя по красной планете. Недавно наткнулся на пост на Twillo, в котором упоминалось, что у NASA есть публичный API для доступа к фотографиям с марсоходов. Так что я решил написать собственное приложение для просмотра изображений непосредственно в браузере.
Читать дальше →
Всего голосов 15: ↑15 и ↓0 +15
Комментарии 0

Да, Python медленный, но меня это не волнует

Время на прочтение 9 мин
Количество просмотров 76K
Разговоры о снижении производительности ради продуктивности.


Я беру паузу в моём обсуждении asyncio в Python, чтобы поговорить о скорости Python. Позвольте представиться, я — ярый поклонник Python, и использую его везде, где только удаётся. Одна из причин, почему люди выступают против этого языка, — то, что он медленный. Некоторые отказываются даже попробовать на нём поработать лишь из-за того, что «X быстрее». Вот мои мысли на этот счёт.
Читать дальше →
Всего голосов 84: ↑64 и ↓20 +44
Комментарии 223

Совместная доработка открытого ПО

Время на прочтение 1 мин
Количество просмотров 595
Здравствуйте, Хабравчане! Выношу на ваш суд идею, которая может показаться интересной (а может и нет). Сам я являюсь пользователем открытого ПО. Порой мне не хватает какой-нибудь мелочи — кнопочку повесить, новый раздел в программу добавить… Открытое ПО тем и замечательно, что такая возможность есть, но, как всегда бывает, нет времени. Мне легче заплатить 50 руб. кому-нибудь за такое.
Читать дальше →
Всего голосов 11: ↑9 и ↓2 +7
Комментарии 9

Информация

В рейтинге
5 108-й
Откуда
Краснодар, Краснодарский край, Россия
Дата рождения
Зарегистрирован
Активность