среда, 5 сентября 2012 г.

Быстрая раздача файлов

Для того чтобы быстро отдать файл/директорию на другую машину или мобильное устройство через HTTP можно использовать два способа (кроме использования DropBox).

  • Питоновский скриптик woof (есть в репозитории)
  • Питоновскую же команду python -m SimpleHTTPServer
  • Команда (echo -e "HTTP/1.1 200\nContent-Disposition: attachment; filename=my.file\nContent-Type: application/octet-stream\nConnection: close\n";cat my.real.file.here) | nc -l 8888

пятница, 29 июня 2012 г.

Ubuntu 12.04: Network Manager

Совершенно внезапно оказалось, что в новой десктопной версии Ubuntu 12.04 используется новая схема резолвинга сетевых имен. Сервис Network Manager больше не пишет настоящие адреса DNS-серверов в файл /etc/resolv.conf. Вместо этого туда прописывается nameserver 127.0.0.1, а на порту 127.0.0.1:53 гордо восседает dnsmasq.

Пока не совсем понятно как новая схема работы повлияет на функциональность внутренних виртуалок, но в любом случае отключить ее не составляет труда.

Тут описана причина и подробности: http://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/

This was done to better support split DNS for VPN users and to better handle DNS failures and fallbacks. This dnsmasq server isn’t a caching server for security reason to avoid risks related to local cache poisoning and users eavesdropping on other’s DNS queries on a multi-user system.

воскресенье, 24 июня 2012 г.

Brasero

Уже вторую подряд версию дистрибутива Ubuntu на моем лэптопе Brasero не записывает диски - также как и встроенный в Nautilus записыватель.

Судя по всему баг скрыт где-то в недрах libburn и присутствует не у меня одного. Проблема пока что решается отказом от записи-на-лету (on-the-fly). В таком режиме Brasero тратит дополнительное время (и дисковое пространство) на подготовку ISO-образа - после чего запись происходит без проблем. Так же лучше на всякий случай отключить в Brasero все включенные по умолчанию плагины - там все равно ничего полезного.

четверг, 21 июня 2012 г.

Skype 4.0.0.7

Как уже всем известно - вышел новый Skype четвертой версии.

Самый беспроблемный способ начать с ним работу прямо сейчас - скачать статический дистрибутив и распаковать его в /opt (под рутом конечно). Старый Skype из штатного репозитория удалять не нужно.

Один баг я уже запостил.

вторник, 5 июня 2012 г.

GIMP 2.8

Вышел новый GIMP 2.8. Сделали наконец-то режим одного окна, а то эти плавающие тулбары сильно раздражали, хотя и были концептуально правильными (конечно только с точки зрения разработчиков).

Версия 2.8 будет стандартной в Ubuntu 12.10, а пока что ее можно легко установить из PPA-репозитория.

Решение бага с отсутствием иконки GIMP в лаунчере Unity уже на подходе.

среда, 23 мая 2012 г.

Ubuntu 12.04: git, merge, mergetool, meld

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

Отмечу, что я уже давно традиционно разрешаю конфликты при слиянии и рибэйзе с помощью связки git mergetool и meld.

Разрешение конфликтов в Git

Краткий экскурс в процесс. Когда git в процессе слияния обнаруживает конфликты в файлах он прямо в этих же файлах устанавливает маркеры конфликтов в виде секций с разделителями "<<<<<<<" и ">>>>>>>". Нужно вручную убрать эти разделители и выбрать нужный код, после чего добавить файл в индекс git и сделать коммит. Конфликт считается разрешенным

Чтобы автоматизировать и облегчить процесс при большом количестве файлов, а также визуализировать различие в изменениях существует утилита git mergetool. Для каждого из конфликтных файлов она создает еще четыре вспомогательных служебных файла. На примере файла test.txt такими файлами будут:

  • test.txt.BACKUP.4071.txt - копия текущего файла test.txt (с маркерами конфликтов внутри)
  • test.txt.BASE.4071.txt - файл в ревизии, которая являющется базовой для обоих конфликтных версий
  • test.txt.LOCAL.4071.txt - "наша" версия файла
  • test.txt.REMOTE.4071.txt - "чужая" версия файла

После создания вспомогательных файлов mergetool вызывает любую указанную в параметрах команду и передает созданные файлы в качестве параметров. Это может быть консольная утилита автоматического слияния, полноценная GUI-программа для ручного слияния или любая другая команда. После того как устранение конфликтов в файле завершено mergetool сам добавляет файл в индекс и удаляет все вспомогательные файлы.

Я, как уже отметил ранее, использую в качестве такой команды утилиту meld.

Кто виноват?

Так вот - есть проблема. После обновления до 12.04 обновилось множество пакетов, в том числе и git и meld. Если раньше mergetool вызывал meld в режиме 2-way-merge, то сейчас meld вызываетcя в режиме 3-way-merge.

Ubuntu 11.10, Git 1:1.7.5.4-1, Meld 1.5.2-1ubuntu2

До обновления meld вызывался в режиме 2-way-merge. Это очень простой режим в котором все конфликты помечаются самим движком git, а meld используется только как удобный визуальный редактор. В трех панелях meld показываются три файла: "наш", конфликтный файл с маркерами конфликтов, "чужой" файл. Как я уже отметил, режим очень прост и в своей сути мало отличается от прямого редактирования конфликтного файла в любом текстовом редакторе.

Ubuntu 12.04, Git 1:1.7.9.5-1, Meld 1.5.3-1ubuntu1

После обновления Ubuntu новая версия meld вызывается (внезапно!) в режиме 3-way-merge. В этом режиме mergetool передает в meld три файла: "наш" файл, базовую для для обоих конфликтных версий ревизию файла, "чужой" файл. Сам конфликтный файл, в котором git сделал соответствующие метки конфликтов в утилиту не передается. Таким образом все сделанные в git маркеры конфликтов игнорируются, а весь процесс определения и разрешения конфликтов отдается на откуп самому meld.

Вот такой вот сюрприз. Есть люди, которым такое новое поведение видимо нравится. И действительно - в простейших случаях конфликты разрешать очень удобно: видно начальную версию файла до изменений, а также видно два последующих изменения, которые и привели к конфликту. В предыдущем же варианте вызова были видны только два изменения, оформленные в виде конфликтной секции - а вот что было до этих изменений (базовую версию) meld не показывал.

К сожалению, на практике новый режим работы meld к использованию не пригоден. Скорее всего дело в том, что git априори обладает более полной информацией о всех сделанных изменениях и, используя ее, git помечает конфликты точно и аккуратно, тогда же как meld вынужден работать только с тремя слепками файлов, а вся история ему недоступна.

Что делать?

К счастью, можно настроить mergetool как угодно и после этого не зависеть от изменений в запрограммированном по-умолчанию поведении git и mergetool. Сначала программируем оба варианта поведения и даем им уникальные имена.

git config --global mergetool.meld2way.cmd 'meld "$LOCAL" "$MERGED" "$REMOTE"'
git config --global mergetool.meld3way.cmd 'meld --output "$MERGED" "$LOCAL" "$BASE" "$REMOTE"'

После этого можно вызывать команды "git mergetool -t meld2way" и "git mergetool -t meld3way". Также можно указать установку старого поведения в качестве варианта по умолчанию.

git config --global merge.tool meld2way

После этого git mergetool/meld ведут себя также покладисто как и раньше.

вторник, 8 мая 2012 г.

Ubuntu 12.04 - новый софт

С новым дистрибутивом пришел и новый софт

  • В штатном репозитории появился MySQL Workbench. Старые инструменты работы с MySQL (Query, Admin) убраны
  • VLC 2.0.1 имеет проблему при работе с большим буфером. Я ставлю буфер на 5-10 секунд для предотвращения лагов на динамичных сценах с большим битрейтом при Wi-Fi подключении. Поставил новый VLC 2.1 - вроде таких проблем нет.
  • Новый Conky 1.8.1-6 теперь некорректно обрабатывает команды ${execi} - выводит "(null)" если период обновления больше чем uptime системы. Откомпилированной новой версии 1.9 в PPA не нашел, самому пакетировать лень. Пока сделал хак в конфиге и вручную заапдейтил до 1.9 (но можно и задаунгрейдить до 1.8.1-2).
  • Кто-то срет при загрузке системы в домашнюю директорию файлами .goutputstream
  • Уровень подсветки у меня так же не сохраняется (как и в 11.10) при перезагрузке. Более того теперь иногда не помогает даже "cat 5 > /sys/class/backlight/acpi_video0/brightness" в rc.local - видимо при загрузке иксов кто-то некорректно переустанавливает уровень. Поставил из репы утилитку xbacklight и прописал ее в автозагрузку Unity благо прав суперпользователя она не требует в отличие от прямой записи в "/sys/*".

Текущий конфиг Conky

# Conky configuration file (~/.conkyrc)
# http://ubuntudrom.blogspot.com/search/label/conky

own_window yes
own_window_type override
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_colour brown

alignment top_right
minimum_size 240 700
maximum_width 240
gap_x 20
gap_y 40

double_buffer yes
use_spacer right
use_xft yes

update_interval 2.0
update_interval_on_battery 5.0
cpu_avg_samples 2

draw_shades no
draw_outline no
draw_graph_borders yes
draw_borders no
stippled_borders 0
border_width 0
border_inner_margin 10
border_outer_margin 0

default_color grey
default_bar_size 10 60

xftfont ubuntu:size=8
xftalpha 1
text_buffer_size 512

imlib_cache_size 4194304
imlib_cache_flush_interval 10

uppercase no
format_human_readable yes

top_name_width 18
top_cpu_separate false

TEXT
# ------ System
${time} ${alignr} ${nodename}
Kernel: ${kernel} ${alignr} Uptime: ${uptime}

# ------ Weather
# http://info.weather.yandex.net/yoshkar-ola/2_white.png
# http://info.weather.yandex.net/moscow/2_white.png
${color orange}Weather${color}
${execi 600 wget -q --timeout=10 -O- "http://info.weather.yandex.net/moscow/2_white.png" | convert -crop "200x54+0+28" -alpha Activate -channel alpha -evaluate multiply 0.7 "png:-" "png:${HOME}/.conkyweather" }
${voffset 18}
${alignc}${image ~/.conkyweather -f 30 -p 20,58}

# ------ CPU
${color orange}CPU${color}
Total: ${cpu cpu0}% ${alignr} Temp: ${acpitemp}°C
${alignc}${cpugraph 0 20,240 e5e5e5 F1AA0E}
${freq_g 1}GHz${goto 74}${freq_g 2}GHz${goto 136}${freq_g 3}GHz${goto 198}${freq_g 4}GHz
${cpugraph 1 10,52 e5e5e5 F1AA0E}${goto 74}${cpugraph 10,52 e5e5e5 F1AA0E}${goto 136}${cpugraph 3 10,52 e5e5e5 F1AA0E}${goto 198}${cpugraph 4 10,52 e5e5e5 F1AA0E}
${voffset 2}
Load: ${loadavg}
${alignc}${loadgraph 20,240 e5e5e5 F1AA0E}
${top name 1}${goto 120}${top pid 1}${goto 150}${top cpu 1}${goto 180}${top mem 1}${goto 210}${top time 1}
${top name 2}${goto 120}${top pid 2}${goto 150}${top cpu 2}${goto 180}${top mem 2}${goto 210}${top time 2}

# ------ Memory
${color orange}Memory${color}
Used: ${mem} / ${memmax} (${memperc}%) ${alignr} Swap: ${swapperc}%
${memgraph 20,170 e5e5e5 F1AA0E} ${alignr} ${swapbar 20,60}
${top_mem name 1}${goto 120}${top_mem pid 1}${goto 150}${top_mem cpu 1}${goto 180}${top_mem mem 1}${goto 210}${top_mem time 1}
${top_mem name 2}${goto 120}${top_mem pid 2}${goto 150}${top_mem cpu 2}${goto 180}${top_mem mem 2}${goto 210}${top_mem time 2}

# ------ Disk
${color orange}Disk${color}
${alignc}${diskiograph /dev/sda 20,240 e5e5e5 F1AA0E}
root: ${fs_used_perc /}% ${alignr} ${fs_bar 10,180 /}

# ------ Network
${if_up wlan0}\
${if_existing /sys/class/net/wlan0/operstate up}\
${color orange}Network${color} ${alignr} wlan0: ${addr wlan0}
essid: ${wireless_essid wlan0} (${wireless_bitrate wlan0}) ${alignr} q: ${wireless_link_qual_perc wlan0}
${downspeedgraph wlan0 20,110 e5e5e5 F1AA0E} ${alignr} ${upspeedgraph wlan0 20,110 e5e5e5 F1AA0E}
<< ${totaldown wlan0} / ${downspeed wlan0} ${alignr} ${totalup wlan0} / ${upspeed wlan0} >>

${endif}\
${endif}\
${if_up eth0}\
${if_existing /sys/class/net/eth0/operstate up}\
${color orange}Network${color} ${alignr} eth0: ${addr eth0}
${downspeedgraph eth0 20,110 e5e5e5 F1AA0E} ${alignr} ${upspeedgraph eth0 20,110 e5e5e5 F1AA0E}
<< ${totaldown eth0} / ${downspeed eth0} ${alignr} ${totalup eth0} / ${upspeed eth0} >>

${endif}\
${endif}\
\
# ------ Battery
${if_existing /proc/acpi/battery/BAT0/info}\
${color orange}Battery${color}
cap: ${battery_percent BAT0}% ${alignr} ${battery_bar 10,180 BAT0}
${endif}\
\
# ------ Misc