После первого поста, поиски алгоритмов продолжились.
Приятель сказал - множества! И написал программу в 4 строки. Она вычисляет пересечение двух множеств и печатает его размер.
1 минута 8 секунд. Это самое pythonic way решение. (верхний слайд)
Я написал класс, который изображает из себя btree. При 14к листьев - 1 минута 28 секунд. При 140к листьев - 47 секунд, 1,6-1.7Гб памяти.
В итоге словарь мы не догнали, но ещё два решения нашли.
Итак, перебор сверхбольших массивов в питоше от лучшего к худшему:
Словарями
Самопальным btree
Множествами.
Остальное лучше даже не пробовать 😄
P. S. Голосовать выше не забывайте, мне нужны ваши ориентиры.
Приятель сказал - множества! И написал программу в 4 строки. Она вычисляет пересечение двух множеств и печатает его размер.
1 минута 8 секунд. Это самое pythonic way решение. (верхний слайд)
Я написал класс, который изображает из себя btree. При 14к листьев - 1 минута 28 секунд. При 140к листьев - 47 секунд, 1,6-1.7Гб памяти.
В итоге словарь мы не догнали, но ещё два решения нашли.
Итак, перебор сверхбольших массивов в питоше от лучшего к худшему:
Словарями
Самопальным btree
Множествами.
Остальное лучше даже не пробовать 😄
P. S. Голосовать выше не забывайте, мне нужны ваши ориентиры.
Небольшой пример из жизни, для начинающих Питон.
Многие не понимают, как базовые навыки программирования могут в разы облегчить труд. Вот вам живой пример: подумал я вчера, что хорошо бы по номеру телефона определять и регион, откуда юзер. Есть сайты в интернете со списками кодов, но руками туда не набегаешься.
Соответственно, сайт надо превратить в список кодов телефонов. Легко (все исходные тексты приложены в след. сообщении ↘️ )
Действие ноль
mobile_operator0.py — превращает список страниц сайта, скопированный с сайта в массив
(единственное ручное действие)
Делай раз
mobile_operator1.py — все страницы сайта загружены в файлики, чтобы их разобрать.
(reg_codes получен на этапе 0. внимание - создайте папку telcodes там, где вы положите эти скрипты или пропишите свой путь)
Делай два
mobile_operator2.py — все страницы очищены от html и превращены в csv
Делай три
mobile_operator3.py — csv прочитаны, проверены на ошибки и просчитаны диапазоны номеров. Сделан итоговый файл csv, которым можно легко пользоваться открыв его в excel.
(программа выловит одну ошибку в данных, это ошибка на сайте. Csv таблицу так же выкладываю ниже ↘️ )
Все готово. Повторив эти шаги вы получили удобную базу с диапазонами номеров, провайдерами и регионами. 7591 запись. А когда вы разберетесь в используемых командах (всего штук 15, в основном строковые и файловые операции) вы сможете гордо сказать, что вы теперь умеете в датамайнинг и почти датасайентист.
Бонусный файл, продвинутый уровень:
mobile_operator4.py — создание таблицы в базе PostgreSQL, с использованием типа данных int8range (да, постгрес умеет хранить и выбирать диапазоны значений). В принципе надо делать три таблицы и два внешних ключа (регион и оператор), но поскольку это статичная малая таблица, смысла усложнять запросы я не вижу.
P. S. Полученная база была протестирована на 12 млн номеров, опознание составило 99.93%. Осталось несколько диапазонов нагуглить и добавить ручками, чтобы довести до 100%.
Многие не понимают, как базовые навыки программирования могут в разы облегчить труд. Вот вам живой пример: подумал я вчера, что хорошо бы по номеру телефона определять и регион, откуда юзер. Есть сайты в интернете со списками кодов, но руками туда не набегаешься.
Соответственно, сайт надо превратить в список кодов телефонов. Легко (все исходные тексты приложены в след. сообщении ↘️ )
Действие ноль
mobile_operator0.py — превращает список страниц сайта, скопированный с сайта в массив
(единственное ручное действие)
Делай раз
mobile_operator1.py — все страницы сайта загружены в файлики, чтобы их разобрать.
(reg_codes получен на этапе 0. внимание - создайте папку telcodes там, где вы положите эти скрипты или пропишите свой путь)
Делай два
mobile_operator2.py — все страницы очищены от html и превращены в csv
Делай три
mobile_operator3.py — csv прочитаны, проверены на ошибки и просчитаны диапазоны номеров. Сделан итоговый файл csv, которым можно легко пользоваться открыв его в excel.
(программа выловит одну ошибку в данных, это ошибка на сайте. Csv таблицу так же выкладываю ниже ↘️ )
Все готово. Повторив эти шаги вы получили удобную базу с диапазонами номеров, провайдерами и регионами. 7591 запись. А когда вы разберетесь в используемых командах (всего штук 15, в основном строковые и файловые операции) вы сможете гордо сказать, что вы теперь умеете в датамайнинг и почти датасайентист.
Бонусный файл, продвинутый уровень:
mobile_operator4.py — создание таблицы в базе PostgreSQL, с использованием типа данных int8range (да, постгрес умеет хранить и выбирать диапазоны значений). В принципе надо делать три таблицы и два внешних ключа (регион и оператор), но поскольку это статичная малая таблица, смысла усложнять запросы я не вижу.
P. S. Полученная база была протестирована на 12 млн номеров, опознание составило 99.93%. Осталось несколько диапазонов нагуглить и добавить ручками, чтобы довести до 100%.
https://rossvyaz.gov.ru/deyatelnost/resurs-numeracii/vypiska-iz-reestra-sistemy-i-plana-numeracii
В процессе уточнения таблицы операторов выяснилось, что зря я парсил сайт. Руки только размял.
Есть уже готовый csv, из официального источника, с актуальностью июнь 2020. Осталось только слегка перекодировать и загрузить файл в таблицу БД.
Так что первая заповедь питониста звучит так:
Сначала хорошо погугли, прежде чем писать. 😂
В процессе уточнения таблицы операторов выяснилось, что зря я парсил сайт. Руки только размял.
Есть уже готовый csv, из официального источника, с актуальностью июнь 2020. Осталось только слегка перекодировать и загрузить файл в таблицу БД.
Так что первая заповедь питониста звучит так:
Сначала хорошо погугли, прежде чем писать. 😂
Государственная база полнее, свежее, но как всегда, пять разных наименований Москвы. 3 разных Питера, два Волгограда и так далее.
У нас в прессе строится цифровоеГУЛАГ государство, а в реале государевы базы данных выглядят так, как будто в них каждую ночь тролли ебались.
Когда там появятся программисты, дочитавшие учебник SQL до главы foreign key я не знаю.
У нас в прессе строится цифровое
Когда там появятся программисты, дочитавшие учебник SQL до главы foreign key я не знаю.
Но на государеву базу легко, за 20 минут, написать патч. И в продакшен.
Фома обновился.
В принципе нужен ещё один патч, русского языка, от вырвиглазных сочетаний типа "Республика Удмуртская", но они действительно так пишут в минсвязи 😁
Фома обновился.
В принципе нужен ещё один патч, русского языка, от вырвиглазных сочетаний типа "Республика Удмуртская", но они действительно так пишут в минсвязи 😁
У asyncio есть очень удобные методы вызова функций, как обычных, так и асинхронных, через произвольное время в секундах, но есть ньюанс.
В потоке событий телеграм это эксплуатируется вот так (для обычных функций)
from telethon import TelegramClient
client: TelegramClient
client.loop.call_later(delta.seconds, basegen) - задержка в секундах, имя функции.
Соответственно мне нужно, чтобы функция бота basegen выполнялась каждый день в три часа ночи. В реальности она выполнилась несколько сотен раз в момент 2:59:59-3:00:00.
Потому что я забыл о тонкостях самого питоновского класса timedelta. На слайде подробно разбирается, что пошло не так под дебагером.
Из за неточностей таймера компа, asуncio гарантирует секунду, в которою все запустится, но не её доли. И функцию первый раз вызвало в 2:59:59.522.
Все бы хорошо, но timedelta вычитая разницу времени, даёт все что больше суток как дни и секунды. Получилось 1 день и ноль секунд.
Правильный вариант считать задержку через timedelta это 13 строка. :)
В потоке событий телеграм это эксплуатируется вот так (для обычных функций)
from telethon import TelegramClient
client: TelegramClient
client.loop.call_later(delta.seconds, basegen) - задержка в секундах, имя функции.
Соответственно мне нужно, чтобы функция бота basegen выполнялась каждый день в три часа ночи. В реальности она выполнилась несколько сотен раз в момент 2:59:59-3:00:00.
Потому что я забыл о тонкостях самого питоновского класса timedelta. На слайде подробно разбирается, что пошло не так под дебагером.
Из за неточностей таймера компа, asуncio гарантирует секунду, в которою все запустится, но не её доли. И функцию первый раз вызвало в 2:59:59.522.
Все бы хорошо, но timedelta вычитая разницу времени, даёт все что больше суток как дни и секунды. Получилось 1 день и ноль секунд.
Правильный вариант считать задержку через timedelta это 13 строка. :)
Тележенька взорвалась от выборов в Белоруссии. За сутки в чаты залетело 4905 человек.
Основная движуха здесь:
@minsk_new +772 человек. Чат Минска.
@majakrainablr +1899 чат выборов.
И наш "протестный" чат канала ateo
@Ateo_Chat +570
Приятного аппетита :)
Основная движуха здесь:
@minsk_new +772 человек. Чат Минска.
@majakrainablr +1899 чат выборов.
И наш "протестный" чат канала ateo
@Ateo_Chat +570
Приятного аппетита :)
СЛЕГ! <Z> ️
Тележенька взорвалась от выборов в Белоруссии. За сутки в чаты залетело 4905 человек. Основная движуха здесь: @minsk_new +772 человек. Чат Минска. @majakrainablr +1899 чат выборов. И наш "протестный" чат канала ateo @Ateo_Chat +570 Приятного аппетита…
Второй день протестов в Беларуссии.
+6644 новых юзера в политоте за сутки.
Жгут все там же
@minsk_new +1354
@majakrainablr +2664
@Ateo_Chat +782
+6644 новых юзера в политоте за сутки.
Жгут все там же
@minsk_new +1354
@majakrainablr +2664
@Ateo_Chat +782
Туда и дорога, ибо тема белоруссии мне лично уже надоела.
Вы будете удивлены, но эти 44 строчки это все что нужно, чтобы принимать платежи в боте через Qiwi.
Звание самого простого API года, не менее. Понятно, что нужно ещё обмазываться проверкой кодов ответа сервера (если на той стороне что-то пошло не так), но минимальный набор выглядит так.
Три функции.
Создание счета на сумму и валидного до даты/времени (на входе str(datetime)). Даёт ссылку на платёжную форму, в которой клиент платит любой картой российского банка.
Проверка состояния счета (не оплачен, оплачен, просрочен)
Отмена вовремя не оплаченных счетов (не обязательно, это опция).
Всё!
Звание самого простого API года, не менее. Понятно, что нужно ещё обмазываться проверкой кодов ответа сервера (если на той стороне что-то пошло не так), но минимальный набор выглядит так.
Три функции.
Создание счета на сумму и валидного до даты/времени (на входе str(datetime)). Даёт ссылку на платёжную форму, в которой клиент платит любой картой российского банка.
Проверка состояния счета (не оплачен, оплачен, просрочен)
Отмена вовремя не оплаченных счетов (не обязательно, это опция).
Всё!
qiwi_module.py
3.2 KB
Полностью готовый модуль для киви. Обмазан перехватом ошибок, логированием, проверками кода ответа сервера и комментариями. Надеюсь, это ускорит разработку парочки дружественных проектов.
UPD: это устаревшая версия. Актуальная версия и документация лежит на https://git.ssleg.tech/anton/qiwi_module
Вопросы, замечания и благодарности можно складывать под этим постом
https://yangx.top/ssleg/322
UPD: это устаревшая версия. Актуальная версия и документация лежит на https://git.ssleg.tech/anton/qiwi_module
Вопросы, замечания и благодарности можно складывать под этим постом
https://yangx.top/ssleg/322
Поскольку Паша у нас либертарианец, то стандарты ему не писаны и у телеграм свое понимание языка markdown. Причём не описанное в документации, но легко излекающееся из сообщений.
Держите рабочую шпаргалку, как форматировать текст в сообщениях.
В результате получится такая строка:
123 123 123 123123
Держите рабочую шпаргалку, как форматировать текст в сообщениях.
В результате получится такая строка:
123 123 123 123
123
123 123 123