esyr: (Default)
2010-10-03 12:32 am
Entry tags:
esyr: (Default)
2010-09-26 02:12 pm

Metro.people

Вот эта девочка зачем-то фотографировала меня в метро. Всё бы ничего, но со вспышкой. На телефон (какую-то нокию N-серии). Сиречь, светодиод этот светил с секунду.
esyr: (Default)
2010-05-03 04:27 am
Entry tags:
esyr: (eye 4)
2010-05-03 03:58 am
Entry tags:
esyr: (Default)
2010-04-22 10:17 am

(no subject)

Вот интересно. Какой-то бот составляет структуру ЖЖ по кластерам. ИЧСХ, сюда я почему-то попал, а сюда — почему-то — нет. ЧЯДНТ?
esyr: (Default)
2010-03-26 01:07 pm
Entry tags:

[wiki] Список внешних ресурсов с учебными материалами

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

Собственно, сабж. Писал по памяти, так что много чего нет (забылось с годами). Если кто ещё что помнит — дополняйте.

Да, ешё практически перед самой смертью на фдс-нете выкладывалась подборка ботвы. Если кому надо, могу её захостить, только дайте, откуда её скачать.
esyr: (Default)
2010-03-14 05:12 pm

[bourne shell] Построчное чтение, перенаправление и грабли

Вероятно, многие знают, что при помощи shell built-in read можно построчно читать всякое; особенно это актуально при считывании списка файлов, которые потенциально могут содержать пробелы (например, в выдаче ls или find) или чего-то подобного. Обычно это делается так:

Построчное чтение из файла:
while read line
do
  # code
done < file

Построчное чтение результата выполнения команды (вариант с перенаправлением):
ls | while read line
do
  # code
done

Вроде бы всё хорошо. Проблемы могут начаться в случае, когда во время чтения нужно изменять значения переменных. А именно, последний (и, кстати, наиболее часто используемый в случае, когда нужно обработать вывод команды, а не читать из файла) вариант приводит к созданию дочернего процесса (pipe же!), что приводит к тому, что все изменения переменных внутри тела цикла выполняются в подпроцессе и, как следствие, на процессе, в котором выполняется скрипт, не попадают. Это можно легко увидеть на следующем примере:
i=0; seq 1 3| while read line; do i=$(( $i + 1 )); done; echo $i
В bash и dash в результате будет выдан 0, в zsh и ksh (которые исполняют последний элемент пайплайна в текущем процессе в случае, если это shell built-in) — 3.
Обойти эту проблему можно несколькими способами. Один из них — использовать heredoc:
while read a b
do
  i=$(( $i + 1 ))
done <<EOF
`seq 1 3 | sed 's/^/1 /'`
EOF
echo $i
При этом, как можно видеть из примера выше, можно использовать произвольный пайплайн.
Очевидный недостаток этого решения — прежде, чем результат выполнения будет передан в цикл, он полностью будет получен. Это можно попытаться обойти, например, путём создания временного FIFO-файла:
fifofile=`mktemp`
rm "$fifofile"
mkfifo "$fifofile"

ls | sed 's/^/1 /' > "$fifofile" & # random command which output we need to parse
while read a b
do
  i=$(( $i + 1 ))
done < "$fifofile"
echo $i

rm "$fifofile"
Очевидно, что в данном случае строчка rm "$fifofile" будет выполнена после завершения цикла, что, по идее (так как read ждёт закрытия потока ввода), произойдёт только после завершения процесса, пишущего в FIFO и считывания из него всех данных.
Но всё же ощущается неаккуратность в виде наличия временных файлов. Тем более, что упражнение вида mktemp—rm—mkfifo теоретически может породить рейс. Можно попробовать соорудить конструкцию с созданием дескрипторов (like, exec 3<&0>&1):
exec 3<&0>&1

ls | sed 's/^/1 /' >&3 & # random command which output we need to parse
while read -u 3 a b
do
  i=$(( $i + 1 ))
done
echo $i

exec 3<&->&-

И, казалось бы, счастье есть: мы можем запихать произвольный пайплайн из процессов в этот дескриптор, а потом читать из него (или с помощью специального ключика у read, как в примере выше, или же просто <&3. Осталась одна маленькая проблема: если попытаться прибить скрипт до окончания его работы, то это ему ничуть не помешает. Посему, нужно повесить trap, который убивает дочерний процесс и завершает работу:
trap 'kill -9 $cpid; exit' TERM INT

exec 3<&0>&1

ls | sed 's/^/1 /' >&3 & # random command which output we need to parse
cpid=$!
while read -u 3 a b
do
  i=$(( $i + 1 ))
done
echo $i

exec 3<&->&-

Более аккуратного варианта как-то в голову не пришло. Если кто знает — поделитесь.

UPD. Таки приведённый вариант с дескрипторами работает только в zsh (не в dash). Буду думать, как его таки заимплементить.
esyr: (Default)
2010-03-01 08:44 am

Вышел MoinMoin 1.9.2


Появилась новая версия кросс-платформенного вики-сервера, написанного на языке Python — MoinMoin 1.9.2. В данной версии исправлен ряд серьёзных проблем с безопасностью, потенциально существовавших и в более старых ветках (начиная с 1.5). Разработчиками настоятельно рекомендуется обновиться до данной версии (или до версии 1.8.7, если обновление до ветки 1.9 невозможно или нежелательно по тем или иным причинам).

Ссылки:
esyr: (Default)
2010-02-14 11:05 am

(no subject)

Что-то я смотрю на этот ваш формспринг и не понимаю, зачем он нужен. Что позволяет делать — понимаю, нафига — нет.
esyr: (Default)
2010-02-03 05:30 am

Переславль 2010



Не буду ничего писать про конференцию: всю неделю до неё хронически недосыпал, да и на ней самой отдохнуть не удалось, нормально смог отоспаться только по приезду. Никаких остаточных впечатлений посему не наблюдается.

Немного быдлофоточек )
esyr: (Default)
2010-01-27 01:18 am
Entry tags:
esyr: (Default)
2010-01-20 02:38 am
Entry tags:
esyr: (ночь)
2010-01-08 04:22 pm
Entry tags:

О сложном

Многие почему-то так боятся того, что априори считают сложным. «Я не хочу учить матан, это сложно», «Я не хочу собирать модуль ядра, это сложно», «Я не буду читать "Искусство программирования", это сложно». Обычно подобные заявления делаются людьми, которые даже и не пытались это сложное сделать. И подобные заявления позволяют им не пытаться дальше. В то же время, большинство вещей, которые кажутся сложными, на самом деле таковыми не являются. Не все, но большинство. Но для того, чтобы выяснить, что сложно, а что — нет, нужно сначала попытаться это сделать. И не в духе «я погуглил, увидел хавту на стопицот страниц и забил» — объём не показатель сложности, а действительно попытаться. Разбираться с вещами, которые не получаются. Думать, там. Обычно, в итоге оказывается, что единственным препятствием были нежелание, лень и необходимость некоторого количества времени (заметим, что про собственно сложность тут ничего нет). И тогда вещи, которые ранее были названы сложными, в худшем случае оказываются громоздкими. Не более.

Я не утверждаю, что сложных вещей нет, их есть, и много. Но гораздо меньше, чем думают многие. И это ложное представление ограничивает этих многих в развитии. И это печально.
esyr: (ночь)
2010-01-02 08:59 pm
Entry tags:

Про даты

В этот раз как-то особенно отчётливо ощутил, что не понимаю, зачем радоваться смене циферок в такой искусственной вещи, как календарь. Ну, то есть, если раньше я как-то подчинялся стадному инстинкту, то сейчас он то ли сломался, то ли ещё что, но никакой радости от того, что 2009 поменялось на 2010, нет. Как, впрочем, и от смены любых одних цифр на любые другие.
esyr: (eye 4)
2010-01-02 06:13 pm

A pile of.

Метро ) Софтул 2009 )
Специально для пафосного небыдла, так боящегося потратить своё время: под катом нет ничего интересного, да.
esyr: (eye 4)
2009-12-25 09:16 pm

Московское отделение 26с3

С 28 по 30 декабря с 13:00 по 19:00 в здании математического факультета МПГУ будет проходить московское отделение 26-й конференции Chaos Communication Congress.

В рамках московского отделения планируется просмотр трансляций отдельных выступлений в Германии (как записей, так и realtime), живое общение, и, при желании участников выступить с докладом, проведение оных.

Для участия в московском отделении необходимо зарегистрироваться.

Краткая информация о буквах CCC и 26C3 )

Контактная информация (организаторы):

Ссылки:
esyr: (Default)
2009-12-20 12:41 pm

Про SSD

Таки приехала (спасибо, Броник!). Осталось забэкпортить драйвер в 24-е ведро и будет счастье.

Upd: Таки ничего бэкпортить не пришлось, старая версия лежала в git-репозитории ядра. Странно, что уже (минимум) восемь минорных версий оно в staging, ну да ладно. Ещё бы pcie hotplug работал, было бы вообще замечательно.