• Как правильно писать названия переменных, функций и тому-подобное?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    нижнее подчеркивание у функции убираем и все уже чуть получше.

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

    // calculate sum
    $sum = calculateSum(); 
    // generate report for premium users
    $sum = generateReport(new PremiumUsersSpecification());


    как-то так. Ну а что как, у меня такие правила:

    - константы - SCREAMING_SNAKE_CASE
    - названия объектов - UpperCamelCase
    - названия переменных, методов, функций и т.д. - lowerCamelCase
    - таблички/поля в бд, json, yml - snake_case
    Ответ написан
    Комментировать
  • Как исправить ошибку "Target class [UserSeeder] does not exist"?

    @lil_koi
    лучший из худших
    Замени
    use UserSeeder;
    на
    use Database\Seeders\UsersSeeder;
    + у тебя файл называется UsersSeeder.php , а имя класса UserSeeder
    Ответ написан
    3 комментария
  • Как указать apache какую версию php использовать?

    kpa6uu
    @kpa6uu
    Программист Талибана [Пыхерский Алибаба]
    sudo a2dismod php5.6 // отключаем старую версию пыхи в апаче
    sudo a2enmod php7.1 // включаем новую версию пыхи в апаче
    sudo update-alternatives --set php /usr/bin/php7.1 // выставляем версию cli
    sudo service apache2 restart
    Ответ написан
    4 комментария
  • Как сделать линию HR вертикальной?

    aliencash
    @aliencash
    Партизан
    transform: rotate(90deg);

    если хотите имеено правой ногой почесать левое ухо.
    Ответ написан
    Комментировать
  • Как разместить текст поверх картинки?

    iiiBird
    @iiiBird Куратор тега HTML
    Пока ты спишь - твой конкурент совершенствуется
    <div class="container-fluid">
      <div class="row">	
      <div class="img-wrap">		
        <img src="/img/image.jpg" class="img-responsive">
        <h1>text</h1>
     </div>
    </div>	  		
    </div>


    .img-wrap {
      position: relative;
    }
    
    .img-wrap h1 {
      position: absolute;
      left: 0;
      bottom: 0;
      width: 100%;
    }
    Ответ написан
    Комментировать
  • Как изменить место placeholder?

    thisuserhatephp
    @thisuserhatephp
    Ужастнее холокоста может быть только wordpress
    Добавить padding ?

    .input {
       padding-left: 10px;
    }
    Ответ написан
    Комментировать
  • Как сделать навигацию по сайту CSS/JS?

    sharomet
    @sharomet
    Front-End
    <nav id="menu">
    	<ul>
    		<li><a href="#home - ссылка к якорю (id) элемента">Home</a></li>
    		<li><a href="#services - ссылка к якорю (id) элемента">Services</a></li>
    	</ul>
    </nav>


    <div id="content">
    	<section id="home"> #home Элемент
    		...
    	</section>
    	<section id="services"> #services Элемент
    		...
    	</section>
    </div>


    $(document).ready(function(){
    	$("#menu").on("click","a", function (event) {
    		//отменяем стандартную обработку нажатия по ссылке
    		event.preventDefault();
    		//забираем идентификатор бока с атрибута href
    		var id  = $(this).attr('href'),
    		//узнаем высоту от начала страницы до блока на который ссылается якорь
    		top = $(id).offset().top;
    		//анимируем переход на расстояние - top за 1500 мс
    		$('body,html').animate({scrollTop: top}, 1500);
    	});
    });
    Ответ написан
    Комментировать
  • Как правильно перевести "bootstrap" на русский язык (в программировании)?

    @PolkovnikBrumel
    А вам принципиально одним словом? Скажите просто "загрузка" без "начальная". Смысл тот же. Или "инициализация".
    How to Bootstrap MySQL/MariaDB Galera Cluster - Как инициализировать (а может, сделать, построить, да какой угодно синоним) кластер на MySQL/MariaDB Galera. Наверно, так, я не спец в этой области.
    Ответ написан
    1 комментарий
  • Identifier has already been declared как исправить?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Точка с запятой должна быть, а у вас только запятая, точку забыли, забыли точку, вот здесь:

    let money,
        price,

    Ну пожалуйста, добавьте точку, не хватает точки, добавьте-добавьте-добавьте, чтобы стало так:

    let money,
        price;
    Ответ написан
    1 комментарий
  • Как получить гео-точки из видимой области на карте при изменении угла карты?

    @Holyboom Автор вопроса
    junior fullstack
    короче как я решил этот вопрос.
    тк мне не нужна супер точность я использовал такую формулу :
    //dist расстояние , в моем случает от центра карты до лев верх угла карты в метрах.
    // те это то расстояние от центра на котором мы поставим наши точки 
    // a  = угол на который наклонить точки относительно нулевого азимута.
    // lat и  long координаты точки в центре экрана 
    var p180= 180/pi;
          var dx =  p180 * ((cos(a / 180 * pi) * dist) / 6378137) ;
          var dy =  p180 * ((sin(a / 180 * pi) * dist) / 6378137) ;
          var toplat = latitude + dy;
          var toplng = longitude + dx / cos(latitude);
          var bottomlat = latitude - dy;
          var bottomlng = longitude - dx / cos(latitude);
    Ответ написан
    Комментировать
  • Как подключить css и js в blade, Laravel 7?

    @Yadalay
    Php, Mysql, Html, Css, Js/Jquery/Ajax, Laravel
    Выбирайте любой вариант.
    <script src="{{ asset("js/jsssss.js") }}"></script>
    <script src="{{ URL::asset("js/jsssss.js") }}"></script>
    <script src="/js/jsssss.js"></script>

    Аналогично и с css:
    <link rel="stylesheet" href="{{ asset("css/csssss.css") }}">
    <link rel="stylesheet" href="{{ URL::asset("css/csssss.css") }}">
    <link rel="stylesheet" href="/css/csssss.css">

    В данном примере файлы находятся в public/js и public/css. Можете любой уровень вложенности делать, но так, чтобы всё это было внутри папки public.
    Ответ написан
    1 комментарий
  • Как конвертировать из ui в py?

    @Cialkowsky Автор вопроса
    Ответ таки найден:
    pyuic5 name.ui -o name.py - запускаем из папки с файлом ui в cmd
    после чего наблюдаем скрипт в той же папке
    Ответ написан
    2 комментария
  • Кнопки в PYQT5?

    Astrohas
    @Astrohas
    Python/Django Developer
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog,
                                 QDialogButtonBox, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout,
                                 QLabel, QLineEdit, QMenu, QMenuBar, QPushButton, QSpinBox, QTextEdit,
                                 QVBoxLayout)
    
    import sys
    
    
    class Dialog(QDialog):
        def __init__(self):
            super(Dialog, self).__init__()
            global layout
            layout = QVBoxLayout()
            button = QPushButton("Click", self)
            button.move(50, 50)
            button.clicked.connect(self.sloter)
    
            button2 = QPushButton("Clicker", self)
            button2.move(50, 100)
            button2.hide()
            self.button2 = button2
            self.show()
    
        def sloter(self):
            self.button2.show()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        dialog = Dialog()
    sys.exit(dialog.exec_())

    боже спаси от говнокода
    ====
    как раз ваща проблема тут thecodeinn.blogspot.com/2013/09/dynamically-adding...
    Ответ написан
    Комментировать
  • Хочу сделать API, с чего начать?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Следует начать с проектирования API. Возмите https://swagger.io/ и набросайте все, что нужно.
    Swagger вам позволяет объединить роутинг, документацию и примеры вызовов в единое целое.
    Кроме этого он позволяет сгенерировать заглушки для разных языков программирования и фреймворков.
    В принципе вы можете найти значительное количество интеграций для разных фреймоворков.

    В целом API лучше делать с помощью фреймворков, поскольку в них уже реализованы тривиальные моменты по безопасности, аутентификации и авторизации. Вы можете использовать микрофреймворки, например тот же Slim. Вы даже можете сгенерировать роутинг для него используя генератор от Swagger.

    В REST есть 6 принципов, прекрасно изложенных в Wiki. В REST нет ничего сложного и особенного. Это просто надстройка над стандартным протоколом HTTP. Именно поэтому нет никаких особенных уроков. Изучите работу HTTP и вы поймете как работает веб в целом и REST в частности.

    По поводу отдельного сервера для API. Есть множество разных подходов. В последнее время все более актуальными становятся Serverless-приложения. Serverless архитектура идеально вписывается в REST. Но думаю для вас это пока рановато и сложновато. Слишком много для начала.

    Логичнее всего держать проект в моно-репозитарии, если он не будет большим. Если вы точно не знаете насколько большим он будет, то можно разбить проект на компоненты и использовать Composer для управления зависимостями (советую полность прочитать эту страницу от корки до корки).

    По поводу best practices есть очень хороший ресурс https://12factor.net/ru/
    Он в целом применяется для всех приложений.

    Запомните: первый блин всегда комом. Прочитайте все ресурсы, которые я привел для вас. В них много ссылок на другие, походите по ним, присмотритесь. Напишите первую версию API так, как вам кажется удобно. Постарайтесь применить практики из статей.
    Вам нужен опыт и вы его не наберетесь, пока не сделаете что-то сами. Вы можете потратить год на чтение, но останетесь на том же месте, с которого начали. А другой человек напишет на коленке API за неделю, а потом перепишет его 20 раз за год и он вам расскажет в 10 раз больше, чем то, что вы изучили за год.
    Дерзайте!
    Ответ написан
    16 комментариев
  • Как подключится к SMTP Yandex?

    @svsova Автор вопроса
    Техподдержка решила вопрос в 2 подхода. Вот вкратце.
    При анализе проблемы обнаружили, что на сервере устаревшие корневые сертификаты, в результате чего SSL соединение к почтовым серверам Яндекса завершалось ошибкой, пример:


    [root@name /]# echo | openssl s_client -servername smtp.yandex.ru -connect smtp.yandex.ru:465 2>&1 | grep 'Verify return code'
    Verify return code: 20 (unable to get local issuer certificate)
    [root@name /]#


    Добавили корневой сертификат Яндекса в список доверенных на сервере. Сейчас проблем с защищённым соединением к их почтовым серверам не наблюдаем:


    [root@name /]# echo | openssl s_client -servername smtp.yandex.ru -connect smtp.yandex.ru:465 2>&1 | grep 'Verify return code'
    Verify return code: 0 (ok)
    [root@name /]#


    У меня
    Немного изменилась ошибка.
    Было
    2020-05-25 19:59:25 SMTP ERROR: Failed to connect to server: (0)
    Стало
    2020-05-26 20:52:58 SMTP ERROR: Failed to connect to server: Connection refused (111)

    2 этап ТП:
    Произвели дополнительные настройки корневых сертификатов и указали в скрипте SMTP хост для подключения.


    Вот что вываливает тестовый скрипт при удачной отправке письма
    5ece0e271aa20037306272.jpeg

    Как это работает у меня.

    $mail->SMTPDebug = SMTP::DEBUG_SERVER;
    $mail->isSMTP();
    $mail->Host       = 'smtp.yandex.ru';
    $mail->SMTPAuth   = true;
    $mail->Username   = 'noreply@mydomain.ru';	
    $mail->Password   = 'пароль от ящика noreply@mydomain.ru';
        
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
    $mail->Port       = 465;


    Да ёщё полезный сервис чтоб проверить свои настройки https://www.smtper.net/ и понять что дело в хостинге а не в твоей голове ))

    PS вот еще можно на PHP проверить подключение
    var_dump(fsockopen("ssl://smtp.yandex.ru",465));
    
    результат 
    resource(2) of type (stream)
    
    если подключения нет пишет
    bool(false)

    Благодарю Всех кто откликнулся!!!
    Ответ написан
    Комментировать
  • Как правильно написать авторизацию/аутентификацию?

    @enibeniraba
    Очень сильно упрощенно, без ООП и паттернов):
    Авторизация:
    session_start();
    if (!empty($_SESSION['user_id']))
    	die('Вы уже авторизованы');
    	
    $user = get_user_by_login($_POST['login']);
    if (!$user)
    	die('Пользователь не найден');
    	
    if ($_POST['pass'] !== $user['pass'])
    	die('Неверный пароль');
    
    $_SESSION['user_id'] = $user['id'];
    die('Привет, '.$user['login']);

    При этом в куки пользователя запишется session_id, а в сессию user_id.

    Проверка:
    session_start();
    if (empty($_SESSION['user_id']))
    	die('Нет прав');
    
    $user = get_user_by_id($_SESSION['user_id']);
    if (!$user || !$user['active'])
    {
    	unset($_SESSION['user_id']);
    	die('Нет прав');
    }


    Выход:
    session_start();
    unset($_SESSION['user_id']);


    Если нужен доступ только с одного устройства (последнего, с которого был вход), то храним на сервере последнюю сессию пользователя и при каждом запросе:
    if ($user['session_id'] !== session_id())
    {
    	unset($_SESSION['user_id']);
    	die('Нет прав');
    }


    Если с нескольких, то делать ничего не нужно.

    При oauth авторизации через внешние сервисы в сессии и куках будет все то же самое.
    В бд добавятся 2 поля auth_provider и auth_provider_id.
    В auth_provider у тебя будет vk или fb или google... в auth_provider_id - id пользователя в vk, fb...
    Когда юзер нажимает кнопку войти через vk, ты его редиректишь на контакт. Там он что-то делает. Потом контакт его редиректит к тебе с ?code=request_code.
    Ты используя code делаешь запрос к api контакта на получение access_token.
    Получив access_token, делаешь запрос к api на получение инфы о пользователе. В этой инфе должен быть какой-нибудь уникальный id (auth_provider_id).
    Если у тебя нет пользователя с таким auth_provider_id для провайдера vk, то создаешь его либо без логина, либо генерируешь что-нибудь, без пароля.
    Если пользователь был создан или он был до этого, помещаешь в сессию user.id и считаешь пользователя авторизованным.

    PS:
    По каждой строчке ответа есть нюансы, но думаю общая картина такая.
    Естественно лучше написать класс для пользователя, чтобы использовать что-то вроде:
    $user->is_auth();
    $user->auth_by_id($user_id);
    $user->unauth();
    Ответ написан
    13 комментариев
  • Домены с WWW и без?

    @floydback
    www пережиток прошлого. Без него лучше, только потому, что короче адрес (удобнее). Других плюсов нет. Стандартная практика: перенаправлять адрес с www на адрес без него.
    Ответ написан
    Комментировать
  • Форма обратной связи на PHP с отправкой на почтуl. Как реализовать в одном файле?

    @sitecenters
    Назовём файл index.php
    Его содержимое будет выглядеть следующим образом:
    <?php
    $name = trim($_POST['name']);
    $email = trim($_POST['email']);
    $phone = trim($_POST['phone']);
    $message = trim($_POST['message']);
    
    // указываем адрес отправителя, можно указать адрес на домене Вашего сайта
    $fromMail = 'admin@yousite.ru';
    $fromName = 'yousite.ru Форма';
    
    // Сюда введите Ваш email
    $emailTo = 'youemail@gmail.com';
    $subject = 'Форма обратной связи на php';
    $subject = '=?utf-8?b?'. base64_encode($subject) .'?=';
    $headers = "Content-type: text/plain; charset=\"utf-8\"\r\n";
    $headers .= "From: ". $fromName ." <". $fromMail ."> \r\n";
    
    // тело письма
    $body = "Получено письмо с сайта testsite.ru \n Имя: $name\nТелефон: $phone \n E-mail: $email\nСообщение: $message";
    
    // сообщение будет отправлено в случае, если поле с номером телефона не пустое
    if (strlen($phone) > 0) {
        $mail = mail($emailTo, $subject, $body, $headers, '-f'. $fromMail );
    }
    
    ?>
    
    <!DOCTYPE html>
    <html>
    <head>
        <title>Форма обратной связи на PHP с отправкой на почту</title>
    </head>
    <body>
    <h2>Форма обратной связи на PHP</h2>
    <!--Данные введенные пользователем обрабатываются кодом в mail.php-->
    <form action="index.php" method="post">
        <!--Тег используется для группировки связанных элементов в форме-->
        <fieldset>
            <!--Тег задает заголовок для групповых элементов-->
            <legend>Оставьте сообщение:</legend>
            Ваше имя:
            <!--Устанавливает однострочное текстовое поле ввода:-->
            <input type="text" name="name">
            <!--Используется для полей ввода, которые должны содержать адрес электронной почты.-->
            E-mail:
            <input type="text" name="email">
            Номер телефона:
            <input type="text" name="phone">
            Сообщение:
            <!--Тег разрешает многострочный ввод текста.-->
            Текстовая область может содержать неограниченное количество символов-->
            <textarea rows="10" cols="45" name="message"></textarea>
            <!--Устанавливает кнопку для отправки данных формы в обработчик формы.-->
            <input type="submit" value="Отправить сообщение">
        </fieldset>
    </form>
    </body>
    </html>

    Замените youemail@gmail.com на Ваш e-mail, на него будут приходить письма.
    Замените yousite.ru на адрес сайта, на котором будет располагаться форма
    Ответ написан
    2 комментария