Русский
Русский
English
Статистика
Реклама

Уведомления

Перевод RxJS и Angular искусство отписки от уведомлений

01.12.2020 22:06:36 | Автор: admin

Будущих студентов курса "JavaScript Developer. Professional" приглашаем участвовать в открытом вебинаре на тему "Делаем интерактивного Telegram бота на nodejs".

А пока делимся традиционным переводом полезной статьи.


Если вы используете Angular и библиотеку RxJS, здесь вы узнаете все способы, которые вам могут понадобиться, чтобы подписываться на уведомления от объектов Observable и отписываться от них!

Работать с кодом в динамическом режиме можно вэтом онлайн-редакторе. Полный исходный код для этой статьи размещен вэтом репозитории GitHub.

Введение

Мы используем RxJS во всех приложениях Angular, которые пишем. RxJS оказывает значительное влияние на поток данных в наших приложениях, их производительность и многое другое.

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

Начнем с создания демонстрационного сервиса (DummyService), которой поможет нам отслеживать устанавливаемые подписки.

У нашего демонстрационного сервиса будет единственный методgetEmissions, который принимаетscopeдля регистрации событий и возвращает объект Observable, выпускающий ${scope} Emission #nкаждую n-ю секунду.

1 стандартный способ

Самым простым способом подписаться на уведомления Observable и отписаться от них является подписка в методеngOnInit, создание свойства класса, в котором будет храниться наша подписка(Subscription), и отписка в методеngOnDestroy. Чтобы все немного упростить, можно инициализировать свойство подписки со значениемSubscription.EMPTY, чтобы избежать его проверки на null при отписке.

Чтобы проверить, что все работает, мы удалим компонент из DOM через 3 секунды и увидим, что отписка выполняется:

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

2 метод Subscription.add

В подписках RxJS имеется встроенный методSubscription.add, с помощью которого можно включить несколько условий отписки в один экземпляр Subscription. Сначала создадим свойство класса, инициализированное какnew Subscription(). Затем, вместо назначения наших подписок свойствам класса, вызовем методSubscription.add. Наконец, выполним отписку в методеngOnDestroy.

После открытия консоли мы должны увидеть две подписки:

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

3 AsyncPipe

В Angular есть много отличных встроенных фильтров (pipe). Одним из них являетсяAsyncPipe. AsyncPipe принимает объект Observable, автоматически подписывается на уведомления от него и отписывается от них при уничтожении компонента. В отличие от предыдущего примера здесь мыне устанавливаем подписку в нашем компоненте, а передаем объект Observable фильтру AsyncPipe:

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

4 оператор takeUntil

В RxJS есть множество полезных операторов. Одним из них являетсяtakeUntil. По сигнатуре оператора takeUntil понятно, что он принимает на вход объект Observable как параметрnotifier и, когда notifier выпускает значение, выполняет отписку отисходного Observable. В нашем случае нам нужно оповестить Observable об уничтожении компонента. Для этого мы добавляем свойство класса с именемcomponentDestroyed$(или любым другим именем) типаSubject<void>и используем его в качестве notifier. После этого остается только добавить оповещение в методngOnDestroy. Итоговый код имеет следующий вид:

В отличие от описанного ранее обычного способа, в этом варианте не требуется вводить дополнительные свойства класса, если подписок несколько. Нам нужно только добавитьtakeUntil(componentDestroyed$), а RxJS позаботится об остальном.

5 библиотека SubSink

SubSink это потрясающая библиотека, созданнаяУордом Беллом (Ward Bell). С ее помощью можно корректно отписываться от Observable внутри своего компонента.

Сначала установим SubSink, выполнив команду npm i subsink илиyarn add subsink. Затем создадим свойство класса типа SubSink.SubSink можно использовать двумя способами: простой способ с использованием сеттера и способ Array/Add.

Простой способзаключается в использовании метода-сеттераsink.Способ Array/Add имеет такой же синтаксис, что и собственный метод RxJSSubscription.add. Создадим подписку каждым из этих способов. Тогда наш компонент будет выглядеть вот так:

6 библиотека until-destroy

Примечание. Эта библиотека работает на Pre Ivy Angular по-другому. Дополнительные сведения см. вдокументации.

until-destroy это одна из многих прекрасных библиотек, созданныхngneat. С помощью декоратора UntilDestroy она определяет, какие свойства являются подписками, и автоматически отменяет эти подписки при уничтожении компонента. Кроме того, вместо свойств классов мы можем использовать ее специальный оператор для RxJS под названиемuntilDestroyed.

Для этого нам всего лишь нужно применить декоратор UntilDestroy к нашему компоненту и добавить операторuntilDestroyedв метод pipe() объекта Observable:

В заключение скажем, что until-destroy является очень мощной библиотекой, позволяющей автоматически подписываться на уведомления от объектов Observable и отписываться от них. Кроме того, у until-destroyесть много возможностей, которые не описаны в этой статье, поэтому обязательно посмотрите репозиторий GitHub!

Резюме

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

Но какой бы вариант вы ни выбрали, самое важное действовать последовательно.


- Узнать подробнее о карьерных перспективах.

- Записаться на открытый вебинар "Делаем интерактивного Telegram бота на nodejs".

Подробнее..

Из песочницы Социальные медиа в 2020 влияние на продуктивность

16.08.2020 14:22:56 | Автор: admin
Мы живем в эпоху вечно растущего потребления контента. Чем больше информации доступно в нашем зримом окружении, тем меньше наши возможности сосредотачиваться. В наши дни мы можем быть свидетелями негласной битвы 21-го века: Битвы За Наше Внимание. Бренды, новые продукты, онлайн медиа все они хотят, чтобы мы их заметили. И чем меньше точек соприкосновения мы им предоставляем, тем больше мы можем уделять внимания действительно важным вещам.

image
Потребляй, Морти. Фрагмент из шоу Рик и Морти (Сезон 4 Эпизод 6)

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

Шаг 1: Принятие


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

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

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

Почему это происходит и что сделать, чтобы сократить это время?

Люди, которые стоят за пользовательским интерфейсом мультимедийных приложений и алгоритмами уведомлений это эксперты когнитивной психологии. Их две основные цели:
  1. Внутри приложения: как можно дольше оставлять нас вовлеченными.
  2. Вне приложения: как можно скорее вернуть нас в приложение.

Это не мудрено, ведь модель монетизации социальных медиа основана на уровне вовлеченности (ER) их пользователей. Проще говоря, это означает следующее:
Чем больше времени мы проводим в приложении, тем больше $$$ зарабатывает издатель

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

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

Шаг 2: Действие


Я думаю, все согласятся с тем, что бесцельное лазанье в соц. сетях вредит нашей продуктивности. Но обычно мы не залазим туда по своей воле, не так ли? Чаще всего нас в начале что-то затриггерило, и только затем мы можем поймать себя скролящим ленту 30 минут подряд.
image

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

Сделать это можно 3 способами:
  1. Изменить предпочтения нотификаций в настройках самого приложения
    Позволяет настроить, какие уведомления получать, а какие нет
  2. Запретить уведомления приложения в настройках системы
    Все уведомления от одного конкретного приложения будут заблокированы.
  3. Включить режим Не беспокоить (DND).
    Ваш телефон вообще не будет издавать звуков, до тех пор пока вам не позвонят два раза подряд.

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

После внесения этих небольших изменений в повседневную жизнь я заметил, что у меня стало получаться выполнять долгосрочные задачи (~4 часа) с большей легкостью из-за более высокого уровня погружения и сосредоточенности. И фактически, статья, которую вы сейчас читаете, один из его результатов.

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

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

Заключение


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

Социальные сети не исключение.

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

Маяки в ЕГРЮЛ с python

21.05.2021 10:23:30 | Автор: admin

На сайте nalog.ru есть очень удобный сервис, который покрывает такие страхи владельца бизнеса как увод компании из под контроля без участия самого владельца. Отчасти естественно покрывает, так как если захотят увести компанию, один сервис налоговой в этом не поможет.
Сервис уведомляет владельца предприятия, если в налоговую попало заявление о внесении каких-либо изменений в отношении данных компании, содержащихся в ЕГРЮЛ. Далее владелец может среагировать на ситуацию, заблокировав регистрацию изменений, если они не были им инициированы. Чтобы реализовать этот своеобразный мониторинг, необходимо поставить на компанию так называемый маяк. В данной статье посмотрим, как работает сервис, как и кто может поставить маяки, сколько их можно поставить и как все это сделать пакетно с помощью python.
Сам сервис находится по адресу на сайте налоговой здесь.

Немного о страхах за бизнес.



Ссылка на оригинал картинки.
До появления описанных возможностей по мониторингу данных компании в ЕГРЮЛ было все грустно. Чтобы случайно не проснуться и узнать, что ты больше не владелец компании, каждый собственник придумывал свои решения. Один заказывал с регулярной периодичностью выписки ЕГРЮЛ на бумаге, что вовсе не гарантировало, что по истечение 7 дней компания не изменит владельца, другой с такой же регулярностью заглядывал в электронный ЕГРЮЛ, надеясь поймать неблагоприятный момент, третий договаривался в самой налоговой, оставляя там соответствующие письма-пожелания.
Можно долго рассуждать на тему, что ранее практика была не совершенна, и через институт добросовестного приобретателя можно было приобрести чужую компанию. Владелец узнавал об этом постфактум, когда ничего уже сделать было нельзя.

Как работает сервис сейчас.



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

Запрашиваемая информация будет направляться налоговым органом на адрес электронной почты (E-mail), указанный при регистрации (авторизации) заявителя в сервисе, не позднее рабочего дня, следующего за днем получения налоговым органом документов в отношении указанного в запросе юридического лица, индивидуального предпринимателя, в виде сообщения.
Вот как выглядит данное сообщение:


О чем оно говорит? В сообщении говорится о том, что кто-то подал заявление о внесении изменений в ЕГРЮЛ и, если ничего не делать, эти изменения произойдут. Какие изменения, налоговая не раскрывает.

Чтобы поставить маяк на компанию после авторизации надо подать новый запрос, нажав на кнопку Новый запрос:

Далее необходимо вбить ОГРН либо ОГРНИП, нажать добавить:


Все просто и бесплатно. Данную процедуру придется повторять всего лишь 1 раз в год. По истечение срока будет уведомление, что сроки заканчиваются.
Единственное неудобство это 100 маяков (ранее было 50) на одного зарегистрированного в системе и придется регистрировать несколько аккаунтов, если обществ для мониторинга много:


Еще одно неудобство при добавлении новой компании в мониторинг, сервис подвисает, видимо, что-то проверяя:

В общем, на 100 запросов может уйти продолжительное время.
Чтобы это превозмочь, воспользуемся python.

Из пушки по воробьям.



Ссылка на оригинал картинки.
Может кто-то сказать. Тем не менее, если программа сэкономит кому-то пару часов рабочего времени это приятно.
Итак, наша программа на python будет заходить на сайт сервиса, авторизоваться, устанавливать маяки на общества по ОГРН, беря последние из excel-таблицы.
Импорты:
from selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport timeimport openpyxl

Авторизация на сайте:
browser = webdriver.Firefox()time.sleep (5)browser.get ('https://service.nalog.ru/regmon/')time.sleep(5)act = browser.find_element_by_id('email')act.click()for i in 'email@yandex.ru':        act.send_keys(i)        time.sleep (0.1)        act = browser.find_element_by_id('password')act.click()i=0for i in 'password':        act.send_keys(i)        time.sleep (0.1)act.submit()time.sleep(5)

*не забываем email и пароль указать.

Открываем таблицу, берем из нее данные и используем их во благо:
wb = openpyxl.load_workbook('ВыпискиЕГРЮЛ.xlsx')sheet=wb.get_sheet_by_name('Лист1')# столбец с выписками ЕГРЮЛx=2#a = tuple (str(sheet.cell(row=x, column=1).value)) # получаем кортеж из ОГРН в ячейке A2for x in range (2,sheet.max_row):        a = str(sheet.cell(row=x, column=1).value).strip()        if a=='None':            pass        else:                a = tuple (str(sheet.cell(row=x, column=1).value).strip())                 act = browser.find_element_by_css_selector('.float-right > button:nth-child(1)')                act.click()                time.sleep(4)                act = browser.find_element_by_id('ogrn')                act.click()                                # вводим посимвольно в строку ОГРН, т.к. ввод сразу всего ОГРН не корректно обрабатывается                i=0                for i in range (13):                        act.send_keys(a[i])                        time.sleep (0.05)                        i+=1                act = browser.find_element_by_css_selector('div.regmon-tab-content:nth-child(3) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(1) > button:nth-child(2)')                act.click()                time.sleep(15)                try:                        act = browser.find_element_by_css_selector('.btn-alert')                except:                        time.sleep(10)                        act = browser.find_element_by_css_selector('.btn-alert')                act.click()                time.sleep(3)                x += 1browser.quit()


После того, как программа отработает на сервисе будет таблица примерно следующего вида:


Маяки поставлены, спасибо за внимание.

Ссылка на оригинал картинки и анекдот оттуда
Заказчик на объекте принимает работу у подрядчика.
Тот подводит его к выкопанной шахте диаметром 3 метра и глубиной 50 метров, заглядывают туда, а на дне горит прожектор.
Заказчик: Что за херня???
Подрядчик: Вот же чертеж! По нему и сделали.
Заказчик (переворачивая чертеж на 180 градусов): Это маяк, бл*! МАЯК!

Скачать программу и тестовую excel-таблицу здесь.
Подробнее..

Использование Always on display как альтернатива светодиодному индикатору в телефонах Samsung

01.10.2020 12:15:50 | Автор: admin
Всем доброго времени суток!
После того, как разбился мой старый Galaxy s7 пришлось купить новый самсунг. При покупке я не придал значения, что в новом аппарате нет светодиодного индикатора, а его отсутствие показало мне, как я к нему привык. С другой стороны, во всех новых самсунгах есть режим постоянно включенного экрана, которым большинство людей практически не пользуется. Я решил совместить свою потребность с самсунговской фичей. Способ не требует наличия Root или ADB-хак.

image

В чем суть

Включать и выключать Always on display при наличии уведомлений и отключать его после их очистки.

Инструменты

Для воплощения идеи в жизнь я решил использовать приложение Macrodroid. Для меня это уже очень давно любимое приложение для автоматизации различных действий.

Реализация

Первый макрос нужен для включения Always on display:
  • Добавляем триггер Уведомление в разделе События устройства, выбираем Получено уведомление. Здесь же сразу можно выбрать те приложения, при получении от которых вы хотите включения этого режима
  • Добавляем действие Настройка системы в разделе Настройка устройства. Выбираем System. В поле Ключ настройки пишем aod_mode, а в поле значение 1
  • Добавляем любое название для макроса и сохраняем

Должно получиться так:

image
Второй макрос, соответственно, для выключения Always on display:
  • Добавляем триггер Уведомление в разделе События устройства, выбираем Уведомление очищено. Выбрать приложения, которые должны выключать режим надо те же, что и в первом макросе
  • Добавляем действие Настройка системы в разделе Настройка устройства. Выбираем System. В поле Ключ настройки пишем aod_mode, а в поле значение уже пишем 0
  • Добавляем любое название для макроса и сохраняем


Выглядит так:

image

Важно: режим Always on display должен быть изначально включен в настройках телефона.

Для меня этого вполне достаточно. Теперь, при новом уведомлении включается режим Always on display и я могу видеть наличие уведомлений. Это оказалось даже гораздо более удобным, чем светодиодный индикатор, так как экран горит постоянно и не надо всматриваться в лампочку.

Каждый может добавить в макросы ограничения или действия по своему вкусу и сделать этот режим еще более гибким.

Надеюсь эта статья будет кому-нибудь полезной.
Всем хорошего настроения!
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru