Это копия, сохраненная 18 ноября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий >>1484225 (OP)
ЧАВО: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat актуальность примерно 2015 года
Книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Очень много книжек: https://drive.google.com/drive/folders/13YaFijvuH4dtv-PjUKVWLQ7ZIqXIfCLK
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/
https://pastebin.com/
https://pyfiddle.io/
https://www.codepile.net/
#######################################
Вопросы-ответы:
А стоит ли читать Лутца, том номер 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/ (нужно знать ангельский или уметь пользоваться переводчиком)
Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём - брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
Все правильно, в файле у тебя записана строка как набор юникод-символов, при печати она конвертируется в utf-8 или что там у тебя.
Ага, чтоб освежить память нужен хороший курс по джанго, о пока из нагугленных на русском языке вижу только уроки от мозиллы.
Может есть че у вас?
видеоуроки сразу нахуй
мимо тот самый нубас
>За месяц можно с нуля японский выучить
死ぬダウン。
За месяц. А не пойти бы тебе нахуй? Обрыганец с двощей.
Хз насчёт мозилловского курса. Я вот пару недель назад тыкался в нём и несколько штук были out of date, так что пришлось тутор переделывать самому.
Так что двачую вот этого и реквестирую хороший тутор по Джанго, чтобы освежить в памяти всю хуйню.
>За месяц можно с нуля японский выучить. Но не программировать научиться.
Где я писал что научился программировать?
Блядь, за прделами пыхатреда одни быдланы-илитисты сидят.
Там вроде весь курс по 1.9. Мне нормально было когда использовал его на свежей джанге, например. Хочется другой почитать, и не хочется лезть в дебри офф мануала, хочу чтоб за ручку меня водили.
Если расшифровать код на латиницу можно анализировать psx аналог исходного слога или оно само распознает иллюстрации к печати ?
Что конкретно тебе нужно и чем тебя не устраивает Джанга?
Джанга идеальна для крудов и подобных сайтов. Более-менее всё есть. Для очень многих задач этого достаточно, современные фишки скорее перделки, чем что-то полезное.
Но современные тренд в том, чтобы делать сайты как приложения, реактивные, с потоковым обменом данными и т.п. Нужна нормальная асинхронность. Это уже не для Джанги. В тренде асинхронные фреймворки, вроде aiohttp и tornado. Про торнаду не знаю, aiohttp массу асинхронных возможностей даёт, но немного кривоват, есть такое. И к Джанге прилагается коробка с кучей функционала (ORM, админка, управление пользователями и другое), а aiohttp почти как OEM.
Так в официальном туториале тебя и водят. Пиздец двощеры, им разрабы дают хорошие официальные руководства - нет, не хочу, хочу чтобы индусы с медиума мне в рот какали.
В теории возможно всё.
Народ, есть у кого на примете хороший ресурс с дачами, чтобы разные разделы python затронуть? Хотелось бы некий аналог https://hyperskill.org/
Небольшой уютный сайтик почти готов.
Слыхал о нём, но сейчас не мог вспомнить название. Опробую, спасибо!
he
ll
o
wo
rl
d
Flask/postgres/celery/aiohttp
Сейчас все в uwsgi+nginx оберну, куплю доменное имя и https прикручу.
На русском нет. Есть только книга на русском и доки на русском.
Олег молчанов.
С чего это?
У меня есть вопрос
Нужно спарсить ссылку на изображение
Структура изображений каталоге
<a href=a class=b>
<img src=url>
</a>
Как мне с помощью bs4 в питоне создать условие на парсинг:
Ищи тег img с классом b, и вощвращай мне значение атрибута src?
Пробовал findAll("a", {"class":"b"} но вернул только пустые значения
Ты тот самый заводчанин, который всё хотел пойти на курсы какие-нибудь? Начал сомневаться в покупке?
> визуальные новеллы
На этом, пожалуй, и всё.
Но если задаться целью то можно 2д игори делать.
Есть цикл, и два потока выполняют этот цикл, мне нужно чтобы итерации цикла в 1 потоке совпадали с итерацией цикла во 2 потоке
Меняй архитектуру либо же пытайся прикурить сигналы/очереди к потокам своим. То есть настрой общение между ними, что бы поток 1 знал о состоянии потока 2. Но пересмотреть архитектуру - более правильное решение, как по мне.
Я просто не вижу других вариантов, нужно обрабатывать несколько циклов одновременно, иначе никак.
Не
> Питоноподобный язык использовался в Unity до недавнего времени.
Там подобие JS было. Да и то его ещё с бородатых версий рекомендовали не использовать, пока не выпили окончательно.
И то и то.
Да.
Что мне еще надо для того чтобы получить свои 160к по приезду в Москву?
Пока можешь получить лишь писькой по фейсу
>БД
Создавать/редактировать постгресные вьюхи на лету через код пойдет?
А еще я раскурил оконные функции
>куча опыта
2 года в норм конторах (ci/cd код-ревью, продуктовые, головной опыт не в Росии, так что у меня еще и англ разговорный) (всякие студенческие подработки не учитываем)
> Создавать/редактировать постгресные вьюхи на лету через код пойдет?
Нет.
Надо уметь проектировать модели.
И нахуярить архитектуру приложения.
Если ты собрался не на галеру, то твой английский не важен.
2 года не так уж много, если честно. Проанализируй рынок труда.
CI/CD конфиги сам писал? Что по тестированию? В докер заворачивал приложение своё? Постгрес в докере запустишь или на железке?
>CI/CD конфиги сам писал?
нет
>Что по тестированию?
на одном проекте юниттест, на другом-питест
моки-хуеки, все дела.
>В докер заворачивал приложение своё?
Конечно, с самого первого пет-прожекта.
>Постгрес в докере запустишь или на железке?
Ну понятно что по-хорошему надо на железе, но у меня нет админских скилов, так что просто подниму контейнер.
Мне не было повода изучать это - либо у нас отдельный человек занимается базой (и настройкой сиая кстати) либо я пишу свой петпрожект для себя, и там ничего не надо настраивать, ведь и так все работает. (хотя, кстати, однажды я угорел и прикрутил pgbouncer к своему телеграм-боту)
А еще я могу в типизацию.
> Что мне еще надо для того чтобы получить свои 160к по приезду в Москву?
Научиться кодить? Я бы тебе максимум 50к заплатил за такие знания. А точнее их отсутствие.
Я Большой Дядя с большой писей, черт ты галимый
"Заплатил бы" - будешь шлюхам рассказывать, сынуля. Тон блять нормальный подбери
> нет
Есть куда расти.
> на одном проекте юниттест, на другом-питест
> моки-хуеки, все дела.
Ты писал? Смог бы с нуля накидать план тестирования и реализовать?
> Ну понятно что по-хорошему надо на железе
На той же где и веб-приложение?
> но у меня нет админских скилов
Есть куда расти.
> я пишу свой петпрожект для себя, и там ничего не надо настраивать, ведь и так все работает
Схуяли?
> А еще я могу в типизацию.
Можно я тебе отсосу?
Поясню кратко про что я:
Что бы получать 3к$+ тебе надо быть самостоятельной единицей. Принёс манагер бизнесс-требования и дал тебе платёжную карточку. Ты по бизнесс-плану накидал архитектуру приложения и спроектировал модели, потом пошёл на amazon/DO и купил там серваки под веб-приложение, если надо, ещё и под БД отдельный сервак купил(ну или у DO взял в аренду их постгрес и не паришься). Написал приложение, написал тесты для него, что бы спать спокойно(да, есть тестироващик, но я бы надеялся на себя). На гитхабе/гитлабе/битбакете настроил пайплайн. Подключил сентри. Настроил голый сервер с убунтой/дебианом под свои нужды. И это только начало пути, ибо дальше идёт поддержка, расширение и обновление.
Ну про постгрес я погорячился, ибо тебе надо аргументированно выбрать БД, ведь может тебе типа КликХауса или Монги что-то надо, к примеру.
Если ты не знаешь своей цены и что надо учить, то ты ещё не готов для нормальной работы. У нас таких как ты долго не держат. Если 2 года пинал хуи и потом идёшь на двачи спрашивать что ещё надо знать, то сразу всё понятно. Ты где-то на уровне студента, прочитавшего пару книжек и не понимающего что ему надо будет в реальных условиях знать.
>Ты писал?
Ну а как в 2к19 без тестов? Я просто ревью не пройду. Ты про юниты или ты мне предлагаешь на селениуме пописать? С ним у меня был конечно опыт, но я не очень-то стремлюсь быть человеком-оркестром.
>Смог бы с нуля накидать план тестирования и реализовать?
Ну а что там сложного? В идеале тестируем вообще все, но самое главное чтобы были функциональные тесты (реже надо рефакторить чем юниты) на самые основные функции, чтобы они ломались с большой вероятностью если что-то где-то неправильно. Пишем имиджборду - значит по-любому надо тестировать end-to-end создание нового треда с картинкой. Это будет 80% результата за 20% работы.
>На той же где и веб-приложение?
Я видел оба варианта на продакшене.
>Есть куда расти.
Я по-максимому хочу срезать углы. Типа не учить фронтенда, и т.д.
>Схуяли?
На своих петпроджектах обрабатывающих 1 запрос в час все мои базы работали прямо из докера.
>Можно я тебе отсосу?
Ну а я для кого старался?
>3к$+
Падажжи, это через годик, сейчас пока что 2к$+
>надо аргументированно выбрать БД
Мы собираем температуру по метеостанциям по всей стране? Если да - кликхаус (на отдельном микросервисе-мобирателе, как дополнение к основному постгресу), если нет, то постгрес. Монго не нужен, в постгресе есть джсонб с индексами.
> Ну а как в 2к19 без тестов?
Сложно, но практикуют некоторые, вот и спрашиваю.
Я не про селениум, не ссы.
> Я по-максимому хочу срезать углы. Типа не учить фронтенда, и т.д.
Ну CI/CD это всё же бэкэндовская задача, с фронтом всё ясно то.
> все мои базы работали прямо из докера.
А, ты про это.
>у CI/CD это всё же бэкэндовская задача, с фронтом всё ясно
У меня было в планах кубернетесы изучить. На что время лучше потратить?
>Поясню кратко про что я:
>Что бы получать 3к$+ тебе надо быть самостоятельной единицей. Принёс манагер бизнесс-требования и дал тебе платёжную карточку. Ты по бизнесс-плану накидал архитектуру приложения и спроектировал модели, потом пошёл на amazon/DO и купил там серваки под веб-приложение, если надо, ещё и под БД отдельный сервак купил
Ты про каких-то фрилансеров фуллстеков пишешь, которые в одном лице совмещают бэк, фронт, спецов по данным, тестеров, девопсов и менеджеров.
В реальности за такое не очень готовы платить, когда готовы, идут в ООО какое-нибудь или у себя команду специалистов собирают.
Секвенсор, надо расставлять точки на дорожке и чтобы на где точка стояла игрался звук, допёр только до того чтобы каждую такую дорожку в отдельном потоке прогонять через цикл фор в поиске места где звук играется
Я же тебе писал туториал в ньюфаго треде, а ты его заигнорил.
Красиво.
Ну нахуй, что из этого выходит за грани бэкэнда?
Если говорить все же о небольшой компании, т.к. у большой, чаще всего свое железо и его покупать не надо, нужно лишь отправить письмо.
>>496131
Чому?
Аноны, не поверите, везде где был на собесах и везде где работал, спрашивали именно про это. Тесты/ci/cd/git/DB/Unix/docker. И не только лишь галеры были, но и продуктовые компании.
>>496094
Кубернетосы ок, тоже надо. Но как по мне - я бы потратил время на ковыряние чистого линупса и траблшутинга. Что бы у тебя не вызывало проблем настройка чего-то вне докера, а так же решение различных траблов с системой.
Че умеешь, че знаешь? Мне как вялому вкатывальщику с мухосраней интересно, например
ну питон соответственно, sql, джангу и фласк (есть пара сайтов в портфолио на том и на том), html css соответственно чтобы это вывести. пока что на этом все.
ну да. просто не ебу че еще надо на самом деле. читал книги по питону, по алгоритмам. хуй знает че еще надо. но видимо надо, раз меня там лишь одни готовы пригласить
Я бы пошел туда, похуй, даже за еду сидел бы там. Опыт бесценен.
Redis, postgres, celery
Ты наверно и не читал.
>в то время как в документации на glob указано, что порядок вывода не гарантируется
Мне бы тобой быть, у меня 2 вакансии всего, в одну 2 дня назад отправил тестовое жду ответа, хотя уверен что будет отказ, а во вторую вакансию нужен опыт + вышка ничего из этого у меня нет понятно хотя я все равно им кину, выбора то нет.
>Мне бы тобой быть
не говори так никогда. я жил во время учебы в такой залупе где вообще нет никаких айти контор и нет никаких курсов даже чтобы чему то научиться. сейчас кнч получилось съебать из своего дальнезалупинска в другой усть-пиздинск, где с этим делом получше, но все же будь у меня возможности во время моего обучения то дал бы по съебам с шараги сразу же и пошел кодить
мне кажется в твоём приложении выбирать не приходится
алсо имо рельсы перспективнее джанги которая вообще недоразумение какое-то
руби алсо няшнее питона
и чем же ? джанго у всех на слуху и пиздато из за того что там вообще все есть из коробки. если не ошибаюсь то даже в пхп чтобы прикрутить админку надо поебстись, в то время как в джанге она прикручивается одной консольной командой. а в рельсах что? алсо какие есть проекты известные сделанные на рельсах?
>github? twitch? airbnb?
чет нагуглить не могу. видел только инфу про твиттер. скинь ресурс
>сколько тебе лет?
а это так важно?
>Ну нахуй, что из этого выходит за грани бэкэнда?
Всё почти
Ты описал скорее админа-девопсника, а не программиста-бэкэндера.
У тебя так расписано, как будто "написать приложение" - это на час работы в одиночку. Ты видимо подразумеваешь, что берётся уже готовое приложение, и может чуть-чуть настраивается под себя. Но это не программирование.
В твоей схеме подразумевается, что у тебя девопс и программист в одном лице и других айтишников в фирме нет. Это несерьёзно.
Бэкэндер - это программист, который занимается в первую очередь программированием и реализует лишь часть функционала. Ему надо взаимодействовать с другими равными себе, с фронтовиками, админами, другими бэкэндерами. Работать на том, что есть, убеждать в каких-то своих решениях и технологиях и т.п.
Я из пгт на ~15к человек, там нет такого понятия как программист вообще, ток комплюторщик который меняет картриджи в принтере и получает дай бог 10-15к. Я как матери сказал что программистом буду устраиваться, она сказала 'госпади это же нищета зачем тебе это?', благо щас в миллионик переехал.
Так и скажи. Чем подробнее объяснишь ему тем больше добра ему сделаешь, потому что он узнает больше информации об окружающем мире и ему будет легче жить.
Я не смогу сказать что нашел место лучше, это жестковато, есть какие-то еще варианты, чтобы мы оба не сильно расстроились?
>смогу сказать что нашел место лучше, это жестковато, есть какие-то еще варианты, чтобы мы оба не
ЭТО БИЗНЕС
Безнес это как война, просто тут убивать нельзя.
Не говори ему, что его предложение о работе "херовое", это конечно обидно. Скажи детально что ты взвесил все плючы и минусы. Что другие технологии тебе интересны и т.п.
Сап, прогромач, вкатываюсь в прогинг, какую расцветку для IDE посоветуете? Тему надо брать темную, это я знаю, а какую подсветку синтаксиса намутить, чтоб было удобно и приятно глазу? Скиньте 16ричные коды цветов сюда
>>496619
Аноны правы, просто скажи, что нашёл более интересное для себя направление, в котором ты бы хотел развиваться. Это нормально. Это даже когда ты с работы сваливаешь нормально, к этому обычно адекватно относятся.
Оскорбительно тогда, когда ты говоришь, что нашёл место, где всё тоже самое, но только условия лучше, платят лучше или сама фирма лучше. Особенно если для тебя люди уже что-то сделали и ты что-то пообещал.
Други, как в Пистоне сделать так, чтобы при достижении неким атрибутом определенного порога экземпляр класса автоматически удалялся?
Допустим self.count превысил значение 10, значит этот объект self должен удалится
В __new__ сделай счетчик. И если достигается 10, то объект не создавай новый класс. Т.е. не вызывай super(...).__new__(args, *kwargs)
>Тему надо брать темную
Кто тебе это сказал? Темную ночью или вечером хорошо. Светлую днем хорошо.
Ёпт, к чему такие сложности? Хуле не выйдет нормально удалить к чертям экземпляр?
Зачем тебе его вообще удалять? Сделай декоратор, который чекает атрибут и посылает нахуй, если условие не выполняется.
Генерируется большое количество подобных объектов, будет и удобнее с точки зрения юзера и с точки зрения производительности если ненужные объекты будут попросту удалятся автоматом как только счетчик переполнится
Смотрел на метод __del__ но хуй знает как через него заставить сборщик мусора гарантированно утилизовать экземпляр
> с точки зрения производительности если ненужные объекты будут попросту удалятся
Поехавший что-ли? Кто тебя такому говнокоду научил?
Постоянно создавать объекты и удалять - это пиздец говнокод. Это где угодно плохо. Просто пустая трата ресурсов. ООП придумали не для того чтобы под себя срать.
>Я хочу сам вызвать этот сборщик и сказать ему что убирать
Сборщик вызывается gc.collect(). Любой del объект не удаляет, а помечает на удаление.
Смысла в таких действиях нет. Если твой объект хранит какой-то большой ресурс, типа numpy-массива на гигабайт, то достаточно просто сделать self.massiv = None. Если объект маленький - то проще просто забить.
С++ ты из питона все равно не сделаешь, он в любом случае медленный.
И как тогда решать подобную проблему? Создать двухстороннюю очередь с приоритетом и удалять с левого края элементы, когда подходит их черед?
Короче инфа нужна примерно такая:
worker1 - task1 - 572Mb memory
worker2 - task7 - 41Mb memory
worker7 - task3 - 2Mb memory
worker12 - task1 - 112Mb memory
Что такое "их черёд"?
Вот у тебя какой-то один объект работает с другим объектом, вызывает его методы и т.п. Ты предлагаешь, чтобы в какой-то момент рабочий объект уничтожался? И что должны делать те, кто с ним в этот момент работал?
Ты хочешь чего-то другого.
Тебе нужно держать специальный менеджер, в которым ты регистрируешь объекты, которые работают с дефицитным ресурсом. Скажем это сетевые соединения, кеш-память или что-нибудь ещё.
Объекты сигнализируют, что они живы и менеджер это учитывает. В момент Х менеджет вызывает для ненужных объектов специальный метод, и они сбрасывают кеши или закрывают соединения. Либо менеджер сам это делает.
>Брать каждый воркер, по pid смотреть процесс, смотреть через psutil потребляемую память и у воркера запрашивать имя таска?
Это извращение. Посмотри скорее в сторону tracemalloc
https://docs.python.org/3/library/tracemalloc.html
В таком случае я сырой дамп памяти получу и не смогу привязать значение памяти к конкретному воркеру.
Ну что, питухонщики, ваше говно теперь официально превратилось в Паскаль
Новый оператор := позволяет присваивать значения переменным внутри выражений. Например:
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
Go в паскаль превратился ещё раньше.
Что характерно, в самом паскале так сделать нельзя, там даже цепочек присваиваний нет, лол.
>Go в паскаль превратился ещё раньше
Петухун мало того, что оказался жалкой ООП пародией на Перл, так теперь зашкварился ГоПаскалем
>присваивать значения переменным внутри выражений
В С/Java/Perl да и в остальных это было всегда, тут преподносится как достижение
>чейнджлоги стали списком достижений?
Т.е. ввести новый оператор, это так, чейнджлог? Вы там кукухой поехали?
О, уже вчера официальный релиз 3.8 произошёл.
Про этот оператор давно известно было, что введут. Больше всего не хватало этой возможности. Реально не хватало. Теперь питон это язык богов, ещё только с GIL как-нибудь разобраться бы.
Питон очень лёгкий, это явно не килочасы. Польза-то будет, не одним экселем питон жив.
Сахар же, нет?
Благословим же господа Гвидо, что нам не надо выделять память под переменную, если она не None.
Спасибо, анон. День хуевый, бугурчу на все и вот в минуту слабости подумалось, что нахуй.
> Тут многие не умеют в асинхронность, а ты про какие-то операторы.
Пойдём выйдем, я тебе ебало разобью.
теперь стало проще хуяроить однострочники
Это дополнительные ограничения на передачу аргументов в функцию.
Вот ты определяешь функцию как
def foo(name, name2):
do_something()
потом ты ещё можешь вызвать как
foo('Ivan', 'Pupkin')
а можешь как
foo(name='Ivan', name2='Pupkin')
или
foo('Ivan', name2='Pupkin')
Но может быть вариант, что ты не хочешь, чтобы можно было вызвать с явным указанием имени аргумента, например чтобы потом отрефакторить, чтобы вместо name2 было surname. Если у пользователей будет вызов с name2, то код сломается. Вот для этого и сделан оператор
def foo(name, /, name2):
говорит о том, что ты name2 не может передавать с указанием имени аргумента.
Не знаю, мне кажется что не очень актуальная штука, но может иногда быть полезной.
Оператор "*" в параметрах, это явное требование указывать имена аргументов, куда более полезная, но он уже давно введён, даже не помню когда.
>>497410
>def foo(name, /, name2):
>говорит о том, что ты name2 не может передавать с указанием имени аргумента.
говорит о том, что name нельзя передать с указанием имени аргумента, только позиционно. Чтобы name2 нельзя было, надо писать
def foo(name, name2, /):
но тогда и name тоже нельзя, конечно. Позиционные всегда первыми идут.
А, понял. Какая-то очень специфичная штука, как мне кажется.
Пригодится, если например, у тебя api принимает аргументы именованные, а тебя петух клюнул переименовать. А сторонние сервисы не хотят менять имена. Ну не знаю, стоит ли оно вообще того.
>>497384
> как вы думаете что это за хуйня
Это чтобы тебя на курсы заманить, не более того.
На курсах нельзя стать программистом с нуля. Только если ты уже более-менее умеешь свободно программировать, но совсем не владеешь платформой, тогда это полезно.
Направить тебя может направят, но не возьмут. Работодатель хорошо понимает, что за этими проектами ничего нет.
Мне тоже кажется, что очень специфичная. Может полезно иногда, чтобы за стилем оформления кода следить, чтобы не использовали лишний раз именованные переменные, сбивать может, когда код читаешь.
Ещё вариант, что когда методы классов определяешь. Ты наследуешь класс и переопределяешь какой-то метод, при этом смысл аргументов иногда может немного меняться. Может быть желание в переопределённом методе что-то переименовать, но важно, чтобы в другом коде эти аргументы по имени не вызывались.
Может быть полезная штука, но пока реально не сталкивался, чтобы явно не хватало. А вот ":=" не хватало очень сильно.
то есть платные курсы сосут по всем фронтам у свободной инфы, докам, книжечкам, и /pr/ ? я правильно понимаю?
Не обязательно, они приличными могут быть. Но только никакие платные курсы никаких гарантий не дадут. Программистами за несколько месяцев не становятся. Да и не всем дано в принципе.
Во многих языках есть аналог :=, только обычно это просто =
Никогда не понимал в срачах аргументов "это не pythonic way". Да кого ебет какой этой вэй, если это удобнее.
на мой взгляд это идет перпендикулярно питоновскому дзену. далеко не улучшает читабельность, а наоборот плодит сложности.
В чем ухудшается читаемость-то?
if func():
для тебя тоже не читаемо что-ли?
Если следовать дзену, то можно остановиться в развитии. Даже комитет c++ понял это.
Нравится идея с HTML, но конечно гемор некий тоже есть. Можно конечно не "современные", лишь бы была хотя бы базовая мультиплатформенность и внешний вид уровня Battle.net, Steam и в этом духе, как щас пишут на Java.
В общем, я все равно сейчас ищу, а что скажут опытные господа?
да, как вариант. Но интересно именно мнение тех, кто лично писал интерфейсы, на чем писал, какие выводы сделал.
Бекенд, дата саенс, различная скриптота вроде девопса.
Даже если основной твой язык будет не питон, от питона всё равно будет немало пользы.
Это пишется настолько элементарно, что вообще не интересно.
import os
os.system("прога1")
os.system("прога2")
Придумай задачу получше.
Ну не стукай, всего два дня прошло. Для меня интерпритатор залочен был, только сейчас освободился.
Жди, ближе к выходным позвонят (и снова скажут, что очень понравилось).
Не заведётся, конечно.
Ну попробуй вставить себе моржовый клык и подойти к мамке, узнает ли она своего сына, сможет относиться к тебе так же как раньше?
Ужас!
или node.js,
Доступ к сайту и помощь обеспечат, если что, но мне это не очень поможет, тк я не знаю языка, на котором оно всё написано, и меня интересует выполнить задачу без внедрения в код сайта.
для большинства задать и по старинке можно
PySide2 - это привязка к Qt, самая новая и официально поддерживаемая разработчиками. В комплекте идет qtdisigner, в нем можно накидать форму, а в питоновском файле писать только логику для нее. Можно использовать документацию Qt, она у них очень хорошая.
https://wiki.qt.io/Qt_for_Python
WxPython - это привязка к WxWidget. Тоже хорошая вещь, там стараются использовать нативные виджеты системы, поэтому приложение будет гармонично смотреться на разных ОС. Так же есть возможность накидать форму в спец приложении, а в питоновском файле писать только логику.
https://wxpython.org/
Tkinter из стандартной библиотеки малость устарел, но для небольших вещей довольно-таки неплох
Это из того, что пробовал. А так вариантов очень много, включая возможности использовать веб-технологии для десктопа
https://github.com/vinta/awesome-python#gui-development
https://python.libhunt.com/categories/290-gui
Там же вроде какие-то ограничения на поддержку html и js.
a = a.rstrip() + '\n'
это удалит и \n, и пробелы справа
если нужно сохранить пробелы, но вдруг, то
rstrip('\n')
На моём ноутбуке пайчарм открывается две минуты, заебало, я же помню, что в этом треде когда-то обсуждали редакторы и были аноны, которые себе саблайм настроили
А как с pyinstaller собрать так, чтобы на хостовой машине можно было без установки питона нужной версии работать? Вот чтобы и интерпретатор питона в экзешник?
Они работают параллельно: клиент посылает запрос с json'ом, сервер что-то отправляет в ответ - значение или тоже json.
Не пойму, так или не так? Что доделать?
https://ideone.com/YKwKqF
Думаешь они за счет меня какой-то таск закрыли?
о, а я тебя помню
Ты неправильно юзаешь target. В target передаётся ссылка на вызываемую функцию, а ты передаёшь ссылку на результат вызова функции. Объяви две функции, в одной принть результат send_data, а в другой - просто вызывай app.run(). Затем укажи эти функции в rarget.
pyinstaller -F zalupa.py
Пиздец. Во-первых, requests уже протух и это говно не надо использовать. Во-вторых, зачем тебе Фласк, если есть простые и быстрые клиент/сервер aiohttp?
"Это так мило.
Спасибо, как-то так?
def f1():
--app.run(host= '0.0.0.0',debug=True)
P1 = Process(target=f1)
P1.start()
P2 = Process(target=send_json({"title":"Read a book"}))
P2.start()
> в одной принть результат send_data
>принть
A это зачем?
Вроде того.
send_json, конечно. С ним аналогично, его вынести в функцию f2(), её передать в target.
Можно и не принтить, но ты же хочешь увидеть, что сервер вернул нужные данные?
>С ним аналогично, его вынести в функцию f2(),
Т.е. функция в функции?
> ты же хочешь увидеть, что сервер вернул нужные данные
И куда это ставить? В f2?
4-е задание и в 3-ем последнее предложение
>Caller should do the printing
что это значит? вызывающий должен сделать печать. Печать чего блядь?
А что использовать вместо requests?
это наёбка. ты щас сделаешь они тебе перезвонят, потом, ага. нахуй шли сразу, портофлию испытательный срок и пусть нахуй идут.
в плане наебка? объясни, анон, прошу. а то я нюфаг и во всем этом не очень догоняю
ты делаешь дохуясложное задание, они используют твою программу. вот и всё. ну бывает что тупо нужна программа на раз, а на программиста денег нет, тогда и создают вакансию с тестовым заданием.
ну у тебя может и не наёб зарплата низкая, обычно на таких должности ещё обещают 300кк в наносек, чтобы задроты упорнее кодили
а вообще тесты это хуйня. у тебя должно быть портфолио твоих шидевров и вот по ним в первую очередь должны ориентироваться. а не давать тебе тестовые бесплатные проекты на неделю.
Но если подождать минуту ничего не делая и обновить страницу, то браузер коннектится и присылает пустую строку, так и должно быть? Что это и зачем?
ну и шли их нахуй. эта ёбаная россия нищая где работодатели издеваются натурально над своими работниками. здесь везде будешь постоянно не соотвествовать и всё вечно будешь недостоин. шли нахуй страну эту ёбаную.
Только не кидайтесь безпричинно гавном типа "твой код гавно потому что ты пидор" тыкайте пальцем где именно я проебался и как можно было бы проще.
Ну то есть не пустую строку, а набор байт, который мне отображается как b''. Ну и после этого ещё раз коннектится, но уже с запросом. Это типо хром мониторит, работает ли ещё сервер? А почему он сразу этого не делает, а только после простоя?
питоаноны подскажите что это значит.
[i for i in array[1:] if i > a]
особо интересно что такое i for i / [1:]
это цикл какой-то сложный со сравнением. а скобки стоят в контексте чего? или они сами по себе?
там впереди еще массив куда этот массив погружается типо:
someArray = [i for i in array[1:] if i > a]
В массив войдут все элементы из array, начиная с первого индекса(по русски -- со второго элемента), которые больше, чем а
Короче, гугли list comprehension и slices.
А вопрос про хром так и остаётся. В панеле разработчика вот эти коннекты пустые не отображаются, только нормальные запросы
Шедевр спиздить можно, а тестовое проверяет твои знания или способность быстро разобраться с задачей, которую ты первый раз видишь.
У тебя не количество слов с буквой E считает, а количество букв E в тексте. Нужно пофиксить.
нормальная, но никогда в виде тестового выступает какой-нибудь охуительный недельный проект. это плевок в ебало. это как придёт допустим человек дальнобойщиком устраиваться, а ему скажут: ну ты съезди в один раз на 2000км, бенз и всё остальное за своё счёт и мы посмотрим устраивать тебя или нет.
это как блядь на завод прийдти и тебе скажут "ну ты это отработай неделю у нас бесплатно, а мы посмотрим и решим брать тебя или нет"
Зависит от требований. Гитхаб вкатывальщиков мало что говорит, потому что ты все это спиздить мог
А история коммитов? Её конечно можно подделать, но это муторно, вставлять кусками.
Да и чего тогда все говорят про то, что необходимы свои работающие проекты?
Ты можешь спиздить вообще весь проект полностью заменив имя в коммитах одной командой
>Да и чего тогда все говорят про то, что необходимы свои работающие проекты?
Иллюзия
https://habr.com/ru/post/350912/
Лол такая практика много где приветствуется, про бесплатную стажировку слышал? ты там месяц за бесплатно работать можешь.
А теперь вставь в инпут вот такую строку и чекни "abc deeeeeeeee hui.!"
Так это ты мне не скажи, а ему. Я просто посмотрел на его код и переписал по-своему. С подключением string
>так я не стажёр и не ньюфаня какой-то.
То есть у тебя есть уже опыт работы и тебе дают тестовое лол?
https://ideone.com/tHncr3
Ещё более муторно разбираться со всем этим "проектом" и коммитами.
Тестовые удобны тем, что задание понятно для проверяющего, ты знаешь интересные места, на что смотреть, можешь сравнивать разных людей, как кто решает задачу.
>>498740
Тестовое это не стажировка. На стажировке ты учишься внутри индустрии, видишь изнутри, как что работает, пробуешь сам, тебе объясняют, что ты делаешь не так и т.п.
Во время тестового ты просто тратишь своё время. Тебя может возьмут на следующий этап, может не возьмут, но никто детального разбора, что в твоём решении не так, делать не будет. И никаким бизнес-процессам ты на тестовом не научишься.
>>498581
>ты делаешь дохуясложное задание, они используют твою программу. вот и всё. ну бывает что тупо нужна программа на раз, а на программиста денег нет, тогда и создают вакансию с тестовым заданием.
Это надумано, никто не сделает адекватно в рамках тестового законченную конечную программу.
Но другой вариант есть. Вот я не умею работать с Оракл, может в проекте вдруг понадобилось. Начинать разбираться самому тяжело. Как поступить? Можно раздать тестовые задания под якобы открытую вакансию, посмотреть на идеи и подходы к решению. Можно ещё кого на собеседование пригласить, пусть расскажут идеи какие-то, свои подходы к решению, можно непонятные вопросы задавать. Потом всех послать и уже работать самому, получив какой-то багаж идей и подходов. Так практикуется.
Однопроходный алгоритм -- это когда по вводным данным один раз проходит, дурашка. В таких алгоритмах главный плюс -- можно входные данные не сохранять. То есть вообще. Мы, например, можем не давать строку функции, а вводить каждый раз просто по одному символу, и эти символы нигде не будут записываться.
правда я в моём алгоритме сделал под строку, когда в конце проверяю, последний ли это элемент. По нормальному эта проверка должна происходить каждый раз, когда поток информации кончается.
давайте вот щас не будете срачь здесь начинать и придираться к словам как на этих форумах погромистких с дегенератами. я сразу говорю что я не он кому это писал.
На днях видел один топик http://www.cyberforum.ru/cpp-beginners/thread2221660.html, уебан там какой-то указал что в строках при сравнении А > a, хотя на самом деле a > А. Ему сказали мол ты не прав и пруфы дали, так этот пидрила как и подобает компьютерному чсвшному задроту сказал "ряяя это писали домохозяйки у меня всё правильна" в итоге ему под конец темы объяснили что этот гнидёншь обосраный и он это таки признал. Как же такие кадры бесят, которые начинают к словам придираться, споры какие-то устраивать хотя сами просто эникейное гавно которое общается так будто он серый кардинал над нашим миром. Уебал бы всех погромистов которые начинают эти ебанутые споры.
запятую в конце ссылки удалите, если не открывается. я проебался со вставкой.
ещё этот уебан всех обосрал в конце что все виноваты в чём-то. как же бесят подобные, ему блядь в лоб прямо тычешь пруфом, а он "А НЕТ А ЭТО НЕПРАВИЛЬНО ИДИОТЫ ДЕБИЛЫ ПИСАЛИ" сука с ноги бы в щи этому задроту.
>твой код гавно потому что ты пидор
>>498592
>тыкайте пальцем где именно я проебался и как можно было бы проще.
Например используй регулярки
получить все слова
words = re.findall(r"\w+", text)
дальше можно отфильтровать вхождения с "e"
первый вариант
e_words = [w for w in words if "e" in w]
или так
e_words = list(filter(lambda w: "e" in w, words))
или просто тупо сосчитать
count = 0
for w in words:
if "e" in w:
count += 1
>>498592
>Да я знаю про find и прочие встроенные для строк функции, у меня цель была писать на максимально самопальных функциях
Но уметь использовать инструменты языка важно. В этом знание платформы. Так ты будешь понимать, как должен выглядеть нормальный код.
зачем у тебя new_text заполняется?
Очевидные баги в твоём коде - если будет два пробела подряд, у тебя счётчик слов увеличится. Не только это.
Если именно так ТЗ ставить, то тебе надо завести счётчики
total_words = 0
total_e_words = 0
current_word_length = 0
current_word_e_entries = 0
дальше цикл по буквам из потока.
for letter in stream:
if letter in " \n'\".,-;()[]0123456789":
if current_word_length > 0:
total_words += 1
if current_word_e_entries > 0:
total_e_words += 1
current_words = 0
current_e_words = 0
аналогичную проверку надо не забыть сделать и по окончанию цикла.
Ещё твой print лютый пиздец, нельзя так строки форматировать
print("Your text contain {} words, of which {} words contains 'e'".format(total_words, total_e_words))
>твой код гавно потому что ты пидор
>>498592
>тыкайте пальцем где именно я проебался и как можно было бы проще.
Например используй регулярки
получить все слова
words = re.findall(r"\w+", text)
дальше можно отфильтровать вхождения с "e"
первый вариант
e_words = [w for w in words if "e" in w]
или так
e_words = list(filter(lambda w: "e" in w, words))
или просто тупо сосчитать
count = 0
for w in words:
if "e" in w:
count += 1
>>498592
>Да я знаю про find и прочие встроенные для строк функции, у меня цель была писать на максимально самопальных функциях
Но уметь использовать инструменты языка важно. В этом знание платформы. Так ты будешь понимать, как должен выглядеть нормальный код.
зачем у тебя new_text заполняется?
Очевидные баги в твоём коде - если будет два пробела подряд, у тебя счётчик слов увеличится. Не только это.
Если именно так ТЗ ставить, то тебе надо завести счётчики
total_words = 0
total_e_words = 0
current_word_length = 0
current_word_e_entries = 0
дальше цикл по буквам из потока.
for letter in stream:
if letter in " \n'\".,-;()[]0123456789":
if current_word_length > 0:
total_words += 1
if current_word_e_entries > 0:
total_e_words += 1
current_words = 0
current_e_words = 0
аналогичную проверку надо не забыть сделать и по окончанию цикла.
Ещё твой print лютый пиздец, нельзя так строки форматировать
print("Your text contain {} words, of which {} words contains 'e'".format(total_words, total_e_words))
Там же всё просто. a>A потому что аски код строчной буквы больше аски кода заглавной. О чём спорить-то?
на скринах видишь, дебил просто отказывался это принимать говорил врёти.
>>498819
Ты переработался, тебе пробздеться надо. Вот смотри какая скромная школьница в начале видоса в с++ вкатывается
https://youtu.be/u_ij0YNkFUs
это на видео у тебя бьёрн страуструп? алсо перед вкатом в си хорошо бы было хотя бы уметь переводить двоичное число в десятичное и обратно.
Тогда, emacs с соответствующими плагинами
>хорошо бы было хотя бы уметь переводить двоичное число в десятичное
Не знаю о чём ты, я закрыл видео, когда натрапик ушёл из кадра.
я на с++ только в вузе писал и теперь слушать про него даже не хочется
трапик*
мужик похож на бьёрна страуструпа он создатель C++ один из немнгих нормальных людей в айти и не занимается самопиаром как всякие торвальдсы-хуёрвальдсы. реальный специалист и не вниманеблядь с чсв. он ещё книгу к своему языку написал очень годную.
Я уже настроил как получилось. Поставил ide внутри саблайма Anaconda, хотя я из её возможностей почти всё поотключал. В принципе удобно работается, открывается моментально, жрёт где-то 100 мб оперативы
540x360, 0:24
Я не знаю, как заставить это говно нормально работать.
Чтобы клиент нормально слал ссаный жсон, а сервер ему отдавал.
https://ideone.com/EjMSnY
Поможите, чем можите.
Где красным подчеркнуто, у тебя вычитывается весь файл, указатель на позицию в файле указывает на его конец, читать больше нечего. Когда ты делаешь f.readlines в конце, считывается 0 байт.
Теперь понял, спасибо. А чтобы обратно каретку в начало файла сдвинуть что нужно, заново файл открыть?
Можно сделать f.seek(0)
жаль
Еще думаю для mp4 и webm раздачу сделать и вообще буду доволен. Даже на гитхаб залью.
Нужно как-то json в байты закодировать, я так понимаю, не знаю как
Ну где вы, гуру фласка?
Всё, разобрался с тупым вопросом, я просто в командах jsona запутался
Передавай в target ссылку на функцию, а не результат её вызова.
Вместо
P1 = Process(target=start_server())
Нужно:
P1 = Process(target=start_server)
Так же с P2.
И ещё кое-что. Так как у тебя потоки запускаются почти одновременно, почти наверняка сервер ещё не запустится, а клиент уже пытается ему послать запрос. Конечно, вывалится исключение. Решение в лоб - перед P2.start() добавить задержку, скажем, так: time.sleep(1).
HTTP-сервер работает поверх TCP-сокетов. Соответственно, тебе нужно написать свой HTTP-сервер с нуля, который сам будет обрабатывать запросы и слать в ответ что угодно, хоть json в виде байтов. Вопрос, конечно же, теоретический? Писать свой веб-сервер - не самое простое дело, да и не самое полезное.
Это я знаю, да и я уже написал. Просто он у меня отправлял html простые, а мне захотелось отправлять json как тот анон. Я вообще так и сделал, сначала кодирую словарь в json через json.dump() потом json в байты через .encode() и прилепляю байты к хэдэру.
На сервере нет такого роута, ты его не обрабатываешь. Ты обрабатываешь только /api/add_message/<uuid>
Например, можно слать такой запрос, ответ будет успешным:
def send_json():
____return requests.post("http://127.0.0.1:5000/api/add_message/123", json={"title":"Read a book", "mytext":"foobarbaz"})
Спасибо.
У тебя будет ещё минут 20?
Сейчас он выдаёт:
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
foobarbaz
127.0.0.1 - - [17/Oct/2019 hh:mm:ss] "POST /api/add_message/123 HTTP/1.1" 200 -
То есть вроде как работает, но при нажатии http://0.0.0.0:5000/ в браузере нихера нет. Ведь сервер по идее тоже что-то должен выдать.
Он и выдаёт, что страница не найдена. Если сервер не запустить, браузер напишет что-то типа "не удалось подключиться". Опять же потому, что роут "/" не обрабатывается.
Можно в браузере перейти на
http://127.0.0.1:5000/api/add_message/123
Тогда загрузится. Но ругнётся, что не передаёшь нужные данные.
Как всё сложно.
А если у меня будет не один json, а несколько? Посылаемых друг за другом и на каждый надо дать ответ, как тогда это представить?
Алсо, вот я сервер забиндил слушать все подключения, я могу подключиться к нему с самого компа и из локальной сети. Но из интернета на внешний айпи не подключается. Это браузеры отказываются отправлять запрос? Нужен какой-то особый порт для такого?
Для примера можно добавить в send_json() несколько вызовов requests.post() с разными аргументами. Вариант сложнее - несколько процессов по запросу на каждый.
Тут всё намного сложнее.
1. Внешний IP у тебя вряд ли статический ("белый"), их сейчас не раздают направо и налево. Твой IP - "серый".
2. Порт у тебя не "открыт". Как его открыть, можно нагуглить. Но если всё сделал, но он по-прежнему закрыт, тут только обращаться к провайдеру, зачастую это платная услуга.
3. Если ты сидишь в интернете не напрямую, а через локальную подсеть,, нужно ещё настраивать проброс портов на роутере.
В общем, намного проще найти бесплатный хостинг в интернете и выложить туда. Например, есть pythonanywhere.com
Таааак, падажжи ёбана...
Вот маняклиент
def send_json():
--return requests.post("http://127.0.0.1:5000/api/add_message/123", json={"title":"Read a book", "mytext":"foobarbaz"})
Допустим я создам список словарей и циклом буду извлекать каждый словарь, превращать его в json и отправлять на сервер.
1) Цикл мне в send_json засунуть?
2) А что насчёт адреса http://127.0.0.1:5000/api/add_message/123 ?
Он на каждый post-запрос с json'ом свой должен быть? То есть в адрес надо что-то типа переменной части добавить?
3) А сервер как это будет обрабатывать? То есть его динамическим делать? И как он это отображать будет? в адресной строке? Или json'ом в ответе?
4) Хватит 2х процессов по одному на сервер и клиент? Или надо больше?
Внешний порт динамический, порты открыты у меня, я уже проверял, писал на сокетах чат, в котором подключал разные компы. Они нормально подключались через внешний айпи. Там сервер был на стационарнике, а этот на ноуте, но он с линуксом, тут не должно быть файрволла, короче порт открыт должен быть.
Насчёт проброса я не понял, как я понимаю, проброс это перенаправление пакетов, приходящих на внешний айпи, роутером на какой-то определённый частный айпи в сети, но зачем мне это если мой сокет слушает всё? пусть слушает внешний айпи.
Просто я помню, что уже подобный сервер запускал, но там это всё было через приложения клиента и сервера, а тут вместо клиента у меня браузер, и я не понимаю, что изменилось
1) Да
2, 3) Это на твоё усмотрение, технически вообще без разницы. Иногда делают весь api на одном и том же роуте, а потом уже парсят данные из json и производят нужные действия. Но концептуально это не совсем хорошо. Можешь почитать про REST API.
4) Если делать через цикл, хватит.
Ой блядь, внешний айпи динамический*
Спасибо.
Такие ещё вопросы:
1)
> "Можно в браузере перейти на http://127.0.0.1:5000/api/add_message/123 Тогда загрузится. Но ругнётся, что не передаёшь нужные данные.
Странно, get запрос у меня 500 выдаёт. Это если скопировать адрес и вставить.
2) Как удостовериться, что сервер что-то отдаёт в ответ? Тоже print поставить?
3) Касательно REST API - на что тут обратить внимание?
4) Тебя можно будет в эту пятницу/субботу тут застать?
Тогда не ебу. Единственное, что могу предположить - провайдер не разрешает входящие подключения к 80 порту. Или детектит и блочит http-трафик вне зависимости от порта.
фаервол
1) наверное, от версии фласка зависит. Но так или иначе это должен быть код 500.
2) в консоли ведь делается выхлоп, что было обращение к такому-то роуту. Если нужна ещё инфа - да, можно print добавить.
3) это просто общие принципы, их нужно в целом понимать. Ну, может, какие-то присеры глянуть.
4) возможно, но не 100%
Блядь, я проверил, но да сейчас какого-то хуя тот старый сервер тоже перестал работать, пиздец, я был уверен, что он работал нормально с внешним айпи
Спасибо и напослндок?
Код чуть дополнен:
l1 = [{"title":"Read a book1", "mytext":"foobarbaz1"}, {"title":"Read a book2", "mytext":"foobarbaz2"}]
def send_json():
-- for i in l1:
----return requests.post("http://127.0.0.1:5000/api/add_message/123", json=i)
Но вот при запуске выводит только foobarbaz1
Он до второго элемента не доходит. Его обновлять надо? Или как?
Сука, какой же это пердолинг, у меня в роутере DMZ(открывает все порты) стояло на частный адрес стационарника, но частные адреса каким-то образом сбились, и все порты у меня были открыты на моём ксяоми. Пиздец. Поставил dmz на ноут и всё заработало.
Не читал о чём вы, но готовые реализации HTTP серверов уже есть, смотри h2 и h11.
HTTP работает независимо от TCP. Можешь из файла брать поток для HTTP, откуда хочешь.
Если у тебя подключение к интернету через NAT, через какой-нибудь роутер, то без специальной настройки, не всегда доступной, подключиться к тебе будет нельзя.
У тебя на компьютере полноценный внешний IP? Не 192.168., или не 10.?
Второе, на каком адресе ты открываешь сервер? Если в параметрах указываешь host='127.0.0.1', он же по-умолчанию иногда, то с внешнего компьютера ты подключиться не сможешь. Надо указать или '0.0.0.0', или адрес интерфейса, на которым ты слушаешь. Проще всегда "0.0.0.0", это значит, что с любого интерфейса можно подключиться.
попробуй запустить встроенный на питоне сервер
python3 -m http.server
от поднимет простейших http сервер на 8000 порту
и зайти на него из интернета
Спасибо, анон, но я уже всё настроил. Я просто долбоеб, у меня были порты закрыты. [spoile] приватные адреса сбились, а на приватный адрес было в роутере включено DMZ[/spoiler]
Не понял про 10. , не знаю, что это. Айпи полноценный внешний,
192.168... тоже есть, но это приватный же, адрес устройства в локалке. Сокет я биндю на "", то есть на четыре нуля.
>>499040
Ну так-то http это просто язык хэдеров, методов и кодов, по факту можно хоть на листке сообщения передавать по правилам протокола. Удивительно, насколько там простейшие вещи применяются в написании собственного сервера. Но писать много придётся, чтобы всё было по правильному.
Это потому, что происходит выход из функции сразу после первого запроса. Убери return.
Отговорите вкатываться в пхп.
Зачем? Создавать кучу однострочных функций смысла нет, тем более что она только один раз используется.
А что насчёт сервера, почему он 500 выдаёт?
Разве он не должен работать и что-то в ответ выдать?
Потому что он не смог обработать запрос и свалился. Не смог обработать, потому что не проверены все возможные ошибки. Например, нужно проверить, что все нужные поля есть в json, прежде чем пытаться их читать. Если нет таких полей, явно слать клиенту 400.
Запоздалое спасибо!
спасибо за охуительный совет по поводу принта, вот как он работает.
Спасибо за помощь.
Спасибо, что не поленился и всё расписал для ньфани типа меня, анчоус. Я исправился как тебе, уж лучше? Насколько мой код тянет из 10?
ничё старшного, главное что задание выполнил. пиздец с этими строками это самое сложное.
Для того чтобы можно было запустить его на "чистом" питоне без предустановленных библиотек?
Установить на том "чистом" питоне те библитеки не вариант.
Можно ли еще сделать питоновский скрипт как экзешник?
Надо бы вопрос про запаковку и дистрибуцию скриптов включить в шапку треда. PyInstaller хороший вариант, но далеко не единственный.
>>499910
>>498261
Конечно можно, более того, в пайчарме это тоже так работает, создаешь окружение каким угодно способом, а потом в настройках среды рзработки указываешь интерпретатор из этого окружения. В пайчарме просто автоматически создается новое окружение и делаются нужные настройки при создании проекта.
Так а чо он будет сервить? Мне просто не хочется неделю ковыряться с сопутствующими задачами, чтобы сделать скажем имиджборду. Ладно, я пока PEPы читаю и вот это
https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html
http://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html
Из опыта собеседываний, я проследил для себя такую штуку: когда говорят, что что-то там возможно возобновится, "мы вас сохранили в базе и в будущем, если вакансия откроется, мы с вами свяжемся" -- это 99% значит, что никто никогда больше с тобой не свяжется.
Идти ли на херовую работу? Смотря что ты хочешь от работы и что ты из себя представляешь. Если ты начинающий, тебе нужны деньги, и для тебя без проблем сменить работу через полгода -- можешь попытаться пойти куда берут, поднаберешься опыта и свалишь потихоньку, проходя собеседования ещё будучи на рабочем месте. Если же ты ищешь работу надолго, то думаю ответ очевиден: какой смысл идти на херовую работу и через полгода оказаться в той же ситуации, потому что она заебала.
как эти с такими задачами норм справляются
asyncio в python, как верно выразился уже не помню кто -- это язык в языке. Если твой код лезет в IO -- он должен быть написан на asyncio, иначе блокирующий IO повесит тебе eventloop. Проект использует, например, boto3? Поздравляю, тебе хана но это не точно. С тем же Celery а связке с asyncio будет больно. Помни о том, что почти все asyncio-либы находятся в стадии лютой альфы, и хорошо, если в них работает нужная тебе функциональность
Будет больно на стыках синхронного кода с асинхронным. Я по началу выл с ранних этапов инициализации и финализации приложения: в первом случае eventloop ещё нет, а во 2м уже нет. Но всё решаемо
Невозможность асинхронного инита заставляет посмотреть на конструкторы заново и вынести всю асинхронную инициализацию в отдельный метод
Резюмирую. Вкатывайся, но будь готов, что придётся менять мышление
Стоит ли купить этот курс, как считаете?
https://infopoisk.sale/shop/programmirovanie/obshchee-programmirovanie/kurs-programmirovaniya-na-python-36-3441.html
Нашёл в гугл диске книжку mysql for Python, с неё хорошо будет вкатываться в базы данных?
это троллинг?
Вкатывайся в БД через БД. Хочешь мускуль -- хорошо, раскатывай контейнер с мускулем (ниже 8 не рекомендую -- там ещё не выпилен ублюдочный автоинкремент и нет поддержки CTE) или mariadb, ставь Workbench и упярод. Тебя ждёт погружение в сказочный мир нормализации данных, профилирования запросов и особенностей транзакций
А Python предоставляет лишь биндинги
>Вкатывайся в БД через БД.
>Хочешь мускуль -- хорошо
Эммм... Я не слежу, но мускуль всегда был самой ублюдочной реализацие РБД, даже хуже ебаного аксесса.
Зачем ебать мозги, когда есть Постгре?
Или, внезапно, мускуль решил начать реализовывать стандарты хоть немножко?
У постгри свои болячки, связанные со структурой данных на диске. На хабре была кулсторя жопогарь инженеров Uber об их успехах нет использования постгри в качестве OLTP-системы.
И да, ебучий ИхSQL наконец начал соответствовать стандарту. Меня поражает, что мускуль годами (sic!) был стандартом де-факто в вебе, и до релиза 8.0 был таким унылым говном. Блять, раз всех всё устраивало, это ж сколько в мире говноедов?
Вообще у мускуля есть убер-фича -- разные движки. Хочешь логи в БД пердолить -- на тебе колоночный движок, хочешь иерархии строить -- на тебе графовое двигло. По крайней мере на их вики всё выглядит чертовски шоколадно
Архитектурно node.js получше, там намного лучше асинхронность, всё встроено в язык, все библиотеки асинхронные, что в asyncio может быть довольно муторно и уродливо, в ноде элегантно и за пару строчек.
Но как сам язык JS полное говно по сравнению с питоном. Многие базовые либы на питоне намного лучше сделаны, беда только в том, что они часто синхронные, но это умеренная проблема и не всегда проблема вообще.
На ноде нет таких самых базовых вещей, как очереди, а с ними ты многие программы просто иначе проектируешь.
Asyncio сложнее, требует большей квалификации, входной порог заметно выше, но в целом посерьёзнее. Но может начать стоит с ноды, а потом переехать.
Ок, уже читаю про восьмерку. Вроде, становится получше, да.
Я махнул рукой, охуев от того, как пятерка обходилась со временными типами - когда у наллабл поля вместо налла вставлялись нули, или когда, при апдейте одного поля, опустив упоминание других (а значит, я их не хочу апдейтить), эти самые другие забивались, опять же, нулями.
Да, я знаю, что можно было вхуячить какую-то там моду в настройках, или вовсе использовать другой тип. Но это какой-то пиздец.
Про невозможность использования подселектов для вью и уебочные сообщения об ошибках на пустом месте ("не могу создать временную таблицу" при каких-то простых операциях) я уж и вовсе молчу.
Вообще, из почти десятка разных баз, с которыми я работал, ни одна не вызывала такой дикой жопной боли, как мускуль.
Не знаю, что там было на хабре, я прочел прям на убере, речь идет не о "болячках" а о "мы считаем, что постгре менее эффективен в нашем случае, и вот почему..."
Короче, этому анону насрать на проблемы репликации, и как физически устроен апдейт пары полей в записи.
Ему нужно, чтобы база нормально реализовывала стандарт и не ебала мозги. Это точно не про мускуль версии 5 (не говоря уж о более ранних)
Да, прочитал. Был вопрос, с чего учить сиквел, ты что-то стал за версии мускуля пиздеть. Мало того, что невпопад (sql не с mysql начинают), так еще и плохой практический совет начинать с последней версии.
> когда у наллабл поля вместо налла вставлялись нули
О ДА! У меня тогда жопа просто неистово полыхала.
> невозможность использования подселектов для вью
Это шаблон select from select? Или что? Вьюхи не доводилось создавать.
> временную таблицу
Ещё одна ублюдочная часть MySQL. Вроде бы CTE позволяют отказаться от этих ебучих временных таблиц по каждому чиху.
> Не знаю, что там было на хабре, я прочел прям на убере, речь идет не о "болячках" а о "мы считаем, что постгре менее эффективен в нашем случае, и вот почему..."
Хм. Шота меня память подводит, надо глянуть ещё разик
> Ему нужно, чтобы база нормально реализовывала стандарт и не ебала мозги. Это точно не про мускуль версии 5 (не говоря уж о более ранних)
Да, два чаю. Тогда даже лучше firebird. Остались приятные впечатления
На node.js удобно писать простые задачи, реально удобно. Компактнее и нагляднее.
Но когда задачи растут, логика усложняется, ты начинаешь сталкиваться с тем, что в языке всё убого. Начиная с того, что сам JS убогий и примитивный по сравнению с питоном - передача параметров в функции, типизация, работа со словарями/списками и многое другое, и библиотеки кривые, по работе с xml, например. Но и по асинхронной части много чего в JS не хватает.
Например, общий паттерн по обмену данными в многопоточных и асинхронных приложениях в том, чтобы через очереди это делать. У тебя одна задача слушает очередь, а другая или другие туда данные кладут. Быстро и наглядно, стройно, решает кучу проблем. В asyncio это базовый функционал, в node.js асинхронный очередей нет.
Всё зависит от того, какой функционал от SQL ты хочешь освоить. Не всегда нужно что-то сложное. Может тебе и sqlite будет достаточно.
Нынче вместо апача принято обходиться нджинском. А уж в случае питона практически необходимо, nginx нужен, а апач совсем не нужен.
Потом, из Питона не очень принято напрямую базу дёргать. Типовой АД из LAMP выглядел так, что у тебя в коде куча всяких mysql_query(), в которых прямым текстом код запроса указывался, и всё это вперемешку с вёрсткой html. Нынче это bad style даже в php, а в питоне иначе сайты делают. Чаще какие-нибудь ORM используются, хотя не всегда.
Всё смешалось: люди, кони,
Ну а я бессмертный пони
Сегодня ORM везде best practice, и использование SQL в коде -- дурной тон, но не всегда говнокод. Например, django ORM в щи тупая и ограниченная. Составной первичный ключ (timeseries, attributes)? До недавнего времени хуй вам, а не составной первичный ключ.
А вот за смешивание в одном файле кода на разных языках, будь то SQL, HTML или ещё какой-нибудь НЁХ, я нещадно ебал и буду ебать
Короче, пиздуешь на sql-ex ru и ебашишь. Как заебут задачи уровня `select 'helloworld' from dual`, пиздуешь на codewars, где с тебя снимут стружку. Дальше планку тебе будет задавать codewars
Вы мне сейчас таки с пруфами хотите сказать что это во времена пятого мускуля было не популярно?
Ты пока не объяснил, что ты хочешь в итоге получить.
Если крутое знание SQL, то это одна история. Если умение работать с БД, то другая.
Постгрю не так просто поставить, надо быть немного девопсом или ДБА, но это к sql никакого отношения не имеет.
Если ты ничего не умеешь, то начни с sqlite. Никакого геморроя по части установки и обслуживания, так ты освоишь сами механизмы работы с БД и базовый SQL. А потом уже сядешь за серьёзные базы и серьёзный SQL, если потребуется.
>Постгрю не так просто поставить, надо быть немного девопсом или ДБА, но это к sql никакого отношения не имеет.
У нас какие-то разные релизы постгреса, видимо. В убунте apt-get install postgres, в маке и винде далее далее далее готово.
Тебе нужно просто взять книжку и начать ее читать.
Методом тыка делать ничего не надо.
Когда ты начнешь понимать, чем table отличается от tablespace, и что значит "релационная" в словах "реляционная БД", поймешь, как элементарные селекты херачить, тогда и будешь думать, ставить тебе БД, или не ставить.
Можно вообще ничего не ставить, взять какую-нибудь H2, там все на файлах и клиент в браузере.
Ну да, конечно.
Нормальные ребята могли работать с ораклом, мс-скл, с постгресом и парой-тройкой эмбеддед-баз. На яве и .нет.
Но миллионы хуесосов выбирали пхп и мускул, "патамуштаочиньсложна".
Так что это был именно выбор. Который устраивал двоечников. Как сейчас яваскрипт и поделия на нем.
На sql-ex очень хуевая постановка задач.
Хуй проссышь, чего они хотят.
Не говоря уж о том, что названия таблиц во множественном числе.
Явный признак пидараса.
>select from select?
Да.
СТЕ же только в восьмой появились.
Причем просто в селекте можно было сделать фром селект, а во вью - хуй на рыло.
Какую книжку?
Эта связка решала задачи и показывала очень хорошую производительность, недостижимую на обычных БД.
Использовали в основном базы MyISAM, которые даже без транзакций, то зато работали сильно быстрее, чем транзакционные БД.
Потому что в вебе другие задачи, нужно очень много простых запросов, и MyISAM с этим прекрасно справлялся, а полноценные базы не могли и близко.
Сейчас другая реальность, качество софта подросло, железо ускорилось и стало на порядок доступнее. Когда нужна высокая производительность чаще используют NoSQL подходы, когда нужно сложное хранение и выборка, сложная логика, тогда и базы соответствующие.
Майисам не только без транзакций, но и без ссылочной целостности. Т.е. ты там можешь писать create constraint, но они не будут работать (по крайней мере, в ранних версиях так было).
Это не потому что "сильно быстрее", а потому что разработчики - криворукие неумехи.
Ебаный Caché появился в 1997-м, он еще быстрей, но 99% дба его не только не использовали, но даже и не слышали о нем.
Единственное достоинство мускула в начале его пути - бесплатность. Оракл по скоростям крыл его как бык овцу. Даже мс-скл, который тогда был еще сайбейзом с переклеенной этикеткой, был в тыщу раз круче.
>которые даже без транзакций, то зато работали сильно быстрее
>нужно очень много простых запросов
Видно, как хорошо ты разбираешься. Нужны запросы, поэтому без транзакций быстрее. Ок.
В общем, не позорься, просто помолчи.
Мускул - очевидное говно, данное человеку для воспитания смирения. Защищать его могут только "солнечные дети" с лишней хромосомой.
>Когда нужна высокая производительность чаще используют NoSQL подходы
Когда не смог осилить sql, испльзует NoSQL подход
Когда не смог понять, что такое 3НФ, использует NoSQL подход
Когда хранить как-то надо, а схему БД нарисовать не получается в силу слабоумия, использует NoSQL подход
Ну и еще пара ребят используют NoSQL по делу, но тут ты их не найдешь.
>Когда не смог осилить sql, испльзует NoSQL подход
>Когда не смог понять, что такое 3НФ, использует NoSQL подход
Ты мне напоминаешь студня, который недавно прошёл курс по теории баз данных и теперь думает, что очень умный, и жаждет применить услышанное на практике. Не понимая, что всей этой теории многие десятки лет и все всё конечно изучали.
Такие начинают лепить код и архитектуру, который потом чудовищно тормозит, ради которого надо делать сложнейшие оптимизации движка СУБД.
Вот кеши только неучи делают? А кеш как технология в принципе нарушает 2НФ.
НФ нужны для концепции целостности и непротиворечивости данных. Но эта концепция прямо противоречит задачам оптимизации и производительности, поэтому всегда надо балансировать и выбирать.
НФ нужны не чтобы дрочить на них.
короче,на ноде лучше забацать прототип и по ходу дела потом лучше переписать?
Успешный стартапер, ты?
По-моему print должен быть внутри функции и печатать print(f' вы такой дурак ебаный {i'})
Тебе нужно понять, что ты не высчитал сумму хронометража песен, ебло тупое. За мат извини
Пикрил - как выглядел изначально код, которыи необходимо дописать. И print вынесен за пределы функции. В подсказках черным по белому написано: Внутрь f-строки вставьте значение длины списка.
>>500519
Прочитаи внимательно задание, ебло тупое. Про хронометраж ни слова. Нужно посчитать количество песен.
>>500509
яндекс практикум
https://praktikum.yandex.ru/trainer/backend-developer/lesson/3828fc2d-6030-4853-835c-aee39545ac2c/task/8a9b56c8-3e7e-4506-80ba-5a0fc11faa74/
Я ваще хз че от меня требуется. В первом случае код тоже пашет как часы.
На вот, по твоему варианту.
Я просто не понимаю как рассчитывать этот регистр и как найти шаг
Пересмотрел кучу видосов так и не понял. Последняя надежда только на тебя двач
Где там про хронометраж?
data = 'The ADJECTIVE panda walked to the NOUN and then VERB. A nearby NOUN was unaffected by these events.'
madlib_regex = re.compile(r'(NOUN|VERB|ADVERB|ADJECTIVE)')
matches = madlib_regex.findall(data)
for found in matches:
sub = input(f'Enter a {found}: ')
data = madlib_regex.sub(sub, data, 1)
print(data)
Спасибо.
>кеш нарушает 2НФ.
Я тебе предложил не позориться, но тебе неймется.
Ну, давай, жги, хуй с тобой
>На отсутствие записи в файл не обращайте внимание, там тупо open(f, 'w') и закрытие.
Задание, кажется, просит прочитать данные из файла, но не говорит, куда деть результат? В таком случае open(f, 'r'), желательно через выражение with.
Решение нормальное. Что можно улучшить:
1. Заставить это работать для большого количества данных. Для входного файла в 10-20 Гб данные можно читать кусками (главное не разорвать какой-нибудь NOUN на NOU и N) и кусками же обрабатывать.
2. Вызов madlib_regex.sub каждый раз создает новую строку. Этого можно избежать, если данные заранее разбивать на слова и хранить в списке. В целом в питоне часто можно избежать использования регулярок. Здесь все понятно, но regexps легко становятся трудными для восприятия.
3. В input всегда используется артикль "a", но случае с ADJECTIVE должен быть артикль "an".
Если от входных данных не ожидается никаких подводных камней, то сойдет и так. Тем более, в книге, я думаю, должна быть часть про то, что делать, если то и то не помещается в оперативную память.
>>501112
Проще всего читать построчно.
Общий код:
1) блок запроса от пользователя NOUN, ADJECTIVE и других слов
2) вложенные open
with open('oupput.txt', 'w') as f_output:
___ with open('input.txt', 'r') as f_input:
_______ for line in f_input.readline():
___________ line = line.replace('NOUN', user_noun)
___________ line = line.replace('VERB', user_verb)
ну и там же запись в файл.
Мне также искренне жаль того анона который попытается в это вникнуть, т.к. это мой код и я его с трудом писал, хотя читаю легко, но наверное тому кто это не писал будет довольно сложно, но всё же, опытный анон, постарайся понять и пояснить мне где я обосрался.
Используй срезы
Откуда ты взял список, используемый внутри функции calc_stat в print?
Не подразумевает ли задание, что нужно использовать тот список, который передаст в переменной listened их среда? То бишь написать что-то вроде
print(f'бла бла бла {calc_stat(listened)} бла бла бла')
Скорее всего надо, чтобы в коде была функция
def calc_stat(listened):
...
и только она, никакого внешнего кода. print() должен быть внутри этой функции. А платформа уже во время тестов сама будет вызывать calc_stat с разными тестовыми значениями.
У тебя принт после ретёрна
С опытом придет, главное пили свои проекты, прокачивал скилл. Если будешь просто тачки на работе закрывать - соснешь хуйца, в перспективе.
Ничего почитать не могу посоветовать.
Хотя, если ты бээндщик, почитай из шапки книгу про микросервисы, очень интересно. Нет, не тому що это популярно, а для общего развития и понимания процессов.
> смотри доки на методы базовых типов.
ещё раз огромное тебе, спасибо, анон. мне бы ещё документацией научиться пользоваться, а то я ей пользуюсь только в случае если мне из гугла результат выпадает.
Потому что кому-то просто нравится погромирование, кто-то им занимается просто потому что интересно, а не потому что востребован и 300кк, всё иди нахуй.
>2. Востребован
Сомнительный пункт. В какой-то момент из-за хайпа питонщиков стало слишком много и те же зарплатки или рейты на фрилансе просели сильно. Ну разве что за копейки в виде 70к в год докапывать за индусами легаси.
Ну, тут ты перегнул. Это скорее у ноды с го проблемы с востребованностью, чем у питона. Хз, что там по зп, но язык в любом случае достаточно востребован, это не haskell и даже не c++.
> Python: 2834 вакансии
> Go: 586 вакансий
> Node.js: 500 вакансий
Там у питона сильно завышенная цифра, так как во многих вакансиях его указывают как вспомогательный язык.
>Почему не какие-то другие технологии вроде ноды или го
Потому что async/await в питон уже завезли.
Это сейчас самый универсальный язык, который пишется нормальными людьми, а не нодошкольниками.
Окей, поищем только по названиям вакансий.
Python: 370
Go: 14
Golang: 67
Ноду искать проблематично, её часто пишут просто как "JavaScript".
А ты ведь в курсе, что возраст языка != скорость его развития и количество полезных фич в нём?
Да, а ты?
>Хз, что там по зп
Потолок 5к у синьёра помидора в РФ. Релокетить питониста за бугор никто уже не будет, своих хватает.
Потому что очень простой. На питоне даже дебил может кодить, и код будет легко читаем.
Ребят, я недавно вкатился в питон, смотрел только курсы на ютубе. Что нужно читать, чтобы научиться пилить ботов? К сайтам коннеткиться там .
Пока что планирую прочитать укус змеи и как то вкатываться в джанго
Если много вакансий на пхп, то учи пхп. Я вот смотрел hh нск и тут не особо много вакансий на пхп, бэкэнд джуниоров примерно равномерно мало на питоне, пхп, сишарпе и ноде. Нет такого, что если с питоном никак, то учишь пхп и сразу куча работы.
Книжки есть в гуглдиске, но ты же всё равно ничего читать не будешь. К сайтам коннектиться это типо про парсинг? По большей части можно за вечер изучить его, это хуйня. Боты на всякие игры с другой сложная и муторная хуйня, которой мало кто занимается, вот тут есть серии прикольные https://pythonprogramming.net/bot-tutorials/
унижай дебилов, хуле ты как маленький
а чем бутылка лучше фласки, лимит есть хотя бы?
>В таком случае open(f, 'r'), желательно через выражение with.
Мне тоже так удобнее, но в этой книге почему-то по with ничего не говорится. До этой книги читать Python Crash Course 2nd, там без with никуда.
>Заставить это работать для большого количества данных. Для входного файла в 10-20 Гб данные можно читать кусками (главное не разорвать какой-нибудь NOUN на NOU и N) и кусками же обрабатывать.
Что значит читать кусками? Понятно, что как-то разделять файл на части, но как это логически даже выглядит и каким способами реализовать не понимаю. Разве что каждую строку отдельно читать, но опять же, что если у меня одна большая строка?
>Вызов madlib_regex.sub каждый раз создает новую строку. Этого можно избежать, если данные заранее разбивать на слова и хранить в списке. В целом в питоне часто можно избежать использования регулярок. Здесь все понятно, но regexps легко становятся трудными для восприятия.
Видел реализацию c replace, но решил, что вдруг в будущем надо будет регулярку юзать, поэтому чтобы запомнить написал так.
>Если от входных данных не ожидается никаких подводных камней, то сойдет и так. Тем более, в книге, я думаю, должна быть часть про то, что делать, если то и то не помещается в оперативную память.
Пока еще не было. Не рановато ли мне это изучать?
Конечно же спасибо большое за ответ!
len
str[j]
str[j:n]
str.find(k)
Да, да мой код гавно с костылями, вы можете лучше используя только 4 вышеприведённых инструмента? Пожалуйста, постите свои коды, я с удовольствием на них посмотрю.
Я пишу:
import requests
a=int(1) #переменная для числа в ссылке
q = int(1) #переменная для числа в имени файла
while a <= 20:
f=open(r'E:\11\e' +str(q)+ ".jpg","wb") #открываю файлы для записи
ufr = requests.get("http://site.com/"+str(a)) #задаю ссылку
a = int(a) + 1
q = int(q) + 1
f.write(ufr.content)
f.close()
В итоге создаются все 20 файлов, но содержимое есть только у первого. Помогите, пожалуйста, победить.
Да, изи
Каждый раз, когда ты в цикле открываешь файл на запись, ты его перезаписываешь
Используй конструкцию with open("имя файла", "wb") as f: и дальше твой цикл. В данном случае явно закрывать файл с помощью .close() не нужно, в этом преимущество такой конструкции
Когда объявляешь переменные не обязательно явным образом указывать их тип, достаточно просто а = 1 и а +=1 , чтоб прибавить единицу к существующему значению а
А,соре, долблюсь в глаза, ты записываешь не в один файл, а в 20 разных
Ногти грязные. А я передернуть уже хотел.
How to Think Like a Computer Scientist, Learning with Python, third edition.
Только она на английском только, на русском нету.
>>> a = (i for i in range(2, 8))
>>> a
<generator object <genexpr> at 0x00000270527236C8>
>>> for i in a:
... print(i)
...
2
3
4
5
6
7
>>> for i in a:
... print(i)
...
>>>
Во второй раз пройтись уже не могу. Объясните, пожалуйста. Спасибо.
Так а сервер-то нормально отвечает?
добавь там в цикл после реквеста print(ufr.status_code) и посмотри на ответы сервера
Очевидное переполнение стека вызовов, никто количество вхождений не ограничивал.
Решается лёгким переделыванием рекурсии в динамическое программирование снизу. https://ideone.com/E6c7mj
С модификацией кода отдельной функции всё предельно ясно. Со всем файлом как такое провернуть?
>В программирование есть некая возрастная дискриминация - молодые далбаебы нужны везде и всюду, старые - не очень. В основном период активности программиста - до 40-45 лет. Дальше если ты не перекатился куда-то выше или не замутил свой стартап - будет крайне печально поскольку ты никому не нужен и проще выкинуть тебя и нанять молодую обезьянку после института. Люди 40-45 лет работающие в IT редко программируют сутками, а скорее берут на себя организаторские обязаности - Тим лид, Проджект менеджер, etc.
Т.е если я вкатываюсь в 27 лет и проработаю 13-18 лет и стану тим лидом, то всё норм еще может быть?
Генераторы работают только один раз, при первом вызове. Гугл в помощь.
Ты еще можешь перекатиться в байтоебы, там до седых мудей можно пердеть.
>Т.е если я вкатываюсь в 27 лет и проработаю 13-18 лет и стану тим лидом, то всё норм еще может быть?
Нет, не норм. Ты даун, которому интересна карьера, а не программирование.
Асинхронный, многопоточность зависит от реализации.
Хорошо, когда карьера и интерес к профессии совпадают. Ведь я не смогу реализовать своих интересов если не смогу реализоваться профессионально.
Когда начинаешь работать, то покидаешь тред, т.к. учишься гуглить
Что делать будешь в 45 без работы, но с интересом к программированию?
Пиздуй выкатываться во фласк. Для меня джанга была плавильней мозгов, а фласку схватывал на лету.
а может ли сильно различаться? там уроки по джанге 2.х от сентября 2018 я щас про последний видеокурс говорю
кириллица отсутствует вообще везде
>>502483
да на фласке полторы вакансии, а жить на што то надо. алсо, у меня жопа горит с того что там нужно все самому блять прикручивать, в то время как в джанге все изкаробки
> алсо, у меня жопа горит с того что там нужно все самому блять прикручивать
Так если научишься/умеешь, чего гореть то.
> там нужно все самому блять прикручивать, в то время как в джанге все изкаробки
Это не баг, а фича. Во фласк намного легче вкатиться, но потом понимаешь, что тебе не хватает функционала, начинаешь подключать ORM, модели, аутентификацию, и вжух - изобрёл джангу. Зато разобрался по мере нужды, а не охуел от количества информации в самом начале и решил забить.
ты заебало анон. тогда по твоему нужно пхп учить для веба? или руби блять?
Да уж лучше пхп лол, чем питУХоН
Ну не учи, делай рест апихи на ванильной джанге
У меня вопрос про сокеты, вот серверный сокет получил запрос и приложение вызвало accept(), ось создала ещё один сокетный файлик под это соединение. Дальше, если приложение клиента делает send() и закладывает некоторую информацию в свой сокет, то эта информация сразу же осью перекидывается на комп сервера и там загружается в сокет соединения? И уже из сокета соединения тогда приложение может просто выгрузить эту инфу сразу через recv()? Или в сокет соединения приходит только какой-то маячок, что удалённый клиент готов отправить данные, а сама вот эта информация будет переслана по интернету только когда сервер запросит recv()?
То ест вот говорят буфер записи, буфер чтения у сокета, а где именно он физически находится?
И ещё вот в функции select() понятно какие сокеты готовы к чтению, а что значит готовы к записи? Там будут все сокеты, у которых буфер на запись не переполнен?
def lcm(args):
____if len(args) == 2:
________return args[0]args[1] // gcd(args)
____else:
________return lcm(lcm(args[:len(args) - 1]), args[-1])
Сложно говорить без указания конкретного протокола, но
>Дальше, если приложение клиента делает send() и закладывает некоторую информацию в свой сокет, то эта информация сразу же осью перекидывается на комп сервера и там загружается в сокет соединения?
Да, именно так. Не только "осью перекидывается", при передаче по сети много посредников.
> Или в сокет соединения приходит только какой-то маячок, что удалённый клиент готов отправить данные, а сама вот эта информация будет переслана по интернету только когда сервер запросит recv()?
Нет, передается все сразу. Кроме того, успешный send не гарантирует, что на приемнике был вызван recv.
> То ест вот говорят буфер записи, буфер чтения у сокета, а где именно он физически находится?
В ядре ОС. Когда блокируется вызов send, это означает, что буфер записи переполнен и необходимо подождать, пока данные из него физически окажутся в сети. Когда вызов send возвращает, это означает, что данные были переданы в буфер записи. Это важно, успешный send не означает успешную передачу данных.
> Там будут все сокеты, у которых буфер на запись не переполнен?
Эм, вроде того. Запись ведь тоже может блокировать, а значит и select имеет смысл.
Этот грубиян отчасти прав. При хорошем знании джанги мне сложно представить фреймворк, в котором будет проще или быстрее наклепать качественный сервис, апи или сайт. Проблема в том, что это плохо масштабируется.
Если говорить о нагрузках, Джанго - синхронный фреймворк, и он будет справляться хуже. Тем более сейчас, когда все больше приложений начинают свою жизнь в облаке в виде множества сервисов. Туда сходи (синхронно), там данные запроси (синхронно), здесь проверь авторизацию (синхронно). Не то что бы это невозможно обойти, но люди просто голосуют ногами. У питона, я считаю, отличная реализация асинхронного IO, но джанговские эксперименты пока слишком маргинальны для тех, кому просто нужно делать деньги.
Если говорить о росте кодовой базы, то Джанго мало что сообщает об организации большого количества кода. Сервисы, DI, что-нибудь еще готовое? К сожалению, стандартные рекомендации заканчиваются "толстыми" моделями и "приложениями", из которых мало кто может извлечь пользу.
Здесь же начинает играть роль и сам язык. Когда-то скриптовые языки показали, что большие кодовые базы можно писать и без статической типизации (главное - протестировать), но теперь у нас есть языки со статической типизацией, которые выглядят почти как динамические (typescript, kotlin) - можно получить лучшее из двух миров - да еще и с non-nullable типами по умолчанию. Питон классный, но уже видно, что это не самый новй язык.
Нельзя сказать, что это все не решается, но перед веб-экосистемой стоит много сложных вопросов, и нельзя сказать, что они точно и вовремя будут решены и что все будет хорошо.
В то же время в бигдате у питона конкурентов намного меньше (скорее, эм, там питон и джава?) и его любят люди, которые не программисты по основной специальности (саенс и вот это вот всё).
Аноны, подскажите где можно найти простенькие задачки для практики.
codewars
Из веба на питоне можно перескочить в веб на другом языке типо ГОвна с минимальными потерями, особенно если микросервисы дрочил (которые на питоне и так очень удобно писать и масштабировать при правильной архитектуре), занимаясь же бигдатой перескочить нельзя.
Спасибо, анон!
>Сложно говорить без указания конкретного протокола
Извини, забыл написать, обычный tcp.
рельсы все тоже не сдохнут
для таких как ты есть джангогёрлс
Это копия, сохраненная 18 ноября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.