• Почему в Qt отсутствует подходящий комплект?

    Столкнулся сейчас с данной проблемой, но только под Windows. Изначально я установил только Qt Creator. Но Qt Creator - это только IDE. Можно не устанавливать Qt Creator отдельно, а сразу запустить большой инсталлятор всех компонентов Qt и уже через него установить все необходимые компоненты, в том числе и Qt Creator.

    5ab795d0678db148651622.png

    Т.к. у меня уже установлена Visual Studio 2013, то вместо Qt/Qt 5.10.1/MinGW 5.3.0 32 bit и Qt/Tools/MinGW 5.3.0 я сначала попробовал установить Qt/Qt 5.10.1/MSVC 2013 64-bit. Такой вариант тоже работает, но в появившемся комплекте отсутствовал отладчик. Поэтому я остановил свой выбор на MinGW, т.к. в нём есть отладчик GDB.

    5ab797e2d95ee477259313.png
    Ответ написан
    Комментировать
  • Как сбилдить релиз версию приложения на Qt?

    1) идёте в папку с собранным *.exe файлом.
    2) копируете путь не к файлу, а к папке, где находится этот файл из п.1
    3) запускаете "командную строку Qt (с нужным вам компилятором.. там их может быть несколько)" через меню "Пуск".
    4) с помощью команды cd /d <путь из п.2> в открывшейся консоли переходите в папку с собранным *.exe
    5) выполняете windeployqt.exe .
    6) готово. Все нужные *.dll скопируются в папку с исполняемым файлом.
    Ответ написан
    1 комментарий
  • Бесплатная IDE для C++?

    GavriKos
    @GavriKos
    Мухи отдельно - котлеты отдельно.

    В компилятор НИКТО не встраивает редактор кода, компоненты и формы.
    Да и вообще - большинство компиляторов - бесплатные.
    А вот среды разработки - которые как раз и содержат все от 4 до 6 пункта - могут быть платные, да.

    По факту:
    вам нужен Qt. Это фремворк. Прожевывается многими компиляторами. И легко дружит с QtCreator в плане создания форм.
    Ответ написан
    Комментировать
  • Бесплатная IDE для C++?

    flygrounder
    @flygrounder
    Python/Django
    QT Creator - менее громоздкая чем студия, да и есть не только под Windows(вдруг систему сменить захотите)

    P.S.
    Вопрос действительно не корректен: вы говорите про IDE, а не про компилятор
    Ответ написан
    Комментировать
  • Не работают события в MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Что показывают SHOW EVENTS и SHOW PROCESSLIST
    Скорее всего событие отработало один раз и дропнулось, у вас указано ON COMPLETION NOT PRESERVE
    Ответ написан
    4 комментария
  • Почему греется ноутбук Acer?

    xtala
    @xtala
    Постигает Дзен
    1 обычный пластырь
    2 никаким. т.к. в отличие от машиных механизмов на местных подшипниках нет пыльников, то есть пыль при смешении с маслом даст знатную кашу которая приведет к замедлению оборотов вентилятора и как следствие повышенный нагрев и износ электромотора охлаждения.
    3. Чистить площадь кристала обычной резинкой. Вполне подходит кохинор из ларька
    4. Чем меньше тем лучше. Ровным тонким слоем.
    5 Разницы особо нет. Алсил какой нибудь.
    6. Быть внимательней. На 9.15 человек говорит, что это пластырь.
    Ответ написан
    1 комментарий
  • Как правильнее удалять устаревшие сессий из базы данных?

    Разве в mysql нет функционала периодического запуска кода по расписанию? Вроде Event Scheduler
    Ответ написан
    2 комментария
  • Как в PHP вырезать всё лишнее из тега?

    pOmelchenko
    @pOmelchenko
    php-developer
    Не вырезал, а пересобрал =)

    <?php
    
    $HTMLCode = <<< HTML
    <div onclick="alert('Hello')" style="color:#ff0000;">текст1</div>
    <div onclick="alert('Hello')">текст2</div>
    <div style="color:#ff0000;" onclick="alert('Hello')">текст3</div>
    <div style="color:#ff0000;">текст4</div>
    HTML;
    
    $HTMLCode = mb_convert_encoding($HTMLCode, 'HTML-ENTITIES', "UTF-8");
    
    $dom = new DomDocument();
    $dom->loadHTML( $HTMLCode );
    $xpath = new DomXPath( $dom );
    
    $_res = $xpath->query(".//div");
    
    foreach($_res as $div){
    	$style = $div->getAttribute('style') ? ' style="'.$div->getAttribute('style').'"' : '';
        echo '<div'.$style.'>'.$div->textContent.'</div>';
    }
    Ответ написан
    1 комментарий
  • Как выгнать ботов из анонимного чата?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Все четко сказал landergate!
    Я добавлю к его ответу:
    1. Сделайте кнопку "спам" (значок + диалоговое окно для подтверждения) напротив каждого сообщения юзера в чате.
    2. Если юзер получил 50% или более голосов от других пользователей (для подсчета процентов, фиксируем кол-во пользователей в чате на момент входа юзера в чат-комнату), что он спамер - заносим этот IP в бан-лист на 1 час и фиксируем IP и кол-во штрафов в базе.
    3. Если снова получил этот же IP: бан на день, затем (при следующем штрафе) - на месяц, на 3, на пол-года и перманентный.
    Ответ написан
    Комментировать
  • Как выгнать ботов из анонимного чата?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    запретить постинг через прокси. 2ch к примеру так работает. через прокси и всякие frigate расширения нельзя отправлять сообщения
    Ответ написан
    Комментировать
  • Как выгнать ботов из анонимного чата?

    @LiguidCool
    Ничего лучше капчей (при первом входе и далее) и регистрации (легко обходится).
    Самое эффективное ИМХО смс авторизация, но это риск остаться без пользователей.
    Ответ написан
    Комментировать
  • Как выгнать ботов из анонимного чата?

    webinar
    @webinar Куратор тега PHP
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Сделайте как на тостере, дайте возможность пользователям самим модерировать. Например кнопка спам. Получили 3 сообщения о спаме - удалили

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

    landergate
    @landergate
    IT-шный jack-of-all-trades
    Если паттерны поведения предсказуемы (интервалы, фразы, наличие ссылок) - автоматически блокировать по обнаружении, но вы это уже отчасти делаете.

    Если паттерны непредсказуемы, вариантов немного:
    • Ручная модерация. Добавить больше операторов в чат среди постояльцев.
    • Трекить источник подключения. Возможно, что боты запускаются с одних сетей. Можно закрыть им доступ к чату.
    • Минимальная капча на вход. Не обязательно делать её сверх-сложной.
    • Заблокировать подключение хостам со списков DNSBL и Tor-exit нод.
    Ответ написан
    Комментировать
  • Как вставить переменную внутрь массива в PHP?

    @Maxval Автор вопроса
    первый файл, который добавляет в amoCRM клиента и отправляет смску мне, тут все шоколадно работает. Форма работает с этим файлом первой.
    После работы этого файла (в конце инклудим ms3.php) и именно в нем уже должен идти процесс отправки на почту письма с аттачем.

    <?
    //Авторизация
    $user=array(
        'USER_LOGIN'=>'адрес_моей_почты', #Ваш логин (электронная почта)
        'USER_HASH'=>'тут_код_доступа' #Хэш для доступа к API (смотрите в профиле пользователя)
    );
    $subdomain='поддомен_мой'; #Наш аккаунт - поддомен
    
    #Формируем ссылку для запроса
    $link='https://'.$subdomain.'.amocrm.ru/private/api/auth.php?type=json';
    
    $curl=curl_init(); #Сохраняем дескриптор сеанса cURL
    #Устанавливаем необходимые опции для сеанса cURL
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
    curl_setopt($curl,CURLOPT_URL,$link);
    curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
    curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($user));
    curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
    curl_setopt($curl,CURLOPT_HEADER,false);
    curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
    curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
    
    $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
    $code=curl_getinfo($curl,CURLINFO_HTTP_CODE); #Получим HTTP-код ответа сервера
    curl_close($curl); #Завершаем сеанс cURL
    
    $code=(int)$code;
    $errors=array(
        301=>'Moved permanently',
        400=>'Bad request',
        401=>'Unauthorized',
        403=>'Forbidden',
        404=>'Not found',
        500=>'Internal server error',
        502=>'Bad gateway',
        503=>'Service unavailable'
    );
    
    $Response=json_decode($out,true);
    $Response=$Response['response'];
    
    // создание сделки
    $leads['request']['leads']['add']=array(
        array(
            'name'=>'Новая сделка через форму',
            'status_id'=>111, // Статус ID сделки, посомтреть их можно в запустить их custom_fields.php
            'responsible_user_id'=>222, // менеджер сделки, посомтреть их можно в запустить их custom_fields.php
            'custom_fields'=>array(
                //
            )
        )
    );
    
    $link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/leads/set';
    $curl=curl_init(); #Сохраняем дескриптор сеанса cURL
    #Устанавливаем необходимые опции для сеанса cURL
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
    curl_setopt($curl,CURLOPT_URL,$link);
    curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
    curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($leads));
    curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
    curl_setopt($curl,CURLOPT_HEADER,false);
    curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
    curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
    
    $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
    $code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
    
    $code=(int)$code;
    $errors=array(
        301=>'Moved permanently',
        400=>'Bad request',
        401=>'Unauthorized',
        403=>'Forbidden',
        404=>'Not found',
        500=>'Internal server error',
        502=>'Bad gateway',
        503=>'Service unavailable'
    );
    try
    {
        #Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке
        if($code!=200 && $code!=204)
            throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undescribed error',$code);
    }
    catch(Exception $E)
    {
        die('error: '.$E->getMessage().PHP_EOL.'code error: '.$E->getCode());
    }
    
    /**
     * Данные получаем в формате JSON, поэтому, для получения читаемых данных,
     * нам придётся перевести ответ в формат, понятный PHP
     */
    $Response=json_decode($out,true);
    $Response=$Response['response']['leads']['add'];
    
    foreach($Response as $v)
        if(is_array($v))
            $output.=$v['id'].PHP_EOL;
    //записываем id новой сделки
    $lead_id = $output;
    
    // создаем задачу
    $tasks['request']['tasks']['add']=array(
        #Привязываем к сделке
        array(
            'element_id'=>$lead_id, #ID сделки
            'element_type'=>2, #Показываем, что это - сделка, а не контакт
            'task_type'=>1, #Звонок
            'text'=>'Связаться с клиентом',
            'responsible_user_id'=>192582, // Ответственный за выполнение
            'complete_till'=> time() + (30 * 60) //время завершения в UNIX формате
        ),
    );
    
    $link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/tasks/set';
    
    $curl=curl_init(); #Сохраняем дескриптор сеанса cURL
    #Устанавливаем необходимые опции для сеанса cURL
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
    curl_setopt($curl,CURLOPT_URL,$link);
    curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
    curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($tasks));
    curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
    curl_setopt($curl,CURLOPT_HEADER,false);
    curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
    curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
    
    $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
    $code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
    
    
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    
    $contacts['request']['contacts']['add']=array(
        array(
            'name'=> 'Новый контакт '.$email . " через форму", // Сюда вписывать имя клиента
            'linked_leads_id'=>array( #Список с айдишниками сделок контакта
                $lead_id // Наша свежая сделка
            ),
            'custom_fields'=>array(
                array(
                    #Телефоны
                    'id'=>833436, #Уникальный индентификатор заполняемого дополнительного поля
                    'values'=>array(
                        array(
                            'value'=> $phone,
                            'enum'=>'MOB' #Мобильный
                        )
                    )
                ),
                array(
                    #E-mails
                    'id'=>833438,
                    'values'=>array(
                        array(
                            'value'=> $email,
                            'enum'=>'WORK', #Рабочий
                        )
                    )
                )
            )
        )
    );
    
    $link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/contacts/set';
    
    $curl=curl_init(); #Сохраняем дескриптор сеанса cURL
    #Устанавливаем необходимые опции для сеанса cURL
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
    curl_setopt($curl,CURLOPT_URL,$link);
    curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
    curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($contacts));
    curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
    curl_setopt($curl,CURLOPT_HEADER,false);
    curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
    curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
    
    $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
    $code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
    
    $code=(int)$code;
    $errors=array(
        301=>'Moved permanently',
        400=>'Bad request',
        401=>'Unauthorized',
        403=>'Forbidden',
        404=>'Not found',
        500=>'Internal server error',
        502=>'Bad gateway',
        503=>'Service unavailable'
    );
    try
    {
        #Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке
        if($code!=200 && $code!=204)
            throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undescribed error',$code);
    }
    catch(Exception $E)
    {
        die('Ошибка: '.$E->getMessage().PHP_EOL.'Код ошибки: '.$E->getCode());
    }
    
    /**
     * Данные получаем в формате JSON, поэтому, для получения читаемых данных,
     * нам придётся перевести ответ в формат, понятный PHP
     */
    $Response=json_decode($out,true);
    $Response=$Response['response']['contacts']['add'];
    
    
    foreach($Response as $v)
        if(is_array($v))
            $output.=$v['id'].PHP_EOL;
            
    	
    	
    	
    
        
       include 'ms3.php';
        
     $body=file_get_contents("http://sms.ru/sms/send?api_id=мой_апи_ключ&to=мой_номер_телефона&text=".urlencode(iconv("utf-8","utf-8","Заявка с сайта,$email,$phone")));
     
     
        
         ?>
    Ответ написан
    1 комментарий