Pull to refresh
71
0
Tishka17 @Tishka17

Пользователь

Send message

Создание telegram-ботов с интерактивным меню

Level of difficulty Medium
Reading time 15 min
Views 33K

Однажды меня попросили провести ревью и рефакторинг одного telegram-бота. Увидев файл размером 2000 строк, рассчитанный только на обработку разных меню я понял, что это требует унификации и общих подходов. Так родилась библиотека aiogram-dialog

В этой статье я бы хотел обратить внимание на некоторые проблемы, которые мы встречаем при создании таких меню, предложить варианты их решения. А во второй половине статьи показать как это решается с помощью aiogram-dialog.

Мы не будем рассматривать архитектуру всего приложения, об этом вы можете прочитать у Фаулера или Мартина. Мы поговорим только про определенную часть UI ботов. Так же это не будет введением в разработку telegram-ботов с нуля. Я предполагаю, что читатель знаком с питоном, ООП и слышал о такой вещи как DRY.

Примеры выбраны так, чтобы проще было показать определенные проблемы, но это не единственные сценарии приводящие к ним.

Читать далее
Total votes 25: ↑24 and ↓1 +23
Comments 4

Новинки аннотаций типов в Python 3.8 (Protocol, Final, TypedDict, Literal)

Reading time 5 min
Views 33K

Сегодня ночью вышел Python 3.8 и аннотации типов получили новые возможности:


  • Протоколы
  • Типизированные словари
  • Final-спецификатор
  • Соответствие фиксированному значению

Если вы ещё не знакомы с аннотациями типов, рекомендую обратить внимание на мои предыдущие статьи (начало, продолжение)
И пока все переживают о моржах, я хочу кратко рассказать о новинках в модуле typing

Читать дальше →
Total votes 38: ↑38 and ↓0 +38
Comments 34

Введение в аннотации типов Python. Продолжение

Reading time 4 min
Views 66K


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


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

Читать дальше →
Total votes 30: ↑29 and ↓1 +28
Comments 33

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

Reading time 6 min
Views 269K

Введение



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


Вторая часть


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


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



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


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


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

Читать дальше →
Total votes 33: ↑32 and ↓1 +31
Comments 50

Введение в Data classes

Reading time 7 min
Views 204K

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



Введение


Все приведенные примеры требуют для своей работы Python 3.7 или выше

Большинству python-разработчикам приходится регулярно писать такие классы:


class RegularBook:
    def __init__(self, title, author):
        self.title = title
        self.author = author

Уже на этом примере видна избыточность. Идентификаторы title и author используются несколько раз. Реальный класс же будет ещё содержать переопределенные методы __eq__ и __repr__.


Модуль dataclasses содержит декоратор @dataclass. С его использованием аналогичный код будет выглядеть так:


from dataclasses import dataclass

@dataclass
class Book:
    title: str
    author: str
Читать дальше →
Total votes 48: ↑46 and ↓2 +44
Comments 19

AppCompat v21 — Material Design для пре-Lollipop устройств

Reading time 8 min
Views 92K
image
17 октября был опубликован Android 5.0 SDK, который принес новые виджеты и материальный дизайн. Мы расширили библиотеки поддержки, чтобы вы могли использовать ваши последние разработки и на предыдущих версиях Android. Это изменения включают в себ крупное обновление для AppCompat, а так же библиотеки RecyclerView, CardView и Palette.

В этом посте мы взглянем, что нового появилось в AppCompat и как это использовать для поддержки материального дизайна в ваших приложениях.
Читать дальше →
Total votes 18: ↑16 and ↓2 +14
Comments 22

Ошибки Android интерфейса Twitter

Reading time 3 min
Views 14K
В прошлом посте, я анализировал Evernote на предмет недочетов в следовании гайдлайнам. Сегодня хочу провести анализ интерфейса Twitter.

Action Bar


Поиск

В руководстве разработчика по работе с Action Bar Google вводит такое понятие как «Представление действия (Action View)». Виджет поиска — одно из таких представлений. По-умолчанию оно свернуто в иконку, но при разворачивании должна появляться иконка «вверх», нажатие на которую позволяет свернуть действие обратно (см. раздел "Поддержка сворачиваемый представлений действий"). В Twitter при открытии поиска отсутствует иконка «вверх»


Читать дальше →
Total votes 58: ↑47 and ↓11 +36
Comments 32

Ошибки Android интерфейса Evernote

Reading time 4 min
Views 19K
Приложение Evernote отличается высоким качеством и удобством использования, однако и в нем есть свои ошибки. Многие из них довольно типичны и встречаются во многих популярных программах. Данный пост не претендует на непреложную истину, однако я постарался аргументирвоать свои замечания выдержками из гайдлайнов Google.

Боковое меню


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

Индикатор бокового меню

На странице с описанием Navigation Drawer Google дает четкие рекомендации по иконке индикатора наличия бокового меню:
imageДля облегчения доступа к боковому меню, все экраны, которые соответствуют записям в этом меню, должны содержать индикатор бокового меню рядом с иконкой приложения в Action Bar. Нажатие на иконку приложения заставляет меню выехать с левого края экрана.

Все экраны ниже по иерархии, должны включать обычный индикатор «вверх» рядом с иконкой приложения. Боковое меню все ещё доступно по свайпу от левого края, но это никак не отображается в Action Bar.


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

Читать дальше →
Total votes 49: ↑40 and ↓9 +31
Comments 15

Qt Mobility 1.1.1, QtCreator 2.1.0, Qt 4.7.2

Reading time 1 min
Views 1.5K
Вышло очередное обновление инстурментария Qt за номером 4.7.2. Кроме исправления ошибок, оно является официальным релизом Qt Quick.

Одновременно вышло обновление для QtCreator (версия 2.1.0) с расширенной поддержкой Qt Quick и разработки для мобильных приложений.

QtMobility 1.1.1 включает множество исправлений ошибок и улучшенные привязки для QML и производительность, в особенности для Symbian.
Qt Mobility 1.1.1 так же входит в состав Qt SDK 1.1 Beta.
Total votes 35: ↑32 and ↓3 +29
Comments 14

Устанавливаем RockBox на iPod Video

Reading time 3 min
Views 24K
Если вы слышали слово RockBox, эта заметка скорее всего не скажет вам ничего нового. Даже не трудитесь читать её.

Попался мне в руки старенький ipod video на 60 гигов. Амарок, конечно, его подхватил и дал возможность читать/писать в его базу. Но не у всех же стоит такой комбайн, а бывает что зайдешь в гости к знакомому музыканту взять новые его записи послушать. Да и такие форматы как Ogg Vorbis и FLAC плеер не играет. В результате было решено поставить стороннюю прошивку. Речь идет о RockBox.
Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Comments 12

Во vkontakte будет RSS?

Reading time 2 min
Views 5.8K
Недавно при просмотре фотографий на вконтакте.ру знакомый обратил моё внимание на замечательную иконку rss в адресной строке моего браузера. Мы были несколько удивлены, и решили попробовать её в действии.

Опера нормально ленту показывать отказалась. Выдала нам пару надписей <no title> с неработающими ссылками и всё. Akregator, тоже не смог загрузить ни одного настоящего сообщения. Google reader тоже ничего не понял.

Ну, делать нечего, откроем исходный код какой нибудь ленты.
Читать дальше →
Total votes 18: ↑7 and ↓11 -4
Comments 14

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Mobile Application Developer
Lead
Python
Docker
Linux
SQL
Git
Golang
Android SDK