Задать вопрос
  • Как сделать единый аккаунт для своих сервисов?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Реализовать свой сервис авторизации. Называется CAS, работает примерно так:
    5bd748db6d572869658821.png
    Ответ написан
    6 комментариев
  • Какой CMS движок учить начинающему?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никакой. Изучайте разработку ПО, языки программирования, построение архитектуры ПО, алгоритмы, математику и т.д и т.п.

    UPD
    Приведу немного аргументации и очевидных вещей для тех, кто не понимает почему ответ именно такой. На самом деле все очень просто: в IT индустрии всё развивается и меняется очень, очень-очень быстро. И как следствие возникает проблема устаревания знаний и умений. Вот например 15-20 лет назад изучение языка программирования под названием "Дельфи" и популярной тогда его среды разработки для десктопных приложений вполне имело смысл и было популярным явлением, т.к. оно тогда довольно широко использовалось, или например Perl для создания сайтов. А где оно сейчас? Почему сегодня сайты пишутся на джаваскрипте? А как на счет десктопных приложений? А ведь те же десять лет назад попробуй скажи такое — как бы область деятельности не пришлось менять. И вот такое происходит просто с языками программирования за довольно короткое время. А основа любого CMS, фреймворка и иже с ними — это как раз таки язык программирования. И вот за время жизни языка программирования в нём случаются новые стандарты, изменения и прочее, а популярное ПО на нём переписываются десятки и сотни раз. Т.е., изменчивость продуктов какого либо языка зависит как от самого языка так и от его популярности. И чем они выше — тем чаще что-то меняется. Из всего этого вытекает очень логичный вывод: в долгосрочной перспективе выгоднее те знания, которые не устареют как можно дольше. И вот тут как раз таки знания разработки ПО и языков программирования, построения архитектура, алгоритмы и прочее имеют наибольший срок устаревания. А уж сколько тысяч лет математике можно и не вспоминать. А она, кстати именно благодаря стремительному развитию IT тоже развивается очень быстрыми темпами. Так вот, при наличии вот таких фундаментальных знаний можно легко и быстро осваивать любые новые фреймворки, CMS, языки программирования и прочее. А уж при наличии подробных мануалов, гугла, форумов и прочего большинство задач сводится тупо к вбиванию "как сделать YYY в ZZZ" в строке поиска (я вот например никак не могу понять ход мыслей людей, которые задают вопросы на форумах и прочих ресусах, ответ на которые выдается в первых же строчках гугла, складывается впечатление, что они вообще первый раз в интернете и про гугл не знают вообще ничего).
    Если есть желание именно в изучении CMS — ставим себе задачу и решаем её используя разные CMS, далее выбираем наиболее понравившуюся и пользуемся пока не надоест или не устареет. А после — повторить.

    Немного перефразирую сам вопрос и соседний популярный ответ:
    — Каким инструментом учиться пользоваться начинающему строителю?
    — Учись использовать молоток и гвозди, леса полно, доски везде используются.
    Вот только строительство — это не одни только доски, в которые забиваются гвозди, а еще архитектура, сопромат и иже с ним, экстерьер, интерьер, отопление, освещение, канализация, вентиляция и ещё куча всего. Аналогично и во всех остальных областях, в том числе и web разработке.
    Ответ написан
    9 комментариев
  • Какой ВУЗ в Москве даст знания, но и позволит работать?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Я боюсь поступить в ВУЗ, ...., где не будет разработки программного продукта

    Судя вот по этой фразе - вас интересует направление "Разработка ПО". К сожалению, сегодня практически во всех ВУЗах ситуация именно такая - в области разработки ПО там не научат практически ничему. Почему так? А вот почему:
    1. Огромная скорость развития и изменений в области IT - отсюда следует, что надо бежать, только для того чтобы оставаться на месте. А уже чтобы быть в курсе - надо это надо бежать еще быстрее. Т.е., надо учиться, учиться и еще раз учиться. Каждый день.
    2. Большинство преподавателей в ВУЗах из старшего поколения и многие из них остались в "том времени". Не все конечно, сам лично знаю нескольких вполне бодрых "старичков" из нескольких крупных ВУЗов, которые занимались программированием еще в советское время, наработали огромный опыт и сейчас вполне себе разрабатывают электронику, МК, ПЛИС, процессоры в кремнии, даже передовые нанометровые техпроцессы для мировой промышленности.
    3. Низкая ЗП у преподавателей - сегодня даже начинающим программистам на мировом рынке готовы платить очень даже приличные деньги по нашим меркам, а профессионалам в несколько раз больше. Кто из опытных программистов пойдет работать за месячную ЗП, которую они вполне зарабатывают за день, а то и быстрее?
    4. Программа обучения ВУЗов устарела на полвека - за четыре-пять лет такого "обучения" невозможно подготовить современного программиста. Потому что пока человек будет учиться - его знания устареют на 5-10 лет (а то и больше). А в IT - это целая эпоха, а то и несколько. Это как учить человека конной езде и охоте из лука на диких кабанов, а когда он закончит обучение - везде уже будут ездить машины и супермаркеты на каждом углу. Ну, т.е. передвигаться и достать еды можно и так и так - вот только кому нужен верховой ездок и умеющий стрелять из лука в век самолетов и фастфудов? Вот примерно так же и в IT - сегодня охотимся на кабанчиков и собираем ягоды в лесу, уже завтра кушаем искусственное/синтетическое мясо заморских зверей и фруктов из пробирки, а послезавтра на другом конце галактики помогаем местным неандертальцем предотвратить ядерный конфликт и грозим пальчиком.
    5. На программиста нужно учиться самостоятельно - просто потому что других вариантов нет из-за скорости развития IT и программисту каждый день надо изучать что-то новое. Надо понять как это все работает, а главное - хотеть понять, надо отрабатывать память, развивать способность к переключению контекста в голове, образное мышление. Если привыкнуть, что тебе все рассказывают, показывают и разжевывают - самостоятельно что-то новое вряд ли изучишь. Просто потому что разум привыкнет, а разумом управлять как-то не учат (что несколько странно - есть же общая физическая подготовка, почему же нет общей умственной подготовки?).
    6. При наличии желания - вполне реально за несколько месяцев с нуля выучить что-то из мейнстрима и найти вакансию джуниора и примерно за год-два дорасти до миддла. А за пять лет можно и до сеньора/тимлида дорасти. Было бы желание. Ну или пойти в ВУЗ, потратить годы на сомнительную деятельность, выйти и получить практически нулевой выхлоп в целевой области. Т.е., никакого реального опыта не получить.
    Ответ написан
    6 комментариев
  • Какой путь исправления проблемы (sitemap.xml с дублями) для Яндекс поиска правильнее?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Вариант.

    Это
    Интересует: алгоритм был правильный выбран?

    Но у магазина уже неделю нет заказов

    Если сайт уже работает и сильно зависит от seo, то нужно плавно переходить на другой инструмент, а не рубить с плеча:
    1. Отключить генерацию странного sitemap, затем руками распотрошить сгенерированный sitemap и удалить от туда лишние url. Залить на сайт, отправить на индексацию, подождать 1-4 недели, пока Яндекс успокоится.
    2. Скопировать сайт и развернуть на локалке.
    3. Поставить Yoast SEO или другой SEO плагин и проверить, все ли правильно сгенерировано.
    4. Залить обновленный сайт обратно на хостинг и сразу отправить на индексацию новые страницы.
    Ответ написан
    6 комментариев
  • Нюансы оформления удаленки на зарубежную компанию, как правильно?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    1. Финансы:
    • ИП, ОКВЭД - разработка ПО и БД
    • Налогообложение - УСН плюс патент в какой-нибудь области где-нибудь в регионах (есть небольшой шанс, что могут проверить - случаи есть, хоть и мало, поэтому лучше где-нибудь рядом с местом жительства)
    • Квалифицированная электронная подпись - токен и криптопро либо виртуалка с триалом криптопро (втб раздаёт токен бесплатно - тыц, оформить, a на следующий день или через несколько закрыть счёт - с самим банком не связываться)
    • Адекватный интернет-банк с онлайн-бухгалтерией - точка или модуль, в сторону попсы типа т-, а-, сб- и прочих лучше даже не смотреть - сэкономите километры нервов и литры сока и других бодрящих веществ
    • Компания-прокси - Solar Staff, Easy Staff для получения оплаты, договор-оферта с прокси в России (как с фриланс-биржами раньше), работодателю выставляется стандартный инвойс/инвойс-договор из прокси, он его оплачивает, а на ваш счет в банке приходит перевод за вычетом комиссии прокси со счета в Российском банке - никакого валютного контроля

    Для налоговой всё прозрачно и никаких проблем. Любые вопросы и непонятки решаются с онлайн-бухгалтерией.

    Оформление со стороны работодателя - как договоритесь и зависит от местных законов. В большинстве случаев достаточно простого счёта-договора: "оплата счёта подтверждает, что работа сделана и принята".

    Если открывать ООО - это 50-100к в месяц расходов только за одного сотрудника (генерального директора), примерно 50% от ЗП в налоги и другие взносы уйдёт, прибыль с ООО выводится через родственников-ИП или дивиденты. Там вообще очень много всяких нюансов и прочего - гугл в помощь. Бухгалтерия - в интернет банке или что-то типа "Моё дело". Если не хочется самостоятельно заниматься бухгалтерией - в деле есть тариф "Премиум" с личным помощником. Либо нанять знакомого бухгалтера, который будет тыкать кнопочки в этом самом моём деле и у которого есть с ним опыт (нанимать бухгалтера со стороны - всегда риск). В сторону варианта "сэкономить на интернет бухгалтерии" не то что смотреть, даже думать не стоит.

    А вот легально получать оплату в крипте простым и прозрачным способом на текущий момент невозможно (разве что через мутные схемы с соответствующими рисками). На текущий момент только через криптоэквайринг. Росбанк (теперь филиал т-банка) уже умеет, но пока только для крупных клиентов (точно не помню, но вроде от 100 лямов оборота - узнавал у них в 23 году). Работает он через b-crypto (новость). Есть еще несколько посредников, кто тоже занимается криптоэквайрингом: например битбанкер.

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

    2. Да, свой сервер для VPN обязателен - часть международного интернета только через VPN, рунет - без него (наши тоже полмира забанили)

    3. Созвоны работают отлично - там трафик вообще ни о чём.

    4. Только избранные ООО:
    Ответ написан
    4 комментария
  • Какой SEO-плагин поставить для для Wordpress в 2025м?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Переезд на зарубежные сервера чреват потерей позиций сайта (тестировала, так и случилось).

    От смены сервера позиции не проседают, что то другое повлияло.
    Какой SEO-плагин поставить для для Wordpress в 2025м?

    Тот же, что и в 24 году - Yoast SEO или All in One SEO Pack.
    Ответ написан
    3 комментария
  • Полная разница sudo su, sudo -i, sudo -s?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    - Разница 1: Почти, sudo -i также меняет HOME на /root, и читает логин скрипты root юзера.
    - Разница 2: Верно, действия с sudo -i и sudo -s логгируются в журналах юзера, а sudo su - нет.
    - Разница 3: Верно, sudo позволяет настраивать ограничения для команд через sudo -i и sudo -s, но не для sudo su (так как sudo su переключает юзера в root).
    Еще не понял разницу между
    sudo su
    sudo su -

    - sudo su - переключает юзера на root, но окружение при этом не является полным root окружением.
    - sudo su - - эмулирует полный вход юзера root (login shell). Будут прочитаны все файлы конфигурации, которые обычно читаются при входе root (profile, .bash_profile, .bashrc и что-то там еще). Насколько я понимаю, это то, что нужно Вам при работе от имени юзера root.
    И где можно смотреть логи пользаков при использовании sudo -i, sudo -s?

    Viewing and monitoring log files, можно еще заюзать journalctl.
    Ответ написан
    7 комментариев
  • Как отдавать боту 200 если файла нет?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Моя проблема в том что если я сбилдил новую версию, у меня новая .cssка и соответственно бот получает 404 на нее, я бы хотел этого избежать.

    Подскажите решения для этого?

    Решение - не страдать хернёй. 404 ошибка по js и css файлам не ухудшает, а 301 редиректы - не улучшает ранжирование.
    Ответ написан
    5 комментариев
  • Что выбрать WP или Python+Django для сайта?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Короткий ответ (с учетом указанного ТЗ) - WP.

    Длинный ответ:
    публиковать страницы, создавать иерархию страниц, чпу url, какой то слайдер с картинками

    Учитывая типовое ТЗ, ответ - WP (все это уже реализовано, преимущественно бесплатно и в большом количестве).
    небольшое количество услуги в регионе

    Вы на старте выхода в интернет, предположу, что количество оказываемых услуг оффлайн - будет примерно равнозначно количеству оказываемых услуг онлайн, а значит производительность инструмента не первостепенна, ответ - WP.
    Нашли компанию, предлагает разработку сайта на WP или на Python+Django (дороже и дольше)

    Начнем с того, что это не равнозначные инструмент, ибо WP - это готовый движок/CMS для сайта + сам сайт (готовые шаблоны), развернул на хостинге и готово. А вот Django - это фреймворк, т.е. некий набор инструментов, да он позволяет сделать из него что угодно (ах*енно сделать (на правах отвечающего)), но потом. Соответственно, если вопроса в функционале и производительности не стоит (и предположу - сделать быстро) - выбираем WP, будет дешевле и быстрее.

    Что обычно я использую (от начального проекта к финальному):
    1. WP в стоке + сборка фронта (webpack) с оптимизацией + кэширование.
    2. Докупка железа и горизонтальное масштабирование п1 балансировщиком.
    3. Профилирование и переписывание определенных запросов под конкретные задачи в самом WP, обычно добавляет производительности в 2-3 раза (от wp там мало что остается, но ценник и сроки еще не такие, как в п4).
    4. Python + Django + кэширование (если нужно быстрее любого WP и более специфический функционал).
    5. П4 + FastAPI (если прям совсем прижало по производительности).
    Ответ написан
    6 комментариев
  • Что такое Docker простыми словами?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Что такое Docker простыми словами

    простыми словами

    Если совсем прям простыми, то - это некая легковесная оболочка, которая способна изолировать приложение внутри себя от внешнего мира. Очень похож (по логике) на системы виртуализации VMware, VirtualBox, Parallels итп, но сам не является им.

    Возможности:

    - Контейнеризация: Docker позволяет паковать приложения вместе со всеми их зависимостями в контейнеры, обеспечивая тем самым их независимость от конкретной инфраструктуры.
    - Переносимость: Контейнеры Docker могут быть запущены на любом компьютере, который поддерживает Docker, независимо от операционной системы. Это делает распространение и развертывание приложений намного проще.
    - Изоляция ресурсов: Каждый контейнер Docker работает в изолированной среде и не влияет на другие контейнеры или хостовую систему.
    - Слоистая файловая система: Docker использует слоистую файловую систему для хранения данных, что позволяет существенно экономить дисковое пространство и упрощает обновление и распространение контейнеров.
    - Сетевые возможности: Docker позволяет настраивать сетевые параметры каждого контейнера, что позволяет создавать сложные многокомпонентные приложения.
    - Docker Hub: Docker Hub – это репозиторий, где можно хранить и делиться контейнерами. Это облегчает развертывание и распространение приложений.
    - Docker Compose: Это инструмент для определения и запуска многоконтейнерных - Docker-приложений. С помощью Compose вы можете использовать файл YAML для конфигурации служб вашего приложения, а затем с помощью одной команды создать и запустить все службы.
    - Docker Swarm: Docker Swarm предоставляет нативные возможности Docker для оркестрации и масштабирования кластера Docker.
    Ответ написан
    Комментировать
  • Как в ubuntu смотреть, какой пользователь что делал?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    zver - наш воображаемый пользователь-зверь.

    1. Какой пользователь в какое время заходил?

    - last - история входов.
    - last zver - история входов зверя.
    - lastb zver - история неудачных входов зверя.
    - last zver | grep "Jan 21" - история входов зверя за 21 января сего года.
    - last -s -7days zver - история входов зверя за последние 7 дней.
    - last -s 2025-01-15 -t 2025-01-21 zver - история входов зверя за 15-21 января 2025 года.

    2. Действия того или иного пользователя?

    - cat /home/zver/.bash_history - история команд зверя.
    - who -u - показывает активных пользователей (терминалы и время входа).
    - ps -u zver - показывает список активных процессов зверя.
    - sudo iotop -u zver - мониторинг ввода вывода пользователя зверя (в режиме реального времени).
    - sudo iftop -f "src user zver" - показывает сетевой трафик зверя.
    - sudo tail -f /var/log/syslog | grep zver - просмотр действий зверя в реальном времени.
    - sudo journalctl -f | grep zver - отслеживание действий зверя в реальном времени (если используется systemd).
    - sudo lsof -u zver - какие файлы открыты у зверя.
    - find /home/zver -type f -mmin -60 - какие файлы изменил зверь за последний час.
    - stat /home/zver/nomera-devchonok.txt - показывает подробности что делал зверь с файлом стратегического назначения.

    3. Если пользователь пользовался sudo -i, sudo -s, sudo su, как посмотреть, что он делал под этими оболочками?

    - sudo grep zver /var/log/auth.log - история команд (втч. под sudo) зверя.
    - sudo zgrep zver /var/log/auth.log* - просмотр истории команд зверя из текущих и архивных логгов.
    - sudo aureport -x --summary - показывает сводку команд (втч. под sudo).

    Расширенный мониторинг зверей - auditd и еще.
    Ответ написан
    2 комментария
  • Как работать с api сервиса на localhost?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    А я не хочу постоянно закидывать код на сервер что бы протестировать работает он или нет.

    Сурово!
    Как совместить локальную разработку и прием данных с внешнего сервиса?

    Как вариант, можно использовать обратный прокси по типу ngrok:
    1. Регаемся в ngrok и качаем их приложение.
    2. Указываем в ngrok, какой порт на локалке слушать, пусть будет :8080 ngrok http http://localhost:8080.
    3. Из консоли п2. копируем url обратного прокси, он будет похож на что то вроде https://9abc0-11-22-333-44.ngrok-free.app.
    4. Поднимаем свое приложение-сервер локально на порту из п2.
    5. В api сервиса указываем адрес из п3, например: https://9abc0-11-22-333-44.ngrok-free.app, с роутами из вашего приложения - это будет выглядеть примерно так:
    https://9abc0-11-22-333-44.ngrok-free.app/api/route-name
    .

    В результате, внешний api сервис сможет отправить данные в ваше приложение, которое запущенно у вас локально.

    P.S. запятые уже включены в тариф, используйте их иногда :)
    Ответ написан
    Комментировать
  • Как работать с api сервиса на localhost?

    @Everything_is_bad
    1. эмулировать через моки и подобное
    2. пробросить порт внешнего сервиса в свой localhost через ssh туннели
    Ответ написан
    Комментировать
  • Как сделать сайт на WordPress с высокой производительностью?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Как сделать сайт на WordPress с высокой производительностью?

    Вначале необходимо определить, что такое "высокая производительность". Обычно, под производительностью сервера (WP сайт это как раз тот самый сервер) подразумевается показатель RPS (Requests Per Second) - максимальное количество запросов к серверу в секунду. Именно максимальное, т.е. в какой то "час-пик". Предположим, что сайты на WP обычно используют небольшие, ну максимум средние компании, с соответствующим ожиданием по нагрузке в своем сегменте.

    Возьмем голую тему без плагинов, которая выводит 10 изображений, с подключением 5 статических файлов (css/js), итого около 20 запросов от одного не кэшированного визита посетителя. Если на наш сайт зайдут 5 посетителей в секунду, они сгенерируют 100 RPS (5 * 20). Может показаться, что 5 визитов в секунду - это мало, но в минуту это будет уже 300 визитов, а в час 18000 визитов, что как бы дохрена, для малого-среднего бизнеса. Повторюсь, речь идет про "час-пик", т.к. нагрузка в другой промежуток времени нас не интересует.

    По моим наблюдениям, WP без проблем выдерживает 50-100 RPS на нормальном хостинге с начальным тарифом без кэширования.

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

    Я придерживаюсь следующего плана оптимизации WP сайта, от простого к сложному:
    1. Кэширование плагином - самое быстрое и относительно дешевое решение, гуглить WordPress caching plugins. Обычно, вместе с такими плагинами идет опция с оптимизацией изображения до .webp или .avif формата и оптимизацией css/js файлов, если же нет, то это должен быть следующим пунктом оптимизации. Например, для W3 Total Cache имеются плагины Smush и ShortPixel.
    2. Хостинг - арендовать более производительный shared-хостинг и подключить CDN.
    3. VDS/DS хостинг - переезд на производительный VDS/DS хостинг, настройка обратного прокси Nginx и перекладка на его плечи задачи кэширования. Иногда получается сделать так, что до WP вообще не доходит запросов, все отрабатывает Nginx (это идеальный сценарий, но не всегда выполнимый). Здесь можно снять несколько сотен-тысяч RPS, что уже очень прилично, для такого уровня сайтов.
    4. Больше серверов - докупка VDS/DS серверов с балансировкой, либо руками, либо средствами хостера. Здесь можно снять ЕЩЕ несколько сотен-тысяч RPS дополнительно к п3. Обычно, такая производительность нужна каким то интернет-каталогам/магазинам.

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

    Ну и как уже сказали другие, elementor противоречит слову "производительность", хотя и его наличие можно на время закидать кэшированием-серверами-деньгами.

    Рекомендую почитать:
    WordPress Developer Resources - Optimization
    The Ultimate Guide to Boost WordPress Speed & Perf...
    Page Speed Optimization for WordPress
    Как понять, где лучше использовать плагин, а где лучше разобраться и вставить код?
    Какие плагины обязательны? А какие замедлят сайт?

    Отслеживать производительность можно плагинами New Relic и Query Monitor, а тестировать нагрузку Load Impact и Apache Benchmark. Это поможет понять, где узкие места.
    Ответ написан
    5 комментариев
  • Как скрыть/показать элемент с определенным текстом?

    @alexalexes
    let group_list = document.querySelectorAll('.option__group');
    group_list.forEach(function(g_e)
    {
     if(g_e.querySelector('label').innerHTML == ' Цвет:' )
     {
      g_e.classList.add("displayblock");
     }
     else
     {
       g_e.classList.remove("displayblock");
     }
    });
    Ответ написан
    2 комментария
  • Не получается поиск данных через bs4, как чинить?

    @Everything_is_bad
    Перестать копировать эти ужасные портянки XPATH из инспектора браузера и самому, глазами анализируя html, делать нормальные, скорее всего там будут подвязки на классы. Ну и сразу, для selenium не нужен bs, его встроенных функций достаточно.
    Ответ написан
    2 комментария
  • Как запаролить сайт?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Пароль найдите самостоятельно (хранение пароля на клиенте не самая безопасная идея):
    Ответ написан
    4 комментария
  • Простым языком о замыканиях?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    1. Для чего замыкание существуют?
    Для инкапсуляции данных.
    В ООП есть модификаторы доступа (private, protected), которые закрывают доступ к данным извне класса, но позволяют обращаться к ним из методов.
    В ФП для этой задачи используют замыкания, закрывая данные внутри функции. Из вне данные недоступны, но вложенные функции имеют к ним доступ.

    2. В каких условиях они создаются?
    Когда вложенная функция обращается к переменным внешней функции.

    Хоть и просили без примеров, но на примере показать проще:
    // makeCounter - внешняя функция
    function makeCounter(initialValue) {
      var value = +initialValue || 0;
      // counter - внутренняя функция
      // она использует переменную value из внешней функции
      // что-бы это было возможным, для counter создается замыкание,
      // в котором хранится переменная value
      // переменная initialValue функции counter не нужна, поэтому ее можно "забыть"
      return function counter() {
        return value++;
      };
    }
    
    // у нас 3 экземпляра функции counter
    var counter1 = makeCounter();
    var counter2 = makeCounter();
    var counter3 = makeCounter(100);
    // и для каждой есть своя переменная value
    console.log(counter1()); // 0
    console.log(counter1()); // 1
    console.log(counter2()); // 0
    console.log(counter1()); // 2
    console.log(counter3()); // 100
    
    // а вот получить как-то напрямую переменную value мы не можем
    // инкапсуляция нам не дает поломать данные
    Ответ написан
    Комментировать
  • Как асинхронная программа(event loop) понимает, что пришел ответ от сервера?

    bingo347
    @bingo347
    Crazy on performance...
    Что-бы понять асинхронность полностью придется постепенно опустится на самый низкий уровень, вплоть до железа. Но начать стоит с самого верха - с уровня нашего приложения.

    Итак, мы пишем на нашем высокоуровневом любимом языке, неважно JS/Rust/C#/Scala/Python или любой другой. В современном мире у нас скорее всего есть какая либо абстракция для работы с асинхронными апи, предоставляемая или стандартной библиотекой языка или сторонними библиотеками. Она может быть примитивной и основанной на колбэках или более продвинутой, вроде Future/Promise/Task или чем-то подобным. Иногда наш язык предоставляет синтаксис наподобие async/await для более простой работы с этими абстракциями, а иногда асинхронная работа может вообще быть скрыта от нас в рантайме языка, например как с горутинами в Go. Но в любом случае где-то под капотом у нас будет event-loop, а иногда и не один, так как никто не запрещает нам писать многопоточку в то же время используя асинхронные вызовы.

    Сам event-loop - это не более чем обычный while(true) или любой другой бесконечный цикл. И внутри этого цикла наша программа имеет доступ на извлечение к некоторой очереди (если не знаете, что это за структура данных, то погуглите), которая содержит в себе результаты уже обработанных задач. Программа берет очередной результат, находит ожидающий ее колбэк/Promise/Future/Task и запускает выполнение ожидающего кода. Очередей опять же может быть несколько и обрабатываться они могут по разному, но это не важно. Важно то, что наш основной поток (или потоки) ничего не знают, о том как выполняются асинхронные задачи. Он лишь смотрит, есть ли в очереди результат, и если есть - обрабатывает его, а если нет, то принимает решение или выйти из цикла (и завершить поток, а иногда и весь процесс) или уснуть пока новых результатов не появится.

    Но откуда же в очереди берутся результаты? Надо понимать, что асинхронная программа почти всегда многопоточная и результат операций попадает в очередь из фоновых потоков, которые просто блокируются в ожидании нужного ресурса (или сразу многих ресурсов, если используют системные апи вроде epoll или kqueue). Как правило такие фоновые потоки большую часть времени находятся в состоянии ожидания, а значит не потребляют ресурсы CPU и не попадают в планировщик ОС. Такая простая модель действительно позволяет сильно экономить ресурсы по сравнению с моделью, где множество потоков выполняют по 1 задаче и самостоятельно ожидают свои запросы.

    Важно отметить, что в современном мире даже на среднеуровневых языках, вроде C или C++, не говоря уже о высокоуровневых, не реализуют асинхронность сами. Во-первых, на разных ОС для этого используются разные апи. Во-вторых, эти апи на разных ОС умеют обрабатывать разные типы ресурсов (с сетью вроде как умеют работать все основные ОС, но помимо сети асинхронно можно работать с пользовательским вводом, диском и периферийными устройствами, вроде сканеров, вебкамер и прочего цепляемого в usb). Наибольшую популярность (ИМХО) имеет кроссплатформенная библиотека libuv, хотя в Rust принято использовать mio (или даже абстракции над ней, вроде tokio), в C# подобные механизмы есть в .NET Core, а в Go оно уже зашито
    в те самые 1.5МБ рантайма, что Go засовывает в каждый бинарь
    (там правда еще и GC, но один фик это много и достойно вынесения в динамическую либу)


    Ок. С прикладным кодом вроде разобрались. А что же происходит в ядре ОС? Ведь, как писалось выше, у нас даже есть апи, чтоб ждать запросы пачкой. Все просто. Ядра ОС стали асинхронными еще до того, как это стало мейнстримом, если мы конечно имеем дело не с ОС реального времени (но у нас же винда/линь/мак/фряха, а не ОС для бортового компа боинга, где это критично). Смотрите, когда что-то происходит на внешней периферии (ну например диск запрошенные данные прочитал или по сети данные пришли, или юзер мышкой дернул), то формируется прерывание. CPU реально прерывает свою текущую работу и бежит смотреть что случилось, точнее вызывает обработчик предоставленный ОС. Но у ОС то есть основная работа, поэтому она скорее старается освободить обработчик и просто скидывает все данные в оперативку, а разбираться будет потом, когда очередь дойдет. Ничего не напоминает? Очень похоже, на то что происходило в event-loop, только вместо фоновых потоков "результаты" попадают в очередь из прерываний. А уже когда-то потом ОС отдаст данные в драйвер устройства, ну и т.д., пока они не дойдут до нашего прикладного приложения. Вот и все, никакой магии.
    Ответ написан
    3 комментария
  • Как понять что ты развиваешься и как найти знакомых?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Самый верный способ - устроиться на работу.
    Ответ написан
    5 комментариев