Задать вопрос
  • Почему один пдф открывается, а другой нет?

    Adamos
    @Adamos
    Проблемы, скорее всего, не в файлах, а в той информации, которую вы опустили в вопросе.
    Впрочем, есть возможность проверить PDF-файлы на возможные проблемы формата.
    Например, бесплатный VeraPdf - очень качественный инструмент.
    Правда, он требует довольно качественного оператора - сообщения о проблемах еще нужно прочитать и понять...
    Ответ написан
    Комментировать
  • Почему перемещение объявления и инициализации переменной на новую строчку кода влияет на результат работы программы?

    Adamos
    @Adamos
    Я правильно понял, если после объявления неопределенной переменной X начать объявлять или менять значения другим переменным, то X "засорится"?

    Наоборот.
    int i;
    Под переменную i выделен участок стека, лежащее в нем значение не меняется. Но в учебной программе из пары строк там, скорее всего, будет 0, и это создаст иллюзию, что все нормально. Кроме того, некоторые компиляторы в некоторых условиях инициализируют любые переменные, что еще больше запутывает ситуацию.
    int i;
    for(int n = 0; n < 10; ++n) {}

    Под переменную i выделен участок стека, лежащее в нем значение не меняется.
    Под переменную n выделен следующий участок стека, его изменение никак на i не сказывается.
    for(int n = 0; n < 10; ++n) {}
    int i;

    Под переменную n выделен участок стека, его значение к концу цикла равно 10 - и уже ненужная переменная n уничтожается, освобождая место в стеке.
    Под переменную i выделен участок стека, лежащее в нем значение не меняется. Это вполне может быть тот самый участок, который только что освободился, в нем записано 10 (С++ не выполняет ничего, что явно не указал программист - это оптимальный язык). Так что i вполне может равняться 10. Или нет.

    Подобные ситуации называются "неопределенным поведением".
    Программист на С++ обязан исключить их из своей программы.
    Ответ написан
    1 комментарий
  • Как узнать, что веб-адрес официальный?

    Adamos
    @Adamos
    "Какой-то сертификат" и у фишингового сайта будет.
    Если начать копать, внезапно окажется, что сам термин "официальный сайт" довольно размыт. У крупных IT-корпораций, например, число совершенно официальных сайтов может исчисляться десятками. А локальная мелочь может иметь только страничку во ВКонтакте...

    Задачу проще решать от противного - выделять не официальные сайты, а фишинговые.
    Собственно, Гугль это давно делает и предлагает список таковых в своем API.
    Ответ написан
    Комментировать
  • Как отправить сообщение с Linux на windows в локальной сети?

    Adamos
    @Adamos
    Берешь первый попавшийся вирус, переименовываешь его в Тебе_сообщение_лошара.exe и кидаешь в расшаренную папку.
    Дефендер делает стойку на файлик и показывает юзеру его название.
    Никаких сторонних программ ;)
    Ответ написан
    Комментировать
  • Как связать пользователей своего сайта с их аккаунтами телеграмм?

    Adamos
    @Adamos
    Сам как раз изучаю этот вопрос и буду рад, если более опытные товарищи расскажут более правильный вариант.

    Пока так: даете пользователю перейти по ссылке вида https://t.me/ИМЯ_БОТА?start=ТОКЕН.
    В токене шифруете ID пользователя и подпись (чтобы посторонний не подделал обращение).
    Он переходит по ссылке, подтверждает подписку на вашего бота, боту приходит сообщение, в котором есть и ID чата, и вот это сообщение с токеном, из которого вы вынете ID пользователя, которому надо прописать этот чат.
    Ответ написан
    9 комментариев
  • Используются ли встроенные базы данных помимо этапа разработки?

    Adamos
    @Adamos
    Популярная встраиваемая БД - SQLite, которую в продакшене используют почем зря.
    Например, браузеры и мессенджеры.
    Ответ написан
    Комментировать
  • Как генерировать PDF документы из шаблонов?

    Adamos
    @Adamos
    mPDF позволяет положить исходный PDF фоном и сверху (по координатам) налепить добавки.
    Но для произвольного PDF вы просто не будете знать, что куда положить.

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

    Adamos
    @Adamos
    Посмотрите Настройки - Настройки модулей - Веб-аналитика - Блокировать.
    Может, оно.
    Ответ написан
    Комментировать
  • Как грамотно построить дерево пользователей в Bitrix?

    Adamos
    @Adamos
    Вопрос в том, что вы хотите от этих данных, кроме рисования дерева. Поиск по ним, например.
    Так-то можно просто воткнуть пользовательское строковое поле, в котором через разделитель вписаны ID вышестоящих по дереву. Приглашенному просто вписывается это поле родителя + разделитель + его ID.
    Ответ написан
  • Конвертер файлов с Word/EXEL в PDF на своем хостинге?

    Adamos
    @Adamos
    Headless LibreOffice, совершенно обычное решение.
    Ответ написан
    Комментировать
  • В чем преимущества использования С++ в embedded?

    Adamos
    @Adamos
    C - прекрасный, универсальный, эффективный язык.
    Но.
    Если вам нужно не один раз написать, отладить и потом полвека пользоваться программой, а постоянно работать с ней и привлекать к разработке новых людей - у С серьезные проблемы с погружением в проект, слишком много подробностей сразу.
    С++, благодаря уже стандартным архитектурным решениям ООП, позволяет сделать это погружение легким и постепенным - высокоуровневая логика четко отделена от возни с байтами и можно выбрать ту степень детализации, до которой тебе нужно разобраться с кодом, вообще не влезая на нижние уровни.

    Конкретно embedded тут неважен, просто сейчас даже встройка стала достаточно богатой ресурсами, чтобы иметь возможность сместить баланс "оптимальность-гибкость" и "компактность-читаемость" вправо.
    Ответ написан
    2 комментария
  • Объясните, пожалуйста, что такое SRP (SOLID) на приведенном примере?

    Adamos
    @Adamos
    Ваш класс БД будет работать с таблицами. Зачем ему лезть в файлы? Его задача (и единственная ответственность) - прослойка между кодом, который обращается к БД, и кодом, который реализует хранение. Не нужно в него совать куски ни из того, ни из другого.
    Сделайте таблицу отдельным классом, который принимает имя файла в конструкторе. В нем уже читайте и пишите данные в файл.
    Сделайте фабрику, которая по имени файла выдает класс таблицы-файла либо создает его, проверяя наличие такого имени в системе и инкапсулируя в себе ВСЮ логику имен файлов, путей и проч. Классу БД об этом знать незачем, классу таблицы - тем более.
    В общем, делите код на то, что надо сделать вот здесь на этом уровне логики, и выкидывайте из него все, что требует опуститься на уровень ниже, в соответствующие классы. И работайте только с их методами, не вникая в реализацию. Не размазываете реализацию конкретных вещей по коду - собирайте ее в одно место, и пусть за нее отвечает только один класс.
    Ответ написан
    2 комментария
  • Какая система или CMS лучше всего подойдет для приюта для животных?

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

    Adamos
    @Adamos
    На сервере делаете очередь задач, которые должны быть напечатаны, и API, по которому локальный компьютер может обратиться, забрать задачу и отметить ее напечатанной.
    На локальной машине можно запускать буквально одну HTML-страницу в браузере, в которой JavaScript обратится к серверу, получит PDF, откроет окно печати. Или загрузит все задания, объединит их в одну PDF-ку и уже тогда откроет окно печати. Потом выведет подтверждение пользователю - отметить эти задания как выполненные или повторить печать.
    Полностью автоматизировать печать так не получится, но это и не нужно - за этой капризной скотиной-принтером все равно должен постоянно следить оператор...
    Ответ написан
    Комментировать
  • Как выбрать монитор для программиста?

    Adamos
    @Adamos
    Матовый, а не глянцевый экран.
    Цифровой, а не аналоговый интерфейс.
    IPS или VA, а не TN - не столько потому, что передача цветов, сколько потому, что в ней наверняка не будет "кислотных" нерегулируемых цветов из-за экономии на матрице и подсветке. Я предпочитаю IPS, поскольку на тормозные VA, размывающие страницу при прокрутке, уже насмотрелся.
    24" - за глаза, если у вас обычный рабочий стол. Все эти многометровые диагонали и 2k/4k - просто эхо вау-импульсов, для работы с текстом они на хрен не нужны.
    После покупки приложить к монитору хорошо освещенный лист мелованной бумаги и отрегулировать яркость максимально близко к нему. Даже если при этом монитор потеряет яркий "витринный" вид и будет казаться тусклым и скучным. Собственно, этот пункт для глаз важнее всех выше перечисленных ;)
    Ответ написан
    4 комментария
  • Копирование корневого каталога копирует и разделы диска тоже?

    Adamos
    @Adamos
    Хуже того - копирование корня приведет вас к виртуальным системам /proc, /run, /dev... кстати, /dev/random вы можете копировать очень долго %)
    Стоит разобраться в том, что именно вы хотите сбэкапить, и копировать именно это. Корень - это не "системный диск", как С: в виндах. Это начало всех путей, непосредственное обращение к которому, как правило, не требуется вовсе.
    Ответ написан
    Комментировать
  • Есть ли необходимость или очевидные плюсы перехода на linux?

    Adamos
    @Adamos
    Вопрос поставлен однобоко - это не взвешенный выбор, а нытье "мне же и так хорошо, дайте мне оправдание ничего не делать".
    Если развернуть вопрос - есть ли необходимость или очевидные плюсы оставаться на Виндах? - вполне может оказаться, что кроме привычки и "синдрома утенка" никаких аргументов и не найдется.
    При этом знание Линуксов человеку, который работает с серверами, как минимум полезно. А вот знание Виндов в этой же области не дает ничего, кроме плохих привычек...
    Ответ написан
    2 комментария
  • Как сделать автоматический деплой веб-сервиса на поддомен?

    Adamos
    @Adamos
    На коленке сделанное, но рабочее решение для OctoberCMS - это та же Ларавель, только обернутая админкой.
    Скрипт запускается с двумя аргументами - поддоменом и тем плагином, который добавляется к системе, помимо базового плагина, общего для всех клиентов.
    Проверяется, корректный ли поддомен и не занят ли он, копируется основной код Октября и нужные плагины, создается новая БД под этот конкретный поддомен, ее параметры прописываются в настройки сайта, голым SQL вносится пара поправок, чтобы не лезть за этим в админку, а все остальное выполняет запуск artisan.
    Nginx настроен так, что любая папка внутри /var/www, кроме начинающихся на подчеркивание, отображается на поддомен.
    Добавляем сайт-одностраничник, работающий с сохраненными данными по поддоменам и запускающий на бэке этот скрипт с нужными ключами - и продажник может за минуту соорудить пробник проекта для потенциального клиента, не дергая программиста вообще.
    #!/bin/bash
    SUB=$1
    PLUGIN=$2
    
    if [[ "${SUB}" =~ ^[-0-9a-z]{2,12}$ ]]; then
    	FOLDER="/var/www/${SUB}"
        if [ ! -d "${FOLDER}" ]; then
    		cp -a /var/www/_fish/October "${FOLDER}"
    		DB_PASSWORD=`date | md5sum | cut -c1-32`
    		DB_NAME=prefix_`echo "$SUB"|sed s/-/_/g`
    		DB_USER="${DB_NAME}"
    		sed -i "s/#DB_NAME#/${DB_NAME}/g;s/#DB_USER#/${DB_USER}/g;s/#DB_PASSWORD#/${DB_PASSWORD}/g" "${FOLDER}/public/config/database.php"
    		ROOT_USER=mysqladmin
    		ROOT_PASSWORD=123456
    		mysql -u${ROOT_USER} -p${ROOT_PASSWORD} -e "CREATE DATABASE ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
    		mysql -u${ROOT_USER} -p${ROOT_PASSWORD} -e "CREATE USER ${DB_USER}@localhost IDENTIFIED BY '${DB_PASSWORD}';"
    		mysql -u${ROOT_USER} -p${ROOT_PASSWORD} -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';"
    		mysql -u${ROOT_USER} -p${ROOT_PASSWORD} -e "FLUSH PRIVILEGES;"
    		cd "${FOLDER}"/public
    		php artisan october:up
    		ADMIN_PASSWORD=`echo ${DB_PASSWORD} | cut -c1-10`
    		ADMIN_HASH=`php -r "echo password_hash('${ADMIN_PASSWORD}', PASSWORD_BCRYPT);"`
    		mysql --database=${DB_NAME} -u${DB_USER} -p${DB_PASSWORD} <<-SQL
    			UPDATE \`backend_users\` SET \`password\` = '${ADMIN_HASH}' WHERE \`id\` = 1;
    			INSERT INTO \`system_parameters\` SET \`namespace\` = 'cms', \`group\` = 'theme', \`item\` = 'active', \`value\` = '\"theme\"';
    			SQL
    		/bin/cp -a /var/www/_fish/Plugins/base/public "${FOLDER}"
    		/bin/cp -a /var/www/_fish/Plugins/"${PLUGIN}"/public "${FOLDER}"
    		php artisan october:up
    	else
    		echo "Error: Subdomain already used or invalid"
    	fi
    else
        echo "Error: Invalid subdomain: " $SUB
    fi
    Ответ написан
    4 комментария
  • Как из первых N натуральных чисел составить максимальное количество пар, суммы которых являются простыми?

    Adamos
    @Adamos
    Подозреваю элементарное: под конец цикла остаются два числа, которые при сложении дают не простое, но больше их комбинировать не с чем. Задача-то переборная, а тут один проход без возвратов.
    Ответ написан