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

Full-stack developer

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

Собеседование в энтерпрайз

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров8.9K

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

Читать далее
Всего голосов 20: ↑18 и ↓2+21
Комментарии39

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

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

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

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

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

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

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

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

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

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

В этой статье я не буду рассказывать о новых фичах генератора парсера — я достаточно описал его в предыдущих частях. Вместо этого хочу рассказать что я делал на 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 мин
Количество просмотров4K

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



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


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

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

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

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




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

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

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

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

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



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

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

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

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

Вдохновленный лишь частичным пониманием 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 мин
Количество просмотров16K
image

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

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

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

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

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

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

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

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


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

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

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

Информация

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