Темы выпуска: настройка Claws Mail, генерация UUID и каррирование в Erlang, как в Linux заблокировать экран перед выполнением pm-suspend
, и не только. Предыдущие выпуски: одиннадцатый , десятый , девятый , восьмой .
1. Как сгенерировать UUID в Erlang
Генерация валидного UUID 4-ой версии занимает пять строк кода на Erlang:
— 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:
gksudo ~ / bin / suspend-priv
Файл ~/bin/suspend-priv:
sudo -u eax i3lock -c 000000 & ( sleep 3 && pm-suspend )
Решение вполне очевидное — блокируем экран, и только потом уходим в suspend. Фокус в том, чтобы выполнить все команды в правильной последовательности и от имени нужных пользователей.
3. Каррирование в Erlang
В Erlang нет каррирования, но его можно добавить:
{ 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 нет проверки орфографии русского языка. Говорим:
… и русские слова больше не выделяются красным. Если, конечно, в них нет ошибок.
5. Почему Си не является подмножеством C++
Программа выводит «C», если собрать ее с помощью gcc, и «C++», если с помощью g++:
int main ( ) {
printf ( «%s n » , ( sizeof ( ‘a’ ) == sizeof ( char ) ) ? «C++» : «C» ) ;
return 0 ;
}
via @konung .
6. Перенаправление stdout в два пайпа
Следующая команда считает количество строк в файле и сжимает его в один проход:
via @truecrux .
7. Еще один скрипт для создания скриншотов
Делаем скриншот экрана, заливаем его на radikal.ru, открываем в pixlr.com, удаляем с radikal.ru:
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+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:
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