Search
Write a publication
Pull to refresh
3
0.1
Павел @WebPeople

Менеджер проектов

Send message

Введение в аннотации типов Python

Reading time6 min
Views324K

Введение



Автор иллюстрации — Magdalena Tomczyk


Вторая часть


Python — язык с динамической типизацией и позволяет нам довольно вольно оперировать переменными разных типов. Однако при написании кода мы так или иначе предполагаем переменные каких типов будут использоваться (это может быть вызвано ограничением алгоритма или бизнес логики). И для корректной работы программы нам важно как можно раньше найти ошибки, связанные с передачей данных неверного типа.


Сохраняя идею динамической утиной типизации в современных версиях Python (3.6+) поддерживает аннотации типов переменных, полей класса, аргументов и возвращаемых значений функций:



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


Меня зовут Тихонов Андрей и я занимаюсь backend-разработкой в Lamoda.


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

Читать дальше →

Механика Async Await

Reading time8 min
Views9.1K
В этом посте исследована механика async await на языке Elixir. Принятая в Elixir модель конкурентности отлично подходит в качестве платформы для реализации такой механики. Тем не менее, не расценивайте этот пост как руководство для разработки реальных приложений на Elixir.

Код к этому посту выложен на GitHub
Читать дальше →

Реальность обладает поразительным числом деталей

Level of difficultyEasy
Reading time12 min
Views16K

Мой отец эмигрировал из Колумбии в Северную Америку, когда ему было 18. Сделал он это в поисках лучшей жизни. Для меня и моего брата это значило — проводить много времени на уличном холоде. Отец выбрал путь улучшения своей судьбы через улучшение того, что его окружает. Меня и брата «добровольно» завербовали в помощники по работам над принадлежащими нам постройками.

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

Читать далее

Как эффективно самостоятельно изучать английский язык

Level of difficultyEasy
Reading time8 min
Views55K

Читатели Хабра, категорически вас приветствую! В этой статье я хочу поделиться с вами моделью эффективного изучения английского языка, которую я постарался сформировать исходя из своего n-летнего опыта его изучения.

Расскажу вам насколько это актуально, с чего начать, какие ресурсы и приемы использовать и как эффективно достичь результата.

Читать далее

Дерево решений (CART). От теоретических основ до продвинутых техник и реализации с нуля на Python

Level of difficultyHard
Reading time22 min
Views16K

Дерево решений CART (Classification and Regressoin Tree) — алгоритм классификации и регрессии, основанный на бинарном дереве и являющийся фундаментальным компонентом случайного леса и бустингов, которые входят в число самых мощных алгоритмов машинного обучения на сегодняшний день. Деревья также могут быть не бинарными в зависимости от реализации. К другим популярным реализациям решающего дерева относятся следующие: ID3, C4.5, C5.0.

Читать далее

Импортозамещение, которое мы потеряли: «Сетунь» — судьба первых серийных троичных компьютеров

Level of difficultyEasy
Reading time16 min
Views28K

Многие знают, что СССР был родиной т. н. «троичных машин», т. е. компьютеров, использующих не двоичную, а троичную систему счисления. Они стали уникальной страницей в истории вычислительной техники. Единственный серийный и самый известный пример троичной ЭВМ — советский компьютер «Сетунь», разработанный в 1958 году под руководством Николая Брусенцова, при активном участии Льва Гутенмахера, Сергея Соболева и Евгения Жоголева.

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

Осторожно лонгрид

Как быть эффективным?

Level of difficultyEasy
Reading time11 min
Views16K

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

Наливайте чай, присаживайтесь поудобнее и жмите кнопку "I want to know this!".

I want to know this!

Смысл жизни с точки зрения программиста-буддиста

Level of difficultyEasy
Reading time24 min
Views15K

Несколько лет тому назад я опубликовал на Хабре статью под названием "Буддизм с точки зрения программиста". Этот пост имел огромную популярность, читатели приняли его с большой теплотой. До сих пор я часто получаю от людей сообщения с благодарными отзывами на него и рассказами о том, как после прочтения этого текста поменялись их взгляды на жизнь.

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

Читать далее

Используем GPG для шифрования сообщений и файлов

Reading time9 min
Views194K

Кратко о том, как создавать ключи, шифровать и подписывать файлы и отправлять ключи на сервер ключей.



GPG (также известный как GnuPG) создавался как свободная альтернатива несвободному PGP. GPG используется для шифрования информации и предоставляет различные алгоритмы (RSA, DSA, AES и др.) для решения этой задачи.

Читать дальше →

Разбираемся в АА-деревьях (Python)

Level of difficultyHard
Reading time7 min
Views7.3K

АА-дерево - это модификация красно-черного дерева с целью упрощения реализации

Как его реализовать и как оно работает на конкретных примерах - вот о чем эта статья

Читать далее

Тест: сумеете ли вы стать junior QA в большой компании

Level of difficultyEasy
Reading time1 min
Views21K

Собеседоваться в большие IT-компании страшно — вдруг завалят каверзными задачами и съедят? Чтобы развеять страхи, три крупные компании — «Альфа-Банк», «Цифра» и «Лаборатория Касперского» — сделали для Хабра этот тест.  Попробовать себя в роли кандидата на junior QA несложно: выберите любую компанию и посмотрите, какие вопросы в них задают, на что обращают внимание, как оценивают и что считают важным.

Читать далее

Итак, вы унаследовали старую кодовую базу на C++. Что дальше?

Level of difficultyMedium
Reading time21 min
Views16K

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

Теперь вы отвечаете за кодовую базу на C++. Она большая, сложная и своеобразная; достаточно слишком долго на неё посмотреть, как она начинает разваливаться разными интересными способами. Иными словами, это легаси.

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

И что делать теперь?

Не волнуйтесь, у меня такое случалось очень много раз и в разных компаниях (кто-то язвительный может спросить: а разве кодовые базы на C++ бывают какими-то другими?), выход есть, он не особо сложен и поможет вам действительно устранять баги, добавлять фичи, а то и когда-нибудь переписать её.

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

Gemini ➜ OpenAI API прокси. Serverless

Level of difficultyEasy
Reading time2 min
Views11K

API Gemini бесплатен, но существует множество инструментов, которые работают исключительно с API OpenAI.

Проект openai-gemini даёт позволяет с лёгкостью создать персональный Gemini API-endpoint, совместимый с OpenAI, бесплатно.

Читать далее

Азы больших языковых моделей и трансформеров: декодер

Level of difficultyHard
Reading time14 min
Views10K

В этом материале мы поговорим об устройстве компонента‑декодера в системах машинного обучения, построенных по архитектуре «трансформер», уделив особое внимание отличию декодера от энкодера. Уникальной особенностью декодеров является то, что они похожи на циклы. Они, по своей природе, итеративны, что контрастирует с линейными принципами обработки данных, на которых основаны энкодеры. В центре декодера находятся две модифицированные формы механизма внимания: механизм множественного внимания с маскировкой (masked multi‑head attention) и механизм множественного внимания энкодера‑декодера (encoder‑decoder multi‑head attention).

Слой множественного внимания с маскировкой в декодере обеспечивает последовательную обработку токенов. Благодаря такому подходу предотвращается воздействие последующих токенов на сгенерированные токены. Маскировка важна для поддержки порядка следования и согласованности сгенерированных данных. Взаимодействие между выходом декодера (из слоя множественного внимания с маскировкой) и выходом энкодера организовано с помощью механизма множественного внимания энкодера‑декодера. Этот последний шаг даёт декодеру доступ к входным данным.

Мы, кроме того, продемонстрируем реализацию этих концепций с использованием Python и NumPy. Мы создали простой пример перевода предложения с английского языка на португальский. Практическая демонстрация обсуждаемых здесь идей поможет проиллюстрировать работу внутренних механизмов декодера в трансформерах и позволит лучше понять роль декодеров в больших языковых моделях (Large Language Model, LLM).

Читать далее

F-строки в Python мощнее, чем можно подумать

Reading time5 min
Views157K

Форматированные строковые литералы, которые ещё называют f-строками (f-strings), появились довольно давно, в Python 3.6. Поэтому все знают о том, что это такое, и о том, как ими пользоваться. Правда, f-строки обладают кое-какими полезными возможностями, некоторыми особенностями, о которых кто-нибудь может и не знать. Разберёмся с некоторыми интересными возможностями f-строк, которые могут оказаться очень кстати в повседневной работе Python-программиста.

Читать далее

Celery для новичков

Level of difficultyEasy
Reading time4 min
Views57K

Привет, Хабр!

Celery – это асинхронная распределенная очередь задач, написанная на Python, она предназначена для обработки сообщений в реальном времени при помощи многозадачности. Используя Celery, можно организовать выполнение задач в фоновом режиме, не загружая основной поток приложения.

Используя Celery можно легко организовать выполнение фоновых задач.

Читать далее

Шпаргалка по криптографии: что делать, если попал в проект с криптографами

Level of difficultyEasy
Reading time14 min
Views38K

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

Сейчас мы с вами разберемся с базой!

Читать далее

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

Level of difficultyEasy
Reading time6 min
Views38K

В основном я учился программированию самостоятельно. Когда у меня появлялась захватывающая идея, я разбирался, что необходимо для решения этой задачи. Например, когда я заинтересовался работой поисковых движков, то начал читать о вычислительной эффективности множеств. Так я обнаружил задачу «как понять, что я уже выполнил краулинг этого URL?», если их уже были тысячи. Чтобы ускорить ответ на этот вопрос, я использовал множество, поиск по которому занимает O(1), а не O(n).

Изучение того, что нужно для решения задачи, увлекательно, но при движении по собственному пути в кодинге в твоих знаниях остаются пробелы. Мне кажется, что если постоянно ставить перед собой сложные задачи, то эти пробелы будут заполняться по ходу. (Даже если это займёт больше времени, чем при прохождении курса. Интерес — важный мотиватор движения вперёд; стремитесь к тому, что любопытно вам.)

В тот момент, когда я начал понимать вычислительную эффективность и стремиться к ускорению своих программ, я как раз решал задачу, связанную с поисковым движком. С тех пор я иногда задаюсь вопросом: что стоит сделать дальше? Каким будет моё следующее сложное задание? Это сильно зависит от имеющихся у вас на текущий момент знаний; некоторые идеи имеют смысл, другие пока недостижимы. Так мы и учимся.

Я решил составить собственный список проектов, поддерживающих мой интерес к программированию. Это список в стиле серии Challenging projects every programmer should try Остина Хенли.

Читать далее

Как я устроился в Амазон и перестал переживать за свой английский

Level of difficultyEasy
Reading time7 min
Views105K

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

Меня зовут Андрей Столбовский, последние 5 лет я работал в Яндексе, а в прошлом году перешёл в Амазон и теперь работаю Software Development Manager в AWS Redshift – это мой первый полноценный опыт работы в международной компании. 

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

Итак, поехали. 

Поехали!

Путь к мастерству в программировании

Level of difficultyEasy
Reading time8 min
Views14K

Привет, кодер! Неважно, новичок ли ты, отлаживающий свою первую программу «Hello World», или опытный инженер — у каждого из нас всегда есть возможность улучшить свои навыки. Эта статья для тех, кто хочет поднять свои существующие скилы на новый уровень.

Читать далее

Information

Rating
4,347-th
Location
Россия
Date of birth
Registered
Activity

Specialization

Project Manager, Product Manager
Senior