• Как настроить отступы и выравнивание в Emacs для C/C++?

    dunmaksim
    @dunmaksim
    Технический писатель
    Для Emacs существует editorconfig-mode.el. Он включает поддержку EditorConfig, как вам указали выше.

    Чтобы использовать его в Emacs, установите пакет любым удобным способом, а затем включите этот режим.

    • Если вы используете установку вручную:
      (require 'editorconfig)
      (editorconfig-mode 1)

    • Если вы используете use-package:
      ;; -> EDITORCONFIG
      ;; Поддержка https://editorconfig.org/
      ;; https://github.com/editorconfig/editorconfig-emacs
      (use-package editorconfig
        :ensure t
        :defer t
        :config (editorconfig-mode 1)))



    Формат файла .editorconfig описан на сайте проекта. Создайте этот файл в корне вашего проекта, и всё заработает "из коробки".
    Ответ написан
    Комментировать
  • Книги по изучению Debian либо Astra Linux для чайников?

    dunmaksim
    @dunmaksim
    Технический писатель
    Очень рекомендую Debian Administrator's Handbook. Если с английским сложно, есть чуть отстающая версия на русском языке.

    Немет и Снайдер крутые ребята, но лучше всё-таки читать официальные руководства.
    Ответ написан
    Комментировать
  • Как исправить проблему с образом (.iso)?

    dunmaksim
    @dunmaksim
    Технический писатель
    1. Записать куда?
    2. Записать как? Какую программу используете?

    Красноглазый путь:

    1. Подключите флешку, выясните её имя в системе:

      sudo ls /dev/disk/by-id/

      Устройство, у которого нет номера раздела, и есть ваша флешка. Первый раздел на ней будет иметь такое же имя, но ещё и цифру 1 в конце.

    2. Запишите образ на флешку.

      Будьте очень осторожны с выбором цели: если ошибётесь, в лучшем случае получите ошибку, в худшем - загрузочный диск с Windows 10 вместо раздела жёсткого диска с фотографиями, музыкой, видео и другим контентом, который собирали годами.

      sudo dd if=<путь к ISO> of=/dev/disk/by-id/<имя флешки> bs=64M; sync


      В этой команде для оптимизации процесса используется временный буфер в 64 МБ, а после завершения процесса вызывается системная команда sync, которая заставляет устройства сбросить свои кеши на диск.



    Путь для нормальных людей: найдите оригинальный образ Windows 10 и запишите его из-под Windows.
    Ответ написан
    Комментировать
  • Не могу изменить разрешение экрана на Ubuntu 20.04.Как решить проблему?

    dunmaksim
    @dunmaksim
    Технический писатель
    Для решения этой проблемы необходимы технические детали:

    1. Тип установленного драйвера.
    2. Оболочка рабочего стола.

    Драйвер nouveau, идущий в комплекте с Ubuntu и Debian, позволяет делать только минимальные настройки. Возможно, у вас он вовсе не установлен, как и проприетарный.

    Если вы используете проприетарный драйвер Nvidia, убедитесь, что драйвер nouveau при этом помещён в чёрный список. Для этого:

    1. Получите список файлов в каталоге /etc/modprobe.d/
    2. Если среди них есть файлы nvidia-blacklists-nouveau.conf и nvidia-kernel-common.conf, попробуйте переустановить проприетарный драйвер.
      sudo apt-get purge nvidia-driver --yes && \
         sudo update-initramfs -u

      Перезагружаем компьютер.
      sudo apt-get install nvidia-driver nvidia-xconfig --yes && \
         sudo update-initramfs -u

      Снова перезагружаем компьютер.

    3. Если в других файлах в этом каталоге так же не указан nouveau, а проприетарный драйвер установлен, создайте файл blacklist.conf или добавьте в него строку, если он уже существует:

      blacklist nouveau

    4. Обновите конфигурацию ядра и перезагрузите компьютер:

      sudo update-initramfs -u


    Подробнее про установку драйверов Nvidia см. в документации Debian.
    Особенности установки проприетарных драйверов в режиме EFI описаны здесь.

    После того, как проприетарный драйвер будет установлен, удалите файл /etc/X11/xorg.conf и создайте новый с помощью утилиты nvidia-xconfig:

    sudo nvidia-xconfig

    Она автоматически определит тип используемой видеокарты и версию драйвера, после чего сгенерирует корректный конфиг для X11.
    Ответ написан
    Комментировать
  • Где прячется .emacs?

    dunmaksim
    @dunmaksim
    Технический писатель
    Хранится в каталоге ~/.emacs.d/. При первом запуске EMACS сам его создаст, если он ещё не существует.
    Ответ написан
    Комментировать
  • Как правильно использовать в Emacs горячие клавиши в русской раскладке?

    dunmaksim
    @dunmaksim
    Технический писатель
    (set-language-environment 'Russian)

    Подробности здесь.
    Ответ написан
    Комментировать
  • Как настроить проверку фатальных ошибок PHP в Emacs?

    dunmaksim
    @dunmaksim
    Технический писатель
    Flycheck полагается на внешние утилиты при проверке синтаксиса и статическом анализе.

    Решение вашей задачи состоит из нескольких этапов.
    1. Установка php-mode.
    2. Установка flycheck.
    3. Установка внешних утилит для проверки синтаксиса и статического анализа PHP-кода.

    1. Установка php-mode.

    Я использую для этого straight.el. Вы можете использовать любой другой менеджер пакетов. Настройки, описанные ниже, почти без изменений будут работать и у вас.

    (straight-use-package 'php-mode)
    (defun setup-php-mode ()
      "Settings for 'php-mode'"
      (interactive)
    
      (flycheck-mode 1))
    (add-to-list 'auto-mode-alist '("\\.php\\'" . php-mode))
    (add-hook 'php-mode-hook #'setup-php-mode)


    2. Установка Flycheck.

    ;; FLYCHECK
    (straight-use-package `flycheck)
    (defun setup-flycheck-mode ()
      "Settings for 'flycheck-mode'."
      (interactive)
      (defvar flycheck-check-syntax-automatically '(mode-enabled save))
      (defvar flycheck-indication-mode 'left-margin)
      (setq
       flycheck-check-syntax-automatically '(mode-enabled save)
       flycheck-indication-mode 'left-margin))
    (add-hook 'flycheck-mode-hook #'setup-flycheck-mode)


    3. Перезапустите EMACS, чтобы он подхватил новые настройки. Откройте любой PHP-файл и вызовите команду flycheck-verify-setup. В новом буфере будет выведена информация о том, на какие внешние средства полагается Flycheck. При необходимости установите их с помощью пакетного менеджера своей ОС. Внесите изменения в файл и посмотрите, какие предупреждения и ошибки выдаст Flycheck.
    Ответ написан
    Комментировать
  • Как отобразить пробелы в emacs?

    dunmaksim
    @dunmaksim
    Технический писатель
    Вам нужно использовать пакет whitespace-mode. Ниже показано, как его включить и настроить:

    ;; WHITESPACE MODE
    ;; https://www.emacswiki.org/emacs/WhiteSpace
    (straight-use-package 'whitespace-mode)
    (defun setup-whitespace-mode ()
      "Settings for 'whitespace-mode'."
      (interactive)
      (setq-default whitespace-display-mappings
                    '(
                      (space-mark   ?\    [?\xB7]  [?.]) ; space
                      (space-mark   ?\xA0 [?\xA4]  [?_]) ; hard space
                      (newline-mark ?\n   [?¶ ?\n] [?$ ?\n]) ; end of line
                      )
                    ;; Highlight lines with length bigger than 1000 chars
                    whitespace-line-column 1000
                    whitespace-fill-column 1000
                    )
    
      ;; Markdown-mode hack
      (set-face-attribute 'whitespace-space nil
                          :family default-font-family
                          :foreground "#75715E")
      (set-face-attribute 'whitespace-indentation nil
                          :family default-font-family
                          :foreground "#E6DB74"))
    (add-hook 'whitespace-mode-hook #'setup-whitespace-mode)


    Теперь в хук активации нужного режима добавьте вызов:

    (whitespace-mode 1)

    Например, так выглядят мои настройки для Markdown:

    ;; MARKDOWN MODE
    ;; https://github.com/jrblevin/markdown-mode
    (straight-use-package 'markdown-mode)
    (defun setup-markdown-mode()
      "Settings for editing markdown documents."
      (interactive)
      ;; Настройки отступов и всякое такое
    
      (setq
       global-hl-line-mode nil
       header-line-format " "
       left-margin-width 4
       line-spacing 3
       right-margin-width 4
       word-wrap t)
    
      ;; Additional modes
      (abbrev-mode 1)
      (buffer-face-mode 1)
      (company-mode 1)
      (flycheck-mode 1) ;; Turn on linters
      (linum-mode 1)
      (rainbow-delimiters-mode 1)
      (rainbow-mode 1) ;; Highlight brackets
      (visual-line-mode 1) ;; Highlight current line
      (whitespace-mode 1) ;; Show spaces, tabs and other
      (ws-butler-mode 1) ;; Delete trailing spaces on changed lines
      (cond ;; Turn on spell-checking only in Linux
       ((string-equal system-type "gnu/linux")(flyspell-mode 1)))
    
      (set-face-attribute 'markdown-code-face        nil :family default-font-family)
      (set-face-attribute 'markdown-inline-code-face nil :family default-font-family))
    (add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
    (add-hook 'markdown-mode-hook #'setup-markdown-mode)


    В качестве менеджера пакетов я использую straight.el, форк use-package, но вы можете использовать любой другой.
    Ответ написан
    Комментировать
  • Не применяются стили в Django. Что не так?

    dunmaksim
    @dunmaksim
    Технический писатель
    1. Измените базовый шаблон, добавив пустой блок в head после подключения всех CSS:
    {% block css %} {% endblock %}
    2. В расширяющем шаблоне заполните этот блок:
    {% block css %}
    <link rel="stylesheet" href="{% static 'path/to/css.css' %}">
    {% endblock %}
    Ответ написан
    Комментировать
  • Как писать приложение на js?

    dunmaksim
    @dunmaksim
    Технический писатель
    Стоит задача написать что-то именно на чистом IS, без библиотек? В таком случае, вам нужно будет пройти несколько этапов.
    1. Разбить проект на базовые модули и собственно приложение
    2. Написать базовые модули для работы с DOM, AJAX, событиями, строками, числами, формами, стилями, потоками, cookies, наследованием, роутингом и т. д. (посмотрите дизайн Dojo Toolkit версии 1. X, там эталонная реализация всего этого уже есть).
    3. Разделить приложение на модули, написать их
    4. Собрать из отдельных частей готовый bundle-файл (не знаю, что сейчас стильно-модно-молодёжно, но вроде WebPack популярен, хотя порог входа очень крутой)
    Ответ написан
    2 комментария
  • Есть ли у вас доводы перехода с Ubuntu на Debian комьпьютера разработчика?

    dunmaksim
    @dunmaksim
    Технический писатель
    Есть лишь четыре стабильных дистрибутива:
    1. Debian
    2. CentOS
    3. RHEL
    4. Oracle Unbreakable Linux

    Если вам для работы на работе за зарплату - берите один из них (последние 2 стоят денег). Если нужно понтоваться, а вместо разработчиков у вас хипстота, которая тянет в проект свежий непротестированный глючный софт, для работы которого жизненно необходимы свежие версии пакетов - используйте Ubuntu / Fedora / Kali / BolgenOS. Я предпочитаю предсказуемую, стабильную систему с известными проблемами и столь же известными их решениями, а не участвовать в бета-тесте.
    Ответ написан
  • Как установить Debian на Serial ATA RAID?

    dunmaksim
    @dunmaksim
    Технический писатель
    Попробуйте английскую версию инструкции, она свежее и содержит меньше ошибок.
    Ответ написан
    Комментировать
  • Как запускать функцию по расписанию в Python Kivy?

    dunmaksim
    @dunmaksim
    Технический писатель
    Используйте cron:
    30    12    *     *    *    /usr/sbin/python full_path_to_your_script.py
    Ответ написан
    Комментировать
  • Как подключится к базе данных?

    dunmaksim
    @dunmaksim
    Технический писатель
    Если на VDS стоит Debian-based дистрибутив, попробуйте следующее:
    1. Запустите MySQL от имени root с настройками, дающими возможность выполнять административные команды:
    mysql --defaults-file=/etc/mysql/debian.cnf
    2. Создайте нового пользователя для вашего проекта, пустую базу, и выдайте этому пользователю все необходимые права:
    CREATE DATABASE БАЗА_MYSQL;
    CREATE USER 'ПОЛЬЗОВАТЕЛЬ_MYSQL'@'localhost' IDENTIFIED BY 'ПАРОЛЬ_MYSQL';
    GRANT ALL PRIVILEGES ON БАЗА_MYSQL.* TO 'ПОЛЬЗОВАТЕЛЬ_MYSQL'@'localhost';

    3. Измените настройки проекта и проверьте, получится ли теперь приложению подключиться к СУБД.
    Ответ написан
    Комментировать
  • Как исправить ошибку No module named. название файла?

    dunmaksim
    @dunmaksim
    Технический писатель
    Используйте конструкцию from ... import ... as .... Проверьте, есть ли в каталоге с модулем Stock файл __init__.py. Если его там нет - создайте.
    Ответ написан
  • Как обрабатывается SerializerMethodField при put, patch запросах?

    dunmaksim
    @dunmaksim
    Технический писатель
    Если мы говорим про Django Rest Framework, то есть 2 решения.

    1. Несколько сериализаторов, один для C, другой для R, третий для U. Потом во View переопределяем метод получения класса сериализатора в зависимости от метода запроса (POST, PUT, PATCH, GET):

    def get_serializer_class(self):
        method = self.request.method
        if method == 'POST':
            return CompanyCreateSerializer
        if method == 'PATCH':
            return CompanyUpdateSerializer
        if method == 'GET':
            return CompanyReadSerializer


    2. Создать сложный, запутанный сериализатор, наследник не ModelSerializer, а просто Serializer, и в нём переопределить поведение кучи методов (не рекомендую - устанете поддерживать потом).
    Ответ написан
    Комментировать
  • Каков наиболее предпочтительный способ управления зависимостями?

    dunmaksim
    @dunmaksim
    Технический писатель
    Положите в корень проекта файл REQUIREMENTS.txt и вызывайте pip вот так:
    pip install -r REQUIREMENTS.txt
    Ответ написан
  • При запуске Linux Debian 10 черный экран с ошибкой, как исправить?

    dunmaksim
    @dunmaksim
    Технический писатель
    У вас система работает с включенным EFI. Есть два способа решения этой проблемы: отключить EFI, после чего переустановить систему, и правильный. Поскольку у меня видеокарта NVidia RTX 2070, я пишу решение под неё. Версия ядра при написании руководства была 4.18.0-8, у вас может быть другой. При необходимости внесите изменения в команды:

    Обновите список пакетов и поставьте необходимый софт:

    apt-get update
    apt-get install nvidia-driver nvidia-xconfig linux-headers-amd64 mokutil build-essential


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

    # Генерация ключей и импорт в EFI
    cd  /root
    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=NVidia RTX 2070 key/"
    mokutil --import MOK.der
    
    # Подписывание драйверов Nvidia
    cd /lib/modules/4.19.0-8-amd64/updates/dkms/ # Используйте актуальную версию ядра
    /usr/lib/linux-kbuild-4.19/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der nvidia-current-drm.ko 
    /usr/lib/linux-kbuild-4.19/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der nvidia-current.ko 
    /usr/lib/linux-kbuild-4.19/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der nvidia-current-modeset.ko 
    /usr/lib/linux-kbuild-4.19/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der nvidia-current-uvm.ko 
    
    # Перенастройка Xorg под nvidia
    cd /etc/X11
    rm xorg.conf
    nvidia-xconfig


    Перезагрузите компьютер. При этом будет запущена специальная утилита EFI, которая позволит выполнить импорт сгенерированного ранее ключа в качестве доверенного. Буквально несколько раз подряд нажать Next.

    Пересоберите ядро:
    update-initramfs -u -k all

    Перезагрузитесь ещё раз.

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

    #!/bin/sh
    
    SIGN=/usr/lib/linux-kbuild-4.19/scripts/sign-file
    MOK=/root/MOK.priv
    DER=/root/MOK.der
    
    cd /lib/modules/$(uname -r)/updates/dkms/
    
    $SIGN sha256 $MOK $DER nvidia-current-drm.ko
    $SIGN sha256 $MOK $DER nvidia-current.ko
    $SIGN sha256 $MOK $DER nvidia-current-modeset.ko
    $SIGN sha256 $MOK $DER nvidia-current-uvm.ko
    
    update-initramfs -u -k all
    Ответ написан
    Комментировать
  • Что делать если при значении false, действия все равно выполняются?

    dunmaksim
    @dunmaksim
    Технический писатель
    Вы неправильно используете приведение типов в JavaScript. Ваш код по факту сравнивает не высоту блока с заданным числом, а строку с другой строкой, поэтому и поведение такое странное. Правильно писать так:
    (function (){
        "use strict";
    
        var bgBlock = document.getElementById("background_bar");
    
        if (bgBlock.scrollHeight > 80) { // bgBlock.scrollHeight всегда число
            // Какой-то код, который выполняется для высоты меньше 80 px
        } else {
            // Другой код, если блок меньше
        }
    }());


    Подробнее здесь.
    Ответ написан
  • Как упростить код с циклами for?

    dunmaksim
    @dunmaksim
    Технический писатель
    Я бы попробовал обходной путь. Получите список полей таблицы как кортеж и список переданных в данных полей, после чего пройдитесь по названиям полей данных, переданных пользователем. Добавьте в список валидных полей только те, что есть в таблице:

    columns = list(column.name for column in cls.storing_table.columns)
    data_fields = data.dict()
    validated_data_fields = []
    
    for data_field in data_fields:
        if data_field in columns: # Внутри скрытый for
            validated_data_fields.append(data_field)


    Попробуйте то же самое решение с применением множеств (внутри тоже два скрытых for'а):

    columns = set(list(column.name for column in cls.storing_table.columns))
    data_fields = set(data.dict())
    
    validated_fields = list(data_fields.intersection(columns)) # Вот тут скрытые for'ы


    Не используйте инструкцию assert в коде, выполняющемся на Production, потому что интерпретатор Python выбрасывает все строки с этим оператором при построении оптимизированного байт-кода (99,999% случаев на Production).
    Ответ написан
    Комментировать