• Как выполнить нормализацию адресов?

    @granty
    Методом последовательных проходов.

    1. Делаете опорный список городов/поселков/хуторов и тп (я опирался на OKTMO из Общероссийского классификатора территорий)
    Определяетесь как распознавать преффиксы населённых пунктов: жд. ст / пос. / пгт. / д. / с. / х. (они есть в ОКТМО)

    2. Собираете опорный список правильных названий улиц по каждому городу
    Улицы надо нормализовать по единому принципу:
    Кооперативный 5-й проезд
    или
    5-й Кооперативный проезд

    определяетесь с сокращениями
    пер. -> переулок
    пр. -> проезд или проспект

    делаете первый проход с вашими паттернами, если правильно определились город и улица - заносите их (и оставшийся номер дома) в БД.

    3. Убираете правильно определившиеся из исходной базы.
    Смотрите, что осталось, правите паттерны под оставшиеся и делаете следующий проход.

    Оставшиеся в сухом остатке - под ручной разбор. Готовьтесь столкнуться с тем, что некоторых улиц/переулков нет на картах Яндекса/Гугла, а на самом деле они есть. Я такие сомнительные названия улиц помечал в БД флагом Trusted=0 чтобы разобраться с ними потом.

    Ели опираться на карты openstreet/Яндекс/Google - у них некоторые улицы называются немного по-разному:
    Улица 850 лет Москвы
    850-летия Москвы
    но карты вам всё-равно потребуются, ибо иметь адреса без привязки к гео-координатам - мало проку.

    PS: С номерами домов по-любому будет полная засада - 40/1 может быть и 40 к1 и 40 копр.1
    Ответ написан
    Комментировать
  • Как найти источник загрузки сторонней рекламы в браузерах?

    @granty
    Технически есть 3 варианта появления такой рекламы:
    1. провайдер
    Обычно вставляет на http-страницы. Реклама появляется во всех браузерах компа.
    Проверьте есть ли реклама на https-страницах, может ваш провайдер ещё и MItM SSL зафигачил.

    Проверить провайдера можно путём установки VPN - в него провайдер вмешаться не сможет.

    2. браузерные плагины и расширения
    Вставляют рекламу даже на https-страницы, и на любом VPN, так работают с уже расшифрованной странице в браузере.
    Реклама появляется только в браузере с установленным плагином.
    Особо пакостные (типа mail.ru агента) устанавливаются на уровне операционки и гадят во всех браузерах одновременно.

    3. Вирус
    Тоже может вставлять рекламу во все браузеры.

    Судя по тому, что у вас показывается приличная реклама - это проделки провайдера. Вирусы и браузерные плагины вам бы показывали что-нибудь непотребное.
    Ответ написан
    Комментировать
  • Можно ли сделать бан лист для сайта, чтобы другие пользователи не могли отправлять личные сообщения вам?

    @granty
    Я так понял, он хочет, чтобы каждый пользователь имел свой чёрный список (ban--лист). И мог редактировать его

    Гуглите "связь один ко многим". Потребуется отдельная таблица BanList с полями
    userID INT      // ID пользователя
    bannedID INT    // ID того, кого он забанил

    По
    SELECT bannedID from BanList WHERE userID='$ID'
    можно выбрать ID всех, кого забанил пользователь с userID='$ID'

    Используются ID из вашей таблицы реальных пользователей.
    Ответ написан
    Комментировать
  • Помогает ли редирект 301 при DMCA в Гугле?

    @granty
    В соседнем топике Google по DMCA удаляет заведомо несуществующие страницы автору недавно прилетела DMCA на url вида mazhor3.ru/soderzhanki-2-sezon-3-seriya. Он поставил редирект на url вида mazhor3.ru/soderzhanki-2-sezon-seriya-3.

    Насколько я увидел из детализации жалоб, на новые url тоже стали присылаться DMCA. Но отправляют их владельцы контента (через юридическую фирму). Google по своей инициативе не блокирует новые страницы, на которые сделан редирект, его же технически можно и на чужой сайт поставить...

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

    Имхо, самому Гуглу - пофиг, он следует процедуре:
    - тупо блокирует присланные в жалобе url и ждёт встречной жалобы
    - если встречной жалобы нет, все так и остаётся.
    - при наличии встречной жалобы, Гугл через 14 дней разблокирует url-ы, но возьмёт подписку, что разборки по авторскому праву будут вестись в американском суде.
    Дальше всё решает суд между правообладателем и владельцем сайта, Google остаётся в стороне.

    На Хабре есть статья как применить DMCA и не пойти по пути судебных раз..., там изложена вся процедура разборок.
    Ответ написан
    Комментировать
  • Почему выходит ошибка 404 при том что файл есть в каталоге?

    @granty
    1. Проверьте права доступа к папке acme-challenge , возможно, веб-сервер не имеет права читать их неё. Нужен '-rx' для юзера, под которым крутится веб-сервер (или его группы).

    2. В конфиге веб-сервера должен быть прописан
    Alias /.well-known/acme-challenge/ /u/www/virtual/letsencrypt/.well-known/acme-challenge/

    и
    <Directory "/ваш путь на сервере/.well-known/acme-challenge/">
        Options None
        AllowOverride None
        ForceType text/plain
        Order allow,deny
        Allow from all
        RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
    </Directory>


    3. ваш "файл без расширения" не попадает под регулярку
    RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"

    закомментируйте эту строку и перезапустите веб-сервер - файл должен показаться. Но потом раскомментируйте её обратно, это защита от "хакеров".
    Ответ написан
    6 комментариев
  • Что указывать при создание таблиы MYSQL?

    @granty
    Никита Коссман,
    1. id

    id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
    тогда id при каждой вставке новой записи будет сам увеличиваться на 1. И по нему будет сделан ключ для "быстрой выборки" записей по id

    2. username

    username VARCHAR(64)
    где 64 - максимальная длина имени, более длинные будут обрезаться. Можно уменьшить/увеличить под ваши реалии.
    Поле TEXT использовать плохо, у него размер 65535 символов на каждую запись, таблица сильно распухнет.

    3. email

    email VARCHAR(129) UNIQUE NOT NULL
    129 символов - максимально возможная длина емайл согласно текущему RFC
    UNIQUE NOT NULL будет гарантировать уникальность всех email в таблице - БД не даст записать одинаковые значения и будет кидать ошибку.

    4. password

    password VARCHAR(32)
    если вы будете хранить там md5 от пароля. Или измените 32 под размер того, что собираетесь там хранить, поскольку вам потребуется где-то хранить "соль". (256 - это максимум для VARCHAR).
    PS: Лучше вообще не хранить пароли в БД (даже солёные и шифрованные), в 21 веке они не нужны для авторизации пользователей.

    Ну, и сделать ключи/индексы для полей username и email, согласно вашей логики выборки из таблицы (по каким полям в условии WHERE будете делать выборки).
    Ответ написан
    Комментировать
  • Почему такая ситуация с координатами примерного местоположения в Google аккаунте?

    @granty
    Узнать достоверно его фактическое нахождение в моменты, когда он пользуется поиском и, соответственно указывается “примерное местоположение” в его аккаунте, нет возможности.
    Возможно, он просто отключает в аккаунте "Историю местоположений":
    spoiler
    5e461dd713d65458134421.jpeg


    Точная геолокация (по спутникам) отключена на всех телефонах. Остается только косвенная, по вышкам оператора мобильной связи.
    Определение гео-положения в Google работает не так, он опирается (в порядке убывания приоритета) на:

    1. Гео-координаты точек Wi-Fi
    Google собирает гео-координаты всех точек Wi-Fi. Достаточно один раз подключиться к ней со своего мобильного устройства с GPS модулем, или кто-то просто пройдёт рядом со своим мобильным телефоном с Android(подключаться не надо) - данные об этой точке с привязкой к гео-координатам будут отправлены в Google:
    - Wi-Fi следит за тобой
    - Google опубликовал способ скрыть точку доступа WiFi от использования её в своих сервисах геолокации.

    2. Базовые станции сотовых операторов
    На телефонах с ОС Андроид, Google имеет возможность прямого доступа к радиомодулю, замерять уровни сигнала базовых станций ОПСОСа и точно определять гео-координаты телефона даже с выключенным GPS.
    Гео-координаты этих базовых станций(БС) он регулярно получает от других Андроидов со включенным GPS, которые подключаются к этим БС.
    А вот на устройствах Apple у Гугла доступа до радиомодуля нет (там данные собирает сам Apple для своих нужд)

    3. IP-адрес
    Резервный неточный способ. Тем не менее, реклама в YouTube пока ещё таргетируется по IP-адресу

    Первые два способа позволяют точно определить ваше местоположение даже когда ваш IP-адрес изменен с помощью VPN. Поэтому на "регионозависимые" поисковые запросы Google и Яндекс(да, он тоже занимается этим) дают ответы с учётом вашего реального места положения.

    Поэтому ответить на ваш вопрос без дополнительной информации (и проведения тестов) невозможно.
    Вы можете работать через интернет МТС, но ваш сосед включил точку доступа WiFi на мобильнике со включенным GPS. Google тут же определил, что ваше устройство находится в зоне доступа "соседского" WiFi (подключаться к ней не надо, вы же видите доступные WiFi сети в радиусе действия), и точно узнал ваши гео-координаты.

    Если для получения таких координат абонент должен быть регулярно в городке, то, насколько часто?
    Не, Google показывает не "наиболее часто посещаемое", а ваше реальное местоположение (насколько точно он смог его определить) в момент фиксации события.

    PS: Большой брат постоянно следит за вами, используя для этого ваш же комп/телефон.
    Ответ написан
    2 комментария
  • Как вывести статьи в зависимости от сочетания двух select/option используя php и mysql?

    @granty
    Вы написали только страницу показа "селектов" из БД.

    1. Ваши < select id="station"> и < select id="flats"> надо вставить внутрь < form action=''> ..., сделать в ней кнопку submit и отправлять значения выбранных селектов на сервер, а он уже по ним должен выбрать статьи из БД и возвращать страницу с результатами.

    Надо добавить name='' к вашим селектам, по этим именам вы будете выбирать присланные в них значения из массивов $_POST/$_GET:
    < select id="station" name="station"> и < select id="flats" name="flats">

    2. Второй вариант - делать запрос к серверу на ajax (передавая значения выбранных селектов) и вставлять ответ от сервера на страницу.

    Поройтесь в интернете, там примеров навалом.

    PS: Потом вы столкнётесь с тем, что сначала посетитель должен выбрать < select id="station" name="station">, и в зависимости от выбранной станции ему должен динамически подгрузиться список < select id="flats" name="flats"> которые расположены рядом с этой станцией (а не все имеющиеся квартиры). Иначе теряется смысл выбора станции.
    Короче, продумывайте архитектуру, читайте про ajax/XMLHttpRequest (проще всего будет писать яваскрипты с помощью библиотеки jquery).
    Ида, примеров реализации этого в интернете навалом.
    Ответ написан
    3 комментария
  • Как создать кодировку подключения?

    @granty
    Для корректной работы клиента с сервером MySQL надо правильно установить 4 параметра кодировки подключения:

    character_set_client - указывает, в какой кодировке будут поступать данные от клиента;

    character_set_connection - указывает, в какую кодировку следует преобразовать данные полученые от клиента перед выполнением запроса;

    collation_connection - указывает, каким образом сравнивать между собой строки в запросах;

    character_set_results - указывает серверу на необходимость перекодировать результаты запроса в определенную кодировку перед выдачей их клиенту.

    Если запрос и данные в БД находятся в одинаковой кодировке, и перекодировка результата не требуется, то вместо установки character_set_client, character_set_connection, character_set_results достаточно выполнить:
    mysqli_query("SET NAMES 'utf8' ");

    или, если collation не был задан при создании БД:
    mysqli_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci' ");


    PS: В MySQL версий > 4.1 кодировку и collation можно установить на уровне БД, на уровне таблицы, и даже на уровне отдельной записи в таблице, по ссылке выше есть примеры.
    Ответ написан
  • Google начал удалять из поиска заведомо несуществующие страницы?

    @granty
    Самое интересное, что:

    1. Судя по вашей же карте сайта и кэшу Google(см запрос ниже) на сайте никогда не было url: /soderzhanki-2-sezon-3-seriya и /soderzhanki-2-sezon-2-seriya

    2. Судя по whois дата регистрации домена 2020-01-23, то есть сайт - свежак, и ещё даже не проиндексировался поисковиками. Из ~25 страницы, имеющихся на сайте:
    - 10 страниц в индексе Google
    - 3 страницы в индексе Яндексе, (одна появилась в выдаче позавчера, и две - 8 часов назад)

    3. Судя по информации с вашей же карты сайта:
    - 2 сезон 3 серия была выложена 2020-02-13, то есть только сегодня.

    Не объясните, как вы успели получить на неё DMCA?

    spoiler
    Потому, что, есть у меня сомнение, что ты, мил человек, просто спамер, и пытаешься накрутить себе посещаемость, "поведенские факторы", и получить ссылку с qna.habr.com.


    PS: Хотя жалоба DMCA болтается в выдаче по запросу вашего сайта, но она на сериал "Фитнес", и вашего сайта в ней нет. Я не поленился, и запросил из lumendatabase.org полный список url по жалобе...



    UPDATE: В комментариях топикстартер частично реабилитировался и смог предоставить правильный DMCA, соответствующий критериям заданного им вопроса, правда, на другой сайт - mazhor3.ru. Поэтому появилась возможность проверить ситуацию и ответить по существу вопроса.

    На сайте mazhor3.ru, действительно нет некоторых страниц, указанных в жалобе DMCA (пришлось повозится, ибо автор топика редиректами уже сменил структуру URL на сайте, чтобы формально выйти из-под DMCA)

    Это не ошибка Google - он не проверяет url-ы, присланные правообладателем в жалобе. Эти url могут быть вообще не в индексе Google, сайт может использовать клоакинг по IP. Поэтому Google не тратит свои ресурсы на расследования, а просто блокирует присланные url-ы, не проверяя существуют они или нет.
    Правообладатели иногда злоупотребляют этим, и присылают "url на будущие серии". Они знают, что встречную жалобу на них подавать не станут (ведь у этого вебмастера на сайте полно нелегального контента, и таких сайтов у него целая сетка).
    Ответ написан
    6 комментариев
  • Как раскодировать php input после axios post?

    @granty
    Согласно RTFM, php://input недоступен с типом содержимого enctype="multipart/form-data".

    php://input это простой файл, данные из него читаются просто:
    $buff = '';
    $fp = fopen("php://input", "rb");
    while (!feof($fp)) $buff .= fread($fp, 1024);
    fclose($fp);

    json должен присылаться с Content-type: application/json, и согласно RFC4627 он должен присылаться в Unicode (UTF-8 по умолчанию):
    JSON text SHALL be encoded in Unicode. The default encoding is UTF-8.

    Можно смотреть реальную кодировку json из заголовка, например Content-type: application/json; charset=utf-16), если присылается правильный заголовок. Можно и автодетектить кодировку по первым 4-м байтам.
    Ответ написан
    1 комментарий
  • Как и где взять список сайтов работающих на HTTP?

    @granty
    Только выпарсить всю базу зарегистрированных доменов, и просканировать их. На Хабре сканировали 20 млн доменов, есть исходники на гитхабе.

    У Google есть ограничение выдачи, удастся посмотреть только первые 300-400 сайтов, ибо далеко листать он не даёт (я даже не говорю о капче).
    Ответ написан
    Комментировать
  • Могут ли быть разные правила для .htaccess на VDS разных хостингов?

    @granty
    может ли существовать некий конфиг выше приоритетом

    Над .htaccess есть более приоритетный конфиг Апача httpd.conf - в нём регулируется что разрешено делать в .htaccess. Если конфиг Apache вам доступен - всё в вашей власти.
    Ответ написан
    Комментировать
  • Как лучше разбить заголовок H1 с точки зрения SEO?

    @granty
    С точки зрения "old school" SEO:
    - Тег < br> (и все блочные теги) разрывает пассаж (Lexical Spans в терминологии Яндекса).
    - Если два слова запроса находятся в разных пассажах, это увеличивает расстояние между ними.
    - Слова ищутся в пределах всего документа, но в зависимости от расстояния между словами, они вносят разный вклад в конечную общую релевантность.

    Раньше даже перенос слова через дефис '-' рвал пассаж - Яндекс просто не понимал этого слова. Но он правильно понимал переносы по & shy;

    spoiler
    Раньше точное вхождение запроса в пассаж проверяли по подсветке слов в кэше Яндекса, но потом Яндекс стал обманывать сеошников.
    Также, Яндекс делает переколдовку (переформулировку) реального запроса с использованием синонимов и расширением запроса (добавлением новых слов) - это сильно затрудняет анализ вхождений.
    До того, как Яндекс объявил войну сешникам, переколдовку, веса слов и их "контрастность" можно было посмотреть. Возможно "старые" сеошники знают как посмотреть вхождение запроса в пассажи, но они больше не выносят это в паблик.

    Можно, конечно, "запилить" эксперимент (он займёт пару месяцев), но проще тупо не использовать < br> в заголовке. Задействуйте CSS для этих целей.
    Ответ написан
    1 комментарий
  • Заработок на сайте с помощью контекстной рекламы?

    @granty
    Нет. В тематике "ЗАРАБОТОК В ИНТЕРНЕТЕ" вообще нет денег (рекламодателей).
    Если сайт ориентирован на аудиторию РФ - с заработком на контекстной рекламе будет уныло. У людей в РФ нет денег, они не кликают и ничего не покупают.
    Ответ написан
    Комментировать
  • Какая окупаемость сайта при его покупке в Telderi?

    @granty
    С инвестициями в сайты вы опоздали лет на 6.
    Сайт с Тедлери не окупится никогда - та ещё помойка:
    1. Продажа ссылок практически умерла. Да и владелец Миралинкса/Гогетлинкса дерёт столько, что вебмастеру ничего не остаётся (почитайте топики не Серченджинс).
    2. Показатели сайтов накручены специально для продажи.
    3. С Адсенсом/РСЯ всё уныло, если сайт ориентирован на РФ.

    PS: Любой "Телдеревский" сайт дешевле и проще создать с нуля.
    Ответ написан
    Комментировать
  • Есть ли такое понятие, как восприятие гуглом движка сайта (позитивно, негативно)?

    @granty
    Движок сайта может "мусорить" дублями страниц. Быть не оптимизирован под ПС. Навигация может неправильно распределять Page Rank по страницам. Иметь неграмотное ЧПУ.
    Это будет влиять негативно.

    Не просто так к wordpress сделано столько SEO-плагинов
    Ответ написан
    Комментировать
  • Как правильно скачать файл в формате XlSX?

    @granty
    На переполненном стеке вроде как подобную проблему решили преобразованием Excel data file в ArrayBuffer:
    var blob = new Blob([s2ab(atob(excelData))], { type: mimeFromHeader });
    
    function s2ab(s) {   // см https://github.com/SheetJS/sheetjs/blob/master/README.md
      var buf = new ArrayBuffer(s.length);
      var view = new Uint8Array(buf);
      for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
      return buf;
      }
    Попробуйте.
    Ответ написан
    Комментировать
  • Как организовать вывод рандомно?

    @granty
    Нужно вывести их в шаблоне, только чтобы каждый раз при посещении страницы, они менялись местами

    Если надо менять местами - рандом не совсем подходит. Надо садить посетителю куку, по которой будет понятно какой порядок блоков был при предыдущем посещении. Менять порядок блоков, и при выводе страницы снова садить куку уже с этим порядком блоков. Тогда блоки будут точно меняться местами.
    Ответ написан
    Комментировать
  • Как сделать чтобы при добавлении фотографии, добавлялась автоматически снизу кнопка навигации?

    @granty
    Любой слайдер это делает "из коробки". Динамически добавляете картинку, и появляется кнопка навигации на неё. Поставьте готовый слайдер и не парьтесь. Или поковыряйте коды простеньких слайдеров на предмет как это реализовано.
    Ответ написан
    Комментировать