• Через что отправлять запросы с сервера для печати этикетки?

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

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

    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
    Подозреваю элементарное: под конец цикла остаются два числа, которые при сложении дают не простое, но больше их комбинировать не с чем. Задача-то переборная, а тут один проход без возвратов.
    Ответ написан
  • Какой дистрибутив Linux выбрать для FullStack .NET Develop?

    Adamos
    @Adamos
    На машине какого цвета лучше ездить на работу летчиком?

    Вроде бы довольно очевидно, что под ковыряние в ДотНетах специально не приспосабливался никакой Линукс.
    И столь же очевидно, что поставить сервер БД и запускать Java-IDE - можно на любом Линуксе.
    Критерии выбора перпендикулярны этому самому выбору.
    Ответ написан
    Комментировать
  • Дистрибутив Linux с поддержкой Windows-программ?

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

    Если после этого этапа все-таки окажется, что для работы необходимы именно программы, выполняющие определенные функции - стоит рассмотреть нативные альтернативы.

    И только если выяснится, что имеет место вендор-лок и разрушить его невозможно - тогда хвататься за Wine.

    Ну, и думать, что вы будете делать, когда занавес станет сначала золотым, а потом железным. Без обновлений, без совместимости с новыми форматами и стандартами, без возможности юридически "по-белому" работать, наконец...
    Впрочем, тогда деградирует вся IT-отрасль, разумеется, и в этом хроноклазме отставание будет менее заметным.
    Ответ написан
    Комментировать
  • Как хранить логи приложения на php?

    Adamos
    @Adamos
    Альтернатива БД, если лог именно и только для разработчика.
    class Logger
    {
    	private $logfile;
    	private function __construct()
    	{}
    	public function __destruct()
    	{
    		$this->log('');
    		fclose($this->logfile);
    	}
    	public function log($string)
    	{
    		fwrite($this->logfile, $string . "\n");
    		fflush($this->logfile);
    	}
        static public function getCommon($tag)
        {
            $logDir = base_path() . '/../logs/' . $tag; // это в Ларавели, без нее $_SERVER['DOCUMENT_ROOT'] или абсолютный путь (если должно работать в консоли/кроне)
            if(!file_exists($logDir)) {
                mkdir($logDir);
            }
            $logger = new Logger();
            $logger->logfile = fopen($logDir . '/' . date('Y-m-d') . '.log', 'at');
            $logger->log(date('Y-m-d H:i:s') . "\n");
            return $logger;
        }
    }

    Выше корня проекта - папка logs, в ней по подпапкам (определяется в конструкторе логгера) разложены логи того, что происходит. Имя файла сегодняшнего лога - текущая дата, так что легко настраивается чистка по крону и элементарно ищется информация за нужный день.
    Да, это колхоз, нестандарт и животноводство. Но пользоваться этим удобно. Во всяком случае, мне.
    Ответ написан
    2 комментария
  • Где хранить бэкапы сайта?

    Adamos
    @Adamos
    Колхозно-дешманский вариант.
    Берется банальный офисный системник, ставится у клиента на бесперебойник, на нем Линь с AnyDesk и бэкап по крону - любой, насколько фантазии хватит. Места - завались, гибкость - абсолютная, доступность - достаточная.
    Ответ написан
    Комментировать
  • Как достать с pdf файла (с ссылки на pdf)?

    Adamos
    @Adamos
    Фокус в том, что в PDF никакой таблицы нет.
    Там тупо строчки по координатам, причем по координатам не центра ячейки, а начала строчки.
    И любой перенос, а также смена шрифта (выделение полужирным, например) делит текст на несколько строчек.
    Поэтому просто парсить текст не прокатит - несколько строчек развалятся, а пустые ячейки не определятся вовсе, и куда относится следующий после них текст - определить не получится.
    На коленке можно попытаться сконвертировать PDF в более текстовый формат - EPS или SVG - и пытаться разобрать его, но это будет хоть и решаемой, но весьма трудоемкой задачей.
    Предложенная выше библиотека, видимо, разбирает сам формат и пытается угадать по расположению строчек, как их собрать обратно в таблицу.
    Других возможностей и каких-то простых решений можно не искать.

    Кроме, разве что, возможности договориться получать там, где это расписание делается, не PDF, а DOCX/ODT, из которого его выгоняют ;)
    Ответ написан
  • Почему мой код не проходит по времени?

    Adamos
    @Adamos
    А почему, собственно, 11? Или вам сумму КОЛИЧЕСТВ делителей надо? Судя по коду, да.
    Тогда на хрена, собственно, вообще заполнять сет? Что мешает заменить эти вставки простым kol++?

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

    Adamos
    @Adamos
    Вообще-то "от кого" - это ваше no-reply@вашсайт.рф.
    Отправить почту ОТ того адреса, который указал клиент, вы не можете.

    Можно попробовать обойтись админкой, если это стандартная форма Битрикса, а не самопал от присосавшихся.
    Заходите в Сервис - Настройка форм - Вопросы вашей формы.
    Смотрите Символьный идентификатор того вопроса, где указывается e-mail. Например, new_field_4920.
    Настройки - Настройки продукта - Почтовые шаблоны - шаблон, который отправляется по этой форме.
    Вставляете в его текст этот самый идентификатор в решетках: #new_field_4920#.
    Должен подставиться тот текст, который был отправлен в этом поле.
    Ответ написан
    21 комментарий
  • Почему не отправляются уведомления о новых заказах 1С Битрикс?

    Adamos
    @Adamos
    Ну, у вас заказ от незарегистрированного клиента, похоже, сделан как регистрация нового клиента (и ему отправляется вот это самое письмо, чтобы он задал себе пароль), а потом уже собственно заказ.
    Насчет настроек покопайтесь в админке Настройки - Настройки продукта - Почтовые и СМС события. Мыло продажников там можно добавить, во всяком случае.
    Ответ написан
    Комментировать
  • В какой среде разработки приложений для iOS, android, windows, linux лучше всего вести разработку?

    Adamos
    @Adamos
    Вопрос нелеп уже хотя бы потому, что есть разные приложения.
    Одно можно накропать на джаваскрипте, потому что это тупо интерфейс к серверу разработчика.
    Другому требуется игровой движок на низкоуровневом языке.
    Третьему - глубокий доступ к системе, который все равно придется прописывать для каждой системы отдельно...
    Ответ написан
    2 комментария
  • Как повысить уровень создания проектов на чистом php?

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

    Adamos
    @Adamos
    Например, дербанить документ по одной страничке (консольный pdfjam) и выдавать так пользователю.
    Скорее всего, ценность документа ниже времени, которое придется потратить на его обратную сборку ;)
    Ответ написан
    Комментировать
  • Какие есть нормальные бесплатные курсы для студентов?

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

    Adamos
    @Adamos
    Ответ написан
    Комментировать
  • Как перевести изображения на разные языки?

    Adamos
    @Adamos
    То есть исходники есть как в JPG/PNG так и в формате CDR

    "То есть" ничего не объясняет. Это наложение текста сделано в Кореле или просто какой-то чудак импортировал в него фотки?
    Во втором случае это совершенно бессмысленная информация.
    В первом - с проприетарным кореловским форматом, насколько мне известно, возился только sk1. Но вроде бы достаточно успешно возился, вплоть до того, что на его базе сделаны такие, например, инструменты: https://convertio.co/ru/cdr-sk1/
    Если в файлах таки есть текстовый слой и его можно будет сконвертировать во что-то открытое - останется работа с текстом и замена его в открытом формате.

    P.S. Просто в SVG может не быть возможности пустить текст по кривой, и экспорт в него раздербанит тексты по буковке. А в EPS, например, таки есть.
    Ответ написан
    2 комментария