Debian, Dojo, Django, Python

Делюсь опытом в описанных технологиях. Блог в первую очередь выполняет роль памяток для меня самого.

Показаны сообщения с ярлыком контроллер. Показать все сообщения
Показаны сообщения с ярлыком контроллер. Показать все сообщения

Расширение контроллеров в Angular

Краткое содержание

В статье рассказывается о том, как в Angular можно реализовать наследование контроллеров.

Суть проблемы

Мне приходится писать довольно много кода на Angular, при этом заметил, что от контроллера к контроллеру меняются, порой, лишь незначительные части. Например, везде, где я использую ngInfiniteScroll, в $scope приходится помещать переменные allLoaded и loading, а так же обработчик loadMore(), выполняющий загрузку новых элементов. По незнанаю, приходилось многократно дублировать практически одинаковый код. Однако, один из пользователей StackOverflow нашёл очень хорошее решение данной проблемы.

Решение

Решение оказалось на удивление простым и заключается в использовании сервиса $controller.

BaseClass.js
(function (A){
    "use strict";
    // Базовый контроллер, который содержит код, общий для всех других контроллеров,
    // которые будут наследоваться от него
    A.module('App').controller('ListController', ['$scope', function($scope){
        $scope.allLoaded = false;
        $scope.items = [];
        $scope.loading = false;

        $scope.loadMore = function(){
            if ($scope.loading){
                return;
            } 
            // Тут какая-то работа по загрузке данных
        };

        $scope.refresh = function(noPlease){
            if (noPlease){
                return;
            }
            $scope.items.length = 0; // Более правильное решение, нежели $scope.items = [];
                                     // т.к. в этом случае сохраняется ссылка на оригинальный
                                     // объект
        };    
    }]);
}(this.angular));
ChildClass.js
(function(A){
    "use strict";
    A.module('App').controller('UserListController', [ '$controller', '$scope', function($controller, $scope){

            // Расширяем контроллер
            $controller('ListController', {
                $scope: $scope
            });

            // Теперь можно собственные свойства описывать
        }]);
}(this.angular));

Установка Debian на RAID-контроллер (обновлено 6 марта 2015)

Введение

В статье рассказывается об установке Debian на Fake-RAID - это RAID, эмулируемый некоторыми материнскими платами. При этом аппаратного RAID-контроллера, позволяющего прозрачно работать с массивом, на таких материнских платах нет. Проблем с установкой Debian на нормальный RAID обычно не бывает, а вот с Fake-RAID - ещё какие. Здесь рассказывается о том, как две такие проблемы решить.

Во многом эта статья является цитированием моего же перевода со странички в Wiki Debian, но есть несколько существенных отличий, о которых там не сказано.

Примечания для UEFI-систем.

Debian 7 Wheezy давно поддерживает установку на UEFI-системы, поэтому не надо переводить компьютер в Legacy-режим, продолжайте установку как обычно. В редких случаях в UEFI нужно зайти на вкладку Security и в поле OS type вместо Windows выбрать Other system.

Небольшие различия есть в работе установщика Debian - в случае с обычной системой для правки параметров запуска следует нажать Tab. Для UEFI-систем нужно нажать e. Запуск установщика в этом случае так же производится по-разному: Enter для обычных систем и F10 для UEFI.

Так же для UEFI-систем я НАСТОЯТЕЛЬНО рекомендую преобразовать таблицу разделов из устаревшего уже формата MBR в современный GPT. Однако, должен сразу предупредить: десктопные версии Windows могут работать с GPT только начиная с версии 8, т.е. установить Windows 7 на диск с GPT-таблицей разделов уже не получится.

Начало установки

  1. Создайте RAID-массив. Для этого обычно есть специальные утилиты, поставляемые производителем материнской платы.

  2. Загрузитесь с носителя. Выбрав пункт Install, нажмите нужную клавишу для редактирования параметров загрузки.

  3. Для BIOS-систем просто допишите в конце строки параметров:

    dmraid=true

    В UEFI-системах следует использовать клавиши со стрелочками для перехода к 4-ой строке, которая на 64-битных системах обычно выглядит так:

    linux /install.amd/vmlinuz video=vesa:ywrap,mtrr vga=788 \ -- quiet

    В конце этой строки следует дописать параметр dmraid=true, в итоге получится такая строка:

    linux /install.amd/vmlinuz video=vesa:ywrap,mtrr vga=788 \ -- quiet dmraid=true
  4. Запустите установщик нажатием Enter в BIOS-системах или F10 в UEFI-системах.

  5. Установка будет идти как обычно. В редакторе разделов для UEFI-систем не забудьте Создать в самом начале диска раздел размером 100 МБ, используемый как Загрузочный раздел UEFI. Там будет создана соответствующая запись, позволяющая запускать загрузчик Debian.

  6. На этапе установки загрузчика произойдёт ошибка. ТАК И ДОЛЖНО БЫТЬ - ЗАГРУЗЧИК БУДЕТ УСТАНОВЛЕН ЧУТЬ ПОЗЖЕ. Следует выбрать в меню Продолжение установки без загрузчика.

  7. Устанока будет завершена, будет предложено извлечь установочный носитель и перезагрузиться - перезагрузитесь, снова выбрав загрузку с установочного носителя!

Установка загрузчика

Для корректной установки загрузчика придётся проделать довольно хитрые манипуляции в режиме восстановления, который нужно запустить с установочного носителя.

  1. В меню выберите пункт Advanced options и нажмите Enter, выберите пункт Rescue mode и сконфигурируйте параметры загрузки ядра так, как это было описано выше, после чего запустите режим восстановления.

  2. Проделайте те же шаги, что и на этапе установки. На одном из этапов будет предложено выбрать корневой раздел для загрузки. Следует выбрать самую первую запись - /dev/dm-1

  3. Будет запущена оболочка BusyBox, в которой по-умолчанию используется интерпретатор sh. Для большего удобства я рекомендую запустить bash соответствующей командой.

  4. Откройте файл /etc/fstab с помощью редактора nano:

    nano /etc/fstab
  5. Обратите внимание на имена разделов. Сейчас они будут выглядеть примерно так:

    /dev/mapper/pdc_ehdiebafp1 /               ext4    errors=remount-ro 0       1
    /dev/mapper/pdc_ehdiebafp9 /home           ext4    defaults          0       2
    /dev/mapper/pdc_ehdiebafp8 /tmp            ext4    defaults          0       2
    /dev/mapper/pdc_ehdiebafp5 /usr            ext4    defaults          0       2
    /dev/mapper/pdc_ehdiebafp6 /var            ext4    defaults          0       2
    /dev/mapper/pdc_ehdiebafp7 none            swap    sw                0       0
    /dev/sr0        /media/cdrom0   udf,iso9660 user,noauto              0       0
    /dev/fd0        /media/floppy0  auto    rw,user,noauto               0       0
  6. Всё, что нужно сделать сейчас - удалить лишнюю букву p перед цифрой в конце имени раздела, т.е. привести все строки к такому виду:

    /dev/mapper/pdc_ehdiebaf1 /               ext4    errors=remount-ro 0       1
    /dev/mapper/pdc_ehdiebaf9 /home           ext4    defaults          0       2
    /dev/mapper/pdc_ehdiebaf8 /tmp            ext4    defaults          0       2
    /dev/mapper/pdc_ehdiebaf5 /usr            ext4    defaults          0       2
    /dev/mapper/pdc_ehdiebaf6 /var            ext4    defaults          0       2
    /dev/mapper/pdc_ehdiebaf7 none            swap    sw                0       0
    /dev/sr0        /media/cdrom0   udf,iso9660 user,noauto             0       0
    /dev/fd0        /media/floppy0  auto    rw,user,noauto              0       0

    После внесения изменений следует сохранить их с помощью Crrl+O и выйти из редактора с помощью Ctrl+X.

  7. Следует перемонтировать все имеющиеся разделы:

    mount -o remount /
    mount /dev/mapper/pdc_ehdiebaf9 /home
    mount /dev/mapper/pdc_ehdiebaf8 /tmp
    mount /dev/mapper/pdc_ehdiebaf5 /usr
    mount /dev/mapper/pdc_ehdiebaf6 /var

    Количество разделов зависит от того, как был размечен диск на этапе установки. Если вдруг забудете, какой раздел куда смонтирован, легко подсмотреть содержимое fstab с помощью команды cat:

    cat /etc/fstab
  8. Теперь следует в файле /etc/default/grub снять комментарий с параметра GRUB_DISABLE_LINUX_UUID=true.

    После того, как изменения будут сделаны и сохранены, выполните следующие команды для установки загрузчика:

    update-grub
    grub-install /deb/mapper/pdc_ehdiebaf

    Здесь вместо pdc_ehdiebaf следует указать такое имя, раздела, которое указано в вашем /etc/fstab для раздела /. Главная отличительная особенность - отсутствие цифр в конце имени.

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

  10. Перезагрузите ситему, выбрав соответствующий пункт в меню режима восстановления. Теперь установленная система сможет загрузиться.

Дополнительно

Разработчики Debian знают об этом баге с 2013 года, материалы для статьи были взяты из переписки одного из пользователей с ними. Тикет описан здесь, описанное там решение было опробовано в реальной работе.