mini-notes-issue-12/

Темы выпуска: настройка Claws Mail, генерация UUID и каррирование в Erlang, как в Linux заблокировать экран перед выполнением pm-suspend , и не только. Предыдущие выпуски: одиннадцатый , десятый , девятый , восьмой .

1. Как сгенерировать UUID в Erlang

Генерация валидного UUID 4-ой версии занимает пять строк кода на Erlang:

module ( uuid ) .

export ( [
generate / 0
] ) .

generate ( ) ->
<< A : 32 , B : 16 , C : 16 , D : 16 , E : 48 >> = crypto : rand_bytes ( 16 ) ,
Str = io_lib : format (
«~8.16.0b-~4.16.0b-4~3.16.0b-~4.16.0b-~12.16.0b» ,
[ A , B , C band 16 #0fff , D band 16 #3fff bor 16 # 8000 , E ] ) ,
list_to_binary ( Str ) .

Библиотека для подключения этого кода к своему проекту доступна на GitHub .

2. Как в Linux одновременно сделать suspend и lock

Если просто приостановить операционку командой pm-suspend , то после выхода из suspend любой сможет получить доступ к вашей системе. Я решил эту проблему следующим образом.

Файл ~/bin/suspend:

#!/bin/sh

gksudo ~ / bin / suspend-priv

Файл ~/bin/suspend-priv:

#!/bin/sh

sudo -u eax i3lock -c 000000 & ( sleep 3 && pm-suspend )

Решение вполне очевидное — блокируем экран, и только потом уходим в suspend. Фокус в том, чтобы выполнить все команды в правильной последовательности и от имени нужных пользователей.

3. Каррирование в Erlang

В Erlang нет каррирования, но его можно добавить:

1 > F0 = curried: make ( fun ( A , B , C , D , E , F ) -> [ A , B , C , D , E , F ] end ) .
{ curried_function , #Fun < erl_eval . 17 . 17052888 > , 6 , [ ] , [ ] }
2 > F1 = curried: apply ( F0 , [ 1 , 2 , 3 ] ) .
{ curried_function , #Fun < erl_eval . 17 . 17052888 > , 3 , [ 3 , 2 , 1 ] , [ ] }
3 > curried: arity ( F1 ) .
3
4 > F2 = curried: rapply ( F1 , [ 5 , 6 ] ) .
{ curried_function , #Fun < erl_eval . 17 . 17052888 > , 1 , [ 3 , 2 , 1 ] , [ 5 , 6 ] }
5 > curried: apply ( F2 , [ 4 ] ) .
[ 1 , 2 , 3 , 4 , 5 , 6 ]

Код библиотеки доступен на GitHub .

4. Проверка орфографии русского языка в Claws Mail

«Из коробки» в моем любимом почтовом клиенте Claws Mail нет проверки орфографии русского языка. Говорим:

sudo aptitude install hunspell-ru

… и русские слова больше не выделяются красным. Если, конечно, в них нет ошибок.

5. Почему Си не является подмножеством C++

Программа выводит «C», если собрать ее с помощью gcc, и «C++», если с помощью g++:

#include <stdio.h>

int main ( ) {
printf ( «%s n » , ( sizeof ( ‘a’ ) == sizeof ( char ) ) ? «C++» : «C» ) ;
return 0 ;
}

via @konung .

6. Перенаправление stdout в два пайпа

Следующая команда считает количество строк в файле и сжимает его в один проход:

cat test.c | tee > ( wc -l >& 2 ) | gzip > test.gz

via @truecrux .

7. Еще один скрипт для создания скриншотов

Делаем скриншот экрана, заливаем его на radikal.ru, открываем в pixlr.com, удаляем с radikal.ru:

#!/usr/bin/env perl

use strict ;
use warnings ;

`scrot /tmp/new-screenshot.png` ;
my $rslt = `radikal-upload /tmp/new-screenshot.png` ;
die if $? ;

my ( $img ) = $rslt =~ /Image:s(.*)/ ;
my ( $del ) = $rslt =~ /Delete:s(.*)/ ;

`chromium-browser http://pixlr.com/editor/?image=$img` ;

sleep 30 ;
`$del` ;

Скрипт radikal-upload вы найдете в конце 10-го выпуске мини-заметок .

8. Увеличиваем количество рабочих столов в i3

По-умолчанию в оконном менеджере i3 доступно всего-навсего десять рабочих столов. Дописываем в ~/.i3/config:

bindsym $mod+y workspace 11
bindsym $mod+u workspace 12
bindsym $mod+i workspace 13
bindsym $mod+o workspace 14
bindsym $mod+p workspace 15

bindsym $mod+Shift+Y move container to workspace 11
bindsym $mod+Shift+U move container to workspace 12
bindsym $mod+Shift+I move container to workspace 13
bindsym $mod+Shift+O move container to workspace 14
bindsym $mod+Shift+P move container to workspace 15

Жмем Win+Shift+R. Теперь рабочих столов стало пятнадцать!

9. Алиасы в SSH

Прописываем в ~/.ssh/config:

Host user.dev
Hostname user.dev.example.com
User user
ForwardAgent yes

Говорим ssh user.dev . Это будет полностью аналогично более длинной команде ssh -A user @ user.dev.example.com .

10. Синхронизация фильтров в Claws Mail

Все фильтры хранятся в файле ~/.claws-mail/matcherrc. Просто копируем его с машины на машину.

Дополнение: Мини заметки — выпуск 13, полностью посвященный Linux

EnglishRussianUkrainian