Архив января 2017

Tesla и шаровая опора

Читаю тут очередной теслосрачик – пишут, что “у топовой Model S после 70 000 миль лопнул рычаг подвески”. Полез смотреть по ссылке – и все как в том анекдоте: “не в лотерею, а в преферанс, и не выиграл, а проиграл”. Всего-то кончилась шаровая опора, правда верхняя (что странно), да и 110 тысяч километров – не тот пробег, чтобы разваливались шаровые, но картинка пугает:

tesla-ball-joint

Мужики на американском форуме начали выяснять, подпадает ли такой дефект под гарантию, или же это “обычный износ” (normal wear and tear). Выяснили даже то, что топикстартер обитает в Пенсильвании, которая печально знаменита своими убитыми дорогами.

pennsylvania-potholes

Но это все ерунда – за исключением, конечно, того, что замена рычага в сборе стоит 6000 баксов, а Tesla еще и предложила счастливому владельцу подписать Non-Disclosure Agrement (интересно, а возможно ли такое “соглашение о неразглашении” в российском законодательстве?). Интереснее другое – при таком износе шаровая должна грохотать на каждой ямке. Я, конечно, понимаю, что американцы в автомобильных делах – полные пофигисты и будут ездить, пока машина окончательно не развалится, но разве можно не услышать стук в подвеске на каждой кочке?

Решил я почитать Rolling Stone

Захожу, короче, на RollingStone.com – а там в шапке сайта упоротая политинформация про глобальное потепление в частности и Трампа вообще. Поползал по ссылкам дальше – и честное слово, впечатление такое, что читаю газету “Не дай Бог!” 1996 года.

Что там вообще в Штатах происходит?

Офигенное кантри

Подкинули ссылку на замечательного исполнителя Wheeler Walker Jr:

Ну чисто Сектор Газа, только на английском:

wheelerwalkerjr

Слова есть здесь:

https://genius.com/artists/Wheeler-walker-jr

Скажите, а с ARM все действительно так плохо?

В одном прожекте возникла необходимость беспроводной передачи неприличного количества данных с АЦП. Даже в самых оптимистичных сценариях получалось, что придется гнать без проводов поток данных порядка 150 кбит/с. Немного? Но при таком потоке “затыкаются” все легкодоступные радиоудлинители UART – неважно, какой там у них радиоинтерфейс – WiFi, Bluetooth, или что-то еще. Более того, большинству из них недоступна скорость выше 115200 бод, что “отсекает” их еще на этапе ознакомления с ТТХ.

В поисках какого-то более подходящего решения набрел на микроконтролер CC3200 производства Texas Instruments. Что мне понравилось? По пунктам:

- ядро Cortex-M4 (хотелось бы, конечно, Cortex-M4F, но и это сойдет);
- встроенный WiFi, по отзывам – действительно быстрый;
- встроенные раздельные модули SPI и SD-host (я сначала думал, изучая примеры, что обмен с SD-картой будет идти с использованием модуля SPI, судя по назначению выводов – но нет, они там никак не связаны);
- возможность переназначать выводы утилитой Pinmux – хочешь, заводи SD-карту на эту сторону микрухи, хочешь – на другую, в общем, все офигенно.

Ну, где у нас АЦП – там хорошо бы и обработать сигнал? Благо в ядре Cortex-M4, в отличие от распространенного Cortex-M3, присутствуют команды, упрощающие цифровую обработку сигналов – например, реализацию всевозможных цифровых фильтров. Но на этом этапе начались какие-то дикие танцы с бубнами :)

Для начала – есть библиотека CMSIS, унифицированная для всех ARM реализация некоторых часто используемых функций. Особенно мне была интересна CMSIS-DSP, часть библиотеки с реализацией функций для цифровой обработки сигнала. Да, я могу написать реализацию какого-нибудь там фильтра Баттерворта или быстрого преобразования Фурье – но оптимизировать его для ARM я вряд ли буду, да и зачем это делать, когда есть готовое общепринятое решение?

Но для использования этого готового решения требуется некоторая поддержка от производителя микроконтролера – и здесь все становится просто ужасно. У Texas Instruments используется своя среда разработки (на основе Eclipse) и свой же компилятор. Может, имей я больше опыта программирования под ARM, я бы настроил что-то более распространенное, но для начала я просто следовал пунктам из Quick Start Guide.

Так вот, основное преимущество Cortex-M4 над Cortex-M3 – поддержка “DSP instruction set” – вообще никак не афишируется производителем в случае CC3200. Да, есть “патч” для одной из относительно старых версий CMSIS, выпущенный Texas Instruments несколько лет назад – но применимость его в случае CC3200 не озвучивается (и действительно, если “втупую” применить этот “патч”, ничего не выйдет). На просторах ютуба нашлось вот такое видео:

Через 15 секунд просмотра уже хочется восславить Кришну, а через минуту так и ждешь, что все начнут петь и плясать. Если серьезно – пахнет индусятиной в худшем смысле этого слова. Из озвученных в видео шагов один – фундаментально неправильный, а еще нескольким я не смог найти внятного объяснения.

В конечном итоге CMSIS-DSP я собрал (откомпилированная библиотека из дистрибутива с компилятором TI не очень дружит) – хотя, конечно, некоторые вопросы остались. И главный из них – в заголовке. Неужели любой шаг в сторону от любовно подобранных примеров из SDK превращается в вот такой забег по граблям под руководством индусов?

Numerical Recipes: The Art of Scientific Computing

Снова читаю книжки по численным методам. В этот раз под раздачу попала Numerical Recipes in C: The Art of Scientific Computing. Авторов – целая куча: Press W.H., Teukolsky S.A., Vetterling W.T., Flannery B.P. Есть даже официальный сайт, где можно бесплатно почитать кусочки из книги:

http://nrbook.com

Обратите внимание, что в интернете доступно два издания этой книги – второе, вышедшее в 1992 году, и третье – 2007 года. Я начинал читать второе, и был очень разочарован некоторыми “находками” авторов. Скажем, в давнем споре о том, как должны нумероваться элементы массива – с 0 или с 1 – они заняли “компромиссную” позицию – иногда элементы массивов нумеровались с 0, а иногда – с 1, как удобнее в каждом конкретном случае. Предлагался диковатый способ хранения матриц – в общем, уже с первой главы стало понятно, что весь найденный в книге код придется переписывать в соответствии со своими эстетическими представлениями.

В третьем издании на титульном листе упоминается уже C++, и книга основательно переписана. Скажем, нумерация массивов с 1 благополучно забыта – и это прекрасно! Вместо этого, правда, появляются сомнительные “классы” – а к ООП в численных методах меня приучили относиться с подозрением (может, и зря). Разумеется, это не “чистый” C++, а “C on steroids” – но от этого все равно не легче. Рекомендация из предыдущего абзаца остается в силе – встретив в книге “простыню” кода, попытайтесь ее понять и переписать. Особенно этот совет будет полезен, если вы имеете обыкновение читать лицензии – весь код в книге лицензирован под какой-то чудовищной, затрудняющей всякое разумное применение лицензией.

Еще одно маленькое замечание касательно кода – местами возникает впечатление, что программы аккуратно переписаны с Фортрана. В общем, код в книге довольно дикий, сочетающий использование относительно современного C++ с какими-то жуткими древностями – еще один аргумент за “понять и переписать”.

Круг рассматриваемых тем довольно широк (скажем, он “перекрывает” программу двухсеместрового курса по численным методам) – решение систем линейных уравнений (и связанные с этим сюжеты, вроде QR-разложения матриц), поиск собственных значений, различные методы вычисления функций (в том числе всевозможных “специальных функций”, типа бета- и гамма-функций), интерполяция, решение нелинейных уравнений, поиск экстремумов, вычисление интегралов, численные методы решения дифференциальных уравнений (задача Коши и краевые задачи), уравнения в частных производных, интегральные уравнения, статистические задачи, (быстрое) преобразование Фурье и все с ним связанное, вычислительная геометрия, и пара глав посвящена более “дискретным” задачам – вроде сортировки, кодирования и сжатия данных. Естественно, такое количество задач сложно более-менее подробно рассмотреть даже на 1262 страницах – так что компромиссы неизбежны.

В этой книге авторы решили пожертвовать математическим обоснованием используемых алгоритмов. Как выглядит глава по любимой мной теме – решению задачи Коши для дифференциальных уравнений? Десяток страниц посвящен организации вычислений – придумана довольно “общая” C++-ная библиотека, примерно то, что называют “фреймворком” – а реализуемые методы будут под нее подстраиваться. Дальше излагаются основы метода Рунге-Кутты, приводятся с иллюстрациями “на пальцах” коэффициенты методов 2-го и 4-го порядков. Следующий раздел посвящен автоматическому выбору длины шага – и тут уже разговор идет на языке “делай раз, делай два”, без попытки привести хоть какое-то обоснование используемых формул. Наконец, приводится исходный текст реализации метода Дормана-Принса 5-го порядка и упоминается о методе 8-го порядка – здесь, правда, решили поэкономить бумагу и просто дали ссылку на сайт с его реализацией.

В общем, книжка находится где-то посередине между учебником по численным методам и справочником “наиболее полезных алгоритмов” – для первого она получается слишком краткой, а для второго – слишком подробной. Немного спасают ситуацию списки литературы по каждой из тем – насколько я могу судить, вполне адекватные. Склоняюсь к тому, чтобы считать книгу довольно полезной – но с оговорками.

Торренты “в нагрузку”

Сдул с торрентов дискографию Кипелова – и с удивлением обнаружил, что в нее пихнули еще и несколько треков ВИА “Лейся, песня!” Это что за приколы такие?

Игристое из Изабеллы, Appellation Подмосковье contrôlée

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

Виноград сорта Изабелла выращивают на дачных участках многие, благо он довольно морозоустойчив и не погибает зимой. Летом же он вполне себе дает урожай, с одной лозы в этом году я собрал что-то около 4-5 килограммов винограда. Половину его я пустил на сухое вино, а из второй половины решил попробовать сделать игристое. За основу технологии я взял “старый казачий метод” в его изложении Денисом Руденко ([info]daily_winegraph):

Про сам способ? Просто: берете виноград, увяливаете до 27-30%, сбраживаете, недоброд (на нужном сахаре) заливаете в бутылки, через нужное время охлаждаете до -4 градусов, прерывая брожение. Имеете натуральное, полусладкое игристое.

http://daily-winegraph.livejournal.com/648428.html?thread=9806572#t9806572

Конечно, Подмосковье – не Цимлянск, и никаким увяливанием нужный уровень сахара в винограде не получить, так что сахар пришлось добавлять самостоятельно (да, здесь уже можно прекратить чтение :) ). Виноград я все равно слегка подсушил, так, что он действительно стал слегка приторно-изюмным. Дальше все довольно стандартно – давим виноград и оставляем его в какой-нибудь посудине вместе со жмыхом, шкурками и косточками (это все называется “мезга” – разумеется, делаем мы красное вино, это немного проще), где-то неделю сусло активно бродит. Не забываем при этом перемешивать “шапку” – всплывающую вверх мезгу. Не надо бояться при этом запахов сероводорода или ацетона – все нормально :)

Дальше отделяем забродивший сок от мезги, заливаем его в какую-нибудь банку и надеваем на нее резиновую перчатку. В принципе, что такое “привет Горбачеву”, знают все, так что не буду писать о каких-то сложностях или нюансах. Так как “своего” сахара в подмосковном винограде, можно сказать, и нет – я добавил что-то около 100 граммов сахара на литр сока, добавлял “дробно”, то есть порциями примерно по 30 г/л, когда перчатка начинала сдуваться. Дрожжи я использовал “дикие”, при вторичном брожении закинул в бутылку еще пару немытых изюмин – о чем будет следующий абзац.

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

Что же в итоге получилось? Разумеется, “натуральное, полусладкое игристое” – действительно насыщенное газом, наливающееся в бокал с пеной, правда, довольно быстро оседающей. По аромату и вкусу – вы пили какое-нибудь полусладкое из Изабеллы, вроде любимого в народе “абхазского” Лыхны? Специфический “изабелльный” аромат настолько забивает все остальное, что говорить о тонкостях и нюансах не приходится. Могу лишь добавить, что на этом фоне не было видно и каких-то явных дефектов, не дающих пить получившееся вино.

Вы хотите поговорить о глобальном потеплении? Тогда мы идем к вам! :)

Я же совсем забыл подвести итоги фотоавторалли!

Впрочем, это не займет много времени – на старт первого в своем роде Wedding Rally не вышел ни один экипаж. Говорят, с нынешними ценами на бензин в Европах такого рода развлечения просто невыгодны.

drochevo

Поэтому анонсирую подготовку нового соревнования в том же формате. На этот раз поедем недалеко, по Московской области.