Мини заметки — выпуск 18

16 июня 2014

Мини заметок не было уже более трех месяцев. Настало время исправить эту вопиющую несправедливость. Сегодня мы выясним, как посмотреть текущую позицию в WAL PostgreSQL и узнать, сколько места подо что использует эта СУБД, потюним Terminal в Ubuntu Linux, напишем очередной, на этот раз почти удобный, аналог clip2net, и не только. Предыдущие выпуски: семнадцатый, шестнадцатый, пятнадцатый, четырнадцатый.

1. Небольшой тюнинг CSS у Terminal в Ubuntu

После покупки очередного ноутбука и установки на него Ubuntu 14.04, я решил остаться под Unity и посмотреть, что из этого выйдет. В общем и целом я остался вполне всем доволен, если не считать пары косяков в Terminal. Во-первых, оказалось, что при открытии в нем нескольких вкладок вокруг окна появляется такой мерзкий белый бордюр. Во-вторых, выяснилось, что цвет текущей вкладки почти ничем не отличается от цвета прочих, неактивных, вкладок.

Однако решить эти проблемы оказалось на удивление просто. Открываем файл ~/.config/gtk-3.0/gtk.css и пишем туда:

TerminalWindow .notebook {
  padding: 0;
  border-width: 0;
}

TerminalWindow,
TerminalWindow.background {
  background-image: none;
  background-color: #6e6e6e;
  color: #000000;
}

TerminalWindow .notebook tab {
  padding: 0;
  border-image: none;
  border-width: 0;
  background-color: #6e6e6e;
}

TerminalWindow .notebook tab:active {
   padding: 0;
   border-image: none;
   border-width: 0;
   background-color: #d1d1d1;
}

Закрываем все окна Terminal и открываем снова. Белый бордюр больше не появляется, а ошибиться с тем, какая из вкладок является текущей, становится очень непросто.

2. Как в Maven прописать репозитории компании

Создаем файл ~/.m2/settings.xml примерно следующего содержания:

<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/SETTINGS/1.0.0">
    <mirrors>
        <mirror>
            <mirrorOf>central</mirrorOf>
            <url>http://nexus.example.com/content/groups/public</url>
            <id>example-public</id>
        </mirror>
        <!-- ... other mirrors ... -->
    </mirrors>
</settings>

К сожалению, если репозитории доступны только внутри VPN, вам придется быть онлайн и подключать этот самый VPN даже при сборке проектов, которым эти корпоративные репозитории и не нужны. Похоже, что эта проблема решается только путем временного переименования settings.xml в settings.xml.backup. Интересно, а есть ли какие-то плагины, позволяющие хранить все эти настройки в pom.xml проекта?

3. API «поделиться ссылкой» популярных соц сетей

Если вы хотите разметить на своем сайте красивые кнопочки социальных сетей, которые не будет резать Adblock Plus, то вам пригодится следующие URL-ы:

https://twitter.com/intent/tweet?text=123&url=http://eax.me/&via=user
https://vk.com/share.php?url=http://eax.me/&title=aaa&description=bbb
https://www.facebook.com/sharer/sharer.php?u=http://eax.me/
https://plus.google.com/share?url=http://eax.me/

Если вас интересуют другие социальные сети, то URL-ы для них можно надергать из кода, который гененрирует share42.com.

4. Как получить текущее смещение в WAL PostgreSQL

Это можно сделать таким образом:

test=> select pg_current_xlog_location();
 pg_current_xlog_location
--------------------------
 1A/5828E6F8
(1 row)

Сей прием можно использовать для разных прикольных вещей. Например, у нас настроена асинхронная репликация. Пишем на мастер, получаем смещение WAL, ждем, когда смещение станет таким же или больше на реплике. Когда данные доехали до реплики, мы точно знаем, что они сохранены как минимум на двух серверах. В итоге получается что-то типа chain replication.

5. Сколько места на диске и под что использует PostgreSQL

Размер базы данных:

SELECT pg_size_pretty(pg_database_size('projectdb'));

Полный размер таблицы:

SELECT pg_size_pretty(pg_total_relation_size('transactions'));

Размер таблицы без индексов:

SELECT pg_size_pretty(pg_relation_size('transactions'));

Найти самые большие таблицы/индексы:

SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;

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

6. Использование HJKL вместо стрелочек в Zsh

Чтобы в Zsh при выборе варианта автокомплита и так далее вместо стрелочек использовать те же клавиши, что вы используете в Vim, пропишите в ваш .zshrc следующее:

bindkey "^H" backward-char
bindkey "^J" down-line-or-history
bindkey "^K" up-line-or-history
bindkey "^L" forward-char

zmodload zsh/complist
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'j' vi-down-line-or-history
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char

… а затем скажите source ~/.zshrc.

7. Скрипты для загрузки в интернеты скриншотов и текста

Моя очередная вариация на тему «как сделать clip2net из говна и палок».

Файл ~/bin/clipaste:

#!/bin/sh

URL=`xclip -selection c -o | pastebinit`
echo $URL | xclip -selection c
notify-send "ClipPaste" "Uploaded to $URL" -i www-browser

Файл ~/bin/screepaste:

#!/bin/sh

FNAME=`date +%s`
scrot /tmp/$FNAME.png
mtpaint /tmp/$FNAME.png
URL=`yfrog-upload /tmp/$FNAME.png | grep imageshack.us | cut -f 2`
echo $URL | xclip -selection c
notify-send "ScreePaste" "Uploaded to $URL" -i www-browser

Как несложно догадаться по названиям скриптов, первый скрипт заливает в эти ваши интернеты содержимое буфера обмена, а второй делает скриншот экрана, который перед заливкой открывается в графическом редакторе mtpaint. Скрипт yfrog-upload можно найти в седьмом выпуске мини заметок. Утилиты xclip, mtpaint, scrot и pastebinit ставятся из быбунтовских репозиториев. При желании скрипты можно повесить на какие-нибудь хоткеи.

Кстати, clipaste можно использовать в качестве удлинителя твитов.

8. Как в Ubuntu отключить тачпад

Тачпад может мешаться при наборе текста, так как случайные касания тачпада переносят курсор куда-то в середину текста. Если вдруг у вас автоматически не подрубилась кнопки для включения и отключения тачпада, можно настроить их следующим образом.

Говорим:

xinput list

Находим id тачпада. У меня он оказался 13. Затем говорим:

xinput set-prop 13 "Device Enabled" 0

Чтобы снова включить тачпад, заменяем 0 на 1. Затем фигачим скрипты touchon и touchoff.

9. Смена яркости экрана в Ubuntu 13.10

После обновления до Ubuntu 13.10 у меня сломались регулировка яркости экрана. Для этого использовалась утилита xbacklight, повешенная на определенные хоткеи в конфиге i3. Для решения этой проблемы был написан следующий скрипт:

#!/usr/bin/env perl

use strict;
use warnings;

my $PRFX = "/sys/class/backlight/intel_backlight";

my $inc = shift || die "Usage: $0 <percent_increment>";

my $max_brightness = `cat $PRFX/max_brightness`;
chomp $max_brightness;

my $curr_brightness = `cat $PRFX/brightness`;
chomp $curr_brightness;

my $one_percent = int($max_brightness / 100);
my $min_brightness = int(10 * $one_percent);

my $new_brightness = int($curr_brightness + $inc*$one_percent);
if( $new_brightness < $min_brightness ) {
  $new_brightness = $min_brightness;
} elsif( $new_brightness > $max_brightness ) {
  $new_brightness = $max_brightness;
}

warn "curr = $curr_brightness, max = $max_brightness, min = $min_brightness, inc = $inc, 1% = $one_percent, new = $new_brightness\n";

`echo $new_brightness > $PRFX/brightness`;

Говорим:

chmod 666 /sys/class/backlight/intel_backlight/brightness

… а также прописываем эту команду в /etc/rc.local перед exit 0. Вешаем скрипт на хоткеи, жмем Ctr+Shift+R, чтобы i3 перечитал свой конфиг, и снова радуемся жизни.

10. Небольшая шпаргалка по LLVM

Установка:

sudo apt-get install clang
sudo apt-get install llvm

Файл test.c:

#include <stdio.h>

int main() {
  printf("Hello, world!\n");
  return 0;
}

Трансляция в код LLVM, компиляция и линковка:

clang -cc1 test.c -emit-llvm
llc test.ll
as test.s -o test.o
ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 \
  /usr/lib/x86_64-linux-gnu/crt1.o \
  /usr/lib/x86_64-linux-gnu/crti.o \
  test.o -lc \
  /usr/lib/x86_64-linux-gnu/crtn.o \
  -o test

См также LLVM Language Reference Manual.

Как всегда, я буду рад любым вашим комментариям как касательно написанного, так и вообще.

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.