BGUSBB1. Разъем гнездо USB типа B для крепления на панель или корпус

Описание

BGUSBB1-12-02-20

Добавление Sitemap с помощью DjangoCMS

Sitemap — XML-файлы с информацией для поисковых систем (таких как Google, Яндекс, Bing, Поиск@Mail.Ru) о страницах веб-сайта, которые подлежат индексации.

DjangoCMS может самостоятельно сгенерировать Sitemap с опубликованными на сайте страницами.

Настроить выдачу Sitemap очень просто, следуя следующей инструкции.

  1. В файле настроек settings.py добавляем django.contrib.sitemaps в INSTALLED_APPS.
  2. Добавляем следующую строчку в начало файла urls.py.
    from cms.sitemaps import CMSSitemap
  3. В том же файле (urls.py) добавляем в список urlpatterns следующий код.
    url(
        r'^sitemap\.xml$',
        'django.contrib.sitemaps.views.sitemap',
        {'sitemaps': {'cmspages': CMSSitemap}}
    ),
    
  4. Запускаем локальный сайт. Вводим в адресную строку браузера http://127.0.0.1:8000/sitemap.xml (или кликаем по ссылке) и убеждаемся в наличие Sitemap.

Ссылки

How to create sitemaps (официальная документация на английском)

Резервное копирование и восстановление данных на OpenShift

Сделать резервную копию или восстановить данные из резервной копии можно с помощью инструмента rhc.

Команда для резервирования


rhc snapshot-save -a <имя приложения>

Эта команда останавливает приложение и архивирует его на локальный компьютер. Архив включает Git-репозиторий, дампы базы данных и прочую информацию.

Команда для восстановления


rhc snapshot-restore -f <архив> -a <имя приложения>

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

Автоматизация резервирования

Делается с помощью скрипта и планировщика заданий.

Bash-скрипт.

#!/bin/bash

appname="имя приложения"
backup_dir="путь к папку с резервными копиями"
filename="${appname}_`date --utc +'%Y-%m-%d_%H-%M-%S_UTC'`.tar.gz"

cd "$backup_dir"
rhc snapshot-save -f "$filename" -a "$appname"

Скрипт резервирует приложение appname, добавляет метку времени к имени файла архива и размещает его в папке backup_dir.

Ссылки

Красивая разница в Git для файла проекта Qt

Обычно, при добавлении файлов в проект Qt, разница файла проекта (*.pro) в Git выглядит следующим образом.

bad-diff-in-git-qt-pro

Добавили всего 2 файла foo3.h и foo3.cpp, а получили 6 изменений.

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

good-diff-in-git-qt-pro

Получается при добавлении двух файлов всего 2 изменения.

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

Слияние независимых репозиториев в Git

Git без проблем позволяет слить два разных проекта в один.

tree-of-merge-different-projects-in-git

Сделать это очень просто.

  1. Делаем резервные копии репозиториев, если они не синхронизированы с серверов.
  2. В первом репозитории добавляем внешний репозиторий, в качестве которого указываем путь ко второму репозиторию. Путь может быть локальным или к репозиторию на сервере.
  3. Подкачиваем второй репозиторий.
  4. Если вы работаете в Git Gui, то добавляем метку к ветки второго репозитория.
  5. Производим слияние веток первого и второго репозитория. В Git Gui для этого нужно использовать метку.

Устранение ошибки проверки правописания в Git Gui на Ubuntu

При запуске Git Gui на Ubuntu 16.04, пользователь может получить следующую ошибку:

Проверка правописания не доступна: No word lists can be found for the language «ru_Ru»

Есть два способа ее устранения.

  1. Установить пакет Aspell.
    sudo apt install aspell-ru
    
  2. Настроить проверку правописания через меню «Редактировать -> Настройки…».

Openshift и Django: раздача загруженных файлов

Интерфейс сайта может позволять пользователю загружать файлы. Файлы должны загружаться в папку, которая указана в переменной MEDIA_ROOT в файле settings.py следующим образом.

MEDIA_ROOT = os.path.join(os.environ['OPENSHIFT_DATA_DIR'], 'media')

Переменная окружения OPENSHIFT_DATA_DIR хранит путь к папке, которая специально предназначена для постоянного хранения данных на сервере. Поэтому именно там должна размещаться папка media, куда попадают загружаемые файлы.

При использовании Django-CMS, файлы загружаются именно в MEDIA_ROOT.

Но есть сложность с раздачей этих файлов. Django не имеет инструментов для раздачи загруженных файлов на боевом сервере.

Чтобы раздавать загруженные файлы надо пойти на хитрость. Сделать так, чтобы они раздавались как static-файлы.

static-файлы автоматически собираются в папку, которая указана в переменной STATIC_ROOT.

Читать далее Openshift и Django: раздача загруженных файлов

Эмуляция Android в VirtualBox

Android-VirtualBox-24

Бесплатное и кроссплатформенное решение. Работает на любой операционной системе на которой может работать VirtualBox, то есть почти на любой (Windows, OS X, Linux, Solaris).

Нам понадобится:

Читать далее Эмуляция Android в VirtualBox

Что означает REF на английских чертежах

На следующем чертеже множество размеров с пометкой REF.

REF

REF (Reference dimension) — размер для справок.

Это понятие пересекается с понятием из ГОСТ 2.307-2011:

3.3 справочные размеры: Размеры, не подлежащие выполнению по данному графическому документу и указываемые для большего удобства пользования этим документом.

4.3 Справочные размеры отмечают знаком «*», а в технических требованиях записывают: «*Размеры для справок». Если все размеры справочные, их знаком «*» не отмечают, а в технических требованиях записывают: «Размеры для справок».

REF_GOST

ARM и специфичный для компиляторов код

Любой разработчик компиляторов расширяет язык программирования и расширяет по своему.

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

Ниже приведен пример кода для некоторых ARM-компиляторов.


#if defined (__CC_ARM)
    /* Код для компилятора Keil */
#elif defined (__ICCARM__)
    /* Код для компилятора IAR */
#elif defined ( __GNUC__ )
    /* Код для компилятора GNU */
#elif defined (__TASKING__)
    /* Код для компилятора TASKING */
#else
    /* Неизвестный компилятор */
    #error Unknown compiler
#endif