Перейти к главному содержимому

Debian: работа со временем

Использование systemd-timesync

Запуск службы

systemctl start systemd-timesyncd.service

Установка времени по локальному, а не по UTC

Актуально если есть dual-boot с windows, чтоб при каждой перезагрузке не переставлять время.

timedatectl set-local-rtc 1

Настройка сервера для синхронизации

Файл настроек расположен тут: /etc/systemd/timesyncd.conf

Установка даты вручную

Остановить службу синхронизации и выставить время:

systemctl stop systemd-timesyncd
timedatectl set-ntp no
timedatectl set-time YYYY-MM-DD

Когда соответственно, чтоб включить - всё тоже самое, нов обратном порядке.

Синхронизировать аппаратные часы с системными

hwclock --systohc --localtime

Linux wine edit PATH

Если надо поменять системные пути PATH внутри окружения wine, то это можно сделать либо через вызов regedit и найти там параметр

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Реально эта ветвь реестра хранится в файле ~/.wine/system.reg и можно этот обычный текстовый файл отредактировать.

Там есть раздел:

[System\\CurrentControlSet\\Control\\Session Manager\\Environment]

Far menu

Menu for Far manager

Файл FarMenu.ini:

v:   Convert video
{
3:   video to mp3
     ffmpeg -i "!.!"  -codec:a libmp3lame -qscale:a 0 "!.mp3"
t:   video for telegram mp3
     ffmpeg -i "!.!" -c:v libx264 -crf !?Quality:?16! -profile:v baseline -flags +global_header -movflags +faststart -codec:a libmp3lame -qscale:a 3 "!.1.mov"
e:   Video for telegram AAC
     ffmpeg -i "!.!" -c:v libx264 -crf !?Quality:?16! -profile:v baseline -flags +global_header -movflags +faststart -c:a aac -ac 2 -qscale:a 3 "!.1.mov"
n:   video for telegram no sound
     ffmpeg -i "!.!" -c:v libx264 -crf !?Quality:?16! -an "!.1.mov"
w:   video to wav
     ffmpeg -i "!.!" "!.wav"
:    video for web
     ffmpeg -i "!.!" -c:v libvpx -b:v 0 -crf 16 -codec:a libvorbis -ac 2 -b:a 160k "!.webm"
a:   video to avi
     ffmpeg -i "!.!" -c:v mpeg4 -vtag xvid -qscale:v 5 -c:a libmp3lame -qscale:a 5 "!.1.avi"
}
--:  Git
G:   GitEx
     gitex
П:   GitEx
     gitex
:    gitk
     gitk
:    git gui
     git gui
--:  
:    LibreOffice
     soffice.exe "!\!.!"
D:   Diff dirs
     "C:\Programs\KDiff3_64_bit\kdiff3.exe" "!^!\." "!#!\."
:    Meld dirs
     "C:\Program Files\Meld\Meld.exe" !^!/ !#!/
M:   WinMerge
     WinMergeU.exe "!^!\!.!" "!#!\!.!"
:    Meld files
     "C:\Program Files\Meld\Meld.exe" "!^!\!.!" "!#!\!.!"
E:   View in Excel
     excel.exe "!\!.!"
S:   Search in files
     sif3
W:   View in Word
     WINWORD.EXE "!\!.!"
/:   Mplayer
     d:\opt\mpv\mpv "!\!.!"

Docker: hints

Запуск образа docker с примонтированным каталогом

Запуск docker c примонтированным каталогом и с удалением контейнера после запуска

docker run --rm -it -v /C/Users/user/Desktop/folder1:/src -w /src imagename:imagetag

Пример файла для сборки образа с ninja, и чтобы после запуска стартовал интерактивный shell:

FROM alpine:latest

RUN apk add ninja-build
RUN cp /usr/lib/ninja-build/bin/* /usr/bin/

ENTRYPOINT [ "/bin/sh" ]

Удаление всех неактуальных образов

Устаревшие образы, это те, у которых по выводу docker images поле REPOSITORY или TAG равны none.

Чтоб их удалить такая команда:

docker images | grep "<none>" | awk '{print $3}' | xargs -t docker rmi

LaTeX переменное количество строк и их вывод

Иногда бывает нужно добавлять переменное количество строк, к примеру, в преамбуле. А потом, где-то в недрах документа (или стилей) это все как-то вывести.

Такой пример:

% счетчик количества элементов в массиве
\newcount\My@arrname@cnt
\My@arrname@cnt = 0

% временные счетчики (используются для вывода)
% Могут быть одни на много массивов - уникальность не нужна
\newcount\My@tmpcnta
\newcount\My@tmpcntb

% команда добавить в массив
\newcommand{\MyArrayAddRaw}[1]{%
  \advance \My@arrname@cnt 1
  \@namedef{My@arrname@txt@\number\My@arrname@cnt}{#1}}

% команда на вывод
\newcommand{\OutputArray}{

  % вывод массива
  \My@tmpcnta = 1                   % a = 1
  \My@tmpcntb = \My@arrname@cnt     % b = number of elements
  \advance \My@tmpcntb 1            % b++
  \loop
  \ifnum \My@tmpcnta < \My@tmpcntb  % while (a < b)
    \@nameuse{My@arrname@txt@\number\My@tmpcnta}\par % use Array[a]
    \advance \My@tmpcnta 1          % a++;
  \repeat%

}

Bash: сколько времени в секундах прошло

Допустим есть два события, по которым вызываются скрипты.

Требуется во втором скрипте (по второму событию) узнать сколько времени прошло с первого события. Например, чтобы определить длительность нажатия кнопки.

Идея такая:

  • первый скрипт сохраняет временную метку в файл
  • второй скрипт вычисляет разность временных меток (сейчас минус то, что в файле)

Первый скрипт просто сохраняет метку:

date +"%s" > /tmp/stamp

Второй скрипт вычисляет разность:

TIMEDIFF=$(( ( $(date +%s) - $(date -r /tmp/stamp +%s) ) ))
echo $TIMEDIFF

if (( ${TIMEDIFF} > 2 )); then
  echo "### More than 2 seconds passed"
else
  echo "### Less than 2 seconds passed"
fi

Reaper burn CD

Запись Audio-CD

Образ диска создан при помощи Reaper в виде двух файлов .BIN и .CUE.

Разбиение на треки делается при помощи маркеров в Reaper и информация об этом и содержится в файле .CUE.

Для того, чтобы записать Audio-CD можно использовать любые программы, которые умеют писать диски.

Одна из них - консольная cdrecord. Эта программа входит и в комплект Reaper-a (можно записывать диски прямо из Reaper сразу после создания образа).

Иногда удобней записывать диски отдельно. Под Windows cdrecord расположен в подкаталоге Plugins в каталоге, где установлен сам Reaper.

Чтобы определить устройство, на котором будет производиться запись надо запустить:

cdrecord -scanbus

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

Пример записи образа диска, созданного в Reaper:

cdrecord -swab -dao -text gracetime=3 cuefile=image.cue -dev=0,0,0 -eject

В этой строке:

  • image.cue - файл, часть образа
  • -dev=0,0,0 - устройство для записи (список был получен на предыдущем шаге)
  • -eject - вытащить диск после записи
  • gracetime=3 - время ожидания перед началом записи
  • -swab - менять местами байты в отсчетах (сам Reaper вызывает cdrecord именно с таким параметром)
  • -text - записать текст на диск (видимо речь идет о названиях треков - надо проверять, что будет без этого параметра)
  • -dao - Disk-at-once сразу записать диск полностью и закрыть его

Python: преобразование docx в pdf

Описание

Скрипт работает только под windows. Для работы нужен установленный Microsoft Word и пакет для python comtypes.

Фактически скрипт делает тоже самое как если бы вы открыли документ в Word-e и нажали "Сохранить как" в формат pdf. То есть все так и происходит, сохраняет сам Word, только не надо запускать его явно и не надо никуда жать.

Установка зависимостей

Пакет comtypes можно установить стандартными средствами через pip:

pip3 install comtypes

Сам скрипт

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import sys

import comtypes.client

wdFormatPDF = 17

#########################################################################
def covx_to_pdf(infile, outfile):
    """Convert a Word .docx to PDF"""

    print("Creating object...")
    word = comtypes.client.CreateObject('Word.Application')
    print("Opening docx file...")
    doc = word.Documents.Open(infile)
    print("Saving pdf file...")
    doc.SaveAs(outfile, FileFormat=wdFormatPDF)
    print("Closing document...")
    doc.Close()
    print("Exiting...")
    word.Quit()

#########################################################################
def main():
  print("Start conversion.")
  covx_to_pdf("inputfile.docx", "outputfile.pdf")
  print("Finished.")
  return 0

#########################################################################
if __name__ == '__main__':
  ret = main()
  sys.exit(ret)