Мини заметки — выпуск 12
22 мая 2013
Темы выпуска: настройка 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
Метки: Всячина.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.