• Как заставить все программы в Linux использовать одинаковые диалоговые окна?

    vistoyn
    @vistoyn Автор вопроса
    программист
    В Linux есть система XDG порталов. Настроить можно следующим образом:
    Настройка порталов xdg-portals
    Ответ написан
    Комментировать
  • Как сделать такой слайдер?

    vistoyn
    @vistoyn
    программист
    Библиотека ScrollMagic

    вот пример:
    scrollmagic.io/examples/advanced/section_slides_ma...
    Ответ написан
    Комментировать
  • Как в MVC сделать так чтобы не перегружать код параметрами?

    vistoyn
    @vistoyn
    программист
    1) Писать <?php echo $id; ?> так нельзя. Нужно делать экранизацию <?= htmlspecialchars($id); ?>
    2) "Плюс" и "минус" в корзине нужно делать через Ajax POST запрос, чтобы страница не обновлялась каждый раз при нажатии на плюсик. И яваскриптом изменять значения стоимости товаров в зависимости от количества.
    3) Нужно юзать CSRF для защиты от межсайтовых запросов. Через GET параметры ничего нельзя передавать на увеличение каких то параметров. Потому что, прокси кэширует GET запросы. Читайте также про межсайтовые атаки. GET можно юзать только в поиске и для отображения фильтров.
    4) В $_SESSION нельзя ничего хранить! Всё состояние нужно хранить в базе данных. Почему? Читайте более подробно здесь https://12factor.net/ru/. На бекенде нельзя хранить состояние, потому что он должен уметь масштабироваться. Если у вас 10 бэкендов, то все бэкенды должны одинаково отвечать. А если у вас будет храниться состояние на бэкенде, то не получиться так сделать.
    5) Используйте готовый фрэймворк. Например WordPress или yii2. Если делаете сайт интернет магазин, то WordPress. Там многие вещи уже решены.
    6) Используйте twig.
    Ответ написан
  • В какой директории Linux правильнее хранить исходники проекта?

    vistoyn
    @vistoyn
    программист
    Ставьте Linux и пользуйтесь им, потому что сайты работают на линуксе в основном. И окружение сайтов должно совпадать со средой разработки. Например, те же права Unix. Я раньше разрабатывал на видне и устал от того, что нет совместимости с линуксом. То windows версий плагинов специфических под php нет. То pecl не компилирует, из-за отсутствия библиотек, то еще чего. Приходилось ставить cygwin и mingw. В какой то момент надоело это и перешел на убунту. Стало в разы легче.

    Решение, если не хотите переходит на линукс - VirtualBox с Linux и туда сайты. Можно Docker или LXC и туда сайты.

    По стандарту папка /var/www/html

    Как вариант можно юзать: /www/проект или /srv/проект
    Ответ написан
    Комментировать
  • Как сделать совместный просмотр и управление файлом двух пользователей?

    vistoyn
    @vistoyn
    программист
    Как идея.
    1) PDF разбивается на сервере на картинки.
    2) Отображается конкретная картинка.
    3) Когда клиент нажимает следующий слайд, отправляется запрос на сервер, а там через websocket всем подключенным клиентам приходит сообщения о том, что слайд сменился. Приходит конкретный номер текущего слайда.
    4) Мышка у всех прячется и показывается виртуальный курсор на сайте (img картинка курсора).
    5) Если модератор двигает курсором, это отслеживается через событие mousemove, на сервер отправляется координаты сдвинутого виртуального курсора, и затем все клиентам рассылается новое смещение курсора.
    6) Клиент получает новую позицию и запускает анимацию движения курсора.

    С картинкой курсора можно играться. Можно сделать так, кто двигает мышкой, тот и управляет виртуальным курсором. Координаты виртуального курсора, должны совпадать с координатами реального, кто двигает. Конечно если двигать начнет другой, то курсор переместится на новое место. Можно плавную анимацию сделать.

    Спрятать курсор можно через CSS cursor: none;

    Есть вебсокеты, а есть еще WebRTC. Это p2p коммуникация в реальном времени. Можно отсылать клиентам json сообщения где находится курсор, кто им управляет и какой номер слайда pdf презентации. Но для WebRTC все равно нужен будет сервер с ajax или вебсокетами.

    Через WebRTC можно сделать видеосвязь.

    Как то так, наверное.
    Ответ написан
    1 комментарий
  • Как по сети оповестить одного из сотен-тысяч клиентов?

    vistoyn
    @vistoyn
    программист
    RabbitMQ не подойдет. Это для микросервисной архитектуры.
    То что ты говоришь, называется web push уведомлениями.
    Почитай алгоритм как они работают, и сделай также.
    Вроде как есть https://gotify.net/ и клиент под него

    Проблема с вебсокетами в том, что на каждого подключённого клиента, на сервере будет выделяться память. И если много клиентов одновременно будут держать открытые соединения, то может память сервера кончится, и надо будет масштабировать сервер.

    Как вариант можно юзать UDP протокол. Там не тратится память. Но надо будет решить проблему с NAT. NAT на клиенте можно обойти через проброс портов на роутере. Есть даже автоматический проброс портов через UPnP. Но это не везде будет работать. Где не работает, там вебсокеты.

    Как идея второй вариант:
    Если обновления происходят раз в час, или раз в неделю, и задержка в 5-10 минут не критична, то можно следующее решение. Клиент по таймауту раз в несколько минут отправляет post запрос (чтобы не кэшировался), где будет возвращен timestamp с последней новостью. Можно даже создать 100к txt статических файлов для каждого клиента и раздавать их через nginx или CDN. А для того чтобы "пнуть клиента", достаточно в txt файл записать новый timestamp.
    Ответ написан
    2 комментария
  • Почему на VDS (fastcgi php-fpm nginx) при тесте время ответа выше, чем у обычного хостинга с apache?

    vistoyn
    @vistoyn
    программист
    1 гиг озу и 1 проц, это мало. Возможно на shared хостинге лучше процессор и памяти больше.

    Попробуй включить в php модули opcache и apcu. Они позволяют оптимизировать код php и закэшировать часто повторяемые данные.

    Также необходимо установить обязательные php расширения для WordPress:
    https://make.wordpress.org/hosting/handbook/handbo...

    Поставь плагин для вордпресс W3 Total Cache и настрой его. Там есть вкладка Perfomance -> Setup Guide.

    Отключи крон в вордпрессе.
    define( 'DISABLE_WP_CRON', true );
    и сделай его через кронтаб.
    Ответ написан
  • Как сделать аналог steam?

    vistoyn
    @vistoyn
    программист
    Аналоги есть. Это GameHub и Lutris.
    Ответ написан
    Комментировать
  • Google Chrome грузит ЦП под 100%. Что делать?

    vistoyn
    @vistoyn
    программист
    Попробуйте:
    1) Переустановить или обновить Хром.
    2) Запустить хром с другим профилем через параметр --user-data-dir
    chrome.exe --user-data-dir="C:/Users/MyUser/AppData/Local/Google/Chrome/User Data 2"

    Вместо MyUser ваше имя пользователя Windows
    Ответ написан
  • Как лучше хранить crontime в базе данных?

    vistoyn
    @vistoyn
    программист
    Используйте библиотеку mtdowling/cron-expression.
    Она умеет анализировать интервалы в стиле крон.

    Идея такая:
    1. Нужно вытащить из базы все записи.
    2. Для каждой записи узнать следующее время запуска.
    3. Если оно совпадает с текущей минутой, то выполнить задачу.
    Ответ написан
    1 комментарий
  • Как лучше организовать структуру таблиц?

    vistoyn
    @vistoyn
    программист
    Поля:
    id - ID комментария
    user_id - ID пользователя
    comment - Текст комментария
    type - Тип комментария
    foreign_id - Внешний ключ

    type Сделать как константы в Entity

    class Comment{
    	
    	const TYPE_BOOK = 1;
    	const TYPE_AUTHOR = 2;
    	const TYPE_PUBLISHER = 3;
    
    	/**
    	 * @var bigint
    	 *
    	 * @ORM\Column(name="id", type="bigint")
    	 * @ORM\Id
    	 * @ORM\GeneratedValue(strategy="AUTO")
    	 */
    	public $id;
    	
    	
    	/**
    	 * @var bigint
    	 *
    	 * @ORM\Column(name="user_id", type="bigint")
    	 */
    	public $user_id;
    	
    	
    	/**
    	 * @var string
    	 *
    	 * @ORM\Column(name="comment", type="text")
    	 */
    	public $comment;
    	
    	
    	/**
    	 * @var smallint
    	 *
    	 * @ORM\Column(name="type", type="smallint")
    	 */
    	public $type;
    	
    	
    	/**
    	 * @var bigint
    	 *
    	 * @ORM\Column(name="foreign_id", type="bigint")
    	 */
    	public $foreign_id;
    }
    
    $comment = new Comment();
    $comment->user_id = 37;
    $comment->comment = 'комментарий';
    $comment->type = Comment::TYPE_BOOK;
    $comment->foreign_id = $book->id;


    В данном случае у вас не будут связей, но они не особо то и нужны, и можно обойтись без них.
    Комментарии же все равно выводятся для книги, автора, издательства.
    Т.е. всегда указан type и foreign_id в запросе select.
    Если нужно вывести вообще все комментарии, то делаете left join и фильтр: вывести комментарии отдельно по Книгам, авторам и издательствам
    Ответ написан
    Комментировать
  • Как лучше реализовать связь One-To-One в MySQL (Symfony3, Doctrine ORM)?

    vistoyn
    @vistoyn
    программист
    1. В первом варианте есть ошибки:
    - Если вы получите запись из таблицы additional_entity_N непонятно будет к какому main_entity эта запись относиться, чтобы узнать надо делать дополнительный запрос к main_entity.
    - В таблицах additional_entity_N могут существовать записи, которые не относятся ни к одной записи из main_entity.
    - Легко запутаться при отладке БД, потому что id во всех 4х таблицах разные.
    - Чтобы добавить новый additional_entity_N вам нужно будет создать запись additional_entity_N, а затем изменить значения в main_entity.
    - И что вы будете делать, если вы создали запись в таблице additional_entity_1, а в main_entity уже указан id additional_entity_1_id?

    2. Во втором варианте у вас ошибки:
    - У вас связь 1-ко-многим, а не один к одному.
    - У таблиц additional_entity_N автоинкремент не нужен, поле id нужно убрать.
    - Primary key в таблицах additional_entity_N должен быть main_entity_id.
    - Во всех 4х таблицах должен быть одинаковый ID Primary key.

    3. Если исправить ошибки во втором варианте, то корректнее использовать его.
    Ответ написан
    Комментировать
  • Узнать IP к которому обращается программа win XP?

    vistoyn
    @vistoyn
    программист
    Добрый день!
    Попробуйте утилиту cports. Она показывает все запущенные программы, и ip адреса куда подключаются программы в данный момент времени
    www.nirsoft.net/utils/cports.html
    Ответ написан
    Комментировать
  • Как грамотно установить и настроить сервер для офиса + Asterisk?

    vistoyn
    @vistoyn
    программист
    Добрый день!
    Попробуйте сборку Elastix. Она содержит в себе уже настроенный Asterisk и веб интерфейс для управления.
    https://ru.wikipedia.org/wiki/Elastix
    Ответ написан
    3 комментария
  • Как реализовать схему виртуализации контейнеров?

    vistoyn
    @vistoyn
    программист
    Можно использовать LXD.
    LXD - это гипервизор контейнеров, который базируется на LXC.
    LXD автоматизирует установку контейнеров, используя систему образов по аналогии с Docker.
    Проще говоря LXD - это Docker для полноценной виртуализации ОС.
    Более подробнее здесь:
    https://linuxcontainers.org/ru/lxd/introduction/
    Ответ написан
    Комментировать
  • AngularJs. Почему ругается на контроллер?

    vistoyn
    @vistoyn
    программист
    Попробуй так:
    var demoApp = angular.module('demoApp', []);
    demoApp.controller('DemoController', function($scope){
    	$scope.name = 'World';
    });

    а в html прописать ng-app='demoApp'

    работает для версии 1.5.5
    Ответ написан
    Комментировать