понедельник, 5 ноября 2012 г.

XOR и деревья

Наткнулся на интересную имплементацию бинарного дерева: в каждой ноде вместо трёх пойнтеров (на родителя + на 2-х чайлдов) лежит два (!) поXORенных значения указателей -- для каждого чайлда с родителем. А в итераторе два указателя вместо одного -- на текущую ноду и на родителя. Ну прекрасно же, а.

вторник, 10 апреля 2012 г.

Натравливаем aptitude на ненужные пакеты

По идее, aptitude должно удалять их за нас само. Там для каждого пакета даже наличие флажка специального предусмотрено -- automatically installed. Но это в идеальном вакууме. На практике вы часто что-то ставите руками, а потом забываете сделать remove или unmarkauto. Хуже того, вам придётся пометить как установленные вручную пакеты с приоритетами required, important и standard, чтобы оно вам ничего лишнего не снесло. Поддерживать такой список пакетов вручную смерть есмь. Решение следующее -- будем помечать необходимые пакеты специально обученным тэгом:
# aptitude add-user-tag mytag <package>...
Отключаем ненужное автоматическое удаление неиспользуемых пакетов -- его и вручную несложно запустить.
Затем пишем скрипт, помечающий всё, что не нужно, как automatically installed:
/root/bin/markallauto:
# !/bin/bash
aptitude markauto `aptitude -F %p --disable-columns search "~i ?not(~M)"`
aptitude unmarkauto `aptitude -F %p --disable-columns search "?user-tag(mytag)" ~prequired ~pimportant ~pstandard`
Помечаем необходимые пакеты тэгом и запускаем скрипт. Всё это делаем, конечно, от рута.
Удаляем мусор:
# aptitude remove ~g ~o
Радуемся полчаса.

Если вы после этого сделали (safe|full)-upgrade, примените клизму повторно.