September 21st, 2012

2019

Путешествие трека

Если я работаю под музыку (в молодости это было верно всегда, а сейчас почему-то не всегда -- сам себе удивляюсь), то это происходит чаще всего с pandora.com -- аудиопоток там идёт часами без необходимости что-то нажимать и подстраивать, нужной степени разнообразия, чтобы не приедаться, нужной степени однообразия, чтобы не отвлекать сильно от собственно работы, выбор музыки необъятен (но по секрету скажу, что наиболее сложные тексты мною лучше всего пишутся под станцию "Zero 7").

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

Вот мой текущий аудиотракт:
-- сначала сидишка была поднята с диска на сервера (наверняка Pandora.com начинала именно с такой формы работы, хотя сейчас они вполне могут договориться с лейблами о каком-нибудь опте в уже цифровой форме -- но это неведомо)
-- потом каждый трек этой сидишки был охарактеризован по примерно 400 характеристикам. Это вручную (хотя я и сильно сомневаюсь, что сейчас они всё это делают вручную -- но в самом начале их пути это и было конкурентным преимуществом)
-- потом трек был сжат с двумя уровнями качества (бесплатный 128kbps и платный 192kbps -- и этих 192kbps для большинства людей достаточно, чтобы они в слепых тестах надёжно путали их с "CD качеством") и лёг на диск в ожидании к нему обращения.
-- потом его выбрал алгоритм "тематической радиостанции", за что мы и любим Pandora.com
-- выбранный трек стримится для меня с высшим уровнем качества и безо всякой рекламы (за эти 192kbps и отсутствие рекламы я и плачу $36 в год). Для Pandora.com в этот момент я представлен IP адресом, находящимся где-то в море недалеко от побережья США -- и далее путешествует некоторое время внутри сетки Hotspot Shield.
-- далее через Большой Интернет как Сеть Сетей стрим трека добежал до Ринета (мой интернет-провайдер), а там каналом 100Mbps и до WiFi 802.11n роутера около входной двери у меня дома. И по воздуху пришло на андроид-планшет Samsung Note 10.1, на котором и была установлена бесплатная программа HotSpot Shield, обеспечивающая VPN и представляющая мой IP как американский. Так мы показали большую фигу крючкотворам, не разрешающим слушать Pandora.com из России.
-- приложение Pandora вытащило музыку и передало её на ЦАП планшета. Чтобы отношение сигнал/шум было максимальным при этой передаче, громкость на планшете выведена на максимум. Современные АЦП и ЦАПы такого качества, что их влиянием на музыку я вообще пренебрегаю.
-- через стереоджек 3.5мм и двухметровый кабель с джеками 1/4" сигнал пришёл на профессиональный аудиомикшер. Кабель самый простой, профессиональный (т.е. прочный и без фильтрующих высокие частоты и искажающих фазы прибамбасов HiFi и HiEnd кабелей).
-- после десятиканального (кстати, цифрового внутри) аудиомикшера EDIROL M-10DX больше не будет низкого уровня аналогового сигнала, никаких проблем наводками и шумами. В микшер ещё воткнут звук с ноутбука, давным давно не включающися CD-проигрыватель (ведь дома у меня есть болле 2000 CD -- но морока их выбирать и ставить практически вывела их из пользования), а также микрофон (для поорать случайно забредшему на музыку дитятке).
-- профессиональными аудиокабелями jack 1/4" -- XLR звук пошёл на студийный сабвуфер SW10 STUDIO. Ибо без сабвуфера большой барабан, контрабас и даже голос звучат совсем плохо. Студийный сабвуфер -- это в разы и разы меньше коэффициент нелинейных искажений. Сабвуфер обрезает своим фильтром частоты ниже 50Гц (так выставлено у меня сейчас) и отдаёт сигнал дальше по кабелю XLR-XLR на мониторы.
-- основную работу далее выполняют активные студийные мониторы YAMAHA MSP5 STUDIO. Активные -- это значит, что у них практически плоская амплитудно-частотная характеристика и минимальные искажения, усилитель и динамики согласованы "из коробки".

Совсем недавно этот тракт работал на моём основном компьютере (а не на планшете) но:
-- окошко браузера с Pandora.com на рабочем компьютере трудно выгребать из-под остальных окон, когда хочется на него посмотреть. Screen asset во время работы -- дорогая штука. Теперь же планшет лежит рядом, показывает огромную на весь его экран обложку играющего альбома: смотри -- не хочу.
-- интернет через VPN медленный, что опять же для работы не полезно, равно как не полезно для торрент-клиентов. Теперь у планшета интернет медленный, а IP американский, и это мне не мешает. У рабочего компьютера интернет быстрый, а IP московский, ибо HotSpot Shield VPN делает для одного компьютера, а не для всей домашней сетки.
-- если идёт какой-нибудь звонок по скайпу, то приходится много щёлкать мышкой, чтобы отключить Пандору в одном окошке и включить звук в другом окошке (ибо оба источника звука были у меня в одном компьютере, и звук шёл на один вход микшера). Теперь Пандора и Скайп на разных железках, а микширование делается третьей железкой -- всё стало в разы проще.
2019

Повторение курса алгоритмики: вести с полей

Дитятко за истёкший период обильно протекало носом, поэтому занятия КуМиром были отнюдь не каждый день. И, конечно, повторить весь курс Кириенко за пару недель у меня не получилось.

На скорости примерно в 40 ударов в минуту была пересадка с VerseQ на Клавогонки.ру (http://ailev.livejournal.com/1026626.html) -- и жизнь после этого стала легче. Во-первых, ошибки теперь нужно исправлять по-настоящему, через backspace. Во-вторых, в разы стало проще с мотивацией: индикаторы затраты времени и прогресса намного понятней, чем в VerseQ, а также есть полное понимание, что он не один страдает-тренируется, а среди большого числа таких же страждущих. Тренировка пошла на текстах "обычный", норма тренировки 10 заездов (один заезд сейчас идёт чуть меньше четырех минут, а начинали с пяти минут), в награду за выполненную норму полагается мультфильм по выбору дитенка.

На сегодня рекорд у него 71 удар в минуту, скорость ниже 60 не опускается пару дней, и даже уже были восторги по поводу первой победы в гонках (попался какой-то страдалец, тренировавшийся на скорости чуть больше полусотни ударов в минуту). Главный итог: "написать что-то" перестало восприниматься дитяткой как тяжёлый труд. Жена тут же воспользовалась этим, и заставила его нацокать в Ворде какое-то длинное сочинение. Результат: все проблемы по факту ушли во "что писать", а не в собственно процесс письма длинного текста. То же самое происходит с программами на Ершоле: их запись больше не проблема, проблема только в понимании того, что именно нужно записывать.

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

На скорости 100 я сделаю перерыв, но затем будет повтор цикла с английским алфавитом. Ибо сегодня в задаче потребовалось поделить два числа друг на друга нацело, что в Ершоле делается функцией div. Набор на клавиатуре этого div превратился в приключение с поиском клавиш. Так жить в двадцать первом веке и в четвертом классе нельзя.

Из задач прошли 12 уроков, при этом последние три урока я делаю скип пары последних задач (которые повышенной трудности). Мы их или пройдём позже, или двинем вперёд без них -- моя задача сейчас вспомнить Ершол, не более. Двенадцатый урок -- это передача параметров во вспомогательный алгоритм. Всего уроков в этом курсе 16.

Чётко проявляющаяся ошибка -- это мышление "движениями робота", а не связанной с "обстановкой" математической моделью. Собственно, это не ошибка. Это как раз то, чему как-то нужно научить. Попробую пояснить примером.

Предположим, нам нужно измерить расстояние до какой-то закрашенной клетки справа, и затем продвинуться вправо на удвоенное расстояние. Это очень просто делается рекурсией, на выходе из рекурсии пишется "вправо вправо" -- этого достаточно. Рекурсия -- это урок 10. В уроке 11 нужно это сделать, используя счётчик. Для этого в счётчик М будет подсчитано значение передвижений циклом "пока не клетка закрашена", после чего... будет сделано два подряд цикла "М раз вправо". В ответ на просьбу написать этот фрагмент короче -- остаётся один цикл "М раз вправо вправо". Конструкция "2*М раз вправо" начинает как-то воспроизводиться только после нескольких тыканий носом в аналогичную ситуацию в других задачах, выражение-формула на месте какой-то цифры в программе оказывается очень непривычна.

То же самое происходит в случае создания вспомогательных алгоритмов с параметрами: повторяющийся кусок кода видится исключительно в терминах передвижения робота, поэтому появление в параметрах или циклах каких-нибудь сумм или разностей для вычисления нужного пути игнорируется, в это приходится тыкать носом -- действительно, какие могут быть сложения или вычитания, если в голове не "отрезок пути длиной 3", а "цикл 3 раза вправо"? То, что путь робота представляет собой какую-то геометрическую фигуру (отрезок, квадрат, прямоугольник) проходит мимо сознания дитёнки. Курсы геометрии и математики с курсом алгоритмики не склеиваются -- это для дитенки совсем разные миры.

Чтобы сохранять спокойствие в данном случае, всегда нужно помнить две байки про яблоки:
-- Александр Звонкин, Вадим Левин. Домашняя школа для дошкольников -- http://orel.rsl.ru/vers_may2000/books/html/zw_fr/fr1.htm (эти ребята, вроде, понимают про образование маленьких: "Давайте встанем на место ребенка и попробуем сами учиться арифметике... но только по-японски! Итак, вот вам первые десять чисел: йти, ни, сан, си, го, року, сити, хати, ку, дзю. Интересно, сколько времени вам потребуется, чтобы хотя бы только выучить эту последовательность наизусть? Когда это наконец удастся, попробуйте считать в обратном направлении, от дзю до ити. Если же и это удается, давайте начнем вычислять. Отвечайте, желательно без запинки и по возможности не переводя, даже в уме, на русский язык: сколько будет к року прибавить сан? А от сити отнять го? А хати поделить на си? А теперь давайте решим задачу: мама купила на базаре ку яблок и дала по ни яблок каждому из си детей; сколько яблок у нее осталось? (Все ответы тоже следует давать по-японски.) Если после месяца активных тренировок вы освоите всю эту нелегкую науку и научитесь беглому счету в пределах дзю, вас можно поздравить: у вас превосходная механическая память"). -- это я писал в http://ailev.livejournal.com/470248.html
-- отождествление какой-то теории и объектов практической ситуации -- "яблок из задачи с яблоками из жизни".


Формулы и шаги (а хоть и в цикле с заданным числом этих шагов) робота, выражения и конструкты структурного программирования никак не замешиваются в в одно целостное размышление -- несмотря на то, что все эти задачи уже решались, и даже чуть меньше года назад. Тем более будет важен курс робототехники: там как раз и будет тренироваться перевод движения робота в численную модель, а затем программирование этой численной модели.

В понедельник должен быть уже готов управляемый из КуМира робот Лего (собственно, он уже и сейчас готов, просто доотлаживается и пакетируется -- это происходит в Пущино). Так что повторение с нарисованным роботом я планирую закончить на следующей неделе, дальше будет робототехника с роботом Лего.
2019

Язык программирования и обмена данными

Я всегда утверждал, что с алгоритмикой у нас всё в порядке, а вот с даталогией (гхм... онтологией... какое слово тут?) очень плохо. И языки у нас -- отдельно моделирования данных (от XML до EXPRESS и OWL), а отдельно -- программирования (несмотря на все навороты с типами данных в том же Haskell, его и ему подобные языки почему-то не используются рутинно для представления данных и схем данных -- и это не случайно. В этом плане Haskell не лучше FORTRAN).

Поэтому не пропустите важную инициативу http://justy-tylor.livejournal.com/188913.html -- "большой и тяжёлый рисёч по созданию практичного языка программирования и обмена данными". Ага, язык программирования и обмена данными. Практичный. А то у нас сейчас либо языки обмена данными, либо языки алгоритмики (алгоритмические языки, их так и называют). Нехорошо это. Я очень надеюсь на успех проекта justy_tylor.