Вы видите копию треда, сохраненную 30 июня 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>2201736 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
Исходник: https://dumpz.org/bASGKD8cCFDf
ни разу с этой хуйней не работал
но асинхронные коллбеки в пистоне могут работать по разным принципам, их могут высирать в отдельном треде, а могут запускать в asyncio ивент-лупе как в жс
чтоб проверить тред, введи логирование и передай туда threading.current_thread().name и threading.current_thread().native_id
И как же по-твоему работает вот этот код, м? Понять хоть можешь, почему он так написан? (один хуй что жс, все то же самое тут)
Видел на ютубе плейлист от не очень популярного чела, который к асинхронщзине на последнем видео проходит весь путь начиная прям с оси, это наверно тебе нужно. Пиздуй искать.
https://stackoverflow.com/questions/55868685/update-a-gtk-progressbar-from-another-thread-or-process
Glib.idle_add или Glib.timeout_add, видимо, использовать надо.
Ахуенно они хантят. А если я даун и не умеют работать с эластиком, постгресом, кубером, реббитом, кафкой? Все равно возьмут лол, прост потому что алгоритмы надрочил. Каеф.
да им похуй, хуяндекс обычно рабов набирает
Есть 2 ветки: одна базу корраптит, другая секретные ключи сливает, какую в мастер зальешь, какую в прод соберешь?
вы приняты
>Прошел собес в Хуяндекс на Мидла.
>А если я даун и не умеют работать с эластиком, постгресом, кубером, реббитом, кафкой?
Дык их надо знать не кодеру, а ДевоПсу. Тебе просто дадут гайдлайн, где будет описано, в какие интерфейсы что в каком формате слать и как в stdout выводить.
Нормально на нем проектов, сам работал. Но он тупо устаревший уже и сейчас нахер не нужен.
Выпустили нативную асинхронщину
Куда с ним можно устроиться кроме МЛ и БигДата?
Ну выучил я синтаксис питона, что дальше делать?
Вот у жскрипетров все понятно - фроненд он и есть фроненд.
В общем, ковыряю я джангу на локалхосте, только учусь.
И смотрю я так, там есть всякие удобства для работы с БД, реально круто всё.
НО.
Мне как-то с базами привычнее общаться на кастомном SQL.
В том числе самому рулить вьюшками и функциями с нарезанными правами и обозначенными транзакциями. Видимо, сказывается опыт Operations-универсала и ВУЗовские времена с дипломом на Delphi.
Скажите, плиз, работать в джанго будет эффективнее через модели или таки через чистый SQL.
А ещё, пока писал, подумал -- если мне модели никуда не упираются, то, может, проще Flask взять? Я, правда, о нём толком не читал даже, но, вроде, из MVC у него свой Controller, вместо Models я могу использовать чистый скуль, а View наверняка реализуется той же Jinja, только её нужно отдельно подключить?..
А работает Flask вроде бы как быстрее.
>Куда с ним можно устроиться кроме МЛ и БигДата?
Технически - куда угодно.
Хочешь - в бэк на Django/Flask, хочешь - на десктоп (PyQt, Tkinter), хочешь - в автоматизацию и так далее, и тому подобное.
В принципе и на мобилках что-то есть, но там такое... Есть PyQt в Sailfish/Аврора и Kivy, который вроде ругали, но не вполне понятно, за что.
Впрочем, самые традиционные сферы - это backend в том числе крупных проектов: Инстаграм, Пинтерест, Нетфликс, Дропбокс, Реддит и т.д., плюс у многих есть отдельные системы на Python даже если сайт на каком-нибудь позорном .NET и те, где Python используется как "штука, на которой можно быстро набросать ПО для связки": BD, ML, QA и т.п.
Впрочем, есть немало компонентов и крутых систем, написанных на чистом Python, например... нашёл занятный список: https://proglib.io/p/great-python-projects
У больших контор ещё всегда есть огромный зоопарк бэк-сервисов (типа "а вот эта хуйня у нас поднимает и настраивает виртуалки, а вон та - следит за актуальностью пользователей и интегрирует 1С:Кадры или как её там? А, похуй! с AD, а вот это наш IdM, тут рулятся права") и они очень часто пишутся на Python потому что просто, быстро и надёжно.
Я лично на нём пишу пэт-проекты для web (в том числе API) и CLI с перспективой в Desktop а, если повезёт, то и в iOS.
Выводит срез массива без первого элемента.
Подробнее:
https://pythonworld.ru/osnovy/indeksy-i-srezy.html
Вернее не "выводит", а "возвращает".
Спасибо
Формат входных данных
На вход программе подаются два числа, каждое на отдельной строке.
Формат выходных данных
Программа должна вывести все простые числа от a до b включительно, каждое на отдельной строке."
Объясни, почему работает код на первой картинке, но не работает код на второй картинке(выводит единицу).
Не сильно он и разный, проверка i !=1 есть в обоих случаях, только в разных циклах.
Дядь, ты думаешь что если одинаковые слова напишешь, но в разных местах - будет один результат?
Смотри, во втором случае проверка i != 1 не должна увеличивать переменную count, следовательно, не должно выдавать 1. Почему выдает тогда? Ну а в первом вроде понятно, проверка идет уже перед печатью, следовательно если i = 1, то i не будет выводиться.
Ты можешь популярно объяснить? Я что-то не так понял?
622x640, 0:23
Блин, и правда. Спасибо тебе!
Да не, ты прав. Интерпретатор тупой, заливает говно тебе в клавиатуру.
Серьезно, дебагай хоть, а не лети по первой ошибке на двач
>Скажите, плиз, работать в джанго будет эффективнее через модели или таки через чистый SQL.
ORM нужны не для упрощения разработки, а для упрощения поддержки. Это промежуточный слой между твоими моделями и таблицами в БД. Благодаря этому у тебя есть возможность что-то дорабатывать в моделях, менять, и всё достаточно прозрачно, без необходимости помнить о всех запросах к БД, которые где-то в коде могут быть.
>А ещё, пока писал, подумал -- если мне модели никуда не упираются, то, может, проще Flask взять?
Тогда лучше смотреть на асинхронные решения вроде aiohttp или FastAPI. С последним не работал. Асинхронность как раз на таких задачах очень хорошо работает. И это то, с чем проблема у синхронной джанги.
фастапи.
В джанге технически теперь есть асинхронность, но судя по коду юзают ее не то чтобы часто, да и в целом на таком старом комбайне это больше похоже на приколоченный сбоку костыль.
https://pastebin.com/g9ieQ10U
А, стопэ. Заменил Type[Base] на Union[Foo, Bar] и ворнинги пропали. Хотя вчера еще это не срабатывало почему-то.
TypeVar я пробовал - он заткнул пайчарм, но все еще не нравился mypy. Но я хз, может, я его как-то неправильно оформил.
Union всегда робил
В недавних версиях пистона еще добавили человеческую запись типов через разделитель |
Все равно было бы неплохо разобраться, чем заменить Union на случай, если вариантов наследников будет становиться со временем больше. Хотелось бы как-то раз и навсегда обозначить, что в этом аттрибуте могут быть любые наследники Base.
А, я понял. Вчерашний пердолинг с этой хуйней был вызван тем, что я пытался в аттрибут запихнуть не инстанс, а класс Foo или Bar, чтобы позже дернуть self.foo_or_bar() Если не выебываться, то простые хинтинги работают, как ожидается.
> Для этого надо жс знать все равно же?
So-so.
Чтобы натыкать в нужные места страницы bootstrap'овские стили и скрипты прямо ЗНАТЬ не надо, достаточно базового HTML и примеров из интернетов.
Впрочем, я выкручиваюсь ещё проще: я сам делаю рабочую, полнофункциональную заготовку, а потом обращаюсь либо по приятелям из сети, либо на фрилансовых ресурсах, чтобы они мне за копеечку малую красиво всё обернули: говорю "видишь это работающее дерьмо? Сделай фронт красивым, вот тебе мои шаблоны на Jinja2, держи, там есть все вызовы."
Я так-то и CSS не знаю и даже, стыдно признаться, с вёрсткой div'ами не до конца освоился. Я отличаю "хорошо" от "плохо", но сделать по красоте не получается потому, что не знаю, "что именно нужно сделать, чтобы было хорошо", так что пусть это сделают за меня. Главное, что я решил для себя -- не жадничать и в первый раз, особенно новому человеку, можно заказать просто сделать "по красоте" на его вкус, но потом за каждую конкретную доработку (там, где его вкус дал маху) не сраться, а отдельно доплачивать.
странно, на джанге куча вакансий на хх, а на фастапи/фласке не так уж и много
Фласк умер практически, на асинхронный фреймворках работы не так уж много, но достаточно
Заставил его в общем то выписывать акции и цены но возникла проблемка в том что сайт не дает скрипту работать если он работает больше нескольких часов и у меня вопрос как это обойти? Насколько я понимаю мне надо вставить туда прокси а как это сделать ибо мне нужно все еще хорошее интернет соединение для того что-б у скрипта был смысл работы и возник вопрос а как в скрипт прокси пришить? В txt формате любые
на апи через requests ходишь? ему параметром можно прокси передать
алсо хедер меняешь в запросе? там вроде по дефолту чето типа python-request было, мб из за этого мозги ебет
Ну офк спрос на джангу больше, фул асинхронщина реже требуется (хотя честно говоря там все оч просто и можно дохера чего быстро накидывать не хуже, ем в джанге, любители перегруженных монстрофреймов заебали).
>любители перегруженных монстрофреймов
сеймыч, на джанге только какие нибудь интернет магазины и бложики клепать, как люди в одной вакансии употребляют "микросервисная архитектура" и "джанга" я просто хуй знает, там такой ебаный монстр делается после startproject, что я просто хуй знает почему его до сих пор все юзают
ну удобный там DRF, и хули? сейчас не 2015 год, есть сваггеры-хуягеры и рест строится как два пальца
Да, спасибо нашел как сделать только когда прокси умрут надо будет новые записывать
можешь написать отдельный скрипт, который будет проверять живы ли прокси, и если их слишком мало живых осталось идти на какой нибудь сайт где они лежать и парсить еще пачку оттуда
Если нет, есть ли какой другой общепризнанный модуль, где это реализовано?
>как люди в одной вакансии употребляют "микросервисная архитектура" и "джанга" я просто хуй знает
Это от непонимания. Тобой. Что значит "микросервис". Микросервис не обязательно маленький и юркий, он может быть сколь угодно монструозным. НО! Он должен решать (и решать хорошо) одну конкретную задачу. Тогда проект, разделённый на массу микросервисов, будет иметь преимущества при разработке, масштабировании до всяких HighLoad и т.п.
Например, ты пишешь тот же магазин, но выделяешь сервисы авторизации отдельно, оплаты отдельно, взаимодействия с базой склада - отдельно. И каждый из них может быть хоть на джанге (если в этом есть какой-то смысл), хоть на хаскеле, хоть на Асме. В какой-то момент начинаются проблемы, затыкается и тормозит сервис оплаты, ты берёшь и увеличиваешь scale для payment-подов в ReplicaSets и всё.
Иногда это дешевле (и всегда - быстрее), чем оптимизировать код.
Тут надо оговориться, что джангу можно засунуть в микросервис. С одной стороны. А с другой там архитектурно создаётся проект, а внутри проекта - приложения, которые по большому счёту и должны быть микросервисами. То есть архитектурно джанга плохо адаптирована для микросервисов, хотя это и не делает такую разработку невозможной.
Маленький программный компонент выполяющий только определенные задачи.
>ORM нужны не для упрощения разработки, а для упрощения поддержки...
В целом понятно. Если мне в каком-то запросе нужны будут данные, не предусмотренные вьюшкой, то мне придётся править и представление и приложение, а в случае со штатными инструментами -- можно обойтись только приложением...
Я подумаю ещё раз, но пока склоняюсь к SQL.
> Тогда лучше смотреть на асинхронные решения вроде aiohttp или FastAPI.
Посмотрел. Первое и мельком. Но если с Джангой я понял, как получить сайт за пару часов (а полный проект на видосах был часов на 14) и все инструкции были последовательны, с Фласком до Jinja дошло ещё быстрее, минут за 30 (правда, без баз, настроек, админки и прочего), а вот для aiohttp всё начинается откуда-то с середины и сразу городится неслабый огород из несвязанных файлов с непонятным кодом. Возможно, все авторы манов, которые мне попались исходят из того, что вкатыш уже съел целую овчарню в веб-кодинге и асинхронщине, но у меня кейс другой. Пойду, покурю второе.
В любом случае спасибо за совет. Не уверен, что асинхронщина мне прям сильно понадобится, но почему бы и не освоить.
Как вариант -- напишу API на Flask для начала, а там -- буду думать и, может, даже перепишу. На то оно и пэт.
> Микросервисы на питоне это что?
То же, что и на C++, Rust или чём угодно ещё:
небольшая часть системы, решающая конкретные задачи. При этом микросервисная архитектура подразумевает, что вся система должна состоять из таких небольших кусочков, общающихся друг-с-другом по оговорённому API.
Как правило современные микросервисы реализуются таким образом, чтобы быть упакованными в контейнер наподобие Docker и управляться системой оркестрации наподобие Kubernetes.
Для больших, огромных и гигантских проектов такое разделение решает уйму вопросов:
1. Упрощает разработку и поддержку (небольшие куски проще реализовать);
2. Упрощает тестирование (если у тебя есть конкретный кусок кода, отвечающий, за конкретный функцонал, то тебе нужно просто убедиться, что он правильно отвечает на правильные вопросы (и выдаёт понятные системе ошибки если вопросы некорректны) и для этого достаточно гонять его API, а не всю систему и каждое место, откуда может быть такое обращение)
3. Упрощает масштабирование, как описано выше: >>14955
>ты берёшь и увеличиваешь scale для payment-подов в ReplicaSets и всё.
А ещё это модно, поэтому даже крохотные, маленькие и средние проекты теперь стараются делать по микросервисной архитектуре. Хотя под с двумя страничками и рядом HA-кластер DB смтрятся довольно смешно.
Работаю в Сбере. Пишу на Джанге (и на фастапи). Хз о чем ты
Если тебе нужна асинхронность, то юзай асинхронную, а если синхронность, то синхронную, я щитаю.
Если у тебя асинхронщина, то асинхронную, если нет, то нет. Что за вопрос вообще?
Графоний не пишут, а какую-то внутреннюю логику можно, хули нет?
Но он несколько тяжеловесен для этого, обычно берут какие-то луа или подобные залупки.
Иногда делают на нем скриптовый движок для квестов, поведения персонажей и подобного
Смотря что понимать под играми. Графику? Ее врядли пишут, тут только низкоуровневая хрень, только хардкор. Логику клиента? Можно, если она не слишком тяжелая. Логику веб-серверов? Да пожалуйста. Для этой цели вообще любой язык подойдет. И да, это тоже игра. У меня бек в игре по объему в 6 раз больше клиента, потому что вся логика по сути там происходит, а клиент только ее пользует.
Ты, как минимум, можешь роутить логи в разные файлы в зависимости от того, в каком модуле триггернулся лог.
Знаю что можно через целери, но в тз обязательное условие - редис
def decorator_function(fuckin_class):
Хуйню спросил. Переформулирую.
Хочется чего-то вроде fuckinclass.double=fuckinclass*2
Тип если у нас было
@decorator_function
class C(int):
---pass
и С(8)
То получить
obj.double=16
Но правая часть вначале точно так не работает
А как это в практическом смысле выглядит? Типа папка для авторизации, где свой какой-то докерфайл с подниманием сервера и aiohttp, далее там папка оплаты какая-то и опять aiohttp какой-то, который выдаёт свои странички... и оно всё как между собой потом общается типа подписи какие-то цифровые между сервисами или типа просто потому что в одной сети находится и...? И потом типа все это собирается в докер композ или чем-то сложнее.
Или как это? Что-то не особо представил себе.
Спасибо, надеюсь до утра поживет
У меня нет никаких файлов с логами, и нет никаких модулей. Есть лишь один среднего размера скрипт, в котором иногда что-то надо отследить (при обновлениях ошибки в результатах появляются, скажем). Выбор между фильтрацией кучи лишнего говна и ручным проставленим безусловных принтов в тех местах, где нужны подробные данные (вплоть до значений в каждом цикле и т.д.). А хотелось бы просто активировать нужный тип логов и получить только то, что надо.
Я просто даже не знаю, как искать, ничего толкового не гуглится, кроме примитивной работы с logging модулем. Даже аналоги не упоминаются, будто их нет.
>>15574
>>15579
Ты херню какую-то творишь, по-моему, но можно вот так — https://ideone.com/f5fjdU
>где нужны подробные данные
В смысле, там, где они нужны прямо сейчас, с последующим удаленим после отладки. Разумеется, вариант не очень удобный.
У меня в принципе другое задание, но чтоб не копипастить код, вырезал конкретный кусок и упростил до той постановки что скинул. Самому же буит милее если адаптирую и пойму
Только сейчас заметил твой ответ. Спасибо.
Проверил. Везде MainThread. Возможно, после каждой загрузки файла весь интерфейс виснет на пару секунд по каким-то не зависящим от меня причинам.
Видел на ютубе одно видео, не знаю, как называется, но очень хорошее видео, пойди, посмотри, ну поищешь там сам, найдёшь, там ещё парень такой в пиджаке что-то рассказывает.
мимо
Я их приделал куда только можно, но оказывается, что колбэки этих FIleLoader вызываются в MainThread. По крайней мере теперь я это знаю.
Этот плейлист гуглится по запросу "асинхронность python" прямо на первой же странице одной из первых строчек. Не ебу, как он умудрился его пропустить, если так загорелся желанием понять кишки асинхронности.
Скачал питон 3.10
Запустил python -m pip install -U matplotlib
Запустил pip list (mathplotlib там есть)
Набираю python -> import mathplotlib, а там пик
str = '☽ Луна'
print(str)
в результате что-то не то с кодировкой и на выходе вместо символа луны прямоугольник, сам код в кодировке utf-8
точно, одну попробовал вышло не совсем то что нужно, но хотя бы уже что-то, теперь осталось подобрать число кодовой страницы
да, chcp 936 немного подходит но теперь пробелы между символами
Там в компоузе поднимается контейнер с редисом.
Думаю, это намек на Celery, оно же через редис работает. Ну чтобы остальные не ждали пока поток занят обработкой одной картинки
Так а откуда ж ему знать, что первый результат — это именно то, что имели в виду, если никаких конкретных опозновательных знаков не дали ("не очень популярный чел" это хуйня)?
Если так просто ищется, мог бы и скинуть ссылку сразу, если уж влез "помогать".
Можно ли экранировать перенос в f строке?
Например:
f'''431414141441
4525515'''
И чтоб в одну строку все было после этого.
А почему не экранирует если написать так: f'оп хуй\\nили нет',
при переносе же также \n добавляется которую слеш экранирует.
class A:
....def __init__(self, args, *kwargs):
........self.some_var = some_child_class()
Так вот, когда я делаю
a = A()
a.some_var.xxx = 1
Как мне отловить изменение атрибута some_child_class внутри класса A? Нужно именно в A, т.к. дальнейшие манипуляции будут именно в нем
Типа
def __setattr__(self, name, value):
....#Что тут сделать внутри класса A?
Человек и кошка плачут у окошка
Серый дождик каплет прямо на стекло
К человеку с кошкой едет неотложка
Человеку бедному мозг больной свело
Доктор едет-едет сквозь снежную равнину
Порошок целебный людям он везет
Человек и кошка порошок тот примут
И печаль отступит и тоска пройдет
Ну збс. У тебя там еще и докер.
Но само наличие редиса нихуя не говорит о асинхронности. И даже не требует наличия селери. Это разные вещи вообще.
В т.з. ни слова про асинхронность. Джанга в проде умеет в несколько воркеров, так что ждать никому не придется. если ты только не запустишь туда 50 одновременных загрузок гигабайтных картинок.
Узнай что конкретно нужно и уже тогда спрашивай. Если будешь делать то, что тебе кажется, можешь сделать хуйню.
>Или как это? Что-то не особо представил себе.
Можно папка, можно целый сервак, можно что угодно.
Вот, допустим, у тебя есть сервис авторизации и управления доступом, с неким API, пользователь открывает страницу/карточку в системе/ещё какую-нибудь хурму, большой сервис берёт и по API спрашивает "SIDSession ID, PathЧто пытаются открыть: можно?" и получает "да"/"нет"/"пусть сначала авторизуется".
Если получил "да", то открывает запрошенный ресурс, если "нет" -- выдаёт access deny, если третий -- открывает окошко логина.
Так вот, для внешней системы не интересно, как внутри сервиса авторизации устроено назначение и разграничение доступов, проверка пароля и прочее, оно знает только как спросить за доступ и как реагировать на ответы.
Если сервис авторизации и контроля доступа кроме этого ничего не делает, то это микросервис вне зависимости от того, насколько он большой.
И ещё раз, неважно, есть ли там папочки, Docker (который вообще говоря хоть и позволяет удобно работать с микросервиами не заточен именно на них), Swarm/Kubernetes или ещё что, хотя они дают свои плюшки (про них я отдельно кое-что могу рассказать, конечно, но сейчас не важно).
С другой стороны -- монолит. В монолите нет выделенного сервиса, авторизацией занимается совокупность методов, находящихся в основном коде системы.
Итак, о профитах:
> Упрощает разработку и поддержку
Когда приходит тикет на доработку системы авторизации ты берёшь ограниченную часть кода, которая ничем кроме разграничения доступа не занимается. Кода меньше, связей с внешними системами меньше, разобраться проще, наделать ошибок -- сложнее. Бонус: повышается качество и надёжность системы в целом.
> Упрощает тестирование
Ты запустил этот сервис в тестовом контуре с тестовой БД и шлёшь ему по API разные запросы и слушаешь всякие ответы. Это легче, чем взять целиком сайт или программу и тыкать в разные её куски, чтобы понять, не сбойнёт ли где контроль доступа.
> Упрощает масштабирование
Пусть даже без кубера. Система контроля доступа изолирована и может быть запущена отдельно от остальной системы, а значит, если ей не хватает ресурсов можно поднять 2, 3,...100 инстансов и настроить балансировщик (DNS Round-robin, NGINX или аппаратный балансер, HA-Proxy, ReplicaSets -- не важно, главное, чтобы Ops это умел).
О недостатках:
1. Накладные расходы ВЫШЕ. Передать значения в свою же функцию проще и быстрее, чем обернуть их в запрос, передать, дождаться ответа, распарсить этот ответ...
2. Повышается общая сложность проекта. Иметь разрозненные куски и поддерживать связи между ними, вовремя актуализировать API в случае изменений... В общем, возни уйма.
Реально профиты от микросервисов превышают недостатки только в больших и выше проектах, они прекрасно живут в огромных, иногда приживаются в крупных, в гигантских это просто единственный пристойный путь потому что там внутренних связей OVER ДОХУЯ.
В мелких же, небольших и даже средних проектах (вплоть до интернет-магазина со средней нагрузкой, примерно) лучше не заморачиваться. Но это не значит, что нужно класть хуй на HA-DB, CDN, DDoS-Protection и прочее.
>Или как это? Что-то не особо представил себе.
Можно папка, можно целый сервак, можно что угодно.
Вот, допустим, у тебя есть сервис авторизации и управления доступом, с неким API, пользователь открывает страницу/карточку в системе/ещё какую-нибудь хурму, большой сервис берёт и по API спрашивает "SIDSession ID, PathЧто пытаются открыть: можно?" и получает "да"/"нет"/"пусть сначала авторизуется".
Если получил "да", то открывает запрошенный ресурс, если "нет" -- выдаёт access deny, если третий -- открывает окошко логина.
Так вот, для внешней системы не интересно, как внутри сервиса авторизации устроено назначение и разграничение доступов, проверка пароля и прочее, оно знает только как спросить за доступ и как реагировать на ответы.
Если сервис авторизации и контроля доступа кроме этого ничего не делает, то это микросервис вне зависимости от того, насколько он большой.
И ещё раз, неважно, есть ли там папочки, Docker (который вообще говоря хоть и позволяет удобно работать с микросервиами не заточен именно на них), Swarm/Kubernetes или ещё что, хотя они дают свои плюшки (про них я отдельно кое-что могу рассказать, конечно, но сейчас не важно).
С другой стороны -- монолит. В монолите нет выделенного сервиса, авторизацией занимается совокупность методов, находящихся в основном коде системы.
Итак, о профитах:
> Упрощает разработку и поддержку
Когда приходит тикет на доработку системы авторизации ты берёшь ограниченную часть кода, которая ничем кроме разграничения доступа не занимается. Кода меньше, связей с внешними системами меньше, разобраться проще, наделать ошибок -- сложнее. Бонус: повышается качество и надёжность системы в целом.
> Упрощает тестирование
Ты запустил этот сервис в тестовом контуре с тестовой БД и шлёшь ему по API разные запросы и слушаешь всякие ответы. Это легче, чем взять целиком сайт или программу и тыкать в разные её куски, чтобы понять, не сбойнёт ли где контроль доступа.
> Упрощает масштабирование
Пусть даже без кубера. Система контроля доступа изолирована и может быть запущена отдельно от остальной системы, а значит, если ей не хватает ресурсов можно поднять 2, 3,...100 инстансов и настроить балансировщик (DNS Round-robin, NGINX или аппаратный балансер, HA-Proxy, ReplicaSets -- не важно, главное, чтобы Ops это умел).
О недостатках:
1. Накладные расходы ВЫШЕ. Передать значения в свою же функцию проще и быстрее, чем обернуть их в запрос, передать, дождаться ответа, распарсить этот ответ...
2. Повышается общая сложность проекта. Иметь разрозненные куски и поддерживать связи между ними, вовремя актуализировать API в случае изменений... В общем, возни уйма.
Реально профиты от микросервисов превышают недостатки только в больших и выше проектах, они прекрасно живут в огромных, иногда приживаются в крупных, в гигантских это просто единственный пристойный путь потому что там внутренних связей OVER ДОХУЯ.
В мелких же, небольших и даже средних проектах (вплоть до интернет-магазина со средней нагрузкой, примерно) лучше не заморачиваться. Но это не значит, что нужно класть хуй на HA-DB, CDN, DDoS-Protection и прочее.
Я уважаемый разработчик на фрилансе. В данный момент пишу из Мельбурна. Сейчас допью бутылочку Dow's, "Quinta Senhora da Ribeira" и пойду спать
uvloop
Нет ты
Я пишу класс который при инициализации объекта шуршит по ФС считывает файлы и делает всяческие проверки внешнего мира. Соответственно я не могу гарантировать что все эти проверки закончатся корректно.
Есть какой-нибудь механизм который скажет, что объект не инициализировался? Типа вместо объекта взять и вернуть None. Если сделать return None в __init__() - не работает. В голову приходит добавить свойство .status, в который писать статус, но имхо это костыли.
Хотел patch() над классом повесить, но тогда не работает. А в setUp патчить перед вызовом - выглядит так себе
@anime
def f(x): return '@'
a=f.anime()
Из идей было делать декоратором из функции класс, но как то хз.
Годится, спасибо.
Если внутри функции определить функцию декоратором, то она не вызывается снаружи, что вполне очевидно. f has no attribute anime
(Я из Литвы, извините за грамматику)
Что ты имеешь в виду? Чтоб за тебя домашку всю делали? Тут дураков нет. Если какие-то конкретные вопросы будут, задавай, добрые люди ответят, так и быть.
Понел что во всех попытках я проебывал четвёртую строку, reeew
576x1024, 3:02
Сколько лет надо учить питон чтобы стать таким же умным?
576x1024, 3:02
Сколько лет надо учить питон чтобы стать таким же умным?
Уже вставили, uvloop называется
Ничего особо сложного там нет, а смотря на остальной детско-тиктокерской понос у него в аккаунте, он и это где-то подрезал и собрал по кускам для видяшки.
Где есть коммерческая ценность. Всякие рилетерские штуки, маркетплейсы, каталоги с контактами, соцсети.
Там заодно есть защита от дурака, так что можно попрактиковаться с асинронщиной, очередями, распределенностью, анонимизацией и прочими актуальными ништяками.
Блять забудьте, вы этого не видели!!!
Ну за шо, почему я вижу косяки только когда уже сообщю кому-либо о проблеме. Походу пора поспать
Антош, какие бы ты вопросы задал по Pandas для уровня junior+ ?
Конечно была идея писать:
msg = '\n' + msg + '\n'
Сообщение в конце и в начале получает перевод строки, но если выводить несколько таких подряд, то получаются двойные переводы строк, а в print такого нет. Как фиксить блэт?
>junior
Как отрыть csv, excel
Чем отличается loc от iloc
как сделать сводную таблицу
сортировка
использование pd.merge
>+
Подключение к sql
Что такое groupby
перевод столбца во временные ряды, как извлечь кол-во дней из даты
использование pd.concat
создание мультииндекса
использование pd.cut, отличие от pd.qcut
как создать именование агрирование по groupby
Спасибо, ты очень помог!
>Какие
1. Ты пидорас или педофил?
2. Кто по жизни?
3. Есть 2 ветки: одна базу корраптит, другая секретные ключи сливает, какую в мастер зальешь, какую в прод соберешь?
4. https://github.com/rougier/numpy-100/blob/master/100_Numpy_exercises_with_hints_with_solutions.md (numpy)
Это да. Но работать с pandas и не уметь работать с numpy - уебанство
ну некоторые функции может оттуда пиздить, например np.where быстрее чем Series.where
Асинхронный словарь/демультиплексор. Если значения в нем нет то повисаем и ждем пока оно появится, как только появится - возвращаем. Норм тема? Какие подводные такое юзать на реальном проекте вместо постоянного опрашивания через while True и time.sleep?
>Я пишу класс который при инициализации объекта шуршит по ФС считывает файлы и делает всяческие проверки внешнего мира
Проводишь эти операции отдельной функцией, и от её результата зависит, присвоится ли инстанс класса в переменную или None. Если тебе прям пиздец как нужна инкостыляция, пишешь эту функцию классовым методом.
>Ничего особо сложного там нет
Для синьора типо тебя или парня с видео - бесспорно.
А для новичка или вообще человека не связаного с айти это rocket science.
Очевидно же писать обёртку над sys.stdout.write(), которая у входной строки убирает все ньюлайны в начале и добавляет один в конце, если его нету.
Если это словарь, то нахуя на него методы вешать? Делай уже тогда нормальный класс.
Я не тот анон, но думаю он имел в виду - перегружай __getattr__ и __setattr__
Знаний самого питона-то там не так много надо, в основном сторонние вещи. Из чего видео устроено, как с этим хромкастом связать, как получать изображение с камеры и как там эти данные расположены (чтобы координаты точки получать), и т.д. Ну а дальше в питоне ты складываешь и умножаешь пару чисел и готово.
https://ideone.com/SosGtq то что не работает
https://ideone.com/xy4p8H то что идеально работает, но не подойдет по условию
Так, понятно, обновлять цсв надо.
Другой вопрос как обновить гигабайтный csv имея 100 мегабайт данных?
Если бы пара строк была, я бы гиговый файл через генератор читал и все строки проверял, а та ли это строка, что мне нужна, но сотня мегабайт?
А сейчас какой?
Вот объясни мне. Как ты пишешь тесты не читая документации?
Если тебе нужно повежение принта, то почему ты не используешь принт?
А что поменялось?
Ну, скажем, некая функция возвращает либо кнопку, либо лошадь. И если возвращает кнопку, то кнопку надо нажать, а если лошадь, то её надо покормить. В паскале это было бы что-то вроде пикрила. Хотя не сказать, чтобы это было красиво, но пользоваться можно было.
Может быть какой-то класс есть, который содержит в себе инстанс enum и меняет свой функционал в зависимости от этого инстанса?
Не подойдёт. В данном случае типы у лошади и кнопки могут совпадать. Это может быть, например, словарь в обоих случаях. Только в одном случае словарь представляет кнопку, а в другом - лошадь. Можно, конечно, возвращать помимо него отдельную переменную со значением "там в словаре лошадь". Но как-то некрасиво получается.
Если ты решаешь в стиле ооп, то это будут разные классы. Если нет, то можешь в словарь добавить какой-то ключ вроде type:'horse'.
Дело в том, что классы лошади и кнопки не мои. И отличить один от другого я могу только зная, откуда взят конкретный экземпляр. Поэтому их надо снабдить каким-то признаком. Вопрос в том, как это передать наружу из процедуры. Можно, например, передать как-то так: return {type:'horse',var:my_thing)
Но это как-то мерзко выглядит, как по мне.
Это же по идее одно и тоже, просто заместо переменной икс, я сразу вписал функции.
Это да, но в первом же случае аналогичная же ситуация нет? Там же икс тоже два раза стоит, или я что-то не понимаю?
Ты троллишь тупостью?
В первом случае ты один раз вызываешь input и пишешь считанное значение в переменную. Потом делай с ней что хочешь, значение лежит в памяти и все.
Во втором случае ты ничего в x не записываешь, а два раза вызываешь input, результат вызова которого ты обрабатываешь.
Контрольный вопрос - что делает оператор присваивания?
> В первом случае ты один раз вызываешь input и пишешь считанное значение в переменную.
Всё понял, спс. В переменную икс заносится уже всё посчитанное и обработанное.
> Контрольный вопрос - что делает оператор присваивания?
Оператор присваивания помещает значение выражения в место, отведённое переменной.
Я не знал этого, вот только сейчас понял.
не
> актуальность примерно 2015 года
А в чем прикол? Самый популярный яп же щас, а шапка плесенью покрыта. Есть смысл читать "укус питона"? Или официальной документации достаточно?
Итак, рассказываю.
Питон популярен и распространен, потому что его в базовой форме легко освоить. Поэтому, изучив эту базу, любой профессионал может получить значительное увеличение своей производительности. А если ты рандомное хуйло, то изучив питон ты так и останешься хуйлом.
Есть вариант стать питон-разработчиком для серьезного бизнеса, но для этого требуется дрочить не базовый питон, а весьма углубленно, плюс дрочить никсы, с которыми он тесно связан, плюч дрочить тулчейны в виде гитов-докеров-CI и ещё кучу всего. Тут дел не на один год, а если ты вообще пришел со стороны, то шансы стремятся к нулю.
Теперь про укус питона. Это или толстый троллинг, или вот такие рандомные долбоебы всерьез верят, что туалетная брошурка на пару часов позволяет выучить питон.
Документация дает список возможностей, а не как их применить. Для этого опять же надо дрочить очень долго или прийти из другого языка, в котором ты уже научился.
Из очевидного - нахуй CircleCI. Используй тревис. Или вообще встроенный CI гитхаба или что там у тебя.
> выучыл я сентаксес пытона, что дальша дылац?
Дальше осваивай библиотеку, используемую в будущей работе.
>код визуалилирует
Пердолим микросервисы и рисуем к ним диаграммы, где максимум указано кто у кого что запрашивает
Заставляют делать парсеры данных и автоматизацию на аирфлоу для других отделов.
Платят столько же.
Где я проебался?
Это скрепинг, а не майнинг.
Во время певрого запуска функции будет медленно работать, ну и очевидно, что вне функции модуль заюзать не сможешь
Эрик Мэтиз - Изучаем Питон, он же Питон краш курс на инглише. У них 2 редакция, у нас - 3. Курсы на Степике посмотри от Бигика, потом просто статьи, доки и видео по конкретным либам, фреймворкам и так далее.
Кодеварс и Литкод тоже подергай.
Благодарю
@ это просто сахар который тебе позволяет проводить операцию in-place
Пока питонист рисуют хуи лазерной указкой, плюсовик делает рейтрейсинг трехмерного фрактала в консоли.
https://www.youtube.com/watch?v=n4zUgtDk95w
b = str(input())
Как/можно ли это записать в одну строчку, чтобы ввод данных так же происходил с новой строки, а не в одну?
А если у меня целая куча переменных? Можно же как-то количество Input'ов до одного свести? Или мне пока не нужно думать об этом?
Подумой, то ли ты делаешь
Если у тебя целая куча переменных, может логичнее было бы их читать из файла / http-запроса ?
Читай из одного input-а по известному паттерну (через пробел например) а потом парси строку епт, че как маленький?
Вы хоть понимаете что таким образом код вообще не читабелен?
Ты воспринимаешь input как всемогущий и единственный способ передать данные программе
Можешь вообще через input ничего не хуячить, обозначь входные данные в самом начале проги, если нужно будет что-то поменять - измени их и перезапусти скрипт, для тестирования пойдет
Сторонний модуль (import)
http-запрос, в том числе на localhost
Базу данных (Postgres, Mysql, MongoDB и т.п.)
Системы кеша (Redis)
Файл в файловой системе (csv, json, yaml, ini, txt ...)
если ты их вводишь по ходу дела то аргс и кваргс вроде, там можно вводить до жопы
если из файла то инпут - файл
Это если я не путаю ничего, подзабыл питон пиздец
Имеется ввиду передача данных в программу извне
Еще есть такая херь как multiprocessing.Pipe - позволяет связать несколько разных интерпретаторов Питона. Один скрипт работает как Producer и передает данные второму (Consumer) через Pipe
Тут скорее про subprocess.Popen
a = "1"
b = a + 10
> нужно написать метакласс для этого класса чтобы он заработал
Анон, я не понимаю как это сделать вообще можно? Найти тоже ничего не могу.
Читаю csv файл. Надо отредактировать его. Файл не маленький, 1Гб примерно.
Можно в сырую читать его. Можно через csv. Но как через csv читать и писать одновременно? Т.е. отредактировать строчку какую-то. Без временных файлов. В сырую надо проверять на валидность строку, что длинна одна и та же, что разделитель не сменился. С ридером csv проще, но хз как прочитать и записать и без кучи переоткрываний файла.
Блять, я не в пет проекте делаю это, чтоб такую херню нести в зависимости.
Да нихуя, где? Я уже полчаса пытаюсь хоть что-то похожее найти.
У тебя не получится нормально редактировать существующий файл. Просто открываешь на чтение и новый на запись, потом молотишь построчно и пишешь, в конце новый переименовываешь на старый, заменяя его.
Какая нахуй ссылка? "метакласс для этого класса чтобы он заработал"?
Или может прочитать файл, найти строки на редактирование. Закрыть файл и открыть на чтение, пройтись и заменить. Какие подводные? Редактировать никто файл не будет, кроме этого скрипта.
https://ideone.com/YjLkeV
Данные принимаются, в очередь они и правда кладутся но сука ничего не обрабатывается. Никаких ошибок - просто функция produce молчит и все
А как длинна изменится, если никто не трогает?
Читать буду построчно, записывая номер строки и данные какие куда вставить.
К слову, раньше изучал по django by example и two scoops of django и вижу, что их заапдейтили до актульной версии, они до сих пор норм?
Это набор статей, а не структурированное последовательное повествование
Есть варик чисто на асинхронке, но это наверное не совсем то. Тут несколько воркеров сразу тащат данные из очереди, но мы блокируемся на вызове input()
https://ideone.com/ytCNtW
Если никому кроме тебя и скрипта этот файл не нужен и он по сути просто является базой данных, то почему ты просто не развернешь какой-нибудь sqlite?
coords = manager.dict()
В этот момент только один процесс взаимодействует с coords, так что не совсем понимаю, откуда появляется ошибка. Из-за чего она обычно появляется?
line = await aioconsole.ainput('Is this your line? ')
Этот файл - словарь для кликхауса.
Код то где? Брокен пайп значит, что кто-то пытается читать из источника, который закрыл коннект
У вас ПИПА СЛОМАЛАСЬ.
s='45'
s.isnumeric()
Out[13]: True
s='45.3'
s.isnumeric()
Out[14]: False
Да, а как вы узнали?
Тебе что в словосочетании "ВСЕ символы обозначают цифры" непонятно?
Стиль гайд от авторов языка.
А должно вот так.
Хорошо математику знаешь? Будешь с выпускниками матвышей конкурировать. Имхо, проще в Джанго, а еще легче в QA Automation
Дата сайенс - огромный блок. Сейчас роли еще больше делятся. Есть майнеры, есть etl, есть инженеры, есть аналитики и есть, непосредственно уже, сатанисты.
Во что-то легче, во что-то сложнее.
На деле 60% всех задач у сатанистов - скрапинг, майнинг и валидация, затем 30% - инжинеринг и etl, затем 5% - дашборды и отчетность и только 5% - внезапно сатанизм.
Вопрос снят: нужно юзать alpha_composite вместо paste в этом случае.
суть такая:
есть массив, из него нужно удалять постоянно по одному случайному элементу, пока не останется один
x=len(B)
count3=x-1
while count>=1:
z=random.randint(0,count3)
B.pop(z)
print(B)
Написал так, но пишет что pop index out of range
Помоги, анон, пожалуйста
добрейшей души человек, можешь мои каракули поправить? все равно родить не могу, ошибку сыпет
Надо побольше хороших и разных.
А то и показать нечего и на собеседование ссыкаю идти.
bayt of python
Лутца выборочно.
У кого убежал пациент ПНД?
чел, ты в бэке на пиздоне знания этих задачек будешь очень редко применять, лучше бы сразу джангу дрочил
мимо вкатившийся васян БЕЗ АЛГОРИТМОВ
Вот что мне предлагали на джуна. ЗП на позициях 60-70к, дс
Если научился решать небольшие задачки так, чтобы не получалось O(n^2) вместо O(1), то приступай к созданию чего-нибудь реального офк.
Как научиться джанго до такого уровня? Если это джун, должно быть просто и быстро же? Мне по сути сильно не хватает микросервисов в своей работе, чтобы не скриптами и компилятором страдать. Развернул и люди пользуются. Что учить, что читать?
У тебя из шаблонов собирается целая страница. Сделай так что бы в ней был подключен этот css
> Фреймворк PyCharm
Это не фреймворк, а ИДЭ
Иди доки читай.
Все эти сайты исключительно для членодрочерства. Обычно сперва ты пишешь проекты, а уже потом идешь туда решать задачи, чтоб все охуели как ты можешь.
Если хочешь что то написать, то бери и пишы.
inb4 Да потому что он сам написан не на питоне
А как же тогда, для одной программы использовать сразу несколько отладчиков? Это вообще законно?
>Как научиться джанго до такого уровня?
Это вообще энтри левол. Джанги тут по минимуму, ты просто получаешь параметры в реквесте и отдаешь красиво сложеннный жсончик
>микросервисов
пока забей
>чтобы не скриптами и компилятором страдать. Развернул и люди пользуются. Что учить, что читать?
докер
Два чаю тебе, анон.
Cпасибо.
Вот например:
for name in iter(sys.stdin.readline, ''):
Можешь взглянуть на протоколы как некое подобие, только с обычным уже существующим классом не прокатит, так как он (очевидно) не заявлен как протокол — https://docs.python.org/3/library/typing.html?highlight=protocol#typing.Protocol
Для возможности проверкой в рантайме, а не всякими тайп-хинтингами через сторонний mypy, нужно его ещё в декоратор обернуть — https://docs.python.org/3/library/typing.html?highlight=protocol#typing.runtime_checkable
Лучше просто проверить, что у объекта есть нужные тебе методы напрямую, или вовсе не передавать неправильные объекты в функции, не ожидающие их.
Типа вот такой код (в 3.7, который на сайте, естественно, не работает) — https://ideone.com/yFRDBh
Ты заигрываешь с функциональность, которая не от языка сего. Брось это дело. лучше просто дергай метод который должен быть и падай если его все таки нет.
Как вариант можешь в классе создать некую специфическую переменную class_name = 'SomeClass' и по ней чекать.
Блять, я чисто эмпирически тыками дошел что это надо нахучить вот так
Какого хуя интерфейс вызовов абсолютно разный в зависимости от того указываем мы sentinel или нет?? Мне никаких лямбд не надо было совать в первом случае
Надо читать документацию.
Не, мне просто интересно где меня наебали, когда в книгах или на том же Степике мне сказали, что в Питоне есть и ФП и ООП, а тут мне говорят тип "нет у вас ни хуя". Ну я могу понять, что ООП в Питоне может какой-то неполноценный, но ФП то с какого хуя нет?
>а тут мне говорят тип "нет у вас ни хуя"
Ну а ты им и отвечай: "Хуй будешь?". И сразу же просекут они, у кого что есть, а у кого нет. А то ты больно мягко с ними
Софт скилы они такие
>чисто эмпирически тыками
А мог бы просто прочитать документацию, ссылку на которую я тебе уже дал.
>object must be a callable object
>The iterator created will call object for each call o its __next__() method
https://ideone.com/yPZoUp, например.
>>20379
>чевидно что sys.stdin пустой
Потому что stdin не выдаёт пустную строку, когда он пустой, а блокирует и ждёт прихода-то чего-то. Пустую строку он, как сказал >>20437, он может выдать только если бы закрыт (как и любой другой поток, в общем случае).
Только в ссылке запятая
Пробегаешься по списку ключей, где для каждого i в этом списке добавляешь в новый список (список значений) значение из словаря. Ты же знаешь как обращаться к значению в словаре по ключу?
>Пробегаешься по списку ключей, где для каждого i в этом списке добавляешь в новый список (список значений)
Подсказать сколько у тебя итераций будет в худшем случае? Особенно если словарь большой?
Первое что в голову пришло. Так-то наверное можно и лучше сделать, если подумать.
Словари на хеш-таблицах, так что O(N)
Покажешь, как можно лучше/быстрее, чем один проход по списку?
Покажешь, как можно лучше/быстрее, чем один проход по списку?
Короче, интересует литература, которая не для нюфагов предназначена, что нибудь по проектированию реста, middleware, асинхронщину и вот это вот всё
есть че нибудь такое?
Пиздец.
1. Выучить базово js (месяц максимум) + Cypress
2. Выучить питон базово (месяц - три) + Selenium
Хочу дальше развиваться онли в вебе. Как думаете, что выбрать? И на каком уровне вообще надо знать питон/js для автоматизации тестирования?
Тебе в QA тред
QA automation - это полные овощи, которым хватило мозгов для того, чтобы быть программистами, но в тоже время они не могут работать полноценными аналитиками. Это полная хуйня, за тебя пишут все основные абстракции для тестов твои соплеменники-программисты, потому что они банально больше шарят в области и могут по-быстрому запилить мини-либу для тебя, чтобы твоя производительность повысилась в разы.
Так что если тебе похуй на работу, на карьеру, смело иди в аутомейшн, если нет, то или прокачивай аналитический склад ума, изучай ту часть бизнеса, где ты планируешь работать и иди в аналитики. Или развивай аналитический склад ума, подкачивай технические навыки и иди в погроммисты.
Кекнул с фантазий. Сразу страшим разработчиком тебя сделать могут, если к другу на фирму пойдешь. В других случаях именно из-за отсутствия коммерческого опыта тебя выше джуна не позовут.
>Потому что stdin не выдаёт пустную строку, когда он пустой, а блокирует и ждёт прихода-то чего-то
Нихера себе, то есть получается что функция next здесь является асинхронной? Как правило если итератор не может выдавать значения он не "ждет" а просто истощается, например очередь collections.dequeu - если вытаскивать элемент из пустой очереди она не будет ничего "ждать" а сразу вернет результат (ошибку вернее), чтобы ждать надо заюзать asyncio.Queue, вот там метод get через await остановится и будет ждать поступления элементов в очередь
> аналитиками
ПрИвЕД фсем иЗ 2003
нАпЕшИ мну на аську а тО эТаТ фОрУм аЦтОйНыЙ нИмАгУ
Да я мелкими шажочками иду к куаа.
Просто по жизни проебался знатно. 25 лет, а щас зп всего лишь 60к.
Хочу через полгода вкатиться в qaa и уже иметь 100к. Спустя время вырасти до 150-200 и мне вообще хватит в принципе.
Я никогда не был фанатиком разработки. Типа, знаешь, есть код, а ты его можешь упростить и усовершенствовать и получаешь от этого оргазм, типа такого - у меня этого нет.
Хоть я и учился на прогера, в вузе я нихуя не делал, да и обучение было пиздец уёбищным - никакого интереса. Сразу с плюсов начали. По началу было здорово в многопоточном программировании там заюзать по локалке 10 компов и скомпилить код быстрее, интересно было хотеть понять, как это работает и всё такое. Но потом началась хуета. Диффуры программировать заставляли, тервер (я это всё не любил лично и меня вечно тянуло в веб).
Короче блять прогать полноценно и ебать голову этим не хочу. В автоматизации можно иметь дохуя бабла и прогать по минимуму.
Я просто не могу определиться со стеком.
>Нихера себе, то есть получается что функция next здесь является асинхронной?
С чего бы? Я же сказал, что блокирует. Это противоположность асинхронности.
"Ждать" это не только await, но и обычным циклом. Я это слово вообще в самом обычном смысле имел в виду, что он из функции не выйдет, пока либо данных не будет, либо не закроется. Запусти у себя вот этот код — https://ideone.com/gSglv2 и увидишь, что пока ты что-то не введёшь (и вероятно enter нажать надо будет из-за буферизации в терминале), принт не вызовется. Никакой асинхронности тут нет.
>>21178
>150-200 мне вообще хватит.
До следующего падения рубля через пару лет, если только.
Вот даны 2 интервала выраженные кортежами, первый элемент - начало отрезка-интервала, второй - его конец:
a = (5, 10)
b = (8, 12)
Как определить их пересечение то есть: (8, 10) ?
Просто нахуячил if-elif, работает, но смотрится "так себе"
Учусь на заочке для корочки, в которой написано "Информатика и вычислительная техника". Есть предмет "основы дискретной математики". Ведут его, мягко говоря, не очень. Посоветуйте какие-нибудь видосики на ютубе или книги, в которых очень сжато и по существу рассказано об основах предмета. Если что, то понятия множества, кругов Эйлера и теорему Кантора я понимаю нормально.
>понятия множества, кругов Эйлера и теорему Кантора я понимаю нормально
Ну так хуль тогда думать? Сразу на ML-спеца иди
Только потом проверку надо устроить что начало интервала не больше конца
а нахуя им эти понятия знать?
До следующего падения рубля через пару лет, если только.
Да, согласен с тобой. Года 3 назад думал, что 60к хорошая средняя зп... Щас по подсчётам, если съёбывать от мамки, нужно минимум 100к БЛЯТЬ СУКА Я ЕБАНЫЙ НИЩИЙ КЛОУН БЛЯТЬ!!!!!!!!!!!!!!
Почему в списке три 7 получается, хотя я вроде вставляю словарь?
https://ideone.com/lMSWkK
Я осознал.
Критерий у тебя какой? По солидности языка и пригодности к большим сложным приложениям php среди них вне конкуренции.
1. Зарплаты нужно писать в долларах, иначе попахивает пидорашностью.
2. Ты в разделе программирования, где хорошими считаются зарплаты иного порядка.
Я понимаю, что я со своими 850 долларами (пиздец в долларах ещё меньше звучит) клоун для вас.
Но я же не могу ни с хуя потребовать 3к бачей, лол. Хочется к этому прийти, да, но не сразу же. Меня в принципе, щас зовут на ручного тестера с зп 1600 долларов, но там коллектив хуета и я отказываюсь. Через полгода сам хочу выйти уже в автоматизаторы и иметь хотя бы ~1500 долларов.
Ещё переживаю из-за возраста. Типа мне 25.5, а я в говне сижу. Проебался в доте в своё время вообще пиздец((
А почему на ручника на 1600 не хочешь пойти? В любой конторе можно потом на автоматизатора перекатиться.
Есть пара сотен тысяч записей в бд джанго, записанные пачками по 15 штук раз в час.
Надо все их выгрести и округлить в каждой из записей одно поле created = models.DateTimeField(auto_now=True) в меньшую сторону до ровного часа убрав минуты и секунды.
Питон очевидный. Без фанатизма. На уровне автотестов глубины языка и эти ваши ООП тебе нахуй не нужны.
Пойми что такое примитивные типы данных, цикл, функция, логические ветвления ИЛИ.
Самая важная тайна: Научись грамотно оформлять дефекты, делать скриншоты и тыкать в них мордой девелоперов.
т.ме/testing_in_python читай закреп и вкатывайся
Там есть пара человек, котоые мне не понравились. Они подъёбывают жестко в работе, а я такой человек, что беру всё на свой счёт(
>я жа не могу не с хуя потґебовац 3к бацей, лол
Когда типа программист просит $800 - это тем более подозрительно. Найми такого, обучай, а через 3 месяца он свалит на большую зарплату. С другой стороны, если он не программист, то и даром не нужен. Зарплату нужно просить адекватно рынку. Могут предложить поменьше - вот и поторгуетесь. Алсо, тестировщик в 25 - это хороший трамплин для вката, мот и зря отказываешься.
Тебе не в питона тред, а в SQL
Какая БД?
Конвертишь в строку, делаешь слайс вырезая минуты, хуяришь туда нули. В чем проблема то?
У редиса несколько более продвинутый функционал, чем k/v.
А может тебе ещё ключи от квартиры, где деньги лежат, дать?
Сбросил тебе за щеку, проверяй
Месяц активно занимаюсь вкатом.Купил пикрил книгу и скачал обучалку.Смотрю курс по теме,прохожусь по книге и практикую.Я бы был рад и зп 100к ибо по больше интересует сам вкат и тот факт что на учебу я забил из-за отсутствия денег.
Собственно вопрос.
Не поздно ли в 23?Сам я с пк давно практикую и не только в игорах.
И правильно ли я делаю?
из шапки норм книга? бабки у подъезда говорят там устаревшие технологии - это правда?
Есть второе издание оригинальное от 2018.
В целом, это нормальная базовая книжка, но она не особо даст тебе знаний для реальных задач, там нужно практиковать и искать решения самому, никто таких материалов не делает.
23 типа уже дед? 23 можно еще на материнские чувства у херочки давить, особенно если она постарше.
По джанге 2 куча книжек на русском, а по джанге 3 ничего нет
Или лучше с гугл-траслейтом читать книги по джанго 3?
не, 23 это шкет по сути, у которого на уме тянки, пледики и фортнит
>Надо все их выгрести и округлить
Что делать-то с ними будешь? Просто в оперативную память выгрузить или заапдейтить все строчки прямо в базе?
https://docs.microsoft.com/en-us/visualstudio/debugger/edit-and-continue?view=vs-2022
Это не работает в vscode ? А где работает?
Мне казалось они объявляли о поддержке , но я забыл .
Поставил eclipse, в нём pydev.
Успешно отлаживаю свой файлик, и вдруг он завершается с исключениями. Обнаруживаю в нём две строчки, которые я не писал:
from sos.report.plugins import stratis from cloudinit.sources.DataSourceLXD import description
Это что это? Это откуда? Это зачем? Я куда-то не туда нажал? Куда?
А вот тут ситуация чем-то похожая. Пишу на питоне плагин для gedit. Мне бы вывалиться в отладчик внутри своего плагина, запустив gedit, который этот плагин подключит. Но как? Это вообще возможно? Насколько я вижу в htop, gedit никаких питонопроцессов не запускает. А запускает он плагины через LibPeas, который я без понятия как работает. Никто это не ковырял?
А как учить тогда? Я вкатыш, офкорс.
Уже скоро джанго 4 выходит, а книжек по джанго 3 на русском нет(есть только от русских авторов, но это говно).
Доку читать скучно и все равно без практики ее не запомнишь.
>Python itself doesn't actually support this use-case.
https://github.com/Microsoft/vscode-python/issues/165
понятно.
И че, это навсегда?
Бамп
[range(3), range(3)]
то у них будут разные хеши.... как сделать свою хеш-функцию, которая будет принимать во внимание не только сам генератор но и его аргументы? И если они одинаковы то считать хеш одинаковым, вне зависимости от состояния генератора?
Да ты заебёшь бампать вопросы, которые даже ещё не уплыли
>А как учить тогда?
Практикой. Читаешь доки, параллельно пилишь что-то. Можешь просто примеры джанги брать и использовать. Не в тупую копировать-вставлять, а именно что использовать. Делать проект, наступать на грабли, разбираться в проблеме, искать решение, запоминать, исправлять. И так по кругу.
Без кода ты и по книжке нихуя не выучишь.
Бамп.
Кекнул. Тебе интерпретатор говорит - у тебя говно вместо пирога, убери его, а ты ему такой - знаю что говно, что хочу, то и ем
Далее, не юзаешь await - у тебя варнинг сыплется. Погугли в чем дело, но я тебе итак скажу: ты тупой долбаеб, который даже не знает как юзать async/await, но делает это когда хочет
hash(await f('x'))
Пчел, я Папка на проекте нахуй. Недавно собесил одного вкатыша и завернул его, потому что тот как раз уссался на асинхронке и на генераторах. Знай Папку.
>hash(await f('x'))
долбоеб даже не понимает что он считает hash того что вернула его future/корутина а не самой корутины
Бамп
На проекте по чистке унитазов?
тут даже не про питон базар если че
Очевидный FastAPI
Посмотрел как-то чела, который написал, что тип использовать генераторы и лист-comprehension где только можно, это хороший, годный питоновский способ писать код.
Но через какое-то время, когда начал возвращаться к старым блокнотам, понял что можно нормально читать только нормальный цикл и не сложные, в одну строчку, comprehension'ы. Пиздец, кто вообще придумал этих монстров
Учись чувствовать, когда вещь достаточно сложная для такого. А простые заебись. Видел как-то компрехеншены через компрехеншены на 18 строк, блядь, с кучей логики внутри и по факту это один стейтмент, который можно и в строку свернуть вместо 18 - вот так не надо, это больная тема. А в роли мап/фильтр/инициализаций простеньких легко все читается.
Есть сайт краш.сом условно и мне надо сделать чтоб открывалось и переходилось по рандомным краш.сом/тутнуженрандом
таким образом после закрытия сайта 404 страница не удаляется и если сделать скрипт который переходить по таким ссылкам выходит большое число 404 страниц
как мне такое написать в принципе?
Бамп.
Нет
>таким образом после закрытия сайта 404 страница не удаляется и если сделать скрипт который переходить по таким ссылкам выходит большое число 404 страниц
Так, я не силен в языке шизов, но мне кажется, он хочет написать скрипт, который берет имя сайта, добавляет рандомные символы в конец, чтобы получилось вот так: shique.ug/dfsd3ea
Скрипт должен наплодить кучу таких ссылок и открыть их в браузере?
Зачем? А черт их шизов знает.
Дурачок думает, что создаются какие-то реальные страницы под 404, а не одна стандартная.
Нет, либо идет перенаправление на условную shizya.ug/404 либо все эти страницы создаются каждый раз когда переходят
Алёша, это называется рерайт. Адрес может быть любым, а что тебе по нему подсунут решает реверс прокся или роутинг самого приложения.
Что не так?
Да прост если sys и zipfile резонно нужны, то io выглядит как то без чего в принципе можно попробовать обойтись
Навучный интерес короч
Пытался посмотреть исходники этого libpeas, чтобы вообще понять, что он там делает, как итог только опух мозг и больше ничего. Не понимаю.
На самом деле, я не понимаю, зачем тебе sys, когда ты можешь читать из stdin при помощи обычного input(), типа:
zip_from_stdin = ZipFile(BytesIO(bytes.fromhex(input())))
А если хочешь обойтись без io - можешь сохранить инпут в файл, а потом открыть его xD
Гугли что такое bankers rounding. Это часть какого-то стандарта вроде.
Хмммм, вотб теперь думаю а оценит ли ejudge создаваемые файлы. Спасибо за советы, попробую
Ну, если тебе потом эти файлы не будут нужны - то сохранять их плохая идея, по сути это будет костыль вместо io, но работающий медленнее из-за системных вызовов. Так и не понимаю, чем тебе он не угодил, ибо он часть стандартной либы, да и работает быстро, т.к. написан на C.
по установке.
Результат на пике.
Я понимаю, что ответ может быть каким угодно, но я не понимаю, что и как поправить, а так же как проверить.
Пожалуйста, дайте общие указания по отладке.
Я подозреваю, что напутал что то в шагах 11-13, мб в полях, где нужно было указывать информацию о БД.
Ты имеешь в виду название БД и имя пользователя? Или какое-то специальное место, где они записаны все вместе?
Да в любом случае, где доступность аргументов варьируется на момент вызова.
Тут проблема в том, что примеры каррирования в учебных материалах обычно или слишком простые или слишком ебанутые.
Вызовы func(1)(2)(3) выглядят намного понятнее, если рассматривать их в контексте проекта.
В проекте каррирование выглядит так:
module1.py:
def func1(arg):
...
exported_func = func1(1)
module2.py:
from .module1 import exported_func
exported_func2 = exported_func(2)
module3.py:
from .module2 import exported_func2
result = exported_func2(3)
Объясните в чем подвох пасты "Завтра ищешь в интернете книжку Dive into python. Похуй если ничего не поймешь. " я уже дошел до написания своей собственной имиджборды и внезапно подумал, а нет ли там какой-то наебки?
а в чем подвох пасты про жареный суп? я жарил и нормально.
в че подвох пасты про травы? я пил травы и норм.
>я уже дошел до написания своей собственной имиджборды и внезапно подумал, а нет ли там какой-то наебки?
Нет конечно никакой наёбки, главное не задумывайся, почему сидишь на дваче и может быть ещё на каком-нибудь условном форчане, когда борду может запилить любой вкатыш.
Так вот, дайте простой скриптик, который сгенерирует все возможные вариации этого пароля, чтобы посередине была та часть, которую я введу, а по концам вставились в различном порядке !#.
Вакаба проебывает звездочки.
Мне надо, чтобы сгенерировались в один .txt файл пароли типа !2ch! #2ch# !#2ch#! #!.2ch!.
Обычный кронтаб мне не подходит, ибо нужно мониторить как завершились прошлые задания
Или есть что то попизже?
Уже есть всё готвое. https://docs.python.org/3/library/itertools.html
Смотри секцию Combinatoric iterators
Спасибо, но немного не так должно быть. Нужно чтобы минимальное значение было равно одному. Чтобы прогенерировались варианты с !2ch# и #!2ch. и тд.
Мне надо, чтобы не просто всевозможные комбинации !#. и звездочки проставились, а чтобы прогенерировались варианты, в которых в начале или в конце только один символ. Я просто не помню, как я символы в конце и начале расположил, но точно помню середину.
Большое спасибо, анончик. Сгенерировал словарь и сбрутил контейнер.
U r welcome
Я ничего не трогал в алгоритмах, оставил как есть. Там же даже в скрипте написано hashtype="13721" # hash SHA-512 encryption AES (VeraCrypt 1.24 default)
Я не ставил пим.
os.path.splitext
Я новичок -> <-
https://pastebin.com/cqBdCJHs
Нормально
>разный хэш
Твой скрипт этого не гарантирует (randint может вернуть одинаковые значения). Если число заказанных копий больше 9000, то, очевидно, будут коллизии.
Я уже исправил код, чтобы рандом генерировался в самом начале и потом уже в цикле к рандому прибавлялся номер итерации.
Кстати, не подскажите, как по быстрому сделать это консольным приложением? Чтобы написал в консоль python hash.py image.jpg 10 и всё выполнилось.
Общего между тем питоном и современным примерно столько же, сколько между процессором 8086 и современными amd64 реализациями.
Если оставить поле пустым, то питон крашится с ошибкой IndexError: list index out of range, даже проверку не даёт сделать. Как быть?
попробую, спасибо
if len(sys.argv[1]) <= 1:
IndexError: list index out of range
Он сразу на действии с пустой строкой крашится. Или это так и должно быть? Типа нельзя чтоли вывести своё сообщение об этом и закрыть программу без крашлога от самого питона?
Есть такая задача: нужно сделать динамическую форму через Фласк. Идея в следующем.
Есть переключатель. Если переключатель в положении "1", то на вход подается значение из поля ввода form_1. Если переключатель в положении "2", то пользователь нажимает кнопку "Enter form", открывается модальное окно и в нём появляется пачка форм form_2, form_3 etc.
Вопрос: как это реализовать? Интуитивно я понимаю, что flask bootstrap что-то такое должен уметь, но я не понимаю, как по изменению переключателя динамически можно подавать на вход инпут из двух разных типов форм.
Как это делается?
Когда работаешь с файлами и путями советую юзать вот этот модуль - https://docs.python.org/3/library/pathlib.html
Код для твоей задачи: https://pastebin.com/zKjrwxhw
Да я уже всё написал. Мне только нужно как-то проверку сделать того, чтобы sys.argv был не пустым и выводило только сообщение об этом.
Нет, питон был моим первым языком, но я знаю несколько других. А почему спрашиваешь?
sys.argv - Это список аргументов, переданных твоему скрипту, первый из которых - путь до самого скрипта.
Я обычно их меньше делаю, но тут написал так, чтобы было более понятно челу. Видно, что он не сильно шарит.
Почему не первой? И что тогда вместо неё?
Есть, называется питон для детей. Там как раз, если память не изменяет, делают змейку
Ну, на питоне это делать - не лучшая затея, но если очень хочется, то можешь написать простое
while True:
pass
И прикрутить к этому multiprocessing, чтобы все ядра грузить
Нахуя ты их зубришь? Совсем ебанутый? Ты на уроках труда тоже зубрил хуйню в духе "рубанок для того, чтобы сделать доску ровной, отвертка чтобы закручивать шурупы, молоток чтобы забивать гвозди"?
>>24597
Я не знаю нахуя вы нарешиваете задачи на кодварсе. Чтобы что? Если человека сортировку пузырьком достаточно понимаета не зазубрил блять, то на этом алгоритмы уже можно стопать и изучать их после устройства на работу
И да, про книгу "питон для детей" я неиронично написал. Очень хорошая книга, жаль, что я ее нашел уже после того, как вкатился
имхо проще проверять в диапазоне от 2 до n-1, и если в нём встретился делитель числа n, то n не простое, иначе простое
Держу в курсе, все делители числа n меньше, чем корень квадратный из n. Нахуя ты просто так проверяешь кучу чисел?
ребят, а где можно порешать задачки? Ну что то вроде спортивного программирования. Я кстати думал, что в шапке будут ссылки. Буду очень благодраен, если кто нибудь поделится. Сейчас нету идей писать что нибудь конкретное, но хочется все же прогрессировать в языке. А я заметил, что легче учиться, когда стоит некая задача, которую надо решить.
codewars, leetcode
Прогрессировать начнешь когда найдешь работу. Спортивное программирование в том виде, в котором оно на соревнованиях присутствует вредно.
но все же спасибо
Да просто по приколу. Захожу каждый вечер и делаю 1-2-3 задачки перед сном. Как такая долгозарабатываемая ачивка "нарастить длинный хуй кью на Кодеварсе".
Ограничения есть? Есть да, то проще захардкодить все простые числа, разбить на массивы равного размера и сжать. А зная a и b можешь узнать какие массивы нужно разжимать и только их разжать и посчитать числа. А те, что разжимать не надо просто прибавь размер массива к результату. Работать будет быстро. С учёт сжатия будет 50-100 мегабайт дискового места на все числа до миллиарда. До трилиона понадобится десятки гигов места на диске, но поиск всё равно будет быстрый т.к. только 2 массива придётся декомпресить. Содержащий a и содержащий b.
Реально, покупай, а лучше сразу два раза купи, чтобы наверняка
Интересно узнать, а как ты набор уникальных чисел сжимать будешь?
Неверно. Например, корень квадратный из 22 это 4,69... При этом делители у него 2 и 11, и только 2 меньше квадратного корня, а 11 - больше.
Я понял, что ты имел в виду, но твоё утверждение ошибочно.
Эммм, нет. Ты делишь на два, получаешь одиннадцать. Проверяешь одиннадцать до 3 и узнаешь что это просто число. Все. Или ты считаешь, что перебирать нужно все числа по порядку, чтобы два раза получить разложение 2*11?
Ещё раз, 11 является делителем числа 22? Да или нет?
Вот что ты написал:
>все делители числа n меньше, чем корень квадратный из n
11 меньше, чем корень квадратный из 22? Да или нет?
И, как итог, твоё утверждение верно или нет?
glossary={}
б) glossary[term]=interpretation
в) del glossary[term]
г) for t in glossary: print('%s:%s' % (t,glossary[t]))
д) print(glossary[term])
Ну и так далее. В чём сложности?
Непонятно, чем пункт а) вообще должен заниматься. Если он создаёт глоссарий из текстового файла, чем это отличается от загрузки из файла (пункт з)? Что вообще тут имеется в виду? Без понятия. Но я уверен, что ваш препод сам понятия не имеет, что он имел в виду, когда это задание составлял. Ну может быть имеется в виду "создать на диске новый пустой файл с типа будущим глоссарием".
Короче, привыкай, у тебя такого дебилизма ещё много лет впереди. А может лучше ну его на фиг и пойти работать на завод? Там хоть деньги платят. А то будешь у родни на шее сидеть. А мог бы за это время на квартиру заработать.
Можно в документацию print'а залезть (https://docs.python.org/3/library/functions.html#print), можно на форматирование строк (https://docs.python.org/3/library/string.html?highlight=string#format-string-syntax) глянуть, а можно вообще на модные нынче f-string'и перейти (https://docs.python.org/3/reference/lexical_analysis.html#f-strings)
Да что ж эта макаба, блин, в скобки-то не умеет.
https://docs.python.org/3/library/functions.html#print (аргумент sep)
https://docs.python.org/3/library/string.html?highlight=string#format-string-syntax
https://docs.python.org/3/reference/lexical_analysis.html#f-strings
Вы видите копию треда, сохраненную 30 июня 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.