• Как и где взять список сайтов работающих на HTTP?

    Взять – у поисковиков! В Google есть поисковый оператор inurl:

    поисковый запрос авто -inurl:https
    найдёт сайты по ключевому слову «авто», в адресе которых отсутствует "https", т.е. которые работают без HTTPS.

    Попробовать

    Почему-то из документации по поиску упоминания этого и других поисковых операторов уже выпилили. Остались упоминания на сторонних сайтах.
    Ответ написан
    Комментировать
  • Как создать динамичный поддомен?

    @Maxim_Q
    Для реализации подобной системы вы можете использовать поддержку динамических поддоменов на вашем сервере. Это означает, что вы должны настроить ваш сервер таким образом, чтобы он мог обрабатывать запросы для любого поддомена вашего основного домена.

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

    Для настройки DNS для поддоменов вы можете использовать записи типа "Wildcard" (запись типа *). Эта запись позволяет направлять все поддомены вашего основного домена на определенный IP-адрес или сервер.
    Добавьте новую запись типа "Wildcard" (обычно используется символ *), указав в качестве значения IP-адрес вашего сервера. Пример:
    *.project.com. IN A 192.168.1.1

    Максимальная длина поддомена зависит от ограничений доменных имен и DNS. Согласно стандартам, максимальная длина доменного имени (включая поддомены и точки между ними) составляет 253 символа. Однако, для удобства использования и совместимости с различными системами рекомендуется ограничиться более короткими именами, обычно не более 63 символов.
    Ответ написан
    Комментировать
  • Оптимизация сайта под высокие нагрузки (php,nginx, mysql). Какие критерии доработок? Что необходимо сделать в первую очередь?

    Скорее всего эта проблема связана с БД. Вероятно есть SQL запросы, которые плохо оптимизированы под эту задачу. В этом случае тогда нужно оптимизировать запросы, возможно еще нужно создать индексы, возможно еще произвести тюнинг MySQL, увеличить некоторые буферы и другие настройки.

    Для оптимизации нужно:

    1. Нужно включить логирование медленных запросов. Много раз использовал эту методику для выявления узких запросов.
    После уже можно понять какие php файлы являются проблемными, и их исправить.
    Логирование медленных запросов включается так в разделе [mysqld] в файле my.cnf:
    slow_query_log      = 1
    slow_query_log_file = /var/log/mysql/slow.log
    long_query_time     = 1

    Анализ лог файла делается так:
    mysqldumpslow -s c -t 20 slow.log.1 > results.log

    2. Также может помочь утилита mysqltuner.pl. Многократно ее использовал для определения проблемных запросов, индексов, которые нужно добавить в таблицы, и других проблем с MySQL/MariaDB.

    3. Можно вручную провести анализ запросов при помощи EXPLAIN.

    4. Можно сделать замеры выполнения кода, как вручную, через логирование блоков кода, так и через XDebug. И выявить долго выполняющиеся блоки, после этого оптимизировать их.

    5. Кроме того нужно посмотреть процессы на сервере, которые занимают много процессорного времени и памяти, это можно сделать через atop или другие подобные утилиты. Можно на основании этого оптимизировать программный код и службы.

    6. То что MySQL и сам сервер находятся на виртуальной машине это тормозит работу сервера, виртуальные ноды в любом случае работают медленнее, чем физический сервер. Рекомендую перенести это все на физический сервер с NVMe дисками, с современным процессором и ОЗУ не менее 128 Гб.

    Могу помочь настроить логирование, анализ этого и выявить узкие места.
    Ответ написан
    Комментировать
  • Оптимизация сайта под высокие нагрузки (php,nginx, mysql). Какие критерии доработок? Что необходимо сделать в первую очередь?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Как уже заметили коллеги - первое что нужно выяснить - что тормозит.

    Спойлер: 90% что проблема в запросах к бд, так как сам по себе код в большинстве случаев банально отсылает запросы и принимает их результат, выводя его пользователю в несложных действиях. В редких случаях - запросы идут к внешним тормозящим сервисам, например к фейсбуку или другим СС. И крайне редко тормозит сам код, но тут уже опять же - 90% что это некомпетентность разраба, например, не способного построить нормальный запрос и сортирующий данные от бд в коде...

    Что конкретно надо делать:
    1) Взять за шкирку самого разбирающегося в коде (если таковой существует в проекте), и дать задание описать базовый стек вызовов, если это какой-то самопис, или сразу расставить код замера времени с метками в случае понятной архитектуры. Что то типа такого(класс - древний костыль, но работает, так что матом не ругаться):
    Class Timer.php:
    class Timer {
    
        static $start;
        static $end;
        static $marks = [];
        static $formats = [1=>''];
    
        static function init(){
            if(empty(self::$start)) self::$start = microtime(true);
        }
    
        static function setMark($markName = ''){
            $time = microtime(true);
            if($markName == '')$markName = $time;
            $data['name'] = $markName;
            $data['time'] = $time;
            $res['time'] = $time;
            if(count(self::$marks) > 1)$res['diff'] = $time - self::$marks[count(self::$marks)-2]['time'];
            else $res['diff'] = 0;
            $data['diff'] = $res['diff'];
            self::$marks[] = $data;
            return $res;
        }
    
        static function timeFormat($number,$format = ''){
            if(empty($format)) $format = 3;
            return number_format ($number,$format,'.','');
        }
    
        static function report(){
            self::$end = microtime(true);
            self::$marks['start'] = self::$start;
            self::$marks['end'] = self::$end;
            self::$marks['all_time'] =  self::$end - self::$start;
            if(!empty(self::$marks)) return self::$marks;
        }
    }


    In code:
    \Timer::init()
    //some code block 1
    \Timer::setMark('after block 1');
    //some code block 2
    \Timer::setMark('after block 2');
    ...
    //some code block n
    \Timer::setMark('after block n');
    //near end of code 
    \Timer::setMark('end');
    var_dump(\Timer::report());
    exit;

    2) Смотрите на блоки жрущие время, делите их до атомарных операций путем деления блоков пополам таймерами.
    3) Смотрите что там происходит - оптимизируете*. И так по кругу.
    4) Профит.

    * Оптимизация
    Запросы:
    1) Смотреть план запроса (use explain, Luke!).
    2) Расставить индексы которых явно не хватает
    3) Смотреть не вызывается ли 50 запросов в цикле? Если да - выписать пенделя писавшему, затем переписать в 1 запрос с нормальным джоином.

    Код:
    Иногда запрос сложно оптимизировать, он вытаскивает много данных, хотя эти данные не часто обновляются. Такие запросы нужно кешировать, для чего используют быстрые ин-мемори хранилища типа редис или мемкеш. В крайнем случае в файлах...
    Чаще всего код тормозит на регулярках, хотя "хороший" программист может придумать и более креативные способы погреть процессор.

    Что нужно сделать обязательно кроме тестов и как тогда лучше спрашивать с разработчиков, если они предлагают размытые предложения? Хочется понять в какую сторону копать
    Бить палкой не вариант? Тогда берите других, эти испортились. Если разработчик не знает как выявить узкие места кода - нахрена он нужен? Код написать сегодня любой чат может... Ну, на крайняк дайте им вышеприведенный вариант решения проблемы...

    PS: Кстати, сервер может банально не выдерживать наплыв сетевых соединений, пните адимна, пусть глянет логи.

    PPS:
    достаточно 2000-4000 человек, заходящих в течение 20 минут на сайт
    это равномерные 3-4 рпс, ну или пусть в пике 50 рпс, должно держать даже на несложной конфигурации... Копайте код.
    Ответ написан
    Комментировать
  • Автоматизация гостиницы — реальность или фантазия?

    @mordo445
    Все крупные франшизы имеют описанную вами автоматизацию, в той или иной степени. Вы можете снять номер в Hyatt в приложении, приехать и открыть дверь своего номера своим телефоном. Перед заселением PMS отправит горничных убрат ваш номер, а GRM включит отопление/охлаждение и розетки. Распознавание лиц не нужно, гостиница знает, кто заселяется и живет, стандартная система видеонаблюдения (обязательна от трех звезд) решает 95% проблем. Ни одна разумная франшиза не уберет ресепшн (и front office соответственно), если не собирается отказаться от большоущей доли клиентов.
    Людям не нравится разбираться с киосками, приложениями, и прочим, что может глюкнуть и отменить вашу бронь вместо добавки двух дней в проживание, людям приятно услышать сочувствие от консьержа по поводу плохо работающего кондиционера, людям нравится кричать на людей, когда им что то не нравится. В коменте распишу ваш вопрос по отельным системам.
    Ответ написан
    4 комментария
  • Создание объекта по имени класса. C++

    gavenkoa
    @gavenkoa
    В языке C++ нет рефлексии — т.е. возможности по имени получать обьекты языка в рантайме (не путать с моментом компиляции).

    Потому то в QT используется /bin/moc…
    Ответ написан
    Комментировать
  • Страницы сайта не попадают в индекс Google несколько месяцев. В чём причина?

    vpetrov
    @vpetrov
    частный SEO-специалист, textarget.ru
    Несколько исходных данных:
    • Поисковые системы - это по факту рекламные, коммерческие системы. Им неинтересно уже тратить ресурсы на сбор информации без какой-то выгоды для себя, а затраты там суровые.
    • Для оценки контента они используют вспомогательные сигналы - пользовательские, ссылочные и т.п.

    В общем, чтобы страница попала не просто в топ, а в выдачу вообще - надо эти самые сигналы обеспечить. Любыми средствами: покупка рекламы, привлечение трафика из соцсетей, поведенческие боты (да, это вроде как не одобряется), ссылки с серьёзных доноров.
    Технически - можно попробовать инструментарий типа Google Indexing API. С одной учетки можно загонять в индекс 200 страниц в сутки, процесс пары минут. У Яндекса есть аналог, но там обычно проблем технического плана нету пока.
    Основная проблема: если Гугл так и не увидит ценности страниц для индекса - выбросит, поэтому принудительная индексация не отменяет работы над созданием этих самых сигналов ценности страницы. Ну, и разумеется, надо дорабатывать контент, если есть проблемы. Чисто по заветам Елены Першиной ("делайте свой сайт лучше").
    Ответ написан
    1 комментарий
  • Какой из запросов более оптимальный?

    @alexalexes
    Использование in нужно избегать, если вы в нем не прописываете статичные значения, или известное кол-во переменных с альтернативными вариантами.
    Более живенько будет работать с обычными join:
    SELECT u.* FROM users u 
    JOIN pp1 ON u.id = pp1.id and pp1.organization = 1 
    union
    SELECT u.* FROM users u 
    JOIN pp2 ON u.id = pp2.id and pp2.organization = 1
    ORDER BY name
    LIMIT 15

    Или использовать exists в where - так вы планировщику даете понять, что можно не искать все варианты в подзапросе, а найти один, подходящий под условие.
    SELECT u.* FROM users u 
    where exists (select 1 from pp1 where u.id = pp1.id and pp1.organization = 1 )
         or exists (select 1 from pp2 where u.id = pp2.id and pp2.organization = 1 )
    ORDER BY u.name
    LIMIT 15

    PS: Наличие однотипных таблиц pp1 и pp2 говорит о наличии ошибки проектирования базы данных. От видов сущностей pp у вас не должно плодится таблицы с pp. У таблицы pp должно быть свойство вида сущности, например pp_type_id и таблица-справочник pp_type - куда вы будете добавлять новый вид сущности, а не создавать новую таблицу.
    Тогда запрос у вас будет выглядеть так:
    SELECT u.*
       FROM users u 
    where exists (select 1 
                  from pp
                 where u.id = pp.id
                   and pp.organization = 1 
                   and pp.pp_type_id in (1, 2) -- собственно, в таблице содержится все, что раньше находилось в pp1 и pp2, появилось поле, которое отличает разновидности записей
              )
    ORDER BY u.name
    LIMIT 15
    Ответ написан
    3 комментария
  • Какой дистрибутив Linux поставить на слабый ноутбук для начинающего пользователя?

    axifive
    @axifive
    Software Engineer
    32-битные вам не нужны. Этот процессор 64-битный, можно любой x86-64 дистрибутив ставить.
    Из легковесных: lubuntu, xubuntu
    Ответ написан
    Комментировать
  • В чём преимущество разработки интернет-магазина на laravel по сравнению с движками?

    solotony
    @solotony
    покоряю пик Балмера
    1) недостаток _всех_ магазинных движков - в их универсальности и (как следствие) - тормознутости.

    2) недостаток _всех_ магазинных движков - в том что они почти никогда не удовлетворяют клиента на 100% и все-равно приходится туда лезть

    3) чужой код (который ни разу не документирован) и зачастую просто кошмарен (особенно какие-нибудь модули opencart). То есть надо очень плотно влезать в изучение движка, модулей. Если вы берете "готовое решение" - это ваще пиз@#$.

    Идея что вы берете готовый магазин и он из коробки начинает работать - заманчива но на практике такого не бывает, его надо пилить и пилить. То есть более-менее адекватное решение при работе с опенкартом - весь фронт сделать заново, оставить кабинет продавца.
    Ответ написан
    Комментировать
  • Является ли замена iframe ютуб ролика на lite-youtube таким кодом оптимальной?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Цикл можно оптимизировать:
    foreach($matches[1] as $index => $video_id) {
        $replacement = '<lite-youtube videoid="' . $video_id . '" params="controls=1"></lite-youtube>';
        $content = str_replace($matches[0][$index], $replacement, $content);
    }

    А существует ли вообще matches?
    if(!empty($matches[0]))
    Если src не идет первым во фрейме, то Ваша регулярка не сработает, можно сделать так:
    '/<iframe[^>]*src=\"https:\/\/www\.youtube\.com\/embed\/([^\?"]+)(\?[^\"]*)?\"[^>]*><\/iframe>/';
    Ответ написан
    Комментировать
  • На чем пишутся современные десктопные приложения?

    Lapish72
    @Lapish72
    C# уже много лет спокойно работает на линуксе. На c# можно писать кроссплатформенный gui через:
    1) Avalonia. Наследник WPF с исправлением болячек wpf(тех же стилей) и реактивностью по умолчанию.
    2) UNO. Многообещающий проект, но лично мне не понравился. Слишком тяжеловесное решение и сложное. Avalonia проще и завелась сразу.
    3) Maui. Официальное решение от Microsoft, но не под линукс. На github пилят отдельно под него поддержку.
    4) Blazor/Electron.Net. Web app в виде десктопа.

    JavaFX. Сугубо субъективное мнение, но это тихий ужас по сравнению с тем же WPF.

    Для себя хочу изучить Dart и Flutter из-за быстрой перезагрузки(тот же wpf, а особеннно у blazor с этим проблемы) и 100% следования material guidline, т.к это все google. На Flutter ui пишется под все платформы и его практически не нужно будет подгонять.
    Ответ написан
    Комментировать
  • Какие есть альтернативы Macromedia Flash в сфере геймдев?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется что флеш был уникален тем что сочетал в себе сразу 3 вещи. И среду разработки. И язык разработки. И плагин рендеринга векторной графики в браузере.

    Дизайнер который решил заниматься флешем просто его устанавливал и получал себе возможность создавать свой креатив сразу. Если брать JS то надо искать среду в которой можно рисовать векторную графику и анимировать ее. Есть ли такая среда - я не знаю.

    В прошлом были истинно программистиские решения такие как Java Applets но они не взлетели как раз
    именно по причине того что были ориентированы на программиста а не на дизайнера. Дизайнеру
    и в страшном сне не присниться писать java-код.

    Если смотреть в сторону Unity то там вроде-бы можно сделать многое. Но там чорт-пойми какая лицензия
    и создатели Unity закручивают гайки постоянно. А если ты - "вкатыш" в эту технологию то ты как-бы
    интуитивно ищешь нечто свободное и либеральное к использованию. Желательно - opensource.
    Ответ написан
    2 комментария
  • Как повысить уровень создания проектов на чистом php?

    @koder_1
    Битрикс программист
    В 2005-2010 была мода, каждая веб-студия даже из одного программиста писала свою собственную cms, обычно на чистом php.
    По опыту написания своей цмс, могу сказать что со временем все равно это переходило в подобие своего фреймворка со своими классами, хелперами, со своими правилами в каких папках что хранить, как что называть, со своими общими функциями постраничного вывода, маршрутизации.

    Какой здесь вывод? На чистом php все равно никто не пишет, все равно создаётся свое ядро, свои наработки, которые используются от проекта к проекту. Всё равно создаётся свой фреймворк.

    Так что выбор здесь или использовать готовый фреймворк/цмс или будет собственный фреймворк внутри вашей команды разработчиков.

    На собеседовании поэтому можно так и спрашивать, а зачем писать на чистом php, если есть инструменты, которые ускоряют разработку?
    Ответ написан
    3 комментария
  • Как отправить форму на почту с помощью PHP?

    re-alter
    @re-alter
    // _ AppSec // Bug Bounty / Legal Hacking
    Привет.

    Форма размещена на хостинге timeweb.ru, доменная почта там тоже есть. Отправку через нее делаю, но все без результатов.

    У Таймвэб на тестовых аккаунтах отключена функция отправки почты по понятным причинам — это раз. Два — вы пишете про функцию mail(), а не про доменную почту. Три — сам код обработчика, мягко говоря, выглядит странно. Четыре — кириллистические домены стоит записывать в формате punycode (вот тут есть конвертер).
    Ответ написан
    4 комментария
  • Какие есть бесплатные landing page генераторы ?

    @catalogs
    Вот yr-mag.ru/yrlanding полностью бесплатный конструктор лендингов с возможностью скачать шаблон и установить на любой домен.
    Ответ написан
    Комментировать
  • Как отправлять проект заказчику?

    Griboks
    @Griboks
    Как отправлять проект заказчику?

    Как прописано в договоре. Если не прописано - на ваше усмотрение.
    Ответ написан
    3 комментария
  • Программирования учат или применяют?

    Griboks
    @Griboks
    Всё неправильно, потому что вы видео смотрели на ютубе. А надо было в тиктоке - тогда бы сразу выучились на джуна после просмотра.
    Ответ написан
    5 комментариев
  • Программирования учат или применяют?

    Newto
    @Newto
    Добрый день. Я перечитал все ответы выше, а так же комментарии к ним. Решил прокомментировать, с точки зрения своего опыта(я занимаюсь разработкой уже более 15-ти лет). Для удобства чтения я буду писать по пунктам.

    1) Зубрёжка. Каждого из нас, кто ходил в школу, заставляли зубрить таблицу умножения. И, в конце-концов, это помогало в последующем обучении математики, не правда ли? В программировании есть такие же вещи, которые называются "стандарты". Вот эти стандарты и нужно, для начала, зазубрить. А позже и вникнуть, зачем они придуманы.

    2) Методика "объяснение и практика". Вы пишете, что "при таком способе мне приходится одно и тоже глазами несколько раз пробегать чтобы запомнить". Это, с моей точки зрения, в корне не верно. Ибо то, что вам объясняют, не нужно "пробегать глазами" несколько раз, что бы запомнить. Это вообще не нужно запоминать если это не те самые "стандарты"; это нужно осмыслить и понять. После того, как к вам придёт понимание как это работает, зачем и почему это надо -- вы сможете это использовать, осмысленно, в собственном коде.

    3) Платные курсы. Курсы ныне очень разные. Кто-то просто, простите, гребёт бабло на этом всём. А кто-то преподаёт с душой, хорошо и понятно рассказывая. Поэтому платный курс -- это хорошо, но только тогда, простите за тавтологию, когда это хороший курс. Читайте отзывы о курсе, советуйтесь с теми кто его уже прошёл(в идеале) и тогда уже решайте, тот ли этот курс, что даст вам необходимые знания.

    4) ВУЗ. Более 10-ти лет назад, у меня в подчинении, в вебстудии, работал PHP джун. Он доучивался в МГТУ имени Баумана. И он не знал ничего. Совсем. Мне приходилось объяснять ему простейшие вещи, типа что значит иструкция "$a += $b;". Сам же я учился в ВУЗе малоизвестном, на факультете "прикладная информатика в экономике" и наш преподаватель информатики, на первом курсе, на вопрос что значит в коде программы на языке C++ инструкция "с++" ответил, что это "так язык называется". Однако, вскоре ко мне начали ходить сокурсники, с просьбами "а напиши программку". И происходило это потому что я сам загорелся программированием, купил книжки, установил всё что нужно было установить на компьютер и начал "творить волшебство", как это мне тогда виделось, с горящими глазами. Короче говоря не нас учат ВУЗы, а мы учимся в ВУЗах или учимся без них. Тут уж как пойдёт.

    5) Ну и последний, самый важный, с моей точки зрения, пункт. Это Интерес. Если вам интересно программирование, вам нравится разбираться, что-то делать самостоятельно, а не только тогда когда кто-то поставил задачу, то у вас все получится. И как именно это всё учить у вас вопроса, в конце концов, не возникнет. Разбирайтесь, ковыряйте, вникайте и всё будет. Единственное что -- очень желательно, что бы перед вашими глазами были хорошие примеры. Потому что я, в свое время, тоже разбирался, учился и вникал, "гладили по голове", как писали выше в комментариях к одному из ответов, меня уже мои наниматели, потому что я все делал быстро и без ошибок, т.е. работало все так, как было нужно клиентам веб-студии, собеседование в которую я тогда прошел без каких-то проблем. Но вот мой код тогда был, откровенно говоря, тем, что сейчас называется "говнокодом". Потому что некому было мне показать как писать есть хорошо, а как есть плохо.

    Подыдожу -- ключи к быстрейшему развитию в деле разработки это ваш интерес к этому делу, желание им заниматься и примеры хорошего, качественного кода перед глазами. А так же кто-то, кто сможет технически оценить вашу работу и, без агра, с конструктивом, показать и рассказать что вы сделали не так.
    Ответ написан
    25 комментариев
  • Нужно ли российским сайтам оповещать об использовании Cookies?

    LEGALAID
    @LEGALAID
    Lawyer . Legl AID
    Здравствуйте. Если на сайте имеются плагины социальных сетей, значит используются "cookies" третьей стороны, соответственно спросить разрешение посетителя необходимо, также посетителю следует дать возможность согласиться или отказаться. Так, в соответствии с законодательством Европейского Союза, посетителям из стран ЕС следует предоставлять информацию о файлах cookie, используемых на сайте. Практически любая информация, которую пользователь указывает на сайте при регистрации или заполнении формы, попадает под действие ФЗ № 152 (Россия).
    Помимо информации, которую пользователь сам указывает на сайте, Роскомнадзор стал относить к персональным данным также данные о поведении пользователя на сайте, cookie, сведения о его геопозиции и IP-адрес.
    Вопрос использования cookies должен быть предусмотрен в Политике конфиденциальности сайта. По действующему российскому законодательству, политика конфиденциальности должна быть опубликована, предупреждать явно об их использовании не нужно.
    Также особой формы уведомлений не предусмотрено. Это может быть и текст на сайте, а может быть и всплывающее окно.
    Ответ написан
    Комментировать