• Как заставить SDL2_mixer воспроизводить mp3-формат?

    Wohlstand
    @Wohlstand Автор вопроса
    Ещё одна новость: с некоторых пор, поддержка SMPEG была полностью удалена, поскольку библиотека очень давно не развивалась и стухла. Затем, спилили и поддержку libMAD, поскольку она с 2004го года вообще не обновлялась и не поддерживалась, а также тот факт, что у неё лицензия GPL, и для тех, кто её использует, будут вынуждены использовать Mixer по лицензии GPL тоже. В итоге, в основу применили библиотеки libMPG123 и dlmp3 (на базе модуля MiniMP3).
  • Как можно внедрять пользовательские данные (например json-фрагмент) в видеокадры средставми ffmpeg (libav*)?

    Wohlstand
    @Wohlstand Автор вопроса
    Забыл ответить: в моём случае я вещаю видео через RTSP-каналы, и как раз да, очень хорошая идея вещать через канал субтитров: я выделил на моём RTSP-сервере ещё один канал, но уже текстовый, и через него мой специальный просмотрщик получает эти данные и на месте синхронизирует их с получаемыми видеокадрами, чтобы отобразить (в моём случае это рамки различных модулей аналитики: от детектора движения, лиц, распознаватель автономеров, и т.п.).
  • Почему jetBrains не русифицирует свои продукты?

    Wohlstand
    @Wohlstand
    Всё зависит от того, кто переводчик, и от того, как он понимает тот или иной продукт. Если переводчик сам разработчик, то здесь он передаст суть оригинала гораздо точнее, и в некоторых случаях даже может применять жаргонизмы, чтобы быть ближе к пользователям как к людям, а не говорить исключительно формальным языком, как это обычно принято в текстах любых сообщений внутри программ. По большому счёту, если отдавать на локализацию сторонним организациям, они довольно часто не смогут понять суть текста, или ещё хуже - понять его неправильно, и соответственно, создать комичную ситуацию (привет, Фаргус!). И вообще, я люблю локализованную IDE, в смысле интерфейса, а сообщения компилятора переводить по большому счёту и не обязательно. Меня лично бесит, когда люди начинают использовать англицизмы там, где это вообще не к месту (кроме случаев, когда это термин, обозначающий уникальное понятие, для которого нет аналогов, считай как имя собственное или имя нарицательное, те же ксероксы). И как я обожаю французов в их стремлении очистить язык от излишних заимствованных словечек, а квебекцы в этом знатно преуспели!
  • Как защитить от спама формы landing page без капчи?

    Wohlstand
    @Wohlstand
    Артур, не думаю, автозаполняльщик не должен вообще трогать невидимые поля, либо смотря какой. Обычно они такие, что надо ткнуть поле, лапками, и тогда подсказки чтобы всплывали под них. Можно для подстраховки на уровне жаваскриптов чистить эти поля раз в интервал. Хотя, это не нужно, надо лишь знать, что вообще эти автозаполняльщики делают, и какие именно они бывают?
  • Как заставить SDL2_mixer воспроизводить mp3-формат?

    Wohlstand
    @Wohlstand Автор вопроса
    Маленькая новость!
    Почему в SMPEG не было звука? Оказывается, там был баг, который починили лишь вот тут: https://hg.libsdl.org/SDL_mixer/rev/f04d39d0b63c
    Однако, чуть позже, поддержку либы спилили полностью, заменив на MPG123.
  • Как запитать точку доступа Wi-Fi на пассивном PoE с помощью коммутатора PoE IEEE 802.3af?

    Wohlstand
    @Wohlstand Автор вопроса
    Оказывается, есть ещё т.н. устройства-сплиттеры - они принимают питание в стандарте PoE IEEE 802.3af, а дают на выходе два кабеля - штырь питания на 12 или 9 вольт (зависит от модели), и Ethernet-кабель, нашёл такие как раз, и задача, наконец, уже дааааавно решена!
  • Есть ли способ прилинковать GPL-либу к GPL-несовместимому проекту?

    Wohlstand
    @Wohlstand Автор вопроса
    Извиняюсь за некропост, хотел бы сказать, что ещё есть такая фишка, как динамическая загрузка. Про неё я уже написал в главном посту. Т.е. превратить либу в плагин. В итоге, программа, которая использует эту либу, сможет существовать и без неё, а вот когда шареная либа подложела к программе, то она подгружается и используется. Лицензии с либами, как видно, действуют тогда, когда они становятся частью целевого продукта, когда их встраивают и без неё продукт не сможет жить. Что думаешь по этому поводу?
  • Есть ли способ прилинковать GPL-либу к GPL-несовместимому проекту?

    Wohlstand
    @Wohlstand Автор вопроса
    dimonchik2013, точно не для внутреннего, всё публично и публикуется для всеобщего пользования. Поэтому вопрос лицензий и стоит.
  • Есть ли способ прилинковать GPL-либу к GPL-несовместимому проекту?

    Wohlstand
    @Wohlstand Автор вопроса
    По написанию аналога уже гуляли мысли, тем более я весь взятый код капитально переработал, оптимизировал и стабилизировал за 4 года, но всё ещё продолжаю пытаться договориться с автором полученного кода, пока тот отвечает жудко редко... (он выпускал консольное приложение, и лицензировал его как GPL, а я взял код его приложения и выпустил либу).
  • Как запитать точку доступа Wi-Fi на пассивном PoE с помощью коммутатора PoE IEEE 802.3af?

    Wohlstand
    @Wohlstand Автор вопроса
    А что если прикупить сплиттер, который принимает на вход IEEE 802.3af, а на выход джек + LAN?
    Всё что там гуглится, даёт 12 вольт и около 1 ампера. Моя точка просит 9 вольт и 0.85 ампер, но а так уже больше года питается от трансформатора на 12 вольт и 1 ампер (который питает инжектор) и никаких проблем с точкой. Трансформатор не родной, взят у роутера Netgear "в займы", родной уже сдох давно.
  • Как запитать точку доступа Wi-Fi на пассивном PoE с помощью коммутатора PoE IEEE 802.3af?

    Wohlstand
    @Wohlstand Автор вопроса
    Moskus, так в принципе я уже и сделал, но хотелось бы окончательно избавиться от этого инжектора... Значит, пока пусть оно работает как есть, однако позже прикуплю другую точку доступа, которая точно будет работать на IEEE 802.3af.
  • Какими способами можно ускорить работу с объектами на сцене при большм удалении?

    Wohlstand
    @Wohlstand Автор вопроса
    sim3x, Так и есть: Сцена создаётся для проекта где как раз используется очень много "мелочи", почему и получается пиксель-два при большом удалении.

    По отрисовке да, в дали элементы будут лишь точками. Ибо отрисовывать есть смысл, пока элементы остаются чётко различаемыми пользователем (в т.ч. очередной кадр спрайтовой анимации).
  • MinGW или MSVC: какой компилятор выбрать для приложений на Qt под Windows?

    Wohlstand
    @Wohlstand
    За всю историю стандантов C++ лишь GCC и CLang оперативно следуют самым новым стандартам в то время как всё остальное сильно отсаёт в этом плане и MSVC не исключение. Первый, Карл, Первый MSVC который боле-менее поддерживает C++11 это 2015 (и то, иногда встречаются шняги с шаблонами, взаимно несовместимые между GCC и MSVC). Всё что старее 2015-го - лажа а не поддержка стандартов.

    MinGW как уже очевидно, это нативный порт под Windows того самого GCC.
  • Отправка писем PHP, что я делаю не так?

    Wohlstand
    @Wohlstand
    Алексей Веснин, Да, так и есть, можно использовать абсолютно любой SMTP-сервер, можно от публичных сервисов, можно от хостинга, можно свой собственный поднять.

    Вот кстати скрипты:

    smtpmail.php - заголовок, положи куда-нибудь по дальше
    <?php
    
    function mEncode($string)
    {
    	return "=?UTF-8?B?". base64_encode($string) . "?=";
    }
    
    function smtpmail($mail_to, $mail_from, $subject, $message, $headers='', $auth='reqire')
    {
    	error_reporting( E_ERROR );
        global $config;
        $SEND 	=   "Date: ".date("D, d M Y H:i:s O") . "\r\n";
        //$SEND .=   'Subject: =?'.$config['smtp_charset'].'?B?'.base64_encode($subject)."=?=\r\n";
    	$SEND 	.=	'Subject: ' . mEncode($subject) . "\r\n";
    
    	if($headers)
    	 	$SEND .= $headers."\r\n\r\n";
        else
        {
            $SEND .= "Reply-To: ".$config['smtp_username']."\r\n";
            $SEND .= "MIME-Version: 1.0\r\n";
            $SEND .= "Content-Type: text/".$config['smtp_type']."; charset=\"".$config['smtp_charset']."\"\r\n";
            $SEND .= "Content-Transfer-Encoding: 8bit\r\n";
            $SEND .= "From: \"".$config['smtp_from']."\" <".$config['smtp_username'].">\r\n";
            $SEND .= "To: $mail_to <$mail_to>\r\n";
            $SEND .= "X-Priority: 3\r\n";
        }
        $SEND .=  $message."\r\n";
    
        if(($socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 10)) == NULL )
     	{
            if($config['smtp_debug']) echo $errno."FAILED CONNECT to ".$config['smtp_host'] . " :".$errstr;
            return false;
        }
    
        if(!server_parse($socket, "220", __LINE__))
    	{
    		if($config['smtp_debug']) echo '<p>FAILED GREETING!</p>';
    		return false;
    	}
    
        fputs($socket, "EHLO " . $config['smtp_host'] . "\r\n");
        if (!server_parse($socket, "250", __LINE__))
    	{
           if ($config['smtp_debug']) echo '<p>HELO FAILED!</p>';
           fclose($socket);
           return false;
        }
    
    	if($auth=='reqire')
    	{
            fputs($socket, "AUTH LOGIN\r\n");
            if (!server_parse($socket, "334", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>LOGIN FAILED.</p>';
               fclose($socket);
               return false;
            }
            fputs($socket, base64_encode($config['smtp_username'])."\r\n");
            if (!server_parse($socket, "334", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>USERNAME FAILED!</p>';
               fclose($socket);
               return false;
            }
            fputs($socket, base64_encode($config['smtp_password'])."\r\n");
            if (!server_parse($socket, "235", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>PASSWORD FAILED</p>';
               fclose($socket);
               return false;
            }
    	}
    
        fputs($socket, "MAIL FROM: <".$mail_from.">\r\n");
        if (!server_parse($socket, "250", __LINE__)) {
           if ($config['smtp_debug']) echo '<p>FAILED MAIL FROM: </p>';
           fclose($socket);
           return false;
        }
    
        fputs($socket, "RCPT TO: <" . $mail_to . ">\r\n");
        if (!server_parse($socket, "250", __LINE__)) {
           if ($config['smtp_debug']) echo '<p>FAILED RCPT TO: </p>';
           fclose($socket);
           return false;
        }
    
        fputs($socket, "DATA\r\n");
        if (!server_parse($socket, "354", __LINE__)) {
           if ($config['smtp_debug']) echo '<p>FAILED DATA</p>';
           fclose($socket);
           return false;
        }
    
        fputs($socket, $SEND."\r\n.\r\n");
        if (!server_parse($socket, "250", __LINE__)) {
           if ($config['smtp_debug']) echo '<p>FAILED SEND</p>';
           fclose($socket);
           return false;
        }
    
        fputs($socket, "QUIT\r\n");
        fclose($socket);
        return TRUE;
    }
    
    function server_parse($socket, $response, $line = __LINE__)
    {
        global $config;
    
        while (substr($server_response, 3, 1) != ' ')
    	{
            if (!($server_response = fgets($socket, 256)))
    		{
    			if($config['smtp_debug']) echo "<p>FULL: $server_response!</p>$response<br>$line<br>";
    				return false;
            }
        }
        if (!(substr($server_response, 0, 3) == $response))
    	{
    		if($config['smtp_debug']) echo "<p>$server_response!</p>$response<br>$line<br>";
    			return false;
        }
    
    	if($config['smtp_debug']) echo $server_response."<br>";
    
        return true;
    }


    И скрипт-пример как использовать:
    <?php
    
    require_once("smtpmail.php");
    
    $subject = "My Server: сообщение от робота\n\r";
    
    $message =
    	"<b>Здравствуйте, Вам сообщение от робота:</b><br>\n\r".
    	"<i>Привет, мир!</i><br>\n\r".
    	"<b>IP с которого вызвали скрипт</b>: <a href=\"http://www.geoiptool.com/ru/?IP=".$_SERVER['REMOTE_ADDR']."\">".$_SERVER['REMOTE_ADDR']."</a><br/>\n\r".
    	"<b>AGENT</b>: ".$_SERVER['HTTP_USER_AGENT']."<br/>\n\r".
    	"<hr>\n\r". nl2br(htmlspecialchars($_POST['messg'])). "\n\r".
    	"<br>\n\r";
    
    $mail_from = "robot@myserver.ru";
    $replyfrom = "Robot of My Server";
    
    $typemsg = 'html';
    $charset = "UTF-8";
    $replyto = "Администрация";
    $mail_to = "admin@myserver.ru";
    
    $headers =
    			"Content-Type: text/" . $typemsg . 	"; charset=\"" . $charset . "\"\r\n" .
    			"From: " . 	mEncode($replyfrom) . 	" <$mail_from>\r\n".
    			"To: ". 	mEncode($replyto) . 	" <$mail_to>\r\n".
    			"MIME-Version: 1.0\r\n".
    			"X-Mailer: My Server ROBO-Sender v1.0\r\n".
    			"\r\n";
    
    $config['smtp_host'] 	= 'mail.myserver.ru';
    $config['smtp_port'] 	= '25';
    
    $config['smtp_username']= 'robot@myserver.ru';
    $config['smtp_password']= 'MySuperSecret';
    
    $config['smtp_type'] 	= $typemsg;
    $config['smtp_debug'] 	= true;
    $config['smtp_charset'] = $charset;
    $config['smtp_from'] 	= $mail_from;
    
    smtpmail($mail_to, $mail_from, $subject, $message, $headers, 'reqire');
  • Можно ли организовать резервный DHCP сервер в той же сети используя один и тот же конфиг?

    Wohlstand
    @Wohlstand Автор вопроса
    Попробую с Failover, слава богу что версия уж точно подходит
    root@localhost:~# dhcpd --version
    isc-dhcpd-4.2.5
  • Что нужно знать для создания 2D движка?

    Wohlstand
    @Wohlstand
    Sergey Lerg: Это да, SDL функционален и офигенен, однако сложен для новичка без дополнительных туториалов. Я сам когда впервые с ним столкнулся, разбирался, как с ним работать, и дополнительно разбирался с самим OpenGL. А теперь иногда нахожу баги в самом SDL и шлю фиксы разрабам (я использую hg.libsdl.org-версию)
  • Что нужно знать для создания 2D движка?

    Wohlstand
    @Wohlstand
    glfw реализует только окна и ввод, а SDL2 можно очень хорошо использовать не только для ввода/вывода: джойстиков и вывода звука (только интерфейс, микшер либо с отдельной либы, либо использовать отдельную аудиолибу), даже поддерживает устройства обратной отдачи (Haptic). Что на счёт джойстиков, то SDL2 в этом рулит, они поддерживают тонну различных моделей, даже нестандартные (например, контроллеры от XBox и других приставок), что даже в составе Qt (QtGamepad) его заюзали как бэкэнд ради джойстиков: https://doc.qt.io/qt-5/qtgamepad-index.html.
    В моём случае я использую SDL2 чтобы кроме прямого использования OpenGL я мог поддерживать и софтварный рендер (использованием SDL-ных функций) на железе где OpenGL не работает. По желанию можно использовать несколько таких либ одновременно по разным причинам. Например, я частенько использую SDL2 чисто для аудио, не юзая окна (за исключением моего движка, либо некоторых демок).
  • Как вы управляете своими серверами?

    Wohlstand
    @Wohlstand
    Валентин: это конечно хорошо, но сервер я поднял намного раньше, чем я задумался о прикручивании веб-морды, поэтому я сделал её себе сам, чтоб не рушить имеющуюся структуру. Преимущество в том, что результат легковес (только то что нужно) и большая безопасность, потому что я знаю что пишу (каждый файл и каждая строчка), фильтрую все POST/GET-параметры на SQL-инъекции, недопускаю не-админов к пышкам, что предназначены для админа, и автобаню Брутеров по IP. Ну и, никто не отменял SUexec чтобы не давать sudo apache-юзеру (без sudo веб-морда для управления юзерами и демонами невозможна, хотя и возможна, с костылём - промежуточным "файлом заданий", который читается демоном в фоне)
    P.S. Не все веб-морды гонятся за актуальностью, т.е. не все будут пытаться поддерживать совместимость со свежими версиями PHP (если те были писаны на PHP), ибо гонять старый и дырявый PHP смысла нет
  • Что в моей конфигурации postfix не так? Почему приходит спам где отправитель равен получателю?

    Wohlstand
    @Wohlstand Автор вопроса
    1) Telnet-клиент НЕ на сервере, на отдельном компьютере, я не говорил, что управляю сервером по telnet (сервер telnet вообще не установлен там), им я управляю как положено по SSH. Про telnet-клиент я имел ввиду ручное общение с SMTP-сервером по его протоколу через 25-й порт. (telnet-клиентом можно спокойно делать и HTTP-запросы, зная протокол).
    2) Суть в том, что клиент, подключённый к серверу - на отдельной машине, и что И отправитель, И получатель равны почтовым ящикам, которые зареганы на самом сервере. Я просто не вводил команду LOGIN перед тем как набирать само письмо, и письмо ушло, хотя и не должно. Должно быть, что при попытке набрать письмо (или закрыть его), почтовый сервер должен отказать (т.е. Relay denied).
    Про DKIM, DMARC и SPF как раз почитаю, должно помочь
    По поводу проверки PTR-записей, это как раз попробую сделать. На моём домене уже стоит PTR (попросил провайдела сделать), но проверку на PTR внешних доменов я пока не сделал, спасибо за совет, надо попробовать