Как стать автором
Обновить
71
0
Tishka17 @Tishka17

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

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

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

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

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

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

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

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

Читать далее
Всего голосов 25: ↑24 и ↓1+23
Комментарии4

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

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

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


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

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

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

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

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


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


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

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

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

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

Введение



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


Вторая часть


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


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



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


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


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

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

Введение в Data classes

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

Одна из новых возможностей, появившихся в 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
Читать дальше →
Всего голосов 48: ↑46 и ↓2+44
Комментарии19

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

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

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

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

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

Action Bar


Поиск

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


Читать дальше →
Всего голосов 58: ↑47 и ↓11+36
Комментарии32

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

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

Боковое меню


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

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

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

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


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

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

Qt Mobility 1.1.1, QtCreator 2.1.0, Qt 4.7.2

Время на прочтение1 мин
Количество просмотров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.
Всего голосов 35: ↑32 и ↓3+29
Комментарии14

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

Время на прочтение3 мин
Количество просмотров24K
Если вы слышали слово RockBox, эта заметка скорее всего не скажет вам ничего нового. Даже не трудитесь читать её.

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

Во vkontakte будет RSS?

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

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

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

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

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