• Можно ли настроить отображение панели задач Linux Mint на двух мониторах?

    @volynshchikov
    Вопрос старый, но может кому сэкономит время.
    Тыкался с этим битый час. Оказалось все "интуитивно", и ставить расширения не обязательно.
    Дистрибутив Cinnamon 18.1

    Параметры системы => Панель
    Жмем "Добавить новую панель" выбираем место на втором мониторе.

    Но, внезапно, задачи не попадают на новую панель, она так и остается пустой.
    Чтобы заработало нормально, правый клик на панели основного монитора => Изменить панель => "Копировать конфигурацию апплетов". На новой панели дополнительного монитора соответственно
    "Вставить конфигурацию апплетов".

    После копирования конфигурации получаем две самостоятельные панели для каждого монитора. На каждую попадают окна открытые на соответствующем мониторе.
    Ответ написан
    3 комментария
  • Чем дебажить утечки памяти в php?

    @Fractalzombie
    Software Engineer
    А не проще ли поднять нормальный демон? https://daemon.io
    Ответ написан
    2 комментария
  • Как запустить скрипт через 5 сек. после загрузки страницы?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    $(document).ready(function () {
        function mktop() {
            $( "form" ).submit();		
        }
        setTimeout(function () {
            mktop();
        }, 5000);
    });
    Ответ написан
    4 комментария
  • Doctrine наследование сущностей от сущности?

    @antonowano
    Профессиональный самоучка
    Ответ написан
    Комментировать
  • Какова роль интерфейсов в ООП?

    Приведу пример на коленке. Хотим, например, написать абстрактную файловую систему. Для начала, определим интерфейс, для ФС:

    interface FileSystemInterface {
      public function write($file, $data);
      public function read($file);
    }


    Затем, хочу реализацию интерфейса ФС для работы с файликами:

    class OSFileSystem implements FileSystemInterface {
      public function write($file, $data) {
         // открываем файлик, пишем данные
      }
    
      public function read($file) {
        // открываем файлик, возвращаем данные
      }
    }


    Вдруг, кому-то захотелось файловую систему в облаке. Окей, не проблема, реализуем это:
    class CloudFileSystem implements FileSystemInterface {
      public function write($file, $data) {
         // открываем соединение с облаком, пишем данные
      }
    
      public function read($file) {
        // открываем соединение с облаком, возвращаем данные
      }
    }

    Пусть у нас есть кой-то код, работающий с файловой системой, назовем его "Хранилище файлов". Пусть он выглядит примерно так:

    class FileStorage {
      protected $Fs;
      
      public function __construct(FileSystemInterface $Fs) {
        $this->Fs = $Fs;
      }  
    
      public function saveFile() {
        $this->Fs->write('file.txt', 'file data');
      }
    
      public function getFile() {
        return $this->Fs->read('file.txt', 'file data');
      }
    }


    Отлично! Теперь мы можем хранилищу файлов отдать любой объект с реализованным интерфейсом FileSystemInterface. Пример:

    // Хранилище файлов работает с файловой системой ОС:
    $FS = new OSFileSystem();
    $FileStorage = new FileStorage($Fs);
    $FileStorage->getFile();
    
    // Хранилище файлов работает с файловой системой в облаке:
    $FS = new CloudFileSystem();
    $FileStorage = new FileStorage($Fs);
    $FileStorage->getFile();


    Использование интерфейса, в данном случае. позволяет нам писать только реализацию работы файловой системы, а бизнес-логика, работающая с файловой системой никак не меняется, она знает, что в любом случае файловая система реализует интерфейс FileSystemInterface и может без опаски использовать методы этого интерфейса.
    Ответ написан
    14 комментариев