Friday, September 25, 2009

Отличный пример для объяснения импликации

Существует логическая операция, называемая импликацией [1] (обозначается стрелочкой)
Обычно она объясняется как "посылка -> следствие"
Стандартно у преподавателя возникает небольшая заминка с тем, какой пример выбрать для иллюстрации таблицы итинности данной операции. Наиболее удачное из того, что я слышал: x={"Студент сдаст хорошо сессию"} y={"Папа купит ему машину"}. Однако, это не совсем удачная иллюстрация, потому что как-то не очень близка к действительности. Напомню, что x->y == 0 только в том случае, если студент действительно хорошо сдал сессию, а папа машину ему не купил (наоборот, если студент сдал плохо, а папа купил ему машину, то папу лжецом уж точно не назовёшь).

Внезапно однажды на занятии у меня родилась шикарная идея, какие два события лучше подходят для описания: x={"Девушка забеременела"}, y={"Её мальчик на ней женился"}. Тогда x->y = {"Если девушка забеременела, мальчик на ней женился"}. Действительно, если девушка не забеременела, а мальчик не женился, никакого обмана не произошло, и x->y истинно, если девушка не забеременела, а мальчик, тем не менее, женился, то он, бесспорно, благородный дон и высказывание x->y всё равно истинно (никто никого не обманул). Если же девушка забеременела и парень женился, то всё опять же истинно (мужик сказал - мужик сделал!). Однако, если же девушка забеременела, а парень на ней не женился, он, конечно же, козёл. И в этом месте даже самые отстающие школьники понимают, что информатика гораздо ближе к жизни и радостно поддакивают своими милыми мордашками "козёл, конечно!".

---

[1] http://ru.wikipedia.org/wiki/Импликация

Saturday, September 12, 2009

Zenwalk 6.2: epic fail.



Всё, пришло время менять дистрибутив.
Я два с половиной года сижу на Zenwalk, недавно они выпустили следующую версию - 6.2. На моём ноутбуке сидит 6.0, я практически не пользуюсь иксовым софтом, поставляемым от дистрибутива (zenpanel, xfce, totem, geany). До недавнего времени всё работало, но я прозевал смену версии и не успел поставить какие-то пакеты из репозитория (эта политика закрытия старых репозиторий в основанных на версиях дистрибутивах меня безумно раздражает). Я понимаю, что если я опять скачаю инсталяционный диск, запишу его на болванку и поставлю систему "с нуля", то всё будет работать, а у меня в uname будет написано 6.2 вместо 6.0, но что-то внутри против такого решения.
Соответственно, после выполнения ритуальных netpkg update, слетели иксы, запустить которые быстро не удалось (как уже потом стало ясно, вопрос пакетного менеджера "upgrade whole system?" не подразумевает установку дополнительных пакетов, необходимых для нормального функционирования системы). В общем, третий раз подряд апдейт провалился. Кажется, нормально проапгрейдить систему у меня получилось только один раз - с Zenwal 4.0 до Zenwalk 4.2. Сурово поматерясь и потратя полчаса на поиски болванки в общаге, в итоге был закачан archlinux и после двух-трёх часов конфигурации, я снова влюбился :) Да, почти голая система после установки, зато нет ничего лишнего и всё предельно просто, без излишних упрощений. В общем, философия Arch (The Arch Way) мне кажется более сохранённой, чем философия Zenwalk ("unix way - one task, one program." - Сильно ломается в последнее время, в связи с уходом одно с небольшим скандалом из постоянных контрибьюторов товарища gapan и в след за ним уходом ещё некоторого количества достаточно влиятельных людей).
Короче, я доволен Archlinux, пока не всё настроил, но высокая степень прозрачности системы очевидна. Любимый оконный менеджер ion3 встал легко и непринуждённо, хотя с настройкой клавы и пришлось немножко повозиться.
А самое главное! Тут нет погони за версиями. Просто rolling releases, которые регулярно отображаются в виде "а вот исошник тут - дамп основных пакетов из репозитория. Бери, коль инета нет".
Так что, два с половиной года с Zenwalk было весело, но пора уже и честь знать. Судя по всему, с Archlinux повеселее будет :)

Wednesday, September 9, 2009

MIDI keyboard under linux (как подружить usb midi keyboard, fluidsynth и jack)

Вчера наконец-то заставил работать под линуксом миди-клавиатуру (честно говоря, не совсем наконец-то, всего второй раз пробовал)

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

Общая схема подключения оказалась такой:
0. втыкаем клаву
1. запускаем демон jackd с нужными параметрами (см. ниже)
2. стартуем fluidsynth указывая, что надо использовать jack и определённый soundfont (без него ничего не получится)
3. связываем средствами ALSA ввод с миди с выходом fluidsynth
4. связываем jack-ом выход fluidsynth с системным выходом.
5. ?????????
6. PROFIT

скриптец с раскраской, требует допиливания, чтобы заработало

Если говорить в терминах команд, то получаем следующее:
Запускаем джек:
jackd -dalsa -dhw:0,0 -r44100 -p512 -n4 &

Теперь запустим синтезатор, скормив ему звуковой шрифт:
fluidsynth -ajack /home/cra/Unison.SF2

Кстати, откроется шелл, в котором можно регулировать gain командой gain X, где X - число от 1 до 5. Остальные команды, в общем-то, не столь важны.

Далее, смотрим, какие порты у нас открыты по выводу команды
aconnect -o

И подключаем вывод клавиатуры к входу синтезатора: что-то в духе
aconnect 128:0 20:0

Ну а теперь надо подцепить выход синтезатора джэком к системному выводу звука:
jack_connect fluidsynth:left system:playback_1
jack_connect fluidsynth:right system:playback_2

Всё, из колонок должны доноситься звуки.