Friday, 13 February 2009
Eee Control Tray For Ubuntu
Wednesday, 12 November 2008
Comparing 2 Audio (*.wav) Files
We already know the structure of wave file and thus we are able to read it byte by byte (actually we need to read the data chunk sample by sample). Now the next move is to get "fingerprints" from our files.
Fingerprint
A fingerprint can uniquely and compactly represent an audio file. It consists of several points of local energy maximum in audio spectral density. How the spectral density varies in time can be shown by a spectrogram. The most common format is a graph with two geometric dimensions: the horizontal axis represents time, the vertical axis is frequency; a third dimension indicating the amplitude of a particular frequency at a particular time is represented by the intensity or colour of each point in the image, e.g., the brighter the shade, the more energy is contained in the time-frequency point. The only thing we need is a amount of acoustic energy in predefined frequency and time.
A spectrogram of 30 seconds of the part of Pet Shop Boys "West End Girls" song starting from 1:00
Spectrograms can be obtained by Short Time Fourier Transform. The audio samples are grouped into analysis time windows (preferably overlapping) wi of equal length N, with wi denoting the i-th window. For each window the Fourier transform is calculated, giving a complex vector vi = STFT(wi) of the same length as the window. Because in this case the input given to the Fourier transform always are vectors of real numbers, the output complex vectors obey the symmetry:
vi[q] == -vi[N-q+1]
So the complete information is contained in the first N/2 components of the complex vector vi.
The Fourier transform decomposes the signal given by the samples inside each input window in terms of sine waves of discrete frequencies. These frequencies are integer multiples of the fundamental frequency which is determined by the window length N and the sampling rate S of the waveform representation. The frequency Fk for a particular index k in the complex vector may be calculated by using the following formula:
Fk = k * S / N , where k = 0, ... ,N/2
The first frequency F0 is always zero. If we have a sampling rate of 44100 Hz and a window length of 1024 samples, the base frequency F1 is 43.0664 Hz and the maximum frequency F512 is the Nyquist rate 22050 Hz.
Then we need the absolute value for each component of vk to get a measure of how strongly a discrete frequency Fk is present in the decomposition of the i-th window of audio file. This data can then be used for plotting the spectrogram. When the spectrogram is plotted the fingerprint points are chosen to be points that are local maximum within regions of fixed size surrounding the point. Larger region size leads to fewer but possibly more significant points. The resulting features are saved as pairs of integer numbers (i, k) with i being the window index and k being the frequency index.
Friday, 7 November 2008
Structure Of *.wav Audio Files
Wave file structure is very simple. The structure can be divided into 3 parts (chunks).
First chunk: The first 4 bytes should be "RIFF". Then come 4 bytes, which indicate the size of file. Then comes "WAVE".
Second chunk: It starts with "fmt ". Then come 4 bytes showing the length of "fmt " chunk. Then come audio format, number of channels, sample rate, Byterate, Block align and bits ber sample.
Third chunk: It is the audio data itself. As always 4 first bytes - name of the chunk. 4 bytes after that - the length of the chunk in bytes. After that come samples itself. 2 * number_of_channels bytes each sample.
There can be also other chunks between the first and the third, but they are really not widely used. If you got interested in it, a very good article about "Wave file format" is on The Sonic Spot.
So we have here an example. We see the first chunk (purple). It shows the length of the file - 0x(00 00 08 24) = 0x824 = 2084
Bytes should be read in reverse direction. First read byte has the smallest rank!
You can check yourself: left channel sample #5 = 0xE734 and right one is 0xA623.
Continued there...
Going to English
Wednesday, 3 September 2008
Install Ubuntu 8.04 on Asus Eee PC 1000h
Создание загрузочной USB и установка Ubuntu.
Об создании загрузочной флэшки очень хорошо написано на официальном сайте Ubuntu. Я выбрал вариант с UNetbootin.
Загрузка и установка проблем вызвать не должна, поэтому детальное описание опускаю.
После установки
Не работает сеть (ни ethernet, ни wifi), некоторые комбинации клавиш (Fn+F2, Fn+F7, Fn+F8, Fn+F10/F11/F12 ), вебкамера.
Настройка сети
Самый простой способ на мой взгляд - это установка неофициального специального Ubuntu kernel, оптимизированного под Eee Pc.
Shortcuts
Шорткаты устанавливаются благодаря http://forum.eeeuser.com и его пользователю elmurato. Нужно скачать его скрипты и установить. К сожалению шорткаты начинают работать только после логина. Так что если вам надо отключить звук во время загрузки, у вас это получится только вставив наушники.
WebCam
BIOS. Onboard devices. WebCam Enabled.
Tuesday, 15 July 2008
Первые впечатления
Итак, делюсь первыпи впечатлениями, как ощущения после перехода с Ruby на C#. Пока всё, с чем я столкнулся, это неудобства:
- Null class.
- Отсутствие null как объекта. Затрудняет жизнь многочисленными провернками на null. Паттерн introduce null object не особо спасает. Писать для каждого класса нулевой объект не радует. Можно ли реализовать 1 общий класс, от которого всё наследуется?
- System.Linq библиотека
- Вроде бы удобная вещь, но! Она была нагло
спислизана с ruby, причём сделано это очень криво. Зачем-то нужно было менять названия методов. Плюс были портированы не 1 в 1. В результате имеем:
Как видим, join метод стал вдруг методом String класса.Method alternatives Ruby C# array.collect array.select array.select array.Where array.detect ( = array.select.first ) array.first array.join( token ) String.join(array, token) - Много лишних слов
- public overrride static void methodName() vs. def self.method_name
- Консоль
- Отсутствие консоли, где можно быстренько потестить какой-нибудь метод.
Или я просто предвзято отношусь к C# и Microsoft?
Friday, 11 July 2008
Моё рабочее место
Так как недавно только сменил работу, и в памяти ещё осталось прошлое рабочее место, то напишу про оба: прошлое и настоящее.
- Прошлое:
- Программировал на ruby on rails. Использовал:
- ОС: Ubuntu.
- С тех пор, как я пересел на неё, прошло уже 4 года (4.10 была первая версия, выпущена соответственно в октябре 2004 года). Понравилась с первого взгляда. Теперь её использую повсюду.
- Программы:
-
- Jedit
- Просто лучший редактор для программирования. Главное уметь пользваться и правильно настроить плагины. И, конечно, abbreviations.
- Plugins:
-
- SideKick
- Позволяет создавать и работать с проектом, а не набором файлов.
- JDiff
- Очень удобный диффер, ищет различия посимвольно. Можно настроить игнорирование нескольких подряд идущих пробелов.
- RubyPlugin
- Незаменимая вешь для работы с руби
- RE Tester
- Удобно тестить регулярные выражения прежде чем их писать в код
- XSLT
- При работе с XML. Позволяет тестить xPath.
- trac
- Очень удобный багтракер. Имеет встроенный вики (например, для спецификации и/или документации). Интегрируется с svn.
- svn
- Контроль версий обязателен :). Пока пользовал только svn, интересно попробовать Git
- Firefox
- А как же без него-то программирование для веб?
- Plugins:
-
- Firebug
- Без него сейчас не обходится ни одна разработка под web
- YSlow
- Позволяет тестировать скорость загрузки страниц
- Web Developer
- Позволяет отключать некоторые элементы страницы. Опять же нужен для тестирования
- Console2
- Этим пока не пользовался, но поставил на всякий случай. Изучаю...
- Настоящее:
- Программирую на C#, asp.Net. Использую всё те же Firefox, JEdit, плюс:
- ОС: Windows
- Что и следовало ожидать :). Очень непривычно. Почему под убунту нельзя было? :)
- Программы:
-
- Visual Studio 2008
- Вещь, конечно, на редкость глючная, но без неё никак.
- ReSharper
- Когда-то давно (в университете) использовал IntelliJIDEA для Java. Руки быстро вспомнили старые шорткаты :)
- TotalCommander
- Двупанельный файловый менеджер. Намного удобнее обычного эксплорера
Saturday, 31 May 2008
Проблемы с запуском графической части Ubuntu (gdm)
Проблема была в кратце такова, что при нормальной загрузке Ubuntu моментально подвисала, как только показывалось графическое окно login. В то же время, если сначала загрузиться в recovery mode, а потом запустить графическую оболочку (startx), то всё работало нормально.
Напрашивается вывод, что при recovery mode Ubuntu не загружает некоторые модули, которые возможно конфликтуют с gdm. Как это выяснить?
Прежде всего загружаемся в recovery mode и из-под roota выполняем команду
sysvconfig
Там весь список загружаемых модулей. Убираем на время gdm. Сохраняем, выходим. Теперь при нормальной загрузке, компьютер не будет виснуть и мы сможем посмотреть какие модули им загружены.
Теперь всё в той же root консоли набираем
dmesg > /home/[ваш username]/failsafe.log
что сохранит лог загрузки в файл.
Также устанавливаем хороший diff'ер
apt-get install meld
Теперь можем спокойно перезагрузиться в нормальном режиме.
Так как мы в самом начале отключили загрузку gdm, то после перезагрузки мы снова в консоли. Нужно залогиниться и выполнить аналогичную команду, чтоб записать лог загрузки.
dmesg > /home/[ваш username]/normal.log
Осталось только сравнить эти два лога. Я использовал удобство gdm,- загрузился туда через recovery mode, сравнил через meld эти 2 файла (!! meld сравнивает посимвольно а не построчно, поэтому различия в начале строк, которые являются временем загрузки не сильно волновали !!). В файлах явно читались названия модулей подгружаемых при обычном старте и игнорируемых в recovery mode. У меня это были bluetooth и powernowd. Поэтому, снова запустив sysvconfig, отключил bluetooth, powernowd и powernowd.early, не забыл включить gdm и перезагрузился в нормальном режиме.
Теперь всё работает.
Friday, 30 May 2008
Вопросы, которые можно задать при устройстве на работу
В скором времени собираюсь переходить на новое место работы. Посмотрим, что из этого выйдет. На новом месте обещают привязанность к Microsoft. Используют практически все их технологии: .Net, Silverlight итд. Клепать сайты на Rails я уже научился :). Идём дальше...
В связи с вышесказанным, предлагаю сабж. Мне ими воспользоваться не посчастливилось - наткнулся уже после проведения собеседования.
- Сколько новых версий программ вы выпустили за последний год?
- слишком мало = scope creep: wtf мэнеджмент
- слишком много = или "супербыстрые" или количество > качество
- Почему ушёл человек, работавший до вас на этой должности?
- уходит от ответа = что-то скрывает
- он "ушёл" = почему так неопределённо?
- конкретный ответ = похоже, что всё ок
- Случались ли катастрофы и как они были решены (хотя бы последняя)
- пахали 2 недели = недостаточное DR-планирование (Disaster Recovery) или код (или персонал) WTF
- 2 часа на поиск и устранение = полёт нормальный
- Как часто (в год) устраиваются тренинги для персонала?
- < 1 недели = хотят использовать тебя, но не инвестировать в тебя
- Сколько обычно приходится перерабатывать?
- редко = хорошо продуман проект и время / стабильный код
- каждый день = плохое планирование, wtf код/персонал/управление
- Зависит от деятельности: Размер суппорта/менеджеров по продаже по отношению к программерам?
- 100:1 = много клиентов: стабильный код
- 1:10 - очень новый, может код нестабилен
- вероятно, новый проект (вполне нормально)
- Как устроен DR?
- "Колян из дома чинит всё" = никакого DR: валить!
- "параллельные сервера, dbs, итд" = кто-то всё продумал и на это были выделены деньги
- Можно заглянуть в серверную?
- как птичье гнездо = АХТУНГ!
- компы на холодильнике с вентиляторами = валить!
- чистенько и прилично = хорошая поддержка сети