• Как узнать ближайшую станцию метро к определённому адресу?

    @sidorchik Автор вопроса
    $address = 'ул. Габричевского, 8';
    echo findMetro($address); // Щукинская
    
    function findMetro($address) {
        // Определение координат заданного адреса
        $address = str_replace(' ', '%20', $address);
        $contentGeocoder = file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?key=QWERTY1234&address=Москва,%20$address"); // ключ получил на console.developers.google.com/apis
        $jsonGeocoder = json_decode($contentGeocoder, true);
        $latitudeFrom = $jsonGeocoder["results"][0]["geometry"]["location"]["lat"];
        $longitudeFrom = $jsonGeocoder["results"][0]["geometry"]["location"]["lng"];
    
        // Подключение к базе данных с таблицей метро
        include '../php/db_connection.php';
        $link = mysqli_connect($host, $user, $password, $database) or die("Не удалось подключиться к базе данных");
    
        // Определение ближайшего метро путём перебора
        $min = 10000000;
        for($metroI = 1; $metroI <= 250; $metroI++) {
            // Запрос на выборку для определения координат и названия станции метро
            $result = mysqli_query($link, "SELECT name, latitude, longitude FROM metro WHERE id = $metroI");
            $row = mysqli_fetch_assoc($result);
    
            // Вычисление расстояния между заданным адресом и станцией метро по формуле Хаверсина
            $latFrom = deg2rad($latitudeFrom);
            $lonFrom = deg2rad($longitudeFrom);
            $latTo = deg2rad($row[latitude]);
            $lonTo = deg2rad($row[longitude]);
            $latDelta = $latTo - $latFrom;
            $lonDelta = $lonTo - $lonFrom;
            $angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) + cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
            $distance = $angle * 6371000;
    
            // Если расстояние до станции метро меньше, чем минимальное найденное,— назначаем его минимальным, запоминаем название
            if($distance < $min) {
                $min = $distance;
                $closestMetro = $row[name];
            }
        }
        return $closestMetro;
    }

    Таблица БД с метро: название станции, координаты по широте, долготе
    Ответ написан
    Комментировать
  • Как обернуть лейаут с помощью Render Props?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    const Example = ({ children }) => <div className="some_selector">{children}</div>;
    Ответ написан
    Комментировать
  • Чем отличается forceUpdate от setState?

    @dollaween
    forceUpdate может понадобиться при работе с localStorage, данные которого не имеет смысл дублировать в state (если эти данные только отрисовываются, а не отправляются на сервер, конечно)
    Ответ написан
    Комментировать
  • Как эффективно выучить PHP?

    @0x131315
    ИМХО ключевое в php, когда имеешь базу - это не сам язык, а понимание того, какую роль он выполняет, и какое место в архитектуре эта роль занимает.
    Что касается php, то это в первую очередь скриптовый язык, созданный специально для связи Фронта с Беком, т.е. основная его функция - предоставление доступа к БД сервиса для html и js-кода, работающих на фронте.

    На сегодняшний день php решает следующие задачи:
    -доступ к БД
    -вспомогательные вычисления
    -шаблонизация
    -связь с внешними сервисами
    -предварительное кеширование

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

    ООП стоит учить и использовать сразу, благо основные идеи ООП просты и доступны каждому. А вот всякие паттерны и хитрости лучше отложить - постигнешь их по мере надобности.
    Все, что тебя отделяет от ООП - это автозагрузка, освой composer, и написание кода станет лёгким и приятным занятием.

    Очень важно иметь хоть какую-то базу по алгоритмам и структурам данных. Если её нет - её следует подтянуть. Без этого будешь строить велосипеды на ровном месте, и запугаешь народ своим кодом.

    Очень важно изучить php.net
    Не обязательно штудировать всё, но стоит как минимум взглянуть что там вообще есть.
    Этот сайт - нечто вроде документации по STDLIB языка, в ходе практики ты к нему будешь возвращаться ещё тысячи раз.
    Многие задачи, которые ты планируешь решить велосипедом, уже решены за тебя, и входят в язык - нужно просто знать про то, что язык умеет из коробки, а что нет.

    Очень важно поработать с фреймворками и репозиторием composer: большинство из задач, которые встанут перед тобой, уже кем-то решены, и существует либо готовая библиотека, либо как минимум публичный интерфейс, который ты можешь реализовать, чтобы не натворить архитектурных ошибок.
    Посмотри на symfony, почитай стандарты PSR.
    Большинство задач решается декомпозицией алгоритма, и сборкой приложения из готовых библиотек или PSR-интерфейсов. Остаётся только это всё сконфигурировать, и дописать немного кода для склейки всего этого в единое приложение.

    Т.к. php - это прокладка между html и БД, обязательно нужны основы html, SQL, и практика по развертыванию, проектированию, и управлению какой-либо СУБД.
    Наиболее популярная и простая СУБД - MySQL, на ней и сконцентрируйся. Намного позже, когда будет опыт, обязательно попробуй postgres - это намного более совершенная СУБД, но она сложнее MySQL, и новичкам с неё начинать не стоит.
    Особо углубляться в sql не стоит, т.к. в чистом виде с ним будешь работать мало, по большей части взаимодействие с БД сведётся к установке ORM-библиотеки, например doctrine2. Вот ORM стоит изучить плотнее, они предоставят тебе простой и приятный доступ к данным в БД, и обеспечат лёгкие миграции состояния БД.

    Что касается курсов - они очень ценные, особенно для новичка. Быстро вводят в строй.
    Но на практике все это выливается в год-два кодинга ради кодинга, что не особо эффективно.
    Обязательно нужна практика, желательно боевая.
    Советую либо посетить фриланс-биржу, и начать выполнять чьи-то хотелки, либо попробовать устроится, можно на удаленку, в какое-нибудь агентство, которое клепает сайты, и начать выполнять самые простые боевые задачи.
    Такая практика прокачает тебя намного быстрее, и не позволит забыть то, что выучил. Но без курсов она будет однонаправленна: в реальной работе разработчики используют лишь малую часть из того, что может php, но знать нужно все - это сделает тебя профессионалом.
    Поэтому нужно комбинировать практику с курсами.

    Очень сильно поможет хороший редактор кода, например phpstorm - он будет подсвечивать твои ошибки, предоставит интерактивные подсказки по коду, и позволит быстро инспектировать код большого проекта, параллельно работая с ФС сервера, БД и docker-контейнерами. Серьезно ускоряет и упрощает работу.
    Ответ написан
    4 комментария
  • Как удалить определённый SSH-ключ?

    @pfg21
    ex-турист
    в данном случае вообще нет ключей авторизации пользователей
    они лежат в файле ~/.ssh/authorized_keys (или по пути указанному в параметре AuthorizedKeysFile файла /etc/ssh/sshd_config)
    для ентого юзера такого файла нет - значит нет и ключей ssh. т.е. удаленный вход под ним возможен только по паролю.

    имеющийся known_hosts используется клиентом ssh для складирования ключей посещенных серверов. т.е. ваапче не для ентого.
    Ответ написан
    Комментировать
  • Что такое «IE8-?

    Zoominger
    @Zoominger
    System Integrator
    Да.
    Контекст вы не указали, но, скорее всего, таки да.
    Ответ написан
    2 комментария
  • Как защитить AJAX-запрос?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Как защититься от этого?

    Варианта 2:
    1. Либо Вы делаете недоступным контент
    2. Либо - запрос.
    (PS: что одно и то же...)
    Ответ написан
    Комментировать
  • Как защитить AJAX-запрос?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Обычно происходит так:
    1) У админа есть пароль. У пользователя, кстати, тоже должен быть.
    2) Админ вводит пароль на сайте и в замен получает токен (т.е. какой-то ключ). Получить он может его как угодно - напрямую через POST-запрос из формы, либо через ajax. Но суть такая, что в запросе пароль, а в ответе токен (ключ).
    3) Далее этот токен админ использует везде на сайте для доступа к своим админстким функциям. То есть в каждом ajax-запросе присутствует этот токен. Он становится частью сессии. Вообще в php даже есть свои сессии со своим ключом, так что их тоже можно использовать.
    4) Через какое-то время, либо после нажатия кнопки "выход", токен устаревает и больше не работает (нужно снова вводить пароль).

    Так что ответ на вопрос: нужно посылать токен в каждом ajax-запросе, это и будет защита.
    Ответ написан
    6 комментариев
  • Как изменяется номер хэша файла при изменении файла?

    longclaps
    @longclaps
    До последнего времени хэш файла вычислялся по алгоритму SHA-1,
    в этом году должны перейти на SHA-256.
    пруф
    Можете считать, что номер хэша файла при изменении файла изменяется непредсказуемо.
    Ответ написан
    5 комментариев