Вы видите копию треда, сохраненную 18 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: https://2ch.hk/pr/res/1943168.html (М)
Литература:
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
Есть JSON с постами двача. Из поста качаю картинку. Потом опять получаю свежий JSON. Как мне хранить метку, о том, что файлы из поста были скачаны?
Пример абстрактный, но очень наглядный
обнял
Надо обозначить тип который выразит кортеж с двумя значениями, первое - строка, второе - число. Как это сделать?
Tuple[str, int] разве подойдет? Это что-то не то
На дваче вроде бы посты иммутабельны, их можно разве что удалить. Храни метку, номер поста до которого ты уже скачал картинки. Ну или любое key-value хранилище, где ты прямо урлы картинок хранишь, какие скачал, какие нет. Я не понял для чего тебе пикл, ты видимо перезапускаешь программу, можешь например sqlite использовать чтобы не изобретать свою базу данных.
Каким боком isinstance к тайп хинтингу?
Ну что ты там, разобрался?
>>1954038 →
Написать ещё один микросервис, который будет отвечать за авторизацию на других микросервисах?
можно, но нубы в бэкенд питоне сейчас не то что сильно нужны, проще вкатиться небось в пхп из бэка, или во фронт
а какой язык посоветовал бы из фронт (я кстати не особо даж понимаю в чес разница)?
javascript
В других языках тоже есть rapid application development фреймворки с магией
Как это сделать быстро и красиво?
на SO уже курю мануалы, но хочу узнать совета анонов
вот код: https://pastebin.com/R30vHZva
на выходе html в одну строку, при запуске которой (если сохранить ее на комп и потом запустить в браузер) выходит 404
Для примера в этот код вставлял другие сайты и все было норм.
Я так понимаю, скорее всего там есть какая-то особенность в самом сайте, которую я не знаю.
Если что я полный ноль и только учусь. Если есть возможность пояснить плз в чем проблема
Нет, мидлом стать легко, сиди годик-три на работе и все, а вот что из вкатыша превратиться в джуна придется сейчас жопу порвать, хотя если тебе >= 23 и есть законченная вышка(техническая), то будет проще
Возможно проверяет юзерагента, поищи как в заголовки добавить user agent и тогда пробуй
Со мной всё плохо?
Даже .format() это метод для объекта строки, пока можешь просто запоминать, а когда осознаешь как все работает будешь в шоке, у меня так было
Просто ощущение что я ребёнок учёного на научной конференции, речь русская, а ничего не понятно.
Я по-моему из-за всех этих методов книгу дропнул, точнее читал в пол глаза, так что расслабься, потом придет осознание
Найди самый длинный юзерагент и перепроверь ссылку
В чем проблема понимания методов? Просто функция, засунутая в объект и как-то работающая с ним (хотя это не обязательно).
техническая вышка энергетика + заканчиваю вышку юриста магистр которую могу поменять на айти без проблем. Помоги пожалуйста, какая последовательность действий что учить кроме питона непосредственно и где учить?
> речь русская, а ничего не понятно
Это как раз потому, что речь русская. Вообще, 90% русскоязычной литературы по ЯП и, вообще, по IT - лютейшее говно, причём даже в случае с крупными издательствами, потому что всё переведено инъязовским планктоном.
Ах да, еще добавь объект session и через него делай запросы обязательно, довольно важно, может даже заработает
Ну тут вопрос возникает насколько хорошо нужно знать инг, чтобы читалось понятнее чем на русском, у меня в голове только гугл транслейт максимум года 2010
Синтаксис питона(ветвление, циклы и т.д), структуры данных, алгоритмы, углубляешься в питон(ооп и пр.), смотришь более сложные вещи, потом если бек интересен начинаешь учить линукс, потом базы данных, html, css, потом уже вебфрейморки, джангу пожалуй, потом углубляешь еще сильнее в язык, асинхронность, многопотчность и прочее, постоянно начинаешь курить документации всего подряд, в это же время пилишь какую-то хуйню, можешь пробовать подавать резюме, получаешь тестовое, делаешь, продолжаешь уить смежные технологии, drf, celery, docker, я пока перед докером остановился, дальше ничего посоветовать не могу, но думаю примерно в это время надо найти работу. Параллельно читаешь умных людей с хабра. Есть курсы на степике, особенно рекомендую веб-технологии, там и про джангу(правда старую) и про современный фронт - ajax, и про протоколы - tcp, http, в остальном курсера есть, куча статей и документаций, кто-то кодварс дрочит, можешь попробовать когда поймешь что можешь писать свои функции. Асло другие аноны, скажите что пропустил
большое спасибо
Ты так пишешь, будто это ходовой формат в вебе.
Молодец, за пять сек нагуглил, берите его на 300к/сек.
Ну там рассказывалось про фуллстак фрейморк с шаблонизатором и т.д, этим сейчас не пользуются, а про аякс рассказано, очевидно что знать как вью работает вне рамок курса
А что не так с классами и методами?
В заданное время должна сработать команда манипулирующая информацией.
Как организовать стек с выполнением по таймеру? Каждую секунду чекать весь список? Есть встроенные функции для такого?
Нужно что-то вроде времени жизни значения из redis.
Зависит от контекста. Есть например threading.Timer, есть библиотечка sched, а можно и по классике:
while True: time.sleep(t)
Для полного эффекта ентерпрайза можешь даже Twisted заюзать
Для начала важно, как у тебя сама программа устроена. Что происходит в тот момент, когда ты ждёшь события, как добавляешь задания и т.п.
У тебя многопоточное или асинхронное решение?
Есть всякие штуки, которые по расписанию работают(название не помню, но там вроде по запросу scheduler python должно вывалиться что-то) А вообще, можешь взять Celery, там есть постановка задачи на нужное время. Недавно на работе тоже самое делал.
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
и на фронте он нормально скачается и зальется куда надо там? А самое важное как в таком случае настроить безопасность, пользователи не должны смотреть чужие файлы, пользуюсь drf, есть пермишшоны, придеться вместо обычного
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Переписывать метод retrive у вьюсета?
f строки до меня со второго раза дошли, типа можешь писать в одной строчке и циферки и буковки
Друзья, вопрос по fixture.
Как настроить такую, которая будет при запуске каждого тест класса будет заполнять переменную, скажем Count, которая будет запрашиваться из другого метода. Далее, если смотрим if count > 2: делай это, елсе: делай то.
Такое ощущение что либо я по своему проекту тут пишу, либо ты по фикстурам, больше никого
Печаль. Уже хз что делать. Обгуглился совсем. Может кого из Индии нанять за пару булок хлеба?
Ниче не понял что ты там хочешь сделать, но у каждого файла в базе данных можно сделать ссылку, по которой он открывается. Просто проверяй авторизацию при запросе к мп3 и все.
Обычно вроде делается так:
1. Джанга проверяет пермишоны, отдает ссылку на файл
2. По ссылке файл отдает какой-нибудь nginx
Можно отдавать файл сразу в ответе, например, я энкодил пдф в base64 и пихал прям в тело json(и мне не стыдно), но тогда его надо будет обрабатывать на фронте.
>>55926
А не проще ли запускать тест с разными параметрами? Сначала с count < 2, а потом с count > 2.
просто работай с дата фреймами, вычленяй там разное и оформляй
панда ас пд
дроп нулл
сорт валуес
ну ты понял
зе гай ху ис сапосед ту бе он дюти тодей ис щитфейсед он алл зе ликуор хе бот ин дюти фрии сторе. со хи ис пробабли офф дюти тилл томорроу
блядь, это вроде дикая тема из армии? типа кто сегодня пидорит полы или что значило?
лол, что это занчит вообще? кто то в кал наебенился в щитфейсес и он оф дути?
Сап. Есть такая простая модель, пикрилейтед. Два последних поля - это проджект менеджер и список сотрудников, участвующих в проекте. Хочется, чтобы при создании проекта PM сразу добавлялся в employee. Как можно добиться такого поведения?
Вроде добился желаемого через переопределение save, но правильный ли это путь?
Не секу в джанге, но разве не проще просто создать эмплои с флагом принадлежности пм/не пм?
Ну так для этого нужна кросс-таблица с полями ProjectID, EmployeeID, и флагом IsPM (или RoleID).
Не знаю как правильно. Я бы в форму добавил автоматическое добавление, а то потом окажется, что в каком-то месте не надо добавлять и придется еще одно условие в save добавлять, а потом еще одно, а потом ну ты понял.
>Именно это ManyToMany field и делает.
Я это понимаю, но тогда зачем тебе 2 раза хранить инфу о человеке, если он одновременно и пм в таблице проекта, и эмплои в кросс-таблице?
>Просто если туда кастомные колонки впихивать - ORM сломается.
Ну и говно эта ваша заливная орм пиздец, самому надо по работе в это вкатываться
Если у тебя в проекте пм поменяется, тебе и в проекте надо апдейтить его, да ещё и в кросс-таблице удалять, если он из проекта вышел совсем, а не стал лидом каким-нить.
> зачем тебе 2 раза хранить инфу о человеке
Чтобы не делать несколько запросов к БД, если нужны вывести список проектов, в которых участвует конкретный человек, как минимум. Такой API в целом удобнее для человека будет
Не вижу тут дополнительных запросов, только дополнительный джойн в запросе и условие в where на 'пмность'. Но это твоё дело, я лишь со своей кукаретской позиции дата аналитика рассуждаю, что такой подход странный, базисты бы меня на старом месте на хуй послали бы схему бд переделывать за такое.
т.е. чтобы было через инпут
user input 2 #line
user input 3 #colums
user input 0 1 2 3 4
user input 5 6 7 8 9
out
"0 1 2 3 4
5 6 7 8 9"
Совсем не понимаю как сделать ввод не по одному элементу, а по строкам
Алсо, хочу вкатиться в дата саенс, какого рода математика мне нужна и как быстрее всего её подтянуть?
Через генератор или цикл пробуй.
import numpy as np
from io import StringIO
data = """
0 1 2 3 4
5 6 7 8 9
"""
arr = np.genfromtxt(StringIO(data), delimiter=" ",dtype='int')
print(arr)
далее ниже результат функции присваивается el
Это значит, что у тебя каждый элемент коллекции это тоже коллекция, в которой ровно столько элементов, сколько у тебя переменных после for, это синтаксический сахар, например, пусть, у нас есть список пар чисел pairs = [(1, 3), (5, 2), (0, 9)], вместо того чтобы писать:
for pair in pairs:
x = pair[0]
y = pair[1]
# делаем что-то с x и y
Мы пишем:
for x, y in pairs:
# делаем что-то с x и y
Это называется распаковка, и она работает не только с циклами:
x, y, z = [7, -1, 4] # в x будет 7, в y будет -1, в z будет 4
Только надо быть внимательным, переменных должно быть ровно столько, сколько элементов в распаковываемой коллекции
Во вью при сейве инстанса просто напиши эмплоес = пм, так нельзя?
"5 6 7 8 9".split(" ") -> list
Нужно переменную ввести, но она должна быть и инт и флоат зависит от данных как сделать, если переменная по сути инт "12.0", отображалась не как флоат?
От души, уже и забыл про него
Я, конечно, тот ещё говнокодер, но можешь попробовать создать триггер на добавление записи в таблицу Project. Ну или мб там есть какое-то default value, не знаю
>А не проще ли запускать тест с разными параметрами? Сначала с count < 2, а потом с count > 2.
Не слышал об этом, как это выполняется? Или я не понял тебя.
Раньше pyside забагован был ужасно, щас они одинаковые. Но если юзаешь старые версии, то бери pyqt. Разницы никакой, тем более для россиянина, тут все хуй кладут на лицензии.
Копипасти код с каких нибудь заданий или гайдов, изменяй под себя, делай что-то по подобию этого кода и со временем поймёшь как этот кусок кода работает.
Повторяй этот алгоритм пока не задрочишь все основы.
А потом уже можно статьи читать и понимать о чем там.
> не объясняет на реальных прикладных задачах?
> Алсо, хочу вкатиться в дата саенс
Ебать довен. Начинай математику с 7 класса и до матана из универа иди.
gtk
Я про это:
@pytest.mark.parametrize("count", [1,2,3,4,5])
def test_huest(count):
....assert count == 4
Так у тебя тест запустится 5 раз с разным count. Это если тебе надо просто проверять поведение с разными входными значениями. А если тебе подменить значение, которое метод возвращает, то это тебе monkeypatch нужен.
Ты бы конкретнее написал, что и зачем тестируешь, а то непонятно чего ты добиться хочешь.
Мне нужно передавать некую переменную от страницы к странице, например - выбранный пользователем проект. На основе этой переменной будет рендерится контент на других страницах. Как это лучше всего реализовать? Запихнуть значение в request, или завести столбец в бд last_project?
Вот примерно это и думал, да. Спасибо!
Поступил заказ от организации (завод), прога должна отсеивать на входе людей так называемых SHITFACE
основной функционал я уже написал
if shitface == True:
lock door and fuck out
else:
welcome motherfucker
Осталось собственно написать нейронку которая будет детектить шитфейсы.
Ну типа
>Осталось собственно написать нейронку которая будет детектить шитфейсы.
Ее не надо писать, ее надо обучить. Для это тебе потребуется набор размеченных данных для обучения нейронки - фотокарточки шитфейсов. Разбиваешь датасет на две части, на одном обучаешь, на другом проверяшь. Все.
А зачем тогда специалисты нужны? Если нейронки все уже написаны, и них только датасеты грузить
Специалисты нужны, чтобы подкручивать параметры нейронки для увеличения процента распознавания. Для шитфейсов и стандартная из библиотеки сойдет.
Ну понял. Я как-то с челом в офисе сидел, он там все дрочил модели свои, тоже все подкручивал что-то. Но я спросить постеснялся
Именно для этого и нужна проверка на второй половине датасета. Я точно не знаю, но вроде бы, 1% процент ошибок уже считается плохим результатом. Но это скорее зависит от задачи.
Ебать, ты солдат или коп? вы там нейронки крутите чтобы врагов народа палить за социальный рейтинг?
Охуенно, вот бы вкатиться в эту тему.
как уменьшают количество ошибок? Просто кормят данными до предела или это не действенный способ?
ты под подпиской о невыезде? почему ушел? не можешь теперь на иностранцев работать? соглашение о неразглашении пожизненное?
Никакой подписки о невыезде, она была бы, если бы работал на гос.структуры. Тут же частная компания, но выиграла грант от государства. Соглашение на 5 лет подписано. Ушел потому что не мое, работа напряженная очень. Перекатился в веб и вроде не жалею
теперь из дома фрилансишь или как?
когда закончится подписка о неразбазаривании? не боишся что набухаешся и проболтаешься?
Бля, если я написал C, без всяких ебучих шарпов и плюсов - что тебе не ясно? И при чем тут паскаль и бейсик? Дефолтный интерпритатор пистона на С написан, и есть неплохая возможность интеграции этих двух языков. Интересно узнать, пользовался ли ей кто.
>>57560
О, как удачно я к вам зашел! Как раз на питончике ковыряю Qt. Пока туговато конечно идет, решил фронт для mpv запилить (как будто их мало) под свои нужды.
Так вот, есть может курс какой/набор литературы/рекомендаций по изучению? Я конечно с разбегу сейчас вхожу и с гуглом это работает, но через боль, карго культизм и стену непонимания ключевых концепций. На срутрекере книга на русике есть python3 и pyqt. Так там первая половина, блядь, это описание самого питона...
Логично
Это типа ради понта сделано или глубокий смысл есть.
https://pastebin.com/Pj76UkUR
Писал сюда во многом для того, чтобы точно сформулировать что я буду делать и понял важный момент пока перечитывал: можно откладывать время благодаря обычному asyncio.sleep(n), тогда задача селери сводится к тому, чтобы просто отдать нужные базы с записями в этот распределитель через брокер, а распределитель быстро создает асинхронные таски, у которых сразу установленно спать нужно время, потом они делают асинхронный запрос на сокет, ждут ответа и заносят в бд
Так же один анон сказал подумать над тем что делать с перезагрузками, как думаете лучше использовать redis или просто добавить поле в sql бд которое будет проверяться при перезапуске?
Разве это не nested class? Ты через parent класс обращаешься к nested и конструктором создаёшь уже объект. Почему так сделано хуй знает, чекни исходник
Допустим, есть скрипт, в котором два опциональных аргумента - не писать же для него четыре if-statement'а?
> Какие чертыре?
Есть только первый, есть только второй, есть оба, нету обоих (тогда дефолтный поток идёт).
Опциональность на то и опциональность, что добавляет какой-то дополнительный функционал, а не кардинально другой. Т.е. расширенный вывод или там запись в файл.
Что у тебя за опции такие?
Первая отрезает последнюю часть потока, вторая (--path) задаёт альтернативный аргумент для функции из в любом случае остающейся части потока.
А можно где-то посмотреть пример этого именно в коде ну какой-то элементарный.
Да, ты просто неправильно структурировал. Сначала определяешь дефолтные паремтры, потом при наличии опции заменяешь.
Т.е.
param1 = default1
param2 = default2
if opt1:
param1 = opt1
И в конце один вызов.
Начни с конспектов лекций по теверу и мат. статистике.
Может, там и можно как-то сократить по такой схеме, но не вижу вариантов - всё равно будут повторные вызовы тех же функций в коде.
Лол, как так. У тебя там большая часть логики с еблей с args.path
Почти вся эта портянка заменяется на один иф
if args.path:
target_path = args.path
И один вызов encrypted_name =
Логику с upload_to_mega я не уловил, но тоже решается одним ифом скорее всего.
Это же классический DRY, о котором в любой нубской книге талдычат.
> if args.path:
> target_path = args.path
Это очевидно, но с таким подходом там всё равно будут почти одинаковые вызовы, потому что одна из опций отрезает часть дефолтного потока (как раз upload_to_mega). Будет спагетти, короче.
Не знаю. Я уже малость не в рабочем состоянии, так что завтра посмотрю.
где ты там нестед класс увидел
Три раза прочитал, мало что понял.
Это у тебя все в одном потоке?
Обработка ответа не будет блокировать луп?
Как ты реализуешь точное время запуска таски?
Почему-то кажется, что эта штука будет потихоньку смещать запуск асинхронных задач и в итоге захлебнется. Но, повторюсь, я мало что понял.
>>57881
https://pastebin.com/78Q5TBqp
Есть список кейвордов, надо каждый день последовательно делать запросы для некоторого количества из них в определенное время. Т.е. сегодня ночью первые 1000, завтра ночью следующие 1000 и т.д. Всего это занимает пару недель, потом в следующем месяце всё по новой.
Пока я сделал простецкий, но надежный вариант - смотрим сегодняшнее число и берем такой по счету кусок списка из файла, потом для каждого кейворда формируем путь month/day/kw.html и если такого файла нет, то делаем запрос и пишем. Ну и по крону хуярить.
Можно бы переделать на БД, но особого профита нет, мне кажется.
Что могут предложить всякие брокеры-очереди и прочие современные хуйни?
Смещение тасок это то о чем я думал, блокирующая функция будет выполняться например 5 секунд, тогда все функции у которых был слип на 1,2,3,4 секунды просто встанут в очеред и после блокирующей выполняться сразу подряд без ожидания, т.е они запустяться либо в точное время, либо чуть позже, когда блокирующие завершаться, но это действительно резонный вопрос, поэтому есть еще 3-й вариант, не использовать в одном патоке расчет времени для таски, а оставить его в селери и тогда опять же передавать именно в брокер все данные + отложенное время, которое будет браться главной всинхронной таской в лупе, это так же важно для скейлинга, чтобы забирать сообщения могли другие потоки/процессы(до сих пор не углублялся в разницу). Если я могу объяснить что-то подробнее, то напиши что, а то я так доволен своим решением что некоторые вещи кажуться очевидными для меня. Единственная проблема в том что я до сих пор не нашел как добавлять таски в луп и делать асинхронные запросы по сокету, обычно только про http пишут, но думаю мне просто нужно поискать
>блокирующая функция будет выполняться например 5 секунд
Из-за чего она блокироваться будет? Из-за загрузки процессора или ещё из-за чего-то?
Нужно ведь тысячи записей просчитать, она cou bound будет, поэтому она блокирующая и асинхронность на нее не работает
Поэтому мне кажется лучше выносить ее в селери, и она в брокер будет отдавать просто записи с нужным временем, а при необходимости асинхронную хуйню можно вынести на отдельную машину, можно мультипроцессинг сделать(т.к операции однотипны и простыее мне не нужны треды, разве что процессы, верно ведь?)
>реально ли в текущем году зарабатывать фрилансом
Ну вот смотри, прямо сейчас в треде чувак страдает мультипроцессингом, асинхнонщиной, всякими селери, и прочей технологически и алгоритмически ёмкой хернёй, уже недели две страдает.
Ради этого ему пришлось пройти анальное собеседование, выдержать конкуренцию среди других таких же на этот контракт, подписать договор, до этого работать вообще бесплатно за рейтинг. И вот за эти мучения, когда они закончатся, он получит аж целых 800 долларов.
Вот и сам думай. А ты сам понимаешь, чем асинхронное программирование отличается от многопоточного? Обеими технологиями владеешь?
>Поэтому мне кажется лучше выносить ее в селери
Я сам не очень умею с селери работать, так никак не засяду за неё, может и годная вещь, но по ощущениям это просто некая дополнительная оболочка, нужная, чтобы в синхронном коде поддерживать задачи. Это же не самостоятельный пакет, а надстройка над другими MQ.
Не уверен, что от неё большой профит, если у тебя на базе asyncio проект.
Если у тебя большие cpu-bound задачи, то тут только вариант воркеров.
Одна схема, когда у тебя есть внешние процессы-воркеры, они могут быть на чём угодно реализованы, они берут задания из сервиса по обмену сообщениями, вроде раббита, считают, заносят результат в базу.
Другая схема схожая, упрощённая. В своей программе ты сам создаёшь пул процессов-воркеров , которые берут задания из очереди внутри твоего родительского процесса.
Так ты используешь несколько ядер процессора (во второй схеме), или даже несколько машин со всеми ядрами(первая схема), и у тебя нет блокировки.
Можно ещё иначе, ты можешь переделать свою задачу так, чтобы она была не блокирующей, если там большой цикл, то разрешить в какой-то момент переходить на исполнение других задач, вставить регулярные
await asyncio.sleep(0.00001),
но не 0, это мы обсуждали уже. Можно свою процедуру - корутину сделать для переключения, но работать она будет не быстрее.
Чтобы раз в 0.1 секунду, например, подобная операция вызывалась и разрешала переключить задачу.
Слишком часто вызывать не надо, переключение задачи на самом деле довольно дорогая операция.
Ты путаешь многопоточность и параллельность.
Технологии многопоточного программирования появились совсем с другими целями. И ещё тогда, когда почти все машины были с одним процессором и одним ядром.
Их цель обходить блокировки в первую очередь.
Многопоточность - это несколько потоков-ветвей исполнения кода, когда у каждой свой стек вызовов и свои регистры.
Да, та задача по высчитыванию таймера для каждой записи cpu bound, там тупо вычисления и поэтому я ее оставлю на celery, смогу спокойно поднимать воркеров, а слип(0.00001) буду использовать для проверки в цикле брокера на новые сообщения. Да, celery здесь не нужен на самом деле, потому что я всю планировку перенес на asyncio.sleep() у себя в голове, я его хочу оставить только потому что он позволит отдавать ответ джангой сразу, а вычислениями займется позже, а asyncio нужен потому что сами вычисления с записями это строк 10, не больше, проблема в том что внешний сервер может отдавать значение долго, возникает i/o bound, а если из-за нагрузки внешний сервер начнет по 5 сек отвечать, тогда даже не знаю как без асинхронности, создавать по процессу/воркеру/потоку на каждую запись не вижу смысла, там одного потока достаточно? да и опыта с многопоточностью не было нормального, кроме хело ворлд
Сгущаешь краски, после выполнения спрошу кто были конкуренты, я то сам по ощущениям вообще ребенок, собесы это просто моя самопрезентация, показывал что я адекватный и рассказывал про опыт и как планирую реализовывать проект, поэтому еще недели 1,5 назад спрашивал, пока прогал 3,5 дня и уже получил свои 230$, просто пришлось час потратить на документацию drf и потом написать, протестировать код, сейчас пишу сюда скорее для общения и почитать чужие мысли, сами технологии не слишком сложные ведь, прочитал квик старт, почитал доки, если надо залез в исходный код и по переопределял что надо, все
>>58296
Если опыта нет, а кушать нужно вчера, то такая себе идея, я только вкатываюсь во фриланс по сути, это мой первый коммерческий опыт, искал изначально на веблансере, писал парсеры, бота, небольшой бек, немного работы просто с вебом, потом зарегался на хабр фриланс и нынешний заказчик нашел меня сам, как закончу с этим меня ждет старый клиент и один еще написал что ему нужна помощь, но я не уточнял какая, попасть на разработку бота или нормального бека сложно, в основном там требуются знания битрикса, сrm, и прочего пхпшного, у меня пара заказов слетали после переговоров, в остальном мне нравится, для студента самое то, вместо анальной галеры в маке я вот чаек пью
Ебучий случай. Ты мой герой
>Это у тебя все в одном потоке
Там есть метод, который по названию теста выбирает юзера из листа юзеров. Например, запускаю тест - тест_почты - перед запуском метод выбирает соответствующего юзера из списка, который будет тест_почта_юзер1, которых скажем 4 для параллельного запуска. Далее тест ранится, никаких проблем. Так же есть ещё тесты завязанные на этого же юзера. Когда запускаешь по одиночке все работает.
Теперь, когда запускаешь несколько тестов сразу И выбираешь несколько параллельных инстеесес-n4 (ранит сразу 4 теста за раз используя всех 4 юзеров).
Проблема: когда запускаешь несколько свитов, которые используют одинаковых юзеров, как только юзеры в листе закончились пайтест xgist возьмёт по новой юзера, который уже ранит тесты. Тот юзер будет logged out и тест будет фейл. Надеюсь так примерно понятно.
В следующий раз пиши это не на двач, а в свой блокнот, и, перечитывай несколько раз, рефактори свои мысли и формируй план действия/рисуй рисуночки. Когда поймешь, что план готов, можешь уже и начинать реализовывать, а можешь и анону отправить.
Уже четвертый год так живу. Зависимость есть.
Такой метод называется рассказать утке, только вместо утки рассказываешь блокноту (себе).
Таки ты был прав. Жёстко затупил вчера - за три минуты сегодня пофиксил.
В стандартной либе базовый клиент, который требует дохуя бойлерплейта, реквестс достаточно пару строчек.
Если бы я сразу сюда писал, то это вообще треш будет, так да, сначала в блокнот формулирую, рефакторю, но потом когда отправляю как обычно умные мысли приходят сразу, поэтому у меня по итогу суммарно 3 способа вышло, каждый лучше предыдущего
Я сегодня ахуел с того что в пучарме есть баг с импортами, он не видит нормально иногда модули и подсвечивает красным, а это так тригерит, что даже нашел комментарий, который убирает, а потом переделал структуру вообще, чтобы этой зуйни не было, но самое отвратительное, что год назад я только вкатывался и как же я себя тупо чувствовал, когда мне скинули проект, я его открыл, а там строк 10 красных, гуглить не умел, спрашиваю что за ошибка у человека кто скинул, а он говорит нет там ничего, все нормально и только вот сегодня узнал что это был баг и за год его не пофиксили
А нахуй ты мне про простые запросы отвечаешь, если вопрос был про ретраи? Ты тупой?
Меня встроенный терминал бесит что на него постоянно надо мышкой переключаться, а командная строка перехватывала бы фокус.
Ctrl + Sh + C лишь открывает терминал внешний, но не запускает в нём открытый файл.
Да, чтобы у меня курсор ввода перескакивал в терминал, а то часто запускаю его и вместо ввода данных сру в код, потому что курсор не перескачил.
Да эти хоткеи уже есть и я про них знаю. Но они не запускают файл, а просто открывают терминал или внешнюю КС.
Ну я даже не знаю. Вверху есть кнопка запуска текущего файла. Если тебе прям хоткей нужен, пиши сниппет свой
Либо вот у меня ctrl+alt+n. Но я таким не пользуюсь, у меня все через входной файл работает, за редким исключением.
Дан набор
Дан набор данных:
3
YKW89OEOCITYODO,2018-07-24T14:40,1000.00
XMV928G6WUX582L,2020-09-09T06:45,9500.30
0PEZX4TUY3I4ZRZ,2018-03-31T04:33,5320.45
нужно привести к:
Номер бронирования YKW89OEOCITYODO, забронирован 2018-07-24T14:40. Цена: 1000 руб. 00 коп. и тд.
Как читать эти данные построчно с добавлением нужного текста?
Данные вводятся через input и должны сами читаться и выводиться в заданном формате в строку.
Как проигнорировать это число N в первой строке в выводе.
А как можно сделать другие виды этой хуйни? Как на пике ниже?
Можно ли через transpose или надо самому всё перебирать?
1 пример реализован стандартной функцией
Благослови господь твою добрую душу
Написано
"Для установки выполните команды:
pip install virtualenvwrapper-win
pyassoc"
Какой еще нафиг pyassoc, его нигде нет, что это за скрипт такой?
Это какая-то легаси хуйня, сейчас пользуются искаробочным venv
Кекнул с нубаса
Как ты вообще планируешь заниматься дальше? Задача элементарная
Накидал навскидку, проверки сам допилишь
def get_data():
val = input()
val = val.split(',')
if len(val) != 3:
print('fuck you nigger')
return get_data()
money = val[2].split('.')
if len(money) == 2:
return val[:2] + money
print('fuck you')
return get_data()
n = input()
try:
n = int(n)
except ValueError:
print('fuck you nigger')
exit(0)
assert n > 0
l = []
for i in range(n):
data = get_data()
print('{}, {}, {} {}'.format(*data)
Как ты вообще планируешь заниматься дальше? Задача элементарная
Накидал навскидку, проверки сам допилишь
def get_data():
val = input()
val = val.split(',')
if len(val) != 3:
print('fuck you nigger')
return get_data()
money = val[2].split('.')
if len(money) == 2:
return val[:2] + money
print('fuck you')
return get_data()
n = input()
try:
n = int(n)
except ValueError:
print('fuck you nigger')
exit(0)
assert n > 0
l = []
for i in range(n):
data = get_data()
print('{}, {}, {} {}'.format(*data)
def get_data():
__val = input()
__val = val.split(',')
__if len(val) != 3:
____print('fuck you nigger')
____return get_data()
__money = val[2].split('.')
__if len(money) == 2:
____return val[:2] + money
__print('fuck you')
__return get_data()
n = input()
try:
__n = int(n)
except ValueError:
__print('fuck you nigger')
__exit(0)
assert n > 0
l = []
for i in range(n):
__data = get_data()
__print('{}, {}, {} {}'.format(*data)
Это другое
Спасибо большое анонче. А то я весь вечер гадаю как это сделать.
pizda = ["3",
"YKW89OEOCITYODO,2018-07-24T14:40,1000.00",
"XMV928G6WUX582L,2020-09-09T06:45,9500.30",
"0PEZX4TUY3I4ZRZ,2018-03-31T04:33,5320.45"]
def dzhigurda(stroka):
parsed_stroka = stroka.split(',')
if len(parsed_stroka) < 3:
return
print(f'Nomer bronirovania {parsed_stroka[0]}, zabronirovan {parsed_stroka[1]}, cena {parsed_stroka[2]}')
for hui in pizda:
dzhigurda(hui)
> типизация в ноде строгая
Кого ты хочешь наебать? Нода это обычный жс в котором стройгой типизации отродясь не было. есть всякие тайпскрипты, но это другое. Тайп скрипт компилится в нетипизированый жс.
> Какие могут быть причины связанные с устройством языка
Во-первых, читаемость. В питоне отступы это часть синтаксиса и просто бегло взглянув на код можно понять где что находится. ЖС это ехал калбек через калбек и все это в одну строку. да, не все пишут как мудаки, но сам язык никак это не регулирует. Так что в код каждой библиотеки будешь вчитываться как в первый раз.
Во-вторых, сложность анализа чужого кода. Тебе придется рано или поздно лезть в код библиотеки что бы понять какого хуя происходит. Библиотек дохуя, а документации нихуя. В жс это особенно выражено по моему личному опыту. И если ide типа пучарма как то пытаются найти откуда взялся этот класс или функция и предложат на выбор несколько мест. То в жс текстовый поиск твой лучштй друг. Импорт это просто текстовая строка котопрую нода переваривает внутри себя. Оно импортируется и рабоатет, но не факт что текстовый поиск найдт откуда она взялась.
В-третьих, отсутствие обратной совместимости. Питон можно обновлять спокойно и быть увепеным, что код для 3.5 запустится на 3.9 Ноду тебе придется откатывать. Ты сидишь на своей 12 и никого не трогаешь, но потом нужная тебе библиотека говорит что ей нужна от 10 до 11.
> А так же как вы думаете стоит ли свитчиться на жс?
Это путь в один конец. Люди которые начинали с ноды потом очень хуево пишут на нормлаьных ЯП. мы уже от двух таких на работе избавились.
Но решать конечно тебе.
>Какие могут быть причины связанные с устройством языка, чтобы выбрать python или node,
Сама нода хороша, по некоторым моментам удобнее питона, часто быстрее, но JS слишком убог и крив, ни в какое сравнение с питоном не идёт.
В JS отсутствуют такие банальные вещи, как словари. Там вместо словарей используют объекты, что может приводить к большим сюрпризам. Ты вроде как помещаешь в словарь какой-то элемент данных, например элемент с именем "hasOwnProperty", а потом оказывается, что ты тем самым испортил системный или собственный метод этого объекта.
В питоне очень удобная работа со списками, словарями, срезы, генераторы, проверка на вхождение, всё очень компактно и лаконично. В современных стандартах JS с этим получше, чем раньше, но до питона далеко.
В питоне очень удобный механизм передачи параметров в функции, именованные аргументы со значениями по умолчанию и др. В ноде такого нет, принято использовать костыли, передавать специальный объект с параметрами.
Вообще очень много всего такого.
Питон как язык программирования несопоставимо лучше JS.
Но в реальной жизни тебе надо не языки, а платформы выбирать. Ноду используют для сервисов на серверах. Там хорошая поддержка асинхронности, питон с его asyncio несколько проигрывает. Асинхронность в питоне слабенькая и довольно медленная, с кучей граблей.
Правда с нодой тоже не так просто, потому что её делали по принципу callback based, а сейчас стандарт это async/await. В JS с этим нормально, но проблема в том, что ключевые либы всё-таки в старом стиле сделаны.
>Питон можно обновлять спокойно и быть увепеным, что код для 3.5 запустится на 3.9
Ну нет всё-таки. Как и в ноде, всё зависит от конкретных либ.
В случае либ на базе asyncio, там довольно много фич с depricated поведением, про которые сказано, что из выпиливают с версии 3.5-3.8-3.9-3.10 и т.п.
А область применения ноды как раз пересекается с питоном по asyncio.
Пишу и на ноде, и на питоне.
Типо питон медленнее переключает задачи асинхронные? Вроде и там и там асинхронноть на генераторах сделана, непонятно тогда почему так, бенчмарков не нашел никаких, если у тебя есть, то скинь.
>Ноду используют для сервисов на серверах.
Неужели эта скорость настолько критична? Тогда что остается питону из бека, если не сервисы
Сначала подсмотрел способ тут:
https://learndataanalysis.org/how-to-implement-image-drag-and-drop-feature-pyqt5-tutorial/, потом скопировал полностью, но один хер.
Менял hasImage() на hasFormat('image/*'), тоже ничего.
мб есть что-то более вменяемое, чем qt-высер, потому что это просто, блять, акт поедания говна
https://www.techempower.com/benchmarks/
Хз что это за бенчмарки, но судя по ним у питона совсем все грустно(
И ведь действительно, если важна скорость переключения задач, то может вообще писать с++ каком-нибудь, чтобы была прям максимальная производительность
>Хз что это за бенчмарки, но судя по ним у питона совсем все грустно
Эти тесты в основном слишком синтетические и некорректные. Там какие-нибудь примитивные запросы используются, одни фреймворки только примитивные запросы и умеют, другие ориентированы на сложные, там ещё может быть куча middleware запускаться по-умолчанию, которые не используются, и которые можно в принципе выпилить при желании и тем самым сильно ускорить. Ещё нюансы вроде кеширования накладываются и т.п.
>>60286
>И ведь действительно, если важна скорость переключения задач
У питона очень дорогая операция по переключению задач в asyncio, вообще асинхронность недостаточно в движке поддержана, слишком тяжёлый код крутится чисто питоновский. uvloop не то, чтобы радикально этот момент решал. pypy может быстрее работать, но он опаздывает с поддержкой версий и не все важные библиотеки под него портированы.
Нода быстрее, но там, кстати, в коробке много чего нет, что есть в питоне. Банально нет очередей или аналогов даже, это уж совсем абсурд какой-то.
Быстрый go, он как раз вот на такие задачи заточен, но уж слишком low level.
> Например в тех же строгих языках вроде джавы все сразу ясно - вот описан в параметре носорог, будем работать с носорогами.
Зато не можешь в одном словаре хранить и носорогов, и гироскутеры одновременно.
"типизация" джавы преувеличена. У тебя параметр может принимать или метод может возвращать не носорога, а просто объект "хрень какая-то", от которой наследуется и носороги, и гироскутеры. Это, батенька, ООП. Вот и улетела твоя типизация.
Если ты не понимаешь, что должна возвращать функция, то тебе в любом случае надо лезть в документацию. Ты должен понимать, что твой код делает, иначе только дольше потом ошибку искать. Метод ведь тебе не просто носорога возвращает, а что-то с ним делает.
От простых ошибок, если ты вместо объекта возвращаешь список объектов, или не учёл, что может быть объект, а может быть None, полноценно защищает typing.
Я вот кстати наоброт не понимаю темы с типизацией, в питоне она благо строгая, но если у тебя есть метод или функция, то ты сначала читаешь что в нее нужно передать, если нужно передать инт, то как ты можешь туда словарь запихнуть непонятно, насколько сложным должно быть приложение, чтобы в параметр типа time_stamp передать строку и потом жаловаться на питон
> в питоне она благо строгая
Где вы этих сказок наслушались?
Допустим есть код:
a = 1
a = 'one'
В питоне он отработает без ошибок и переменная будет иметь тип str
Но попробуй тоже самое сделать в строго типизированном языке и получишь ошибку.
> но если у тебя есть метод или функция, то ты сначала читаешь что в нее нужно передать, если нужно передать инт, то как ты можешь туда словарь запихнуть непонятно
Смотри пример выше. Просто берешь и пихаешь. Питон не компилируемый язык и компилятор тебе ошибку не подсветит. Есть плагины, которые при написании кода в фоне пытаются его скопмилить и вот они уже подсвечивают ошибки. Но это все костыли. Сам язык слишком гибкий и позволяет жанглировать типами. По сути все объекты в питоне это просто указатели на память. А вот уже у того что там лежит есть тип. Но передаешь ты именно ссылку.
Нихуя непонятно что ты хочешь. тебе нужна просто орм как в джанге потому что джангу ты использовать не собираешся вообще? Или тебе параллельно с работающей джангой нужно иметь возможность шатать базу?
2-е надо, уже нашел решение вроде как, создал свою команду для manage.py и если ее писать, то запускается отдельное приложение, которое вроде может юзать орм
Так это другое вроде, я, конечно, не эхсперт, но питон в отличии от жса не позволяет неявно преобразовывать типы, типа "one"+int(1) получишь ошибку, надо сначала поменять тип переменной, это ведь строгость, зато она неявная и поэтому можно писать a = "foo" a = 1
Нахуя тебе mange.py? Какую хуйню ты творишь? Просто импортируй в скрипт модели и саму джангу. Выполни в первых строках django.setup() и дальше работай с моделями как в джанге.
Строго типизированный язык требует что бы ты указал сначала какого типа переменная, а уже потом присваивал ей значение. Питон этого не тебует.
>В питоне он отработает без ошибок и переменная будет иметь тип str
>Но попробуй тоже самое сделать в строго типизированном языке и получишь ошибку.
Если у тебя такие ошибки, то это исключительно твои проблемы. В своём типизированном коде ты сделаешь
a = 1
...
a = 2
и получишь ошибку, потому что будешь думать, что у тебя a=1. Или там у тебя разные области видимости.
Типизация тебя не спасёт никак.
Если у тебя ОО программа, то ты легко можешь словить ошибку типа, когда у тебя функция может возвращать разные объекты, возвращает их класс-родитель, но ты ждёшь наследника другого типа. Один-в-один ситуация, как в питоне, просто в питоне ты object ловишь.
>Есть плагины, которые при написании кода в фоне пытаются его скопмилить и вот они уже подсвечивают ошибки. Но это все костыли.
Это позволяет избавиться от большинства ошибок. Например, если ты возвращаешь строку '1', а не число 1, то это отловится на ура. Это не плагины, а специальные модули вроде mypy. Более частая история, это когда у тебя функция может вернуть объект, а может None, но ты этого не учёл. Вот на раз ошибка будет обнаружена, что твой код ситуацию не обрабатывает. А в типизированных языках не всегда, кстати, потому что в таких случаях возвращают NULL, на который надо проверять явно, иначе segmentation fault. Довольно частая ведь история.
Статическая типизация страхует от примитивных ошибок, хотя нередких, но инструменты вроде typing с этим тоже справляются неплохо. Они же и документируют неплохо. Хотя неэстетичны в плане кода.
Динамическая типизация добавляет очень много гибкости. Многие вещи просто неприятно делать на статических языках, из-за чего используют костыли вроде специальных генераторов кода по шаблонам. Но это не менее криво.
Серьёзный профит от статической типизации совсем в другом, не в ловле ошибок. Она в том, что позволяет оптимизировать код очень сильно. Сложить две переменные статического типа int, это классово другая история, чем применить операцию сложения к двум объектам типа int. В первом случае одна инструкция процессора и возможности для дополнительной оптимизации кода, во втором случае немеренный оверхед. Настолько дикий, что арифметика и байтовые операции могут работать в сотни раз дольше. Вот именно здесь критически важна статическая типизация. А никак не в ловле ошибок.
>В питоне он отработает без ошибок и переменная будет иметь тип str
>Но попробуй тоже самое сделать в строго типизированном языке и получишь ошибку.
Если у тебя такие ошибки, то это исключительно твои проблемы. В своём типизированном коде ты сделаешь
a = 1
...
a = 2
и получишь ошибку, потому что будешь думать, что у тебя a=1. Или там у тебя разные области видимости.
Типизация тебя не спасёт никак.
Если у тебя ОО программа, то ты легко можешь словить ошибку типа, когда у тебя функция может возвращать разные объекты, возвращает их класс-родитель, но ты ждёшь наследника другого типа. Один-в-один ситуация, как в питоне, просто в питоне ты object ловишь.
>Есть плагины, которые при написании кода в фоне пытаются его скопмилить и вот они уже подсвечивают ошибки. Но это все костыли.
Это позволяет избавиться от большинства ошибок. Например, если ты возвращаешь строку '1', а не число 1, то это отловится на ура. Это не плагины, а специальные модули вроде mypy. Более частая история, это когда у тебя функция может вернуть объект, а может None, но ты этого не учёл. Вот на раз ошибка будет обнаружена, что твой код ситуацию не обрабатывает. А в типизированных языках не всегда, кстати, потому что в таких случаях возвращают NULL, на который надо проверять явно, иначе segmentation fault. Довольно частая ведь история.
Статическая типизация страхует от примитивных ошибок, хотя нередких, но инструменты вроде typing с этим тоже справляются неплохо. Они же и документируют неплохо. Хотя неэстетичны в плане кода.
Динамическая типизация добавляет очень много гибкости. Многие вещи просто неприятно делать на статических языках, из-за чего используют костыли вроде специальных генераторов кода по шаблонам. Но это не менее криво.
Серьёзный профит от статической типизации совсем в другом, не в ловле ошибок. Она в том, что позволяет оптимизировать код очень сильно. Сложить две переменные статического типа int, это классово другая история, чем применить операцию сложения к двум объектам типа int. В первом случае одна инструкция процессора и возможности для дополнительной оптимизации кода, во втором случае немеренный оверхед. Настолько дикий, что арифметика и байтовые операции могут работать в сотни раз дольше. Вот именно здесь критически важна статическая типизация. А никак не в ловле ошибок.
Ну есть и этот способ видимо, у меня команда просто запускает main() и ебаться с конфигами не нужно
Главная разница в том, что в статическом случае компилятор знает, какой тип, и делает соответствующий машинный код. Там другой тип поставить невозможно, и работает это быстро.
В динамическом проверка проводится runtime, машина лезет в объект, видит, какой-там тип, и применяет операцию к этому типу. Классический полиморфизм, классическое ООП прямо на самом базовом уровне.
Самая главная проблема в том, что это дико накладно. Всё остальное не проблема.
> Серьёзный профит от статической типизации совсем в другом, не в ловле ошибок
Уже именно в ловле ошибок. Потому что люди на работу приходят с таким минимальным набором заний, что вся надежда только на IDE и ее встроенные првоерки. Если вы пошли работать в питон, то это уже не про скорость работы программы. Это про скорость разработки. Во всяком случае у нас так.
Ору, только что пытлася писать что какой дурак не поймет что передавать в функции и т.д и сейчас фиксил минут 15 баг в асинхронном скрипте, который не писал ошибку, пока я try except не поставил и не увидел что у меня почему-то строка передается, а не инт
Сделал то, что требовалось, на Kivy, столкнулся лишь с проблемой пермишнов на винде, которая фиксится принудительным запуском в нормал моде. Если найдется знаток pyqt, пусть объяснит, собственно, какого хуя нельзя реализовать примитивный функционал без сеанса копрофагии.
Эх, года 2 назад спросил бы и я тебе прям код принес, а сейчас уже хуй найду. Но делал, да.
ты псих? и что сделал?
Суть такова, что нужно установить python на несколько машин и тратить время на поиск и создание ярлыка для стандартной IDLE попросту нет. Как известно процесс стандартной оболочки идет под именем pythonw.exe. Вбиваю в cmd это и...нихуя! В чем дело блять? Любая другая залупа всегда открывается через win-r + выполнить, но не IDLE. В чем может быть дело???
Как запустить без предвратильного указания направления?. Без слешов. Как оперу или хром
Подозреваю, что можно замутить однострочник на самом питоне для этого, но мне лень.
>>Зато не можешь в одном словаре хранить и носорогов, и >>гироскутеры одновременно.
Могу, никто не мешает в дженерик Object сунуть. Другой вопрос что это будет плохой код в большинстве случаев. Опять же есть PECS(<? super T>, <? extends T>) .
Typing не использовал, кстати. К сожалению во всяких нужных мне либах его тоже не использовали. Поэтому приходилось лезть в исходник/читать доку. В то же время в джаве тут куда понятнее все - приму такие то обьекты, отдам такой то.
>У тебя параметр может принимать или метод может возвращать не носорога, а просто объект "хрень какая-то", от которой
наследуется и носороги, и гироскутеры
Это будет не какая-то хрень, а базовый тип. Который, скорее всего, позволит мне сделать все то, что я хочу сделать(если абстракция хорошая). Если нет - ну буду приводить, куда деваться. И с виду это лучше, чем попытаться дернуть поле и не получить его, потому что обьект тот, кек.
какие сложность будут в изучении у меня?
25 лет, знаю только верстку, чуть-чуть на базовом синтаксисе пыху и сам по себе не тупой васян. туповатый слегка, но не тупой.
> наслышан о томе, что надо знать матан, диффуры, интегралы и вот это вот всё и только тогда ты поёмешь питон.
Тебе напиздили. Вообще ничего знать не нужно.
> какие сложность будут в изучении у меня?
Если вместо того что бы почитать что такое джанга, ты постишся на дваче у тебя уже проблемы с поиском источников информации.
Спасибо за ответ!
Я знаю, что это за фреймворк и для чего он нужен. Просто я сторонник того, что для начала надо выучить язык достаточно хорошо, а только потом садиться за фрейм.
Но всё равно, благодарен за ответ тебе
Есть всего один способ выучить язык - это сесть и начать на нем писать. Не эти ваши псевдокурсы, а реальную программу у которой может быть релаьное применение. даже если это применение нужно только тебе. Проэтому садись и пиши.
Ради любопытства дожал pyqt и выяснилось, что нужно либо использовать hasUrls(), чтобы не было привязки к типу данных, либо вешать setAcceptDrops на мэйн виджет после инстанциирования. Киви понравился мне больше - видно, что документацию писали нормальные люди для людей.
Есть некое устройство с описанными методами:
чтение/запись, для него возможно создать несколько вариантов реализации Serial или Usb, хочу инкапусулировать логику по выполнению команд (вынесены в DeviceProtocol):
типо:
class DeviceProto:
proxy = DeviceProxy()
proxy.write(b'\x01\x02')
Но потом при реализации мне надо подменить proxy реализацией.
Значит так, есть две кнопки: одна запускает цикл с мониторингом сайта, а другая по идее должна убивать его нахуй, как реализовать? Пишу примитивного бота, используя aiogram, спасибо
Ну раз бот простой
бежать = ложь
def нажать_кнопка()
global бежать
if бежать == истина:
бежать = ложь
if бежать == ложь:
бежать = истина
покуда:
if бежать == ложь
sys.выход()
if бежать== истина
распечатать('текст')
https://pastebin.com/8cPUgrfk
Это короче та хуйня с импортами, когда пукчарм путается в относительных и абсолютных импортах и светит красным абсолютный импорт?
Да я уже там запутался, точно помню что есть структура name1/name1/name2/script.py и пучарм не хочет импортить from name1.name2.script, подчеркивает коасным, но запускается, но если поменять на from name1.name1.name2.script, то пучарм скажет все окей, маладца, а питон уже пошлет нахуй. А еще есть релятивные импорты из-за которых отдельный файл джанги не запустишь, а с обычным нерелятивным импортом не запустится уже джанга. Импорты вроде и удобные, но с ними энивей так много ебли, когда вообще в питоне не понимал это вообще ад
> > в питоне она благо строгая
> Где вы этих сказок наслушались?
> Допустим есть код:
> a = 1
> a = 'one'
> В питоне он отработает без ошибок и переменная будет иметь тип str
> Но попробуй тоже самое сделать в строго типизированном языке и получишь ошибку.
И как из этого следует, что язык не строго типизированный? Динамическая типизация о том, какой тип данных можно положить в переменную. Строгая типизация о том, как в процессе работы с типами данных они могут измениться. Ты тёплое с мягким путаешь.
Нет, он не путает вроде, сам перечитал вчера, есть явная/неявная, сильная/слабая, статическая/динамичная, я так полагаю что строгой называют просто явную сильную статическую типизацию, как в с++ вроде, а в питоне она динамическая и неявная, поэтому ее не называют строгой я так полагаю
Да не, с импортами в питоне все просто, когда разберёшься))) Есть два типа импорта — относительный и абсолютный. Абсолютный импорт идет относительно точки входа программы, а относительный импорт идет относительно файла, в котором он используется. Если на примере, то будет так:
tochka_vhoda.py
papka1
---file1.py
---papka2
------file2.py
И если ты в tochka_vhoda.py импортишь file1, то будет import papka1.file1
Если в tochka_vhoda.py импортишь file2, то будет import papka1.papka2.file2
Если из file1 импортишь file2, то будет уже import .papka2.file2
То есть, добавляешь точку, показывая, что импорт относительный. Если импортишь вверху относительно, к примеру, из file2 импортишь file1, то будет import ..file1
Но главная проблема в том, когда тебе надо из file2 импортить что-то из tochka_vhoda.py Это кажется кривым, пока не оказывается, что импортить относительно нельзя не только из самой точки входа, но и из всего, что находится в одной папке с ней. А сюрприз-сюрприз в джанго файл мэнэдж находится на одном уровне с приложениями. И импортить что-то из одного в другое каждый раз пиздец геморрой. И отображение таких финтов в пукчарм каждый раз идет с ошибкой
> Нет, он не путает вроде, сам перечитал вчера, есть явная/неявная, сильная/слабая, статическая/динамичная
> я так полагаю что строгой называют просто явную сильную статическую типизацию, как в с++ вроде
> строгой как в с++
Сходи перечитай еще раз
Сейчас хочу по работу написать тестирование, где люди будут на вопросики всякие отвечать.
Допустим беру я django,ide pycharm, так как js не знаю и ебаться сильно пока с ним не хочу беру bootstrap. БД юзаю сейчас postgresql (хотя это уже особо не важно).
Вопрос какой - средств django и bootstrap мне хватит чтобы тестирование на вебе сделать? Я просто пока не до конца понимаю как это реализовать. Человек выбирает категорию, ему подтягиваются вопросы бд, выводятся, он жмякает, передает данные на бэк. Опять же представляю все это пока примерно, но сдается мне, что скорее всего без js я не обойдусь?
В джанго есть шаблоны жинжа2АРЯЯ ЭТО ШАБЛОНЫ ДЖАНГО А НЕ ЖИНЖА ТВЕРДО И ЧЕТКО. Тебе хватит с головой, если не собираешься что-то прям невероятное мутить на фронте. И даже если соберешься, то в шаблоны можно подтянуть рякт и запихнуть в статикфайлы. Джанго это же комбайн, там все что угодно можно намутить
Понял, от души.
Окей, антош.
Пояснишь за киви? Как дезигн делал? Как код проекта получился, не перегружен ли? Доки киви шагнули вперёд, за последние года 2-3? Получилось замутить исполняемый файл для линупса/винды?
КуТэ-кун
Ты прямо работаешь на qt? Мне показалось, что python+qt совсем мертвая связка в плане вакансий.
Берешь и тестишь на впс. Можешь танком пострелять. Кто знает какое железо у тебя там, выделенный или делит с другими железо, есть ли лимиты.
Не, это понятно, я про мое представление, мой мозг не осознает что даже посредственный процессор может выполнять тысячи операций в секунду
Сап, програч. Я сам студент-биолог, хочу узнать о применении питона в моей сфере - я слышал, что это полезно дохуя для матанализа. Буду рад как кратким ответам, так и ссылкам на литературу по теме (если такое вообще есть).
Это всё зависит от конкретных запросов. Ты можешь быть неприятно удивлён, когда сначала читаешь статьи, как сервер БД разогнали до миллиона запросов в секунду, а у тебя начинаются проблемы на 100 запросах в секунду, причём не то, чтобы сложных.
Не всё так просто в общем.
Bootstrap не нужен и вообще лучше забудь про него. Js не очень нужен, можно обойтись, на первых порах точно.
То, что тебе нужно, разбирается в официальной документации джанго, там есть демо-приложение с голосовалкой, с последовательным разбором от и до.
>процессы-воркеры берут задания из сервиса по обмену сообщениями, вроде раббита, считают, заносят результат в базу.
А разве celery делает по-другому?
>>58441
Ты каждый раз собираешь пересчитывать таймеры, если что-то пойдет не так? У тебя вроде тарифы уровня "n запросов в час", у celery есть rate limit на каждый воркер, правда, не знаю насколько гибкие настройки, но может cгодится.
>>58524
Это я не у тебя спрашивал. Тебе я скинул пример теста.
>>60382
Нормально сделал, management command вполне себе решение.
Просто в одном случае файл лежит рядос со скриптом, который его читает. а в другом он лежит по другому пути.
Алсо, не забывай про текущую директорию.
Бля ну загугли "относительный и абсолютный путь к файлу"
Пока все было норм, но сейчас дошел до этого кода, который буквально напечатан в учебнике:
from math import *
n = input("введите диапазоны:- ")
p = [2,3]
count = 2
a = 5
while (count < n):
b=0
for i in range(2,a):
if( i <= sqrt(a)):
if(a % i == 0):
print("a neprost",a)
b = 1
else:
pass
if (b != 1):
print("a prost",a)
p = p + [a]
count = count + 1
a = a + 2
print (p)
При инпуте выдает:
Traceback (most recent call last):
File "C:/Users/username/AppData/Local/Programs/Python/Python38-32/EEE.py", line 6, in <module>
while (count < n):
TypeError: '<' not supported between instances of 'int' and 'str'
Пока все было норм, но сейчас дошел до этого кода, который буквально напечатан в учебнике:
from math import *
n = input("введите диапазоны:- ")
p = [2,3]
count = 2
a = 5
while (count < n):
b=0
for i in range(2,a):
if( i <= sqrt(a)):
if(a % i == 0):
print("a neprost",a)
b = 1
else:
pass
if (b != 1):
print("a prost",a)
p = p + [a]
count = count + 1
a = a + 2
print (p)
При инпуте выдает:
Traceback (most recent call last):
File "C:/Users/username/AppData/Local/Programs/Python/Python38-32/EEE.py", line 6, in <module>
while (count < n):
TypeError: '<' not supported between instances of 'int' and 'str'
input всегда все воспринимает как строку. Переведи в int принудительно. Записывается так -- int(input())
Спс. Я че-то забыл, что input про литералы.
Все равно хз зачем такой косяк допущен. Или это переводчик, или автор-индус. Кто знает
Ок, я понимаю, что в крестах бывают ошибки непонятные и без трейсбека. Здесь тебе, тварь, и строку и человеческий текст ошибки написали.
Поясните за первую строчку с импорт маф. Я так понял, что это было сделано для того, чтобы юзать свирт (sqrt)?
Бля, импорты это единственная часть питона, за которую нужно сесть и пару часов потратить вплотную на изучение, вчитываясь в каждое слово и разбирая каждый пример+прогоняю свои тестовые скрипты. Так на пальцах не расскажешь
Чтоб когда тянке показал код, она сквирт делала
Как сделать глобальный отловщик ошибок для лога?
sys.exc_info() уже пустой на момент, когда доходит обработка логгера.
Кто-нибудь объяснит, как работает эта функция при n = 6?
Из ОПа кажись устарело по интернет магазинам довольно много новых но какой из них годняк? Пасиб
Не понимаю, или ты тонкий тролль, или действительно есть книжка, которая такой лютый пиздец в каждой строчке. Но я пока таких книжек не встречал. Обычно если кто-то в состоянии собрать книжку, а не вводную статью на форуме, то такого пиздеца уже не делает.
Я создал абстрактный класс с абстрактными методами. Как сделать так, чтобы при наследовании от него, ИДЕ мне подсказывала, что я еще не реализовал абстрактные методы? Может в докстрингах где-то такое прописывается? Когда учил Яву, и Эклипс, и Нетбинс выдавали предупреждение об этом.
В телеге есть годный канал python_textbooks с сотнями книг. Качай, листай, может что-нибудь да зацепит.
Хочу генерить порядковый айди на генераторе в классе. (понимаю что можно и без генератора в этом случае Хотя понял только когда начал писать этот пост, лол)
Но я хочу понять как реализовать это на генераторе
Всякие варианты перепробовал. Нихрена не выходит. На тебя надежда анончик.
вот кот
https://ideone.com/cvD0gS
Ёшкин кот, точно же! Собсем тупой я. Спасибо!
Есть много программ для биологии и анализа, я видел под линукс точно несколько, погугли их сначала, там всякая визуализация прцессов и графиков, большая часть на питоне написана, если знаешь питон, то свою сможешь написать, но есть и готовые программы\модули, конкретно ничго сказать на вскидку не могу
>Как дезигн делал? Как код проекта получился, не перегружен ли?
Всё в коде, базовая декомпозиция + кастомные виджеты, если нужно особое поведение, общие функции вынесены в отдельный модуль. В таком небольшом проекте перегружать его просто нечем.
>Доки киви шагнули вперёд, за последние года 2-3?
Без понятия, но если сравнивать с qt, тут я открыл их и с первого раза сделал всё, что было нужно. Если не считать заёбы с пермишнами винды.
>Получилось замутить исполняемый файл для линупса/винды?
Собрал для винды через pyinstaller, но из-за версии 3.9 нет возможности сделать один файл, т.к. он теряет dll-файлы, поэтому приходится собирать папку и кидать их туда самому.
Реализовал по мануалу remember_me функционал при входе на сайт строка в строку, но он сука такая не работает. Выдаёт ошибку, что на пике. С куками знаком чуть больше чем никак, поэтому тяжело осознать в чем пробоема. Вроде нагуглил, что необходимо переменную конфигурации приложения SERVER_NAME поставить явно и она должна содержать точки, для предупреждения каких-то там хуякерских аттак, и что имя сервера в одно слово типа localhost может не поддерживаться современными браузерами. Ну я сижу на PythonAnywhere и имя сервера установил соответствующее, с точками и поддоменом, а оно все равно не робит. Помогите, братцы, что нагуглил - не хватает знания предмета, чтобы извлечь профит. Если еще литературку подкините, где все разжевано, то вообще збс будет
Убирай сабдомен/пиши рабочее имя/не пиши ничего(если локал). Пробуй.
https://curl.se/rfc/cookie_spec.html
Блин с таймерами как раз проблема, все идеально реализуемо и в луп добавляю корутины из другого треда и запросы асинхронные на тсп делаются и селери нормально все обрабатывает, но вот сейчас все думаю как переделывать при релоадах, у меня уже есть таблица со статусами каждого запроса(нужно для апи энивей), меняя статусы можно контролировать выполнение(когда приходит время выполнить корутину просто делаем запрос к бд и смотрим статус, если stopped, то просто не обрабатываем), сюда же остановка с помощью смены статуса, либо запуск заново. Видимо для релоадов надо так же таймстемп хранить в этой же таблице, а при запуске запускать просто сначала все корутины на каждую запись в бд, а потом начинать слушать брокер. Сейчас понял что я сделал create_or_update, но если за время пока запись ждет в корутине человек захочет остановить и запустить заново, то статус сменится на stopped, а потом на pending, поэтому одно и тоже обработается дважды, надо удалять запись и создавать, чтобы idшник менялся. Уф, чет из-за кучи всяких ограничений становится сложно все держать в голове, есть подсказка как такие алгоритмы взрослые дяди в голове держат, в каком формате записывают? А менеджер команд это просто бомба как по мне, почему-то особое удовольствие писать именно python3 manage.py scriptname
Кое как разобрался с этими тредами, но нихуя не понимаю почему не работает метод go_while
https://pastebin.com/thwEsYE5
Я в ваших qt не разбираюсь, но разве сигнал не должен быть вызван? emit() и все такое.
Тебе же только оставалось пробросить юзера из фикстуры в тест, это пример и делает. Ну нет, так нет.
__name__ задается при загрузке твоего скрипта. Если это скрипт который ты непосредственно запустил (точка входа) то переменная будет равна __main__
Это можно использовать для тестов например. Если твой скрипт должен подгружаться в другом скрипте то ты можешь написать внизу if __name == '__main__': и после этого вызыватье го функции для проверки. Даже если этот код оставишь файле он никогда не выполнится если не запущен как отдельный файл.
Это там, где в топовом фреймворке на расте даже длина сообщения в ответе захардкожена и это считается нормой?
Лучше в отдельном файле конечно, при этом в дочернем классе - т.е. делать кастомный объект для каждого используемого виджета, в нём же создавать юзкейсы со стилем, поведением и жизненным циклом, дабы не плодить объекты лишний раз и переиспользовать, если нужно. А так, либо в коде с использованием style sheet'ов, либо в .kv файле, но мне нравится первый вариант.
при тестах такого вида:
class TestFactorize(unittest.TestCase):
>def test_many_multipliers(self):
>>>>>with self.SubTest():
>>>>>>>self.assertEqual(factorize(), ())
>>>>>>>>>with self.SubTest():
>>>>>>>>>>>self.assertEqual(factorize(), ()
выдается ошибка
AttributeError: 'TestFactorize' object has no attribute 'SubTest'
как исправить?
поясни что ты имеешь ввиду?
я туда передаю все аргументы которые нужны.
например
with self.SubTest(x=x):
self.assertEqual(factorize(x), (x))
в примерах что я видел не создается ничего, вот пример из доков на пике
Блядь, уже заметил свой проёб, исправил.
пиздец, вот что копипаста делает.
первый раз написал с большой буквы и прокопипастил по коду.
Pypy уже 3.7 поддерживает. Возрадуемся, братья!
Я уже запутался в этих обозначениях
Так там можно комбинировать, 'ar', 'xa', 'xab'. Если что. 'rta' открывает файл в стандартном режиме, как без параметра, только с возможностью дозаписи текста в конце.
Да, это было временное решение, все равно спасибо.
Если просто читаю файл и вывожу его, то получаю пикрил как и нужно
А если я перед этим устраиваю перебор файла, то при выводе я получаю пустоту.
Файл это итератор, по мере итерации он двигает указатель.
Можешь сделать file.seek(0) и подвинуть на начало.
Спасибо большое, всё работает
Зачем эти ваши промежутки? Иди сразу на сеньора.
Даю упражнения. Делаешь свою субд на основе json, с записью, чтением, удалением и т.д. Чтоб работать с ней могло сразу несколько пользователей. С механизмом блокировок, с экономной записью, с условием что бд может быть несколько гигов и читать всю в память не стоит.
Развлекайся. Это проще, чем кажется
Задача 2: переписываешь drf под работу со своей бд
Т.е. есть строка через инпут ("rock,paper,water,fire")
А как её добавить в список, чтобы было так ['rock', 'paper', 'water', 'fire']
Вот так программисты и живут
Это где пишут? Хайлоад на питоне, это как тюнингованная девятка на автодроме: вроде и едет и даже не плохо, но чтоб с другими тягаться, придется постараться.
да я в требованиях видел "опыт высоконагруженных" бла бла бла
короче из питона только в мл, да?
ну в мэйле видел фразу "python" и "высоконагруженные" в одной вакансии
Да нет же. Говорю, ты можешь на питоне писать. Опыт высоконагруженных проектов не зависит от языка, а от правильного проектирования.
>Опыт высоконагруженных проектов не зависит от языка, а от правильного проектирования.
Так тогда надо жс брать
прикольно
Он отчасти прав, потому что основная нагрузка идёт на всякие очереди и БД, и нужно с ними грамотно работать, грамотно хранить данные в приложении, и много чего ещё.
То есть у тебя не из-за процессора проблемы в первую очередь, а в более хитрых вещах.
Настоящий хайлоад, где надо каждый такт процессора и каждый байт оптимизировать встречается очень редко.
>Так тогда надо жс брать
И не понятен снобизм по отношению к ЖС.
ЖС быстрый и подходит для нагруженных сервисов более-менее. Он просто очень грязный и неприятный.
Я настроил редис, могу подключаться, могу создавать пару ключ-значение на сервере, смотреть ее и удалить.
Теперь, мне нужно в имеющуюся фикстуру scope=class, которая принимает параметр request делает всякие настройки и yield, и затем request.cold.driver.quit()
Мне нужно в эту фикстуру дописать, чтобы переменные из этой фикстуры писались в редис сервер, потом проверились, после удалялись И печатали в stdout о результате.
Подскажите будьте любезны как такое выполнять?
но оч нужно
какой-бы пет проект накатать, чтобы качнуться в backend разрабоке? асинхрощина там, fast api всякие
Хочу, шоб hrка от счастья заплакала а тимлид руку пожал, место свое бы предлогал, в щеки целовал бы
Предметную область выбери, которая тебя интересует, и сразу придумаешь проект.
А если тебя ничего предметного в этой жизни не интересует, то никакого пета ты и не запилишь, ибо участь твоя рабствовать на галере, а не созидать.
Сука, проиграл, уже недели две тебя вижу и мне все лень загуглить че такое фикстуры, я думаю остальным тоже, тебе точно эти фикстуры нужны, может более популярное решение стоит найти?
Да любую хуйню сделай, если асинхронщена нужна, то найди какой-нибудь сайт в котором часто данные обновляются и сделай какой-нибудь дашборд, hrки де вроде даже не поймут че ты сделал, а тимлидам расскажешь что использовал технологии
>Вроде понятно же из поста
Ты еще и выебываться будешь? Тебя нормально спросили о подробностях.
Я не понимаю в чем проблема? Делай мок редиса, либа такая даже есть, если лень самому 20 строчек написать и засирай его сколько угодно.
@pytest.fixture(scope='class')
def some():
____result = self.connection.setex(key_name, expiration, data)
____print(result)
И запускаешь pytest tests/ -s
Так что ли?
Ради одного раза - нет. Если периодически и впс у тебя работает на другой оси - стоит
>мне блять ядерная физика нравится, но в лабу за 25к идти я не хочу
Так ты тупой просто. Тебе никто не предлагал перекатываться в ту сферу, которая тебе нравится. Тебе писали о другом.
Ну так как это сделать в фикстуре.
>>64501
Так я уже описал. В фикстуре нужно:
1. Записать переменную генерируемую фикстурой (которая уже есть и работает ) в редис. Для редиса уже есть метод подключения и записи.
2. Проверить ее наличие что она действительно записалась в редис.
3. Удалить ее и вывести это в stdout.
Да, как-то так. Только она мне на print выкидывает ошибку - я так понял это из-за того что это функция принимающая item и которая выдаёт yield.
Ну это значит та хуйня криво показывает. Обучатели, лол.
Можешь выполнить это как скрипт и посмотреть результат.
БЛЯЯЯ
Сука, где я проебался в коде? Вроде все должно работать, хули 1 кейс из 196 не прошел?
https://leetcode.com/explore/featured/card/march-leetcoding-challenge-2021/589/week-2-march-8th-march-14th/3669/
Хуй тебя знает. Условие задания хоть бы написал.
А можешь вкратце объяснить, почему разрабы выбирали для своих поделий питон? Я сам хеллоувордщик пока только - так что если сможешь побороть свою брезгливость - поясни с минимумом терминов, пжлст.
Потому что удобно. А почему не питон, и что вместо питона тогда?
Нашел. В цикле for -1 не нужен
Сам хз как 195 кейсов он прошел, хуевые тест кейсы значит у них (литкод как всегда, рот его ебал)
Питон изначально под линух был придуман
Настолько очевидно, что даже не понятно, почему ты не понимаешь.
почему у тебя 2^k-1?
Вот почему тут -1?
Ты не проверяешь случай из одних единиц.
В научных кругах любят питон. Просто его очень легко освоить, не надо ебаться с компиляцией. Все интуитивно понятно. Ну сам подумай. Если ты физик и тебе надо какое то слоожное уравнение составить и протестить еще, станешь ты учить Си? Тебе это нахуй не сдалось. Питом куда быстрее осваивается..
Заранее спасибо!
Можно ли это как то исправить?
def onmess(data):
message = processing_data(msg)
output_data(msg) # some misprint
websock = self.ws = websocket.WebSocketApp(self.url,
on_message = onmess})
websock.run_forever()
Что бы было понятнее, в третьей строке происходит у меня допустим исключение, и во время этого исключения никакого вывода в консоль вообще не происходит, исполнение этого коллбэка просто завершается.
А не, поправил. Ошибки нет. Я зачем-то туда return print вставлял.
Про Perl не знал, я зелень
А почему Flask предпочтительнее? Я Django начал ботать, переключаться на Flask теперь, джанго же вроде как больший функционал предлагает, не?
Работа связана с математическим моделированием, но низкая зп и малая востребованность таких спецов вынуждают меня перекатываться в другую область. Последний год активно использую питон в работе, так что решил перейти на него в паре с джанго.
Живу я в мухосранске, где на hh кроме консультантов и операторов колл центров, требуются одинэсники и эникеи, даже по пхп ничего нет, так что удаленка мой единственный вариант.
Вопросы:
1. Как вы учили джанго? Ютуб, оф дока, книги? Все вместе?
Я пытался начать с документации на сайте джанго, но очень сложно идет.
2. Понимаю, что усвоение знаний вещь индивидуальная, но все же, если я рассчитываю за год вкатиться на удаленку, это не полный бред?
3. Что было на собесе? Помогли ли пет проекты при трудоустройстве?
4. На какую примерную зп стоит ориентироваться? Судя по тому же хх около 60к, а это уже больше моих 50, что для меня уже неплохо.
5. Нужно ли уметь верстать? Если да, то на каком уровне? Как обстоят дела с JS?
6. Как хорошо нужно разбираться в линуксе на реальной работе? Джун должен уметь в гит, докер, nginx? Сейчас использую только гит в виде основных команд и иногда убунту и распбиан в виде работы с учетками, файлами, установкой пакетов и либ.
7. Как относятся к ошибкам джуна? Что бывает за косяки? Что будет, если вовремя не выполнить задачу?
Всем добра, извините за тупые вопросы и опечатки
>за год вкатиться на удаленку
За год ты можешь запилить несколько приложух на любом языке или на нескольких. Если одна взлетит, то тебе уже похуй на все будет.
>Если одна взлетит, то тебе уже похуй на все будет.
Без серьезных денежных вложений ничего не взлетит.
Найди финансирование, это нормально. Но сложнее конечно.
Что именно ты имеешь в виду? Если свой стартап, то у меня уже есть такой опыт, к сожалению, это дано не всем, я понял, что мне лучше работать на кого-то.
Ниже отвечал не я.
>>65551
Анон, ты имеешь в виду фриланс на биржах типа апворка? Я не против, конечно, но для начала мне в любом случае нужно освоить джанго и набраться опыта в каких-нибудь реальных проектах.
Английский 6.0
Вкатывайся в нейроночки. У тебя как раз pandas, numpy, tensorflow, opencv, то что нужно. Бросай свою нищую контору и свой зажопинск. В джанго вкатываются совсем дурни без образования.
В смысле? Я с ними уже год работаю, поэтому и появился питон на работе.
Зп там почти такие же, как в вебе, а сложность работы несоизмерима.
Я не хочу переезжать, мне это просто невыгодно, поэтому и ищу удаленку. Вообще не хочу больше как-то сталкиваться с математикой и программированием на си и плюсах, это была моя огромная ошибка, нужно было сразу уходить в веб. Я бы и в 1с прошел, но они тут получают по 30к
Можешь что-то подсказать по моему вопросу в плане джанго?>>65609
Почему тебя так дико покоробило плюсы и математика?
и как ты отучился если тебя с этой хуйни тошнит?
Отучился с трудом именно из-за нежелания учиться. Сначала учился в спбгу, потом свалил обратно в свой мухгту
Заканчивать пришлось, потому что больше кроме кодинга я ничего не умею.
Я сейчас начал осознавать, что меня где-то развели как лоха, пока я дрочил разные виды математик и разбирался с вращением деревьев на плюсах, кто-то вкатывался в питон, пхп, джаву и работает сейчас удаленно, имеет более интересные проекты, ещё и зп выше.
Так что я решил больше не наступать на эти же грабли.
Ну или пока за это не начнут платить х3 от рынка
Переменная a = rock
а в списке b fire water wood ice
можно ли получить словарь {rock: "fire", "water", "wood", "ice"}
Если я из списка строку делаю, то оно будет всё воспринимать как один элемент же?
Я туплю? На первом скрине просто str(array) а на втором через " ".join(array) Надо было, чтобы оно воспринималось не как цельное слово, а как разные слова. Может есть аппенд какой-то и через перебор?
>Пиздец, назуя они это практикует и кто к ним вообще идёт?
Мб у них питон юзается в основном для дата сайнса?
Да значением можно список ставить, ключем нельзя.
Если нужно именно ключем, то сделай tuple(lst). Но скорее всего это хуевое решение.
потому что одна таска делает расчет и заполняет таблицу, другая удаляет все расчеты, если вторая выполнется до завершения первой, то половина записей останется
они заебали своим сайенсом, мониторят там блядь кто какие треки моргенштерна предпочитает утром в пятницу.
и какую рекламу лучше пихнуть в это время.
такого рода дататсаенс там
Делаешь таску на запись, делаешь коллбек с тем, что тебе надо а в конце его юзаешь таску на удаление.
Но что делать дальше я хз, тоже самое было и си++, мы дошли до классов, я сделал каталог книг, все курс по с++ закончен.
Из минусов мне пока тяжело дается понять как работает ООП или декоратор, не ну я могу сказать что такое инкапсуляция, полиформизм, наследования, но я не смогу применить это. У меня есть задроченная теория для сдачи тестов(Экзаменов) в Университете. Но я полный 0 в практике.
Иногда решаю задачки на КодеВарс 5-6 куи, пробовал проект Эйлера, но чет не особо зашел.
планирую двигаться в веб, начинаю с Фласка, летом как подтяну знания хтмл + ксс перейду на джанго, если с Фласком все ок будет. Но не знаю, правильно ли я двигаюсь. Не покидает чувство, что я делаю что-то не так.
Практика
Просто пиши как можно больше кода для себя - быстро прогресс почувствуешь. Если тебе какой-нибудь тулзы не хватает в повседневности или сервиса, попробуй написать, используя те вещи, которые тебе сейчас не понятны.
ПМИ. Это что-то вроде российской версии computer science, программирование с очень общиной теорбазой и математикой.
Свалил, так как жить для меня в Питере дорого, а качество образования того не стоило, в итоге в мухгту просто легче было получить вышку, а на знаниях это никак не отразилось. Один хер что там, что тут, все было поставлено на самообучение
Я с 200к мухосранска.
Не, удаляет таску пользователь, когда захочет, мне надо просто проверятьпри удалении что предыдущая завершена, я сделал просто словарь в который добавляю таски каждого пользователя и при вызове каждой таски проверяю есть ли доступ к ней
>планирую двигаться в веб, начинаю с Фласка, летом как подтяну знания хтмл + ксс перейду на джанго, если с Фласком все ок будет
Можно начать сразу с Джанго. Он более системный и стройный, хорошо задокументированный, фласк это конструктор, к которому со стороны надо разные инструменты прикручивать.
>Из минусов мне пока тяжело дается понять как работает ООП или декоратор,
Попробуй просто руками покурочить.
Что касается декораторов, то всё сильно проще. Запись
@deco
def func(args):
____pass
полностью эквивалентна записи
def func(args):
____pass
func = deco(func)
Тебе надо просто разобраться, как работать с функциями самими по себе, с аргументами их и т.п., что не очень очевидно после C/C++.
Попробуй помучать непосредственно, а не в рабочем коде, быстро разберёшься на самом деле.
200к это большой город!
а я учился сначала на автомеханическом, потом автопром сдох
потом на психолога когда тема была на подъёме, психология хуета без задач оказалось в россии.
потом на строительном, но пизданул кризис и стройки сдулись
короче пиздец жгучий, как тебе такое?
Или они при установке через pip-ку не привязываются к каталогу, в который я их ставил?
Также ещё пипку обновил в %APPDATA% через команду в терминале VSCode.
venv не надо скачивать. Он копирует твой каталог с питоном с привязкой или без site-package.
Скачиваешь только внешние либы из requirements при обновлении
>Или они при установке через pip-ку не привязываются к каталогу, в который я их ставил?
venv скачивает модули в тот каталог, к которому ты его привязал. То есть если у тебя 10 разных venv, то в каждом будет своя собственная копия модуля.
Вот честно, почему ты такой не любознательный? Мог бы просто сам создать три venv и посмотреть, что как каталоги изменяются и чего он каждый раз качает. Так же проще и интереснее даже.
Вопрос, как вообще начинать рефакторинг своего кода? Че писать, чтобы можно было добавлять модули в программу проще (как конструктор). И поддерживает ли pyside что-то бОльшее чем css для стилей. И если нет, на какую либу перекатиться (с питона слезать не хочется)
На сайте в строку вбиваешь название вещества (например NaCl), нажимаешь "поиск"
Прога ищет в базе данных и выдаёт все элементы list'a, в которых есть это слово.
list уже есть, домен, грубо говоря, тоже. В чём сделать поиск и вывод?
На меня повесили разработку бэка со словами "стек на твой выбор, просто сделай, чтоб работало и в приемлемые сроки"
Я как-то даже растерялся с этой хуйни, как собственно выбрать стек с 0?
Сам проект, допустим - платформа с заказчиками и исполнителями всякой хуйни
Есть частично написанный фронт на вью. С меня надо рест апи; ну там регистрация с разными ролями, личные кабинеты и прочая хуерга. Сцепим это все аксиосом (наверное).
Сначала подумал про джангу дрф или фласк рестфул + постгря/ребит/селери. А потом задумался, мож нахуй эту джангу? Что сейчас ещё можно заюзать из бэкенд фреймворков под чистый проект?
Баловался с aiohttp и fastapi, но не знаю насколько они продакшен реди. Плюс ещё знаю, что у асинк решений проблемы с orm либами, а мне хотелось бы алхимию или что-то максимально похожее на неё.
Fastapi использовал в проде, но проект был хуита по нагрузке, зато асинхронки из коробки. Вот про ORM хуй знает. Есть Tortoise ORM, но это глубокая бета. Peewee-async советуют. Для FastAPI уже админка есть с Vue3 TS
>Плюс ещё знаю, что у асинк решений проблемы с orm либами, а мне хотелось бы алхимию или что-то максимально похожее на неё.
Сейчас клянутся, что в алхимии 1.4 будет хорошая поддержка асинхронности. Пока 1.4 в стадии бета-тестирования, официальный релиз 1.3
Алсо
лучше выбирать глобальный интерпретатор или локальный который в .venv проекта лежит?
Чую что второе лучше.
{
"python.pythonPath": ".venv\\Scripts\\python.exe"
}
И где хранятся настройки для entire workspace VSCode?
Я только локальные нашёл в json возле проекта.
Всё, разобрался, один в settings.json, второй в .workspace лежит.
Alchemy перегружена. Tortoise ORM обещают универсальность для всех реляционок.
Вот остальные придется через сторонние пакеты использовать. Ну в черепахе и команда ещё маленькая и roadmap на 2 года.
Смысл venv в изоляции. Соответственно и пакеты которые ты установил будут там же, не затрагивая общесистемные (актуально для ЖМУ Пинус).
К тому же на проекте у тебя может быть и PyPy вместо CPython.
Сразу ставь PyRight и PyLance. Вполне годное решение.
Понял.
Но я походу случайно уже установил глобально некоторые пакеты (pyplot).
Это ничего страшного?
Через какую команду их если что удалять?
И то верно. Спасибо, разобрался.
в чём поисковик писать, в чём базу данных вести?
я правильно понял, что для этого мне придётся покурить php?
Смогу ли я через полгода изучения питона + джанго + бд уже на удаленке брать заказы?
25 лет, шарю в верстке, программированием как таковым никогда не занимался, но достаточно хорошо шарю в вебе.
>Как с ним на удаленке?
Нормально
>Смогу ли я через полгода изучения питона + джанго + бд уже на удаленке брать заказы?
100% нет
>25 лет, шарю в верстке, программированием как таковым никогда не занимался, но достаточно хорошо шарю в вебе.
Лол, и как именно ты хорошо шаришь в вебе?
Работал в веб-студии, знаю где линия фронта, где бэка.
Не специалист, просто спокойно поддержу разговор, если речь зайдёт о вебе. Параллельно шарю в сео, сем и т.д.
Также тестером работал ещё
чел, я могу реализовать задумку на питоне, потому и пишу тут
а спрашиваю итт, потому что аноны так или иначе сталкивались с потребностью залить код на сайт. Вот и спрашиваю, нужно ли мне пхп или есть какие-то костыли с питоном?
Какие нахуй костыли? select * from table where name like upper('%na cl%');
Для простого поисковика тебе этого хватит.
За полгода ты только с нуля будешь более-менее уметь писать проекты, но такое говнище будешь писать, что мало кто захочет связаться с тобой.
Каким-нибудь стажером может и пойдешь, но таких, кто за полгода хотят выучить стек и устроиться - много.
у меня так)
Полное название pretty print как бы намекает.
Вообще, необходимость принтить какие-то сложные структуры на практике близка к нулю.
Есть два варианта. На питоне выдавать только жсон, а морду сделать на жабаскрипте. Или полностью на питоне, например flask.
Что ты к тому пхп прицепился?
Ну можно сделать на пхп, можно на питоне, это не имеет значения. Сейчас практически любой язык может в веб и имеет веб-фреймворки, близкие по возможностям.
Да и тот же самый пхп сейчас усиленно перепиливают в язык общего назначения, и ходовые фреймворки у него все внешние. Этими встроеннымы веб-фичами, заложенными изначально, никто не пользуется.
> На питоне выдавать только жсон, а морду сделать на жабаскрипте.
тому шо на хостинге есть php, но нет фласка
А что, остались ещё такие говнохостинги за три копейки?
За них же можно купить и говновпску и хоть аллаха там поставить.
Алсо, даже на говнохосте должна быть возможность запустить через cgi. Это хуевенько, но работать будет.
Пошел нахуй из треда, пидорас
Чел, самый днищенский впс меньше 200 рублей стоит. Буквально одна пачка сигарет. Или пару обедов в школе, или кофе в старбаксе, или бигмак, что для тебя там актуально.
Ну так ты можешь раз в месяц и оплачивать, экономя на вышеназванных вещах.
У меня гитхаб премиум был в прошлом году (скидон был), пытался спиздить 3700, а бабки на вкладке маринуются и на карте редко больше 5к бывает, в тот раз было меньше. Изи вей, для отключения списывания. Я никак не могу найти где говноофис свою подписку держит, просто списывает нахуй и все.
На Heroku задеплой, юродивый.
>Лицензия
На каждую проериетарную хуйню есть жопенсорс поделие.
Тот же DBeaver CE умеет все кроме Mongo, а подписка там охуеть дорогая. Вся суть в том, что либо все из коробки,но платно либо все из кучи маленьких коробок, но бесплатно.
> все из кучи маленьких коробок, но бесплатно
Я так на вим хотел полностью перейти. Но эти блятские конфиги под каждый проект настраивать - нет уж. Перешел на vs code. Что-то среднее оказалось и вполне устраивает. Плагинов - хоть обосрись, только половина глючные страшно, особенно от микрософта
Ты про PyLance/PyRight? Нормально работают, заставляют правильно type hints писать, хотя и ругаются на 'Possible None value...', но я ж не макака, а целый бабуин и вместо None будет обработка exception, о котором PyRight не знает, сука
А ещё забыл, что эти ебаные typehints заставляют тащить с собой кучу импортов.
То есть если
def method(arg:BaseRequestModel) ->BaseResponseModel: то в импорте должно быть
BaseRequestModel, BaseResponseModel
И тут цирк с конями и блядями, так как уже начинается жава ынтырпрайз и абстракции.
Алсо, что там с ASGI нынче? Фактически стандартом становится?
Да и вообще, возможнн ли вкат в питон за год очень активной учебы ( в день по 8+ часов)?
Видишь ли, у меня один проект пока на втором питоне. В медленном процессе перехода на 3 не по моей вине. И только один pls, Microsoft, работает со вторым. Еще с 18 года там ебучий баг, что он что-то в фоне анализирует и ломает к хуям весь автокомплит.
Это не твое. Займись лучше паскалем или бейсиком
Таки да, nginx уже нативно может с ASGI работать, RIP Apache.
Вкат возможен за 8+ часов в день за полгода с пет проектом адекватным. Просто так читать и писать говняные сниппеты смысла нет. Тот же парсинг страниц хуйня без задач, пока не свяжешь с чем-то ещё (аналитика, к примеру, автозакупка)
Ставь в базе семафор на этого пользователя при запуске первой таски. По завершению работы семафор снимай. Во второй таске чекай семафор. Пока он есть, крутись в ожидании.
Этими вопросами пусть тимлид и главный админ заморачиваются, а меня привлекают по мере необходимости.
Предыдущий: >>54138 (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
Предыдущий: >>54138 (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
Вы видите копию треда, сохраненную 18 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.