18 июн. 2009 г.

Linux: ALSA и тихий микрофон

Долго мучился с тем, что меня практически не слышно в skype, ekiga и т.п. Если долго мучаться... ~/.asoundrc
pcm.loudmic {
type asym
capture.pcm {
type softvol
slave.pcm "hw:0,0"
control {
name "Mic Boost"
card 0
}
max_dB 30.0 # от 0.0 db до 50 db
}
}

Пробуем записать
 $ arecord -D loudmic -f S16_LE -c2 -r48000 record.wav
и слушаем
 $ aplay record.wav
Убедившись, что всё работает как нужно - выбираем в skype записывающее устройство loudmic.

14 июн. 2009 г.

Java: Mod vs Bit mask

Идея провести сравнение производительности mod с битовой маской натолкнули два обстоятельства

12 июн. 2009 г.

Ассоциативный массив: Hash-таблица

Одной из часто используемых реализаций ассоциативного массива является hash-таблица.
Важной особенностью является сложность выполнения операций добавления, удаления и поиска - O(1) - другими словами, сложность алгоритма не зависит от количества элементов в массиве - хоть 10 элементов, хоть 10 млн.

11 июн. 2009 г.

Задачка: русская рулетка

Давайте сыграем в русскую рулетку. Вы привязаны к стулу и не можете встать. Вот револьвер. Вот его барабан - в нем шесть гнезд для патронов, и они все пусты. Смотрите: у меня два патрона. Вы обратили внимание, что я их вставил в соседние гнезда барабана? Теперь я ставлю барабан на место и вращаю его. Я подношу револьвер к вашему виску и нажимаю на спусковой крючок. Щелк! Вы еще живы. Вам повезло! Сейчас, до того как мы начнем обсуждать присланное вами резюме, я собираюсь еще раз нажать на крючок. Что вы предпочитаете: чтобы я снова провернул барабан или чтобы просто нажал на спусковой крючок?

10 июн. 2009 г.

Java:: Shift vs Multiply

Читая Effective Java 2nd edition обнаружил любопытную заметку:
The advantage of using a prime is less clear, but it is traditional. A nice property of 31 is that the multiplication can be replaced by a shift and a subtraction for better performance:
31*i==(i<<5)-i. Modern VMs do this sort of optimization automatically.

Задачка: непарное число в массиве

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

Задачка: Хитрый мальчик задумал 3 числа

Маленький мальчик задумал три числа x, y и z ∈ N.
Можно задать дважды вопрос вида: чему равно значение
a * x + b * y + c * z = ?
где a, b и c ∈ N
Какие нужно задать вопросы мальчику, чтобы узнать задуманные им числа ?

Задача: средняя зп

Три работника хотят узнать свою среднюю зар. плату, но согласно корпоративному этикету её нельзя говорить. Они могут общаться между собой, обмениваться записками, но только так, чтобы никто в конце концов не узнал чужую зп.
Как им необходимо действовать в данной ситуации.

27 мая 2009 г.

Gentoo:: My 1st ebuild in gentoo portage tree

Сравнительно недавно таки появился под GNU/Linux Chromium - WebKit броузер, на котором построен Google Chrome.

Gentoo оверлей THE содержит ebuild для сборки Chromium из исходников, однако ребята из проекта Chromium сами выкладывают бинарные сборки.

Моя же радость заключается в том, что написанный мною ebuild для установки бинарной сборки Google Chromium таки попал в основное дерево портежей Gentoo: www-client/chromium-bin .

16 апр. 2009 г.

Java: Классический dead lock

Классический dead lock (Java Concurrency In Practice, p.10.1):
When a thread holds a lock forever, other threads attempting to acquire that lock will block forever waiting. When thread A holds lock L and tries to acquire lock M, but at the same time thread B holds M and tries to acquire L, both threads will wait forever. This situation is the simplest case of deadlock (or deadly embrace), where multiple threads wait forever due to a cyclic locking dependency. (Think of the threads as the nodes of a directed graph whose edges represent the relation "Thread A is waiting for a resource held by thread B". If this graph is cyclical, there is a deadlock.)

Пример иллюстрирующий пробему:
Есть сущность типа счёт, необходимо реализовать сервис типа переводчика денег с одного счёта на другой.

Для определённости стоит уточнить, что счетов с системе очень много (скажем, несколько миллионов) и порядка несколько тысяч операций в секунду (всё многопоточно).