Debian, Dojo, Django, Python

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

Настройка сети в Astra Linux

1 комментарий
Все выполняемые операции требуют привилегий пользователя root.

Astra Linux использует для конфигурирования сетей собственную утилиту wicd. В общем, она довольно удобна, но у неё есть фатальный недостаток - её писали не мы сеть не будет работать до авторизации пользователя в системе. Для обычных компьютеров в этом нет ничего страшного, однако, для сервера это большая проблема, так как иногда его приходится перезагружать по SSH.

Пусть компьютеры будут находиться в сети с адресами 192.168.0.XXX, где вместо XXX - число от 1 до 254.

Настройка осуществляется путем правки файла /etc/network/interfaces. Каждый сетевой интерфейс (сетевая карта, хотя это не совсем точное название) настраивается отдельно. Настройки для сервера выглядят так:

/etc/network/interfaces
auto lo eth0

iface lo inet loopback

iface eth0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    gateway 192.168.0.1         # В качестве шлюза - наш сервер с IP=1
    network 192.168.0.0         # Указываем сеть, это обязательно для работы в составе ALD
    broadcast 192.168.0.255     # Сервер ALD начиная с Astra 1.5 выводит ошибку, если не видит
                                # этого параметра в настройках сети.
    dns-nameservers 192.168.0.1 # Тут через пробел можно перечислить ВСЕ DNS-серверы сети
    dns-search DOMAIN.NET       # Имя домена ALD

Первая строчка auto lo eth0 указывает, какие интерфейсы должны быть запущены при загрузке ОС. Отмечу, что локальная петля lo должна присутствовать там в любом случае.

Пропустим описание локальной петли и сразу перейдем к сетевому интерфейсу.

iface Ключевое слово, говорящее о том, что дальше будет описание сетевого интерфейса
eth0 Указываем, что данный сетевой интерфейс должен быть привязан к сетевой карте eth0. Посмотреть список карт можно командой: lshw -class network
inet Указываем, что это будет настройка сети.
static При этом все настройки будут указаны вручную.
address IPv4-адрес компьютера
netmask Маска подсети.
gateway Шлюз, т. е. IP-адрес, через который идёт подключение к интернету. Обычно на сервере указывают адрес, выданный провайдером, но в нашем случае (закрытый от мира сегмент) пусть будет 192.168.150.1, т. е. компьютер обращается сам к себе.
dns-nameservers Список разделенных пробелами IP-адресов DNS-серверов. Полезно при разворачивании ЕПП под управлением Astra Linux и настройке приложения bind.

На клиентских компьютерах настройки следует выполнить аналогичным образом, меняя только четвёртый октет в поле address.

На этом настройка не заканчивается. Теперь нужно отключить автозапуск встроенных утилит и остановить уже запущенный экземпляр службы wicd, после чего перезапустить службу поддержки сети.

service wicd stop
chkconfig wicd off
rm /etc/xdg/autostart/fly-admin-wicd.desktop
service networking restart

Если на одной сетевой карте по каким-то причинам нужно иметь 2 или более IP-адресов, настройки делаются следующим образом:

/etc/network/interfaces
auto lo
iface lo inet loopback # Кстати, удалять интерфейс локальной петли не стоит,
                       # некоторые службы от этого сходят с ума и начинают
                       # выдавать весьма странные ошибки

auto eth0:0
allow-hotplug eth0:0
iface eth0:0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    network 192.168.0.0
    gateway 192.168.0.1
    broadcast 192.168.0.255
    dns-nameservers 192.168.0.1 192.168.0.2
    dns-search DOMAIN.NET

auto eth0:1
allow-hotplug eth0:1
iface eth0:1 inet static
    address 10.2.12.54      # Адрес, маска и все остальные параметры в этой
    netmask 255.255.255.128 # секции были придуманы за 20 секунд, поэтому
    network 10.2.12.0       # не ручаюсь за правильность заполнения. Гуглите
    gateway 10.2.12.1       # маску подсети для этого случая самостоятельно.
    broadcast 10.2.12.255
    dns-nameservers 8.8.8.8
    dns-search GOOGLE.RU

Посмотреть настройку сети в Debian более подробно можно на официальной Wiki-странице или её несколько устаревшей русской версии

1 комментарий :

Отправить комментарий

Не-IT: польза записной книжки

1 комментарий

Сегодня на Хабре наткнулся на статью Записывай всё. Признаюсь, читал не очень внимательно, тем более что в книге Фила Портера "Съесть или быть съеденным" рассматривается не только этот вопрос корпоративной политики, но и многие другие, причём более обстоятельно. Однако, данный пост сподвиг меня написать комментарий. Дабы его увидело больше людей, я решил перенести сюда свои мысли по поводу пользы записных книжек.

Записывайте всё, что вам говорят

Что бы ни говорил Большой Босс, лучше записать его слова дословно и как можно подробнее. Во-первых, он будет видеть, что вам не всё равно, что он говорит. Это значит, что он будет требовать с вас именно то, что вы записали. Во-вторых, даже если у вас хорошая память, плохая может быть у него, а запись - она и есть запись. Её можно потом зачитать. Другими словами, чем подробнее вы ведёте записи, тем лучше для вас - вы ничего не забудете и будете понимать задачу почти так же, как её понимает ваш босс.

Запись - вещественное доказательство

Есть такой тип руководителей, названия которому я не знаю, но могу дать им характеристику. Эти люди ставят задачу, а через некоторое время требуют с вас не то или не совсем то, что говорили. Допустим, Большой Босс хочет купить партию компьютеров на базе процессоров "Эльбрус", чтобы потом их продавать в комплекте с софтом вашей фирмы. Вы едете к поставщику и договариваетесь о поставке нужного количества комплектов. Их привозят, и тут Большой Босс спрашивает:

- Ты что, идиот?

Вы не понимаете, в чём дело.

- Я же сказал, взять самые мощные компьютеры! Надо было брать на базе Xeon'ов!

Тут вы достаете свою записную книжку, открываете нужную страницу и говорите:

- Нет, вы сказали "Эльбрус". Я записал.

Записная книжка выручит вас в подобных ситуациях

Записывайте, кто помимо вас слышал постановку задачи

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

Используйте ручки разных цветов

Скорее всего, в большой фирме у вас будет больше одного руководителя, например, руководитель отдела и руководитель проекта. Используйте ручки разных цветов, чтобы не путать, кто из них что говорит. Ну или записывайте фамилию.

Уведомляйте коллег, что их слова тоже записываются

Не надо вести записи из-под полы. Ведите их открыто, т.е. пусть ваши жертвы коллеги и начальство знают, что вы, как компьютер, ведёте полный лог всех разговоров. Они будут строже формулировать задачи и не будут болтать лишнего. С другой стороны, выкладывать свои заметки в общий доступ тоже не стоит - начальство не любит, когда на него собирают компромат (а компроматом можно считать что угодно, доказывающее, что ошиблись не вы, а руководитель).

Отмечайте выполненные задачи

Я ставлю рядом с каждой задачей кружок, а иногда так же и дату, если задача срочная, т.е. должна быть выполнена к определенному сроку. Если задача выполнена успешно, я ставлю галочку и дату выполнения. Если отменена - зачеркиваю одной чертой, как на знаке "Остановка запрещена". Проваленная задача отмечается крестом.

1 комментарий :

Отправить комментарий

Хоткеи в EMACS

Комментариев нет
Запись была обновлена 11.09.2016 г. Исправлены ошибки в разметке, из-за которых не выводились на экран некоторые элементы кода.

Основы

Я долгое время пользовался пакетом ergoemacs и был доволен, однако, со временем он стал обрастать функциями, которые мне стали не нужны, а иногда откровенно глючили на моём самосборном EMACS'е. Пришлось изучить, как настраиваются хоткеи в редакторе.

Во-первых, вместо привычных Ctrl, Alt и Shift в EMACS для обозначения модификаторов используются другие значения:

C Ctrl
M Alt
S Shift

Ни в одном руководстве по EMACS вы не найдете записи типа Ctrl+S - там будет написано C-S, хотя по сути эти две записи идентичны.

Во-вторых, клавиши, которые нажимаются вместе, записываются через дефис.

Третье, регистр имеет значение.

Последнее, что нужно знать о клавиатурных комбинациях EMACS - некоторые команды состоят из последовательного нажатия разных клавиатурных комбинаций, например, выход из редактора выглядит так: C-x C-c, что означает следующее:

  • Сначала нажимаем Ctrl+X
  • Теперь нажимаем Ctrl+C

Так же команда выхода из редактора требует подтверждения, если имеются модифицированные буферы, но об этом я напишу в другой раз.

К делу!

Перед тем, как использовать какую-либо клавиатурную комбинацию, следует убедиться, что она уже не привязана к какому-либо действию, либо освободить её от этой привязки. Ниже показано, как удалить привязку команды к комбинации и тут же связать её с новой командой:

(global-unset-key (kbd "C-S-c C-S-c"))
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
Обратите внимание, что привязывать к комбинациям следует только те команды, про которые "знает" EMACS, иначе при запуске он будет выдавать ошибки в конфигурации.

С простыми клавишами разобрались, добавим функциональные:

(require 'neotree)
(require 'ibuffer)
(require 'magit)
(require 'dired)

(global-set-key [f2] 'ibuffer)
(global-set-key [f3] 'dired)
(global-set-key [f8] 'neotree-toggle)
(global-set-key [f10] 'magit-status)

Теперь посмотрим, как описываются стрелки:

;; Resize windows
(global-set-key (kbd "S-C-<left>") 'shrink-window-horizontally)
(global-set-key (kbd "S-C-<right>") 'enlarge-window-horizontally)
(global-set-key (kbd "S-C-<down>") 'shrink-window)
(global-set-key (kbd "S-C-<up>") 'enlarge-window)

Можно ли сделать с полученными знаниями что-то полезное? Да! Давайте удалим ergoemacs и начнем вместо него использовать свои собственные комбинации!

;;; Package --- Summary
;;; Commentary:
;;; Keybindings for non-latin layout

;;; Code:

(setq initial-major-mode (quote text-mode))

(defun cfg:reverse-input-method (input-method)
  "Build the reverse mapping of single letters from INPUT-METHOD."
  (interactive
   (list (read-input-method-name "Use input method (default current): ")))
  (if (and input-method (symbolp input-method))
      (setq input-method (symbol-name input-method)))
  (let ((current current-input-method)
        (modifiers '(nil (control) (meta) (control meta))))
    (when input-method
      (activate-input-method input-method))
    (when (and current-input-method quail-keyboard-layout)
      (dolist (map (cdr (quail-map)))
        (let* ((to (car map))
               (from (quail-get-translation
                      (cadr map) (char-to-string to) 1)))
          (when (and (characterp from) (characterp to))
            (dolist (mod modifiers)
              (define-key local-function-key-map
                (vector (append mod (list from)))
                (vector (append mod (list to)))))))))
    (when input-method
      (activate-input-method current))))

(cfg:reverse-input-method 'russian-computer)

(require 'neotree)
(require 'ibuffer)
(require 'magit)
(require 'dired)

(global-set-key [f2] 'ibuffer)
(global-set-key [f3] 'dired)
(global-set-key [f8] 'neotree-toggle)
(global-set-key [f10] 'magit-status)

;; Multiple cursors
(global-unset-key (kbd "C-S-c C-S-c"))
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)

;; Resize windows
(global-set-key (kbd "S-C-<left>") 'shrink-window-horizontally)
(global-set-key (kbd "S-C-<right>") 'enlarge-window-horizontally)
(global-set-key (kbd "S-C-<down>") 'shrink-window)
(global-set-key (kbd "S-C-<up>") 'enlarge-window)

(defun xah-new-empty-buffer ()
  "Open a new empty buffer.
URL `http://ergoemacs.org/emacs/emacs_new_empty_buffer.html'
Version 2015-06-12"
  (interactive)
  (let ((ξbuf (generate-new-buffer "untitled")))
    (switch-to-buffer ξbuf)
    (funcall (and initial-major-mode))
    (setq buffer-offer-save t)))

;; Save/close/open
(global-set-key (kbd "C-w") 'kill-this-buffer)
(global-set-key (kbd "C-s") 'save-buffer)
(global-set-key (kbd "C-S-s") 'write-file)
(global-set-key (kbd "C-r") 'revert-buffer)
(global-set-key (kbd "C-a") 'mark-whole-buffer)
(global-set-key (kbd "M-'") 'comment-or-uncomment-region)
(global-set-key (kbd "C-o") 'dired)
(global-set-key (kbd "C-n") 'xah-new-empty-buffer)
(global-set-key (kbd "C-+") 'text-scale-increase)
(global-set-key (kbd "C--") 'text-scale-decrease)

;; Buffers and windows
(global-set-key (kbd "C-<next>") 'next-buffer)
(global-set-key (kbd "C-<prior>") 'previous-buffer)
(global-set-key (kbd "C-<tab>") 'other-window)

(global-set-key (kbd "M-3") 'delete-other-windows)
(global-set-key (kbd "M-4") 'split-window-horizontally)
(global-set-key (kbd "M-5") 'split-window-vertically)
(global-set-key (kbd "M-6") 'balance-windows)

(global-set-key (kbd "C-f") 'isearch-forward)
(global-set-key (kbd "C-h") 'query-replace)
(global-set-key (kbd "C-S-h") 'query-replace-regexp)

(global-set-key (kbd "M-a") 'execute-extended-command)
(global-set-key (kbd "M-x") 'kill-whole-line)
(global-set-key (kbd "<esc>") 'keyboard-quit)

(setq x-select-enable-clipboard t)

;; Highlight search resaults
(setq search-highlight        t)
(setq query-replace-highlight t)

;;; keyboard.el ends here

У меня конфигурация разбита на несколько маленьких файлов, и я привёл целиком содержимое keyboard.el. Полагаю, не проблема выбросить ненужное и оставить нужное. Большая часть команд будет работать без установки дополнительных пакетов.

Комментариев нет :

Отправить комментарий

Об этом блоге

Комментариев нет

Меня зовут Дунаевский Максим, и я программист-самоучка. Чем я пользуюсь:

  • EMACS
  • Django
  • Django Rest Framework
  • bower
  • Dojo
  • Debian Linux
  • Windows 10

Угораю по литературному программированию, книге "Шаблоны проектирования", по статическим анализаторам, autopep8 и isort, а так же интересным задачам. В этот блог пишу только когда есть время.

Как сказано в примечании к моему блогу, он выполняет в первую очередь роль дневника, и только во вторую - пособие для начинающих. С одной стороны, неспособность профессионала снизойти до уровня новичка и объяснить ему всё доступно есть снобизм, а с другой мне лень описывать вещи, которые можно найти в первой десятке выдачи Google. Кроме того, в связи со сменой работы, места жительства и рода деятельности программирование и администрирование с декабря 2015 года перешли на второй план, статьи будут выходить очень редко, если вообще будут. У меня всё, извините, если кого-то задел.

Комментариев нет :

Отправить комментарий

Несколько слов о Dojo Framework

Комментариев нет

Немного о Dojo Framework

Введение

Dojo Dramework - проект, ведущий свою историю с 2004 года. Причиной, побудившей авторов создать его, стала политика фирмы, где они тогда работали: Sencha хотела денег, и в общем-то, цели своей достигла, на их странице можно полюбоваться совершенно нескромными ценами на ExtJS, они же хотели сделать библиотеку бесплатной

Так и не решив проблему мирным путём, группа энтузиастов откололась, чтобы создать свой собственный фреймворк, что им очень даже удалось.

Обзор возможностей

"Из коробки" Dojo содержит практически весь тот функционал, что мы можем найти в jQuery. Правда, вместо $() там используется dojo.query(), но суть не в этом - это лишь малая часть того, что Dojo на самом деле умеет.

Асинхронная подгрузка модулей

Последние 2 года я читаю о том, что в Angular 2 будет реализована асинхронная подгрузка модулей. В Dojo эта фича была реализована в 2009, но не позиционировалась как "серебрянная пуля", в отличие от. Скажу даже больше, это самый что ни на есть базовый функционал. Всё приложение не просто можно, а даже нужно разбивать на маленькие модули. Люди, знакомые с require.js, оценят написанный ниже код:

require([
      "dojo",
      "dojo/domReady!"
], function(
    dojo
){
    dojo.query("div.centered").style({
      color: "orange",
      textWeight: "bold"
    });
});

Классическое наследование

Стоян Стефанов в своей книге "JavaScript. Шаблоны" выразил мысль о том, что для подготовленного программиста наследование через прототип, используемое в JS, является более мощным, чем классическое (через классы). Не могу с ним согласиться, поскольку сама концепция является довольно спорной.

Существует множество способов обойти прототипное наследование JavaScript, и один из них предлагает Dojo. И не просто предлагает, а так же реализует концепцию множественного наследования, когда результирующий класс получает все свойства и методы своих родителей. Для объявления класса в Dojo имеется метод declare(). С его помощью можно очень легко создать новый "класс" (не в том смысле, в каком мы понимаем его говоря о языках с чистым классическим наследованием, например, C++ или Python, а лишь его эмуляцию).

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

Dijit и Dojox

Dijit

Dijit представляет собой готовую библиотеку виджетов, входящую в официальную поставку Dojo. В комплекте идёт несколько тем и базовые контролы, необходимые для создания Rich Interface Applications - кнопки, меню, диалоговые окна (опять эмуляция, ясное дело), поля выбора, деревья, списки, панели... Лучше посмотрите сами вот здесь.

Можно создавать свои собственные компоненты (виджеты) на основе имеющихся. Есть даже базовые классы - _BaseWidget, _TemplatedMixin и другие. Да, здесь нет директив из мира Angular, и контроллеров тоже. И сервисов нет, о, Боже, я в аду! Если нам нужно использовать какой-то виджет, мы пишем в свойстве элемента DOM, например, data-dojo-type="dijit/form/Button", и получаем кнопку. Соответственно, нет здесь и проблем с приоритетом директив, и возни с transclude, контролллерами и прочими столь милыми сердцу фанатов Angular надстройками над языком, которые ко второй версии весело отомрут, будучи заменены Web-компонентами.

Dojox

Как я понял, это набор не входящих в официальную поставку виджетов. Авторы могут поддерживать, а могут и не поддерживать их. Исправление ошибок? Новые фичи? Какой-то Road Map? Всё на совести автора, никто ничего не обещает. Однако, библиотека и набор возможностей впечатляют.

Причины непопулярноcти Dojo

Причин множество, я остановлюсь на тех, которые кажутся мне наиболее явными и значительными. Отсортированы в порядке всплытия в памяти.

Скудная документация

Документация к Dojo не просто бедная, а очень бедная. Некоторые статьи были написаны ещё в нулевых, и с тех пор ни разу серьёзно не перерабатывались. Литература? Самое свежее, что я видел - книга 2009 года. От жизни отстала очень сильно.

Высокий порог вхождения

Angular не может похвастать доброжелательностью к новичкам, однако, даже там, сев вечером с кружкой чая ближе к ночи уже можно сделать что-то более-менее работающее. В случае с Dojo ситуация совершенно иная. Фреймворк требует долгого, настойчивого изучения. Используемые в нём подходы серьёзно отличаются от тех, к которым привыкли пользователи Angular и jQuery.

Слабый пиар

В отличие от Google, пихающего свой Angular буквально везде, IBM - один из основных спонсоров проекта - практически никак его не продвигает. Попробуйте сами найти на YouTube какой-нибудь dojoConf или вебинар по новым возможностям. Может быть, у вас получится найти how-to или разбор сложного примера? Дайте мне ссылку! В основном всё, что я находил, описывается следующим образом: "Вот смотрите, числа обладают свойствами коммутативности. 2+2=4. Зная это, не трудно доказать теорему Ферма". Другими словами, пропущен средний уровень, порой даже складывается впечатление, что спецов, которые могут написать высококачественную статью про Dojo и имеют на это время, свободное от загребания бабла, попросту не существует.

Итоги

Так стоит ли тратить время на этот фреймворк?

Сейчас я не готов ответить на этот вопрос однозначно. Свой новый проект я начал писать на нём, и пока дело не сильно продвинулось. Однако, как мне кажется, Dojo именно тот проект, на который стоит равняться. Многие идеи, которые первыми появились именно в нём, впоследствии были заимствованы другими фреймворками. Исходный код и сама структура проекта (а так же виджетов Dijit) являются хорошим образцом продуманного, профессионального подхода. Стиль, модульность, комментарии - всё это выполнено блестяще.

Комментариев нет :

Отправить комментарий