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

I decided to continue writing here in English. So I can be read by much more audience. I hope my English is as good as my native language. Will see if it works so. :)

Wednesday, 3 September 2008

Install Ubuntu 8.04 on Asus Eee PC 1000h

Приобрёл себе Asus Eee Pc 1000H. Установленный там Xandros что-то не очень вдохновил, поэтому решил поставить туда свою любимую Ubuntu. Что для этого нужно было сделать...

Создание загрузочной 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. В результате имеем:
Method alternatives
RubyC#
array.collectarray.select
array.selectarray.Where
array.detect ( = array.select.first )array.first
array.join( token )String.join(array, token)
Как видим, join метод стал вдруг методом String класса.
Много лишних слов
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 я уже научился :). Идём дальше...

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

  1. Сколько новых версий программ вы выпустили за последний год?
    • слишком мало = scope creep: wtf мэнеджмент
    • слишком много = или "супербыстрые" или количество > качество
  2. Почему ушёл человек, работавший до вас на этой должности?
    • уходит от ответа = что-то скрывает
    • он "ушёл" = почему так неопределённо?
    • конкретный ответ = похоже, что всё ок
  3. Случались ли катастрофы и как они были решены (хотя бы последняя)
    • пахали 2 недели = недостаточное DR-планирование (Disaster Recovery) или код (или персонал) WTF
    • 2 часа на поиск и устранение = полёт нормальный
  4. Как часто (в год) устраиваются тренинги для персонала?
    • < 1 недели = хотят использовать тебя, но не инвестировать в тебя
  5. Сколько обычно приходится перерабатывать?
    • редко = хорошо продуман проект и время / стабильный код
    • каждый день = плохое планирование, wtf код/персонал/управление
  6. Зависит от деятельности: Размер суппорта/менеджеров по продаже по отношению к программерам?
    • 100:1 = много клиентов: стабильный код
    • 1:10 - очень новый, может код нестабилен
    • вероятно, новый проект (вполне нормально)
  7. Как устроен DR?
    • "Колян из дома чинит всё" = никакого DR: валить!
    • "параллельные сервера, dbs, итд" = кто-то всё продумал и на это были выделены деньги
  8. Можно заглянуть в серверную?
    • как птичье гнездо = АХТУНГ!
    • компы на холодильнике с вентиляторами = валить!
    • чистенько и прилично = хорошая поддержка сети

Monday, 12 May 2008

Hobo for Rails 2

Пока я собирался попробовать это Хобо на вкус, они уже выпустили следущую версию. А пока времени на это нет вообще.

Monday, 4 February 2008

Hobo for Rails

На днях был обнаружен плагин для Rails, который значительно расширяет возможности. Скоро напишу конкретнее, а пока только сайт проекта.

Friday, 1 February 2008

Rails database table names: singular Vs. plural

Rails < 2.0 : You need to add into config/environment.rb file line
# Include your application configuration below
ActiveRecord::Base.pluralize_table_names = false #added line
Rails >= 2.0 : You need to add into config/environment.rb file inside block
Rails::Initializer.run do |config|
  config.active_record.pluralize_table_names = false #added line
end