Надави побольше!

Больше таких игр не делают. Слишком не толерантно, слишком кроваво, слишком весело.

Screenshot_2016-01-07-11-26-30

Кармагеддон или “Кровь, кишки и машины”. Берем машину и давим всех, кто подвернется. Чем больше надавили, тем больше очков заработали. Выиграл тот, кто либо проехал быстрее, либо передавил всех пешеходов, либо поломал всех соперников.

https://youtu.be/dvd_0pJLfd8

Игра была запрещена во многих странах, но ФИДО и потом интернетики не дали завять такой штуке. Как ни странно, но игра официально 16+.

Взять для iOS, Android или Steam

PS Главное, не садитесь сразу после игры за руль!

Шарики черные, зеленые и белые …

… и все лезут не тогда, когда надо и не туда, куда надо. А потом из-за них всё ломается!

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

IMG_0012

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

Играть просто: черные шарики создают постоянные связи, а зеленые – временные, которые можно разрушить в любой момент. Красные шарики при выносе надуваются и тянут вверх, а белые умеют образовывать цепочки. Надо создать такую икебану, что бы достать одним из шариков до выхода, но не зацепить ничего лишнего. Уровень считается пройденным если шариков засосало достаточно. Просто, понятно и на последних уровнях неимоверно сложно.

Игра есть под все платформы, поэтому найти ее не составит труда. Поверьте, 250 рублей за такое не дорого.

World of Goo для iOS и Android и даже Steam

А потом мультик покажут!

Карманный размер, два батарейки, часы с будильником и игра в комплекте. Первая игровая консоль у многих детей моего времени. “Ну, погоди”, “Веселый Повар”, “Тайны Океана” … если эти названия для вас не просто набор слов, то у меня хорошие новости. Наконец-то появились нормальные ремейки этих игрушек.

nupogodi

Нормальные – это значит яйца падают так, как тогда и управление не заставляет мучаться. Да что я тут рассказываю, проще посмотреть …

В те годы ходила байка, что стоит набрать 1000 очков, как игра покажет мультик про волка и зайца. Я набирал. Мультика не было, игра просто начиналась сначала … Обидно было до жути.

iOS и Google

Да, версия для iOS платная, но она того стоит, ибо наиболее полная реализация игры из встречавшихся мне. Там даже волк “подмаргивает” во время звука, прямо как в оригинале. Сразу видно – люди играли.

PS. Есть куча версий для андроида, но эта вроде наиболее играбельная на мой вкус.

Хорошо быть рыцарем …

Пехотинцы простые и тяжелые, кавалерия, лучники и замки. Рыцари, гриффоны и драконы, а так же прочая нечисть в полном ассортименте. Встречайте предка практически всех стратегий. Никакой 3D графики, никаких вау-эффектов, одна чистая и незамутненная ничем стратегия. Пошаговая.

IMG_0009

Вторая версия этой игры появилась на PC в 1989 году и практически мгновенно завоевала популярность. По крайней мере я потратил на нее в 90-91 году ну очень много времени, сидя за древним 286м и делая вид, что занимаюсь работой.

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

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

Спасибо авторам, они перенесли весь игровой мир на современную платформу без потерь. Играя, я практически не нашел отличий от оригинала и поэтому игра обоснованно поселилась в моем списке. Игра есть в обоих вариантах: платном и бесплатном, но я считаю правильным потратить 280 рублей ради удовольствия.

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

К сожалению, игра есть только для iOS. Берите в iTunes Store

Дави зомбей!

Иногда напрягать мозги совершенно нет никого желания. А поиграть охота. Во что-нибудь в меру простое и не требующее напряжения извилин: в метро или электричке или просто под настроение. Пару-тройку раундов по несколько минут и хорошо. Одной такой игрой для меня стал Earn to Die 2

unnamed

Сюжет игры простой: вам надо добраться из точки А в точку Б. В вашем арсенале есть машина, управляемая педалью газа и двумя кнопками балансировки (потом добавится ускоритель). Попыткам добраться в нужную точку мешают зомби и беспорядочно сваленные препятствия. Давим зомбей, разрушаем препятствия и доезжаем.

Просто? На первый взгляд да, на второй тоже … да третий сильно не поменяет точку зрения. Одно из главных отличий этой игры от подобных – возможность каждый раз ехать по-другому: где-то можно газануть и проскочить поверху, а где-то наоборот, притормозить и проехать ниже. В некоторых картах своевременное включение ускорителя способно помочь преодолеть на одном дыхании половину уровня. За каждую попытку “доезда” вам дают немного денег, которые можно потратить на обновление или усиление машины.

IMG_0003

Обновления довольно условные, но тем не менее разделены на четкие категории: двигатель, трансмиссия, колеса, оружие, ускоритель, баланс, защита и бензобак. Чем больше денег вливаете в соответствующую категорию, тем лучше машина себя ведет. Скажем, если больше денег в колеса, то машина будет легче преодолевать препятствия, а если в “баланс” – то можно будет проехать всю трассу, просто зажав педаль газа. А проехав – получить новую машину, еще круче и новую трассу.

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

Приятной игры!

Защищаемся от …

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

Придумать тут что-либо новое сложно, поэтому враги попадают под следующие категории

– Простой. Убивается легко, приносит очков мало. Просто мясо для отвлечения пушек.
– Быстрый. Убивается так же легко, но быстрый. Имеет все шансы проскочить, пока пушки заняты.
– Крепкий. Движется медленно, но для убийства надо потратить кучу времени.

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

Казалось бы, что может быть интересного в подобного рода играх? Расставил – уничтожил. И тут на сцену выходит его величество баланс. Большинство “новых” игр этого жанра построены по классической схеме: даём легко выиграть первые уровни, а затем начинаем задирать сложность до такой степени, что игроку просто невозможно пройти уровень честно, не покупая различные дополнения и улучшения. Плюс большинство авторов придерживаются канонического устройства игры: на карте есть дороги/реки, свернуть с которых невозможно. А ведь куда приятней “закрутить” врагов на карте, заставив пройти мимо одной и той же пушки несколько раз.

В результате всех игр у меня на планшете обосновалась игра Tower Madness HD, а на телефоне – Robo Defense. Tower Madness есть и на андроиде, но там он почему-то не очень играбельный на мой вкус. Но точно такой же, как и на иос

10389983_10153033126008930_8674888893737785096_n

В Tower Madness ваша задача защищать 10 овечек от злобных инопланетян, которые желают их утащить к себе на корабль. Перед игрой вам дают выбрать пушки, которыми вы будете обороняться. Баран в оружие не входит, но способен один раз уничтожить всех посягнувших на отару.

Robo Defense устроен проще – есть N входов и N же выходов. Всякие штуки пытаются пройти из входа в направлении выхода. В начале карьеры до проигрыша можно пропустить 10 врагов, но потом накопленные очки можно потратить на увеличение этого числа. Графика тут не такая красочная, как в tower madness, но не обращайте внимания – играбельность тут на уровне. Я посадил аккумулятор не на одном смартфоне и не один раз, играя “по 5 минуточек”.

Из отдельных плюсов Tower Madness – сохранение резервных копий достижений в iCloud. И даже сменив телефон или планшет, ваши достижения и открытые карты не исчезнут. Robo Defense так не умеет.

Хорошей игры!

PS Где найти? В магазинах приложений по имени.

ZFS, солярка и все-все-все …

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

Итак, некоторое время назад ко мне в руки попала инфраструктура, которая за 5 лет сменила пятерых же админов. Самым больным местом были стораджи, с них и начал разборки. Ситуация осложнялась тем, что сисадмины менялись то ли вместе с начальством, то ли у начальства были постоянно меняющиеся вектора “куда мы движемся” – мне выяснять лень.

Первым делом была проведена ревизия, чего же попало ко мне в руки.

– Стораджи на NetApp. Здесь был маленьких плюс: есть человек, которых ими управлял и какого-то внимания с моей стороны не требовал.
– Стораджи на ESX. То есть берем сервер с RAID контроллером, ставим туда ESX и вместе с хостингом виртуалок раздаем еще и диски.
– Стораджи на Nexenta. Некоторые с просроченными лицензиями.
– Стораджи на OmniTI. Некоторые с веб-мордами, некоторые “голые”.

И вот последних двух пунктов было много! Стал разбираться. Что нексента, что OmniTI построены на древнем ядре от solaris. Если кто-то из продаванов нексенты будет втирать, что они там что-то делали, модернизировали и так далее, не верьте – я из любопытства менял и ядра и библиотеки – никаких криков “ой, у меня тут сломалось” не было.

Все отличие нексенты от omniti/openindiana – это веб-мордочка с красивыми графиками, криво обкусанный шелл и всякие параметры по умолчанию.

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

Освободил один хост, обновил софт, обновил фирмварь … И все, солярка перестала загружаться – не может проинициализировать дисковый контроллер. Как говорится, оппа. Контроллеру 5 лет, солярка типа с последними обновлениями и не может. Побежал по инету – везде стоны про какое гавно ставит деллы в свои сервера. Поставил для проверки линукс – встал без каких-либо проблем.

Тут у меня поднялся флажочек: если солярка то не трогай фирмварь. 5 лет ей никто не занимался и больше заниматься не будет …

Ладно, благодаря новой политике у меня есть место, куда слить данные и освободить еще пару серверов для “на попробовать”.

Итак, два полностью одинаковых Dell R510. Вообще одинаковых – партнамберы из одной сотни. На одном – поставленная с нуля солярка, на другом – центось седьмая.

На солярке поднял zfs согласно лучшим шаманским методикам (там из духа “если число дисков четное и больше 9 – то лучше raidz3, иначе raidz2 и смотри не перепутай”), на линуксе – тупо software raid той же конфигурации, что и у солярки. И XFS поверх

И начал тупо заливать и сливать данные. NFS3, без каких-либо затей.

Солярка показала чистую, красивую и прибитую гвоздями “полку” на 3,5 гигабита. Линукс честно упирался в скорость сети и рисовал 10ку. Очень удивился. Ведь корпоративная система, типа ого-го и эге-гей!

Полез тюнить. А тюнить-то в общем и нечего. После линукса с его /sys и /proc солярка кажется очень бедным родственником. Методом последовательного теста выяснил, что у сети полка на 5 гигабит. И все – дальше проц умирает по загрузке. Древний драйвер, новее никто не делал.

В более низкой полке виноваты диски, вернее какие-то ядерные потроха этой ZFS. Потому что когда я поставил уже на третий сервер linux, прикрутил к нему zfs с теми же настройками, то он стал выдавать ту же 10ку.

Вывод: в стораджах солярке и ее производным делать нечего. Старый софт, никакой поддержки и теде и тепе. Если кто покажет на сайт соляриса, где типа недавно они выкатили новую версию, спешу огорчить, там то же самое ядро из 2010 года … я пробовал 🙂

Но может быть есть шанс ZFS завести под линуксом? Фигня вопрос: как раз приехал новый сервер. Ставим линукс, ставим ZFS, размечаем диски, запускаем туда клиентов … Поначалу все шло шикарно. Но внезапно клиенты стали жаловаться на то, что их машинки “умирают”. Пошел смотреть.

На сторадже занято примерно 65% диска, до обещанных ораклом 85% еще далеко. Решил посмотреть на производительность и немедленно поджег стул – 5 мегабайт в секунду. Представляете, 24 SAS диска и такая скорость? Сколько нервов я потерял, “раскидывая” этот сторадж и представить тяжело. Причем скорость выросла до приличных значений уже на практически пустом сторадже.

Попытался разобраться и не смог – по всем статьям, хаутушкам и прочим заклинаниям у нас должно быть более чем хорошо – и кешу место выделено и прочему раздано согласно документации. Ан нет – заливаешь на 40Тб сторадж 25ТБ и он “умирает”. И лежит “мертвым” до 5-10Тб занятого. Где-то какой-то глюк в драйверах zfs.

Стало понятно, что и ZFS на сторадже не жить. Перебилдил на софтверный raid, поставил xfs и все – все проблемы ушли.

Однако есть у меня место, где я недавно поставил пару новых хостов на солярке и аккуратно обновил старые. Это специальные хранилки, которые хранят снапшоты клиентских файловых систем. Вот там ZFS развернулась на всю катушку – и сжатие и дедупликация нужны как воздух. Опять же, я провел пару недель, гоняя данные между этими хостами (дедупликация работает гораздо лучше, когда одном сервере “давятся” одни и те же клиентские данные). В результате есть несколько … наблюдений

1. “Свежая” солярка, ZFS 28 и raidz3 – наше все. Оно даже на глаз быстрее работает того, что было 5 лет назад. Но линукс все равно быстрее.
2. Сжатие практически ничего не стоит для процессора, а давит в 1,5-2 раза. Можно включать.
3. Хочешь дедупликацию? Добавь памяти из расчета 1ТБ данных на диске – 5-6ГБ ОЗУ. Иначе будет тормозить.
4. Никогда (слышишь: никогда!) не забивай ZFS на 97-98%. Оно умирает даже на чтение до скоростей 100-200 килобайт в секунду. В принципе, мне именно поэтому не удалось забить на 100% – тесты умирали раньше. И вообще, для ZFS – 85% занятого – уже тревожный звонок.
5. Солярка в изучении чуть сложнее линукса, в основном из-за очень кривой и слабой документации. Изучать целенаправленно смысла нет, разве что в удовольствие.

Boulder Dash 30th Anniversary

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

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

Одной из этих игр “посложнее” был Boulder Dash.

Screenshot 2015-12-06 14.54.44

Суть игры простая: управляя прогрызающим ходы муравьем (сусликом? кротом?) необходимо было за определенное время собрать все алмазы и добраться до выхода. Главное – не дать камням попасть по башке и не столкнуться с жуками. Плевое дело!

Быстренько скачал эмулятор ZX Spectrum и нашел “тапочек” с игрой.

Да, она самая! Правда, на Atari за счет более продвинутого видеоконтроллера скроллинг был плавнее, но уровни те же самые, как и проблемы при их прохождении. И как “тогда”, я заклинился на третьем уровне. Банально не хватало алмазов для открытия дверей. Помучавшись некоторое время, я нашел подсказку и застрял теперь уже на четвертом уровне .. или пятом? Не важно: я застрял. Раз за разом я пытался пройти уровень, не желая сдаваться: ведь сохранений нет, да и денег за прохождение никто не просит.

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

Ну … не сказать, что скопировали, но переписали под современные рамки – это точно.

Псевдо-3D, обучалки, миссии, “открывашки за деньги” – все это присутствует в полной мере. Даже за старые уровни требуют доплатить 100 с лишним рублей. Буржуи и капиталисты!

Зато музыка ну очень похожа на ту самую, и уровни из Classic Pack вообще один-в-один. Доказательство на видео выше. И даже застреваешь на тех же местах и совершаешь те же самые ошибки, что и тогда.

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

И только наигравшись до одури замечаешь, что эту игру выпустили в честь 30-ти летия. Но я взрослый и состоявшийся мужчина и могу позволить себе поиграть в такие игры (и не обращать внимания на возраст). Осталось теперь джойстик найти …

Стоит ли играть: да. Даже если и не играли в оригинал
Где взять: в магазинах приложений. Есть и платная и бесплатная версия.

Обновление: Оказывается, есть версия для браузеров, переделанная из версии для ZX Spectrum

Дело было вечером …

… и делать было нечего. Организм в достаточной мере отдохнул и к смене вида деятельности с “полежать на диване” на “поиграть во что-нибудь” отнесся довольно благосклонно.

Достал планшет, обновил все и решил посмотреть, что сейчас предлагает мобильная индустрия для развлечений таких, как я. Сначала попробовал на андроиде, затем на ios. Скачал пару игрушек, купил другую … И не сказать что меня это удивило, но создалось впечатление что современные игроделы рассчитывают, что играть в игры будут полные дебилы, для которых красивая картинка важнее сюжета. Не имеешь быстрых пальцев? Не беда – заплати или посмотри рекламу. А лучше и то и другое.

Например вот скриншот, снятый мной сегодня в магазине Apple Store.

Apple Store donat

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

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

Пробежался по интернету и не нашел ничего, что бы могло ответить на вопрос “во что можно поиграть взрослому мужику”. Да, тому самому, что вырос на Tetris, Formula One, Prehistorik, RiverRaid, Saboteur и Boulder Dash. Где были Atari 2600, ZX Spectrum и капелька Денди. И именно поэтому я органически не перевариваю бегалки типа Temple Run, где максимально развивается только связь “глаз-палец” …

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

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

Места всегда мало! Или ищем место онлайн.

Мы сейчас находимся в период очень интересных ценовых войн за пользователя. Все сервисы пошли в интернет, вместо покупки предлагается подписка и прочее, прочее, прочее. И то, что сначала казалось прорывом, сейчас не вызывает никаких эмоций.

Вот и мне потребовалось найти немного места в онлайне. С одной стороны, искать мне место в онлайне … Ну странно как-то. Есть и свой сервер в германии, где как минимум терабайт простаивает и где можно развернуть тот же owncloud, а с другой стороны, на нем и так уже крутится куча всего полезного, которое неплохо было бы положить еще куда-нибудь.

Итак, что мне надо?

Мне надо некий сервис, в который я положу следующее

Примерно 200Гб всяких штучек, которые мне потерять нет желания.
Примерно 300Гб других штучек, которые мне дороги как память
Ну и примерно 20Гб фотографий.

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

Что мне надо?

Мне нужна поддержка всех трех платформ – linux, os x, windows. Пусть через нное место, но что бы все работало. Никаких браузеров, “у нас в разработке” и так далее.

Мне нужны “прокачанные” технологии. Сидеть как dropbox на плечах amazon’а конечно хорошо, но охота более прямого контакта. Зачем? Да просто так.

И мне не нужна “халява”. Если халява – значит никаких гарантий и никакой возможности хотя бы покачать права.

Для начала пойдем по отечественным сервисам.

Яндекс.Диск. 200 рублей за 1Тб в месяц. Есть прямой доступ до диска через dav_fs, что для меня является большим плюсом. Минус – как любая компания, живущая от рекламы, Яндекс собирает о пользователе все, до чего сможет дотянуться.

Облако mail.ru. Цен на сайте не нашел, другие сайты говорят про 499 рублей в месяц. Но я имею крайне печальный опыт работы с mail.ru, поэтому данная компания даже не рассматривается и здесь приведена из-за того, что она есть.

В общем-то на этом отечественные провайдеры кончаются, не успев начаться. Пойдем по импортным

Dropbox. Самый первый, самый широко поддерживаемый сервис. За 1Тб желают 10 долларов в месяц или 700 рублей.

iCloud. За терабайт хотят 19 долларов в месяц. Или 1400 рублей в месяц.

Microsoft OneDrive. 199 рублей в месяц. И добавляют еще лицензию на Office 365 (Word, Excel и прочие штуки).

Кажется, тут выбор очевиден. Тем более, я недавно попробовал Windows 10 … и знаете, она мне понравилась.

Update: капиталисты не смогли не подгадить и в итоге не 200 рублей в месяц, а целых 286. Я близок к разорению 🙂

Продолжаю искать музыку …

После обновления играющего мне в уши оборудования довольно-таки резко встала проблема “а что слушать?”. То, что раньше было собрано тяжким трудом, слушать стало невозможно. Когда знаешь, как оно должно звучать, мозг автоматом переключается с “слушать музыку” на “слушать, как воспроизводится”. Когда не знаешь, то и 320 kbps прокатывает на ура, хоть и вызывают подозрения.

Что делает воспитанный в пост-советских реалиях человек? Правильно, лезет на торрент, обнаруживает там залежи flac’ов и начинает качать. Я в процессе замены библиотеки докачал до буквы D и забил 2 терабайта.

А потом я начал слушать то, что накачал … Скажу сразу: стер практически 90% накачанного. Ибо к понятию “качественная запись” это не относилось ни с какой стороны. Итак, как понять, что запись стоит оставить в коллекции.

Первое, на что абсолютно не стоит обращаться внимание, так это на логи рипперов, анализаторов и прочей фигни. Все они рассчитаны на то, что бы обращающийся с ними хотя-бы понимал, что и зачем он делает. Любой граббер покажет “no errors” на свежезаписанный диск. Ему пофиг, что записанное – сильнозажатый mp3. Да и руками при желании эти текстовые файлики понабирать можно. А уж подделать картинку спектрограммы и делать нечего. Так же не стоит обращать внимание на цифры и “источник звука”: нам же музыку слушать надо, тем более и их легко можно накрутить/подделать. Плюс очень часто запись в 16/44 звучит гораздо лучше какой-нибудь 24/192 исключительно из-за качества оригинала и прямизны рук звукорежисера. Особенно это часто слышно на треках из iTunes Store, которые Apple специально пересводила.

Второе, что необходимо сделать сразу же: взять и послушать “наскоком”, просто перематывая в разные места. Через некоторое время “вау-эффект” пройдет и вы сможете практически “с лету” определять примерный источник записи. По динамическому диапазону, звучанию басов и высоких и так далее и тому подобное. Да, я наступаю на все мозоли аудиофилам и цифродрочерам, но стадию “винил или сидюк” я прошел где-то за неделю. Сейчас у меня стадия “сидюк – dvd|студия”, но сильно лажаюсь на концертах.

Какие основные симптомы для “надо выкидывать”?

1. Нет панорамы. Если слушать в наушниках, то все инструменты собраны в этакую кучу прямо перед носом. Нет ничего звучащего “левее” или “правее” – только четко впереди, слева или справа. Басы бьют внутри черепа. Все это признаки того, что “оригинал” был взят из mp3. Joint-stereo и так далее.

2. Все звуки “глухие”. Слушается так, как будто вы слушаете концерт по телевизору. Опять же, последствия mp3 или винила. Но (!) на всякий случай обратите внимание на дату записи. Очень может быть, что записи лучшего качества попросту нет. Или так изначально было записано. Ну тяжело ждать от записи 50-60х годов того, что можно услышать в современных.

3. Дефекты/артефакты. Скрипы, “песок”, “щелчки”, “звон” и так далее. Нет, они встречаются и в студийных записях, но гораздо реже, чем в сделанных самостоятельно. Да и любой студийный “артефакт” обязательно обсосан на форумах, найдено подтверждение того, что “да, лучшего качества нет” и так далее и тому подобное. Короче, это не bug, а feature.

4. Чрезмерное использование обработчиков звука. “Клиппинг”, “компрессии” и так далее и тому подобное. Опять же, через некоторое время слышится ну просто сразу. Ну и при сомнениях можно поглядеть на график громкости: если видите “прямую” – это оно. Да в некоторых случаях хватит просто посмотреть на индикатор уровня в течении 10-15 секунд. Вот просто для примера:

bad_music

good_music

Обратите внимание на поведение стрелок. Там, где все хорошо, стрелку колбасит практически по всей шкале. Там, где плохо, стрелка колеблется не сильно и “прилипает к нулю”. Особенно подобными “украшательствами” страдают студии в США, поэтому если есть возможность, послушайте тоже самое, но предназначенное для другого рынка – иногда бывает ну очень большая разница.

И наконец, самым последним шагом надо просто сесть/лечь и послушать. В спокойной обстановке, когда ничего не отвлекает и можно реально послушать музыку. И, особенно для хорошо знакомых дорожек, огребать увольствие лопатами, тележками и тазиками …

Резюмируя: если музыка нравится – оставляйте. Не нравится – удаляйте без жалости. Поверьте, в мире дофига хорошей музки, которую вы еще не слышали …

OS X 10.11 El Capitan & USB

Не надо никаких шаманств: теперь делатель флешек есть прямо в инсталляторе

sudo /Applications/Install OS X 10.11 Developer Beta.app/Contents/Resources/createinstallmedia --volume /Volumes/Untitled --applicationpath /Applications/Install OS X 10.11 Developer Beta.app --nointeraction

PS Это для девелоперской версии. Думаю, что для обычной надо будет убрать упоминания Developer Beta

Продолжение аудиофильства …

Торрент-клиент уже который раз докладывает, что места на диске больше нет, а я отмахиваюсь, ибо слушать не на чем. Нет, SGS+CX300II (см прошлый пост) отрабатывают свое на все 100%, но мне их не хватает.

Во-первых, я уже нашел мелодии (спасибо hdtracks.com), где я ясно слышу, что эта “аудиосистема” не тянет. Вот совсем чуть-чуть, но не тянет.
Во-вторых, SGS все-таки довольно старый. Большие и толстые треки проигрывать ему откровенно тяжело. Паузы и тормоза. Хорошо, что заиканий нет.

Вывод: надо идти менять “аудиосистему”. А на что менять? Возвращаясь с работы, зашел в магазин sony. Поспросил послушать какие-то супер-новые наушники (фиг его знает, что за марка, но в названии extra bass или как-то так). Услышал фигню какую-то вместо музыки. Пошел к соседям-маководам. Там послушал beats – еще хуже сонек. Немного поучаствовав в теологической дискуссии на тему “что вы можете услышать на 128кбит/c”, потребовал наушники от B&W (или от B&O – фиг их разберет). Они вроде заиграли более-менее прилично, но их цена мгновенно придавила мою жабу.

Промежуточный вывод: надо идти к аудиофилам. Там обычно горы всякой техники и дают послушать. Ну ок, быстрый чёс по интернетам привел к doctorhead.ru. Ну и что, что на другом конце Москвы? Главное – они в выходные работают.

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

Наушники это хорошо, но должно быть что-то, что в них играет. На аудиофильском языке мне нужен DAC и Headphone AMP. Опять же, требования простые:
– Должен уметь играть звук, что бы мне понравилось.
– Должен уметь играть звук с ноутбука и андроида.
– Должен быть портативным, дабы с собой таскать.

В общем, зашел в магазин. Постоял, послушал депешей, зашел в фокус колонок, оценил звук. Подошедшему продавцу объяснил на пальцах требования и он притащил мне горку наушников. Сел я и не глядя на марки и ценники стал втыкать наушники в SGS. Какие-то наушники заиграли сразу, некоторым не хватало мощи SGS, а некоторые …. ну в общем фигней оказались. Постепенно получился этакий шорт-лист наушников, звучание которых не вызывало во мне возражений.

Теперь надо их раскачать, что бы точно быть уверенным, что они играют и старый SGS не портит мне малину. В общем, стал пробовать всякие коробочки. Одни не умеют в DAC, другие не умеют с андроидом, третьи гавном оказались … Всем моим хотелкам одновременно удовлетворил только iBasso D-Zero MK2. И название звучное и с подтекстом для русского языка.

Ну и теперь последний круг: из шорт-листа наушников “выслушиваю” те, которые играют лучше всего. Darren Hayes, Anne Dudley и треки с hdtracks. Потом я поймал себя на том, что пытаюсь придраться к слушаемому и не могу. Нет, я не стал тут же срывать наушники с головы и кричать “вот эти!”. Не, я переключился на B-Tribe, East-17, Depeche Mode и Keiko Matsui. И опять мне все понравилось.

И вот только после этого я снял наушники с головы. Представьте мое удивление, когда я увидел, что марка наушников – Sony. Sony MDR-1A. Осторожно интересуюсь ценой, ибо некоторые наушники продавец таскал из “пацанско-аудиофильской” части магазина и откуда эти – хз. Цена оказалась … довольно приличной, но реальной. А ибасса? Тоже не золотой! Хрен с ними, с деньгами – заверните! 🙂

Потом пошел посмотреть на цены тех наушников, которые отверг. В общем, я пока столько не готов тратить. Хотя когда увидел ценники, сразу возникло желание попонтоваться 🙂

Результат: сижу, слушаю накачанное и балдею. Половину уже удалил – слышу, что upscale из mp3.

Аудиофилическое … или история моей болезни.

tidal

Вообще-то я считаю термин “аудиофил” оскорбительным. Это те самые люди, которые тащатся от слов “бескислородная медь” и покупают патч-корды за 500 баксов. В общем и целом вполне себе мирное заболевание, угрозы не несет никому, кроме кошелька его владельца, поэтому нормальные люди о нем практически ничего не знают.

Кто такие аудиофилы? Это люди, которые повернуты на качестве музыки, но при этом совершенно не разбирающиеся в том, на чем эту музыку играют. Именно для них sony выпустила специальную SD карту “для меломанов”, именно они спорят про разное звучание звука при смене кабелей на цифровых интерфейсах и так далее и тому подобное. Но при этом в “слепом тесте” они не могут отличить настоящий кабель от сделанного из вешалки.

Как отличить аудиофильскую тусовку или журнал от нормальных людей, жаждущих хорошего звука? Открываете любой обзор или тему и просматриваете наискосок. Если не увидели каких либо цифр и графиков, кроме стандартных “диапазон воспроизводимых частот” и “АЧХ”, а только слова про “кристальность звука” и “глубину звуковой панорамы” – это аудиофилы. Если пошли непонятные графики с пиками и терминами типа THD, SNR, SQ – то очень похоже, что это нормальные.

Можно подойти и с другой стороны. Аудиофилы не могут и не умеют оперировать объективными факторами, которые может подтвердить или опровергнуть измерительный прибор. Вся их основа сродне религии и опирается на “а я слышу!”.

В общем, вляпаетесь как я, разберетесь. А я вляпался довольно неожиданно для себя.

Давным давно, еще в начале этого тысячелетия, при “граблении” очередного диска я решил выяснить уровень, при котором я перестаю слышать разницу. Для этого я взял хорошо известный трек и начал “давить” его в разных форматах. Послушал его на компьютере, с колонками и наушниками. Перегнал на CD, оделся поприличней (что бы не посчитали за лоха) и сходил в один из пафосных салонов по продаже аудиоаппаратуры (в таких обязательно дают послушать покупаемое, даже со своих носителей). В результате походов я вывел четкое правило – “mp3, два прохода, VBR, средний битрейт 256” и все это время я подгонял коллекцию под это условие. Потом появился iTunes Store. Послушал их AAC, признал нормальным и дальше уже пополнял библиотеку им, тем более что я считаю iTunes лучшим каталогизатором музыки. Но не суть. Главное в том, что стандарты выработаны, библиотека собрана и в последнее время практически перестала пополняться – 60 тысяч треков мне в принципе хватило.

Одним субботним вечером я колупал USB стек у микроконтроллера и мне потребовалось что-то, что можно воткнуть в USB порт и оно при этом не было бы ни флешкой, ни мышкой с клавиатурой. После довольно долгих поисков я наткнулся на древнючую usb аудиокарту от SoundBlaster. Воткнул, у меня не заработало и я решил проверить, живая ли она воообще и переткнул в ноутбук. Воткнул наушники, переключил выход плеера на карту и пару минут не мог понять, что не так. Внезапно меня озарило: звук какой-то не такой.

Стал слушать. Достал смартфон, закачал ту же песню, стал сравнивать. Звук разный! Ничего не понял. Подпробовал одно, другое … Не может же древняя звуковуха, да дешевые наушники ТАК влиять? Пошел на трекер, выкачал образ диска без потери качества и начал “передавливать” в разные битрейты.

Обнаружил, что я слышу разницу между 256 и 320. Но только на внешней звуковой. Но слышу. Опять не поверил. Пошел проверять.

Проверка простая: скачиваем foobar2000 и к нему расширение для слепого тестирование. Называется ABX Comparator. Два трека, слушаем, отмечаем, который думаем что лучше и потом смотрим. В общем, разберетесь, там просто.

Проверка показала: я 100% различаю 256 и 320 на знакомых мне мелодиях. Офигел мрачно. Включил FLAC. Различаю!

Ну, думаю “все, теперь пересобирать всю библиотеку во FLAC”. Расстроившись, полез смотреть, чем ее играют. Пока смотрел, наткнулся на тему про проигрывание многоканального звука. SACD, DTS, DVDA – эти буковки обычно про это. На пробу скачал какой-то альбом и попытался запустить на проигрывание. Почему попытался? Потому что в ответ услышал в колонках шум. Тут меня зацепило: у меня в колонках шум, а народ там хвалит вовсю. Разобрался, доставил декодеры. Заиграло … Ну вроде получше FLAC, а вроде и нет. Решил послушать на “большом” компьютере, к которому через встроенную звуковуху подключен девятилетний (в смысле старый, дешевый и из ДСП) комплект акустики 5.1.

И вот тут я обалдел. Это вообще совершенно иной звук. И это действительно надо слушать, ибо словами передать очень тяжело, потому что постоянно скатываюсь на междометия и правильных терминов не знаю. В результате я решил оставить вообще все задачи до завтра, расставил колонки и сел слушать с закрытыми глазами. И тут меня накрыло: я стал различать, где какой инструмент стоит и как соседи усаживаются поудобней (я скачал “живую” запись с какого-то концерта классической музыки). Обалдевший от прослушивания, решил прильнуть к “истокам”: альбом Майкла Джексона HiStory. 95й год, мой первый лицензионный диск, заслушанный до дыр на всех классах железок. Скачал пересведенную под DTS запись, включил и … попросту перестал удивляться. На досконально знакомой дорожке я услышал множество деталек, которые раньше не было слышно. Понимаете, их просто не было. Вообще.

Метнулся к компьютеру, начал на выборку выкачивать то один, то другой трек (благо интернет у меня быстрый) и в каждом обнаруживал что-то новое … Внутри меня стала расти волна предвкушения: представляете, 60 тысяч треков и все с чем-то новым? Ну или почти все, ибо я сомневаюсь что качество записей Высоцкого или Цоя будет отличаться.

Понапихал в трекер и стал разбираться, чем это играть. Если с большим компьютером проблем нет – там либо foobar2000, либо DeadBeeF и тему можно закрыть надолго, то с смартфоном и ноутбуком проблемы. Проблемы две: чем играть и чем слушать? С ноутбуком пока решил повременить: я смартфон слушаю чаще и дольше.

Почему я нашел проблему “чем играть”? Ведь в маркете этих плееров хоть ешь одним местом – выбирай любой. У этой проблемы аж два конца. Первый: разнообразие форматов и контейнеров. Где каждая песня отдельным файлом, где весь альбом в одной куче, а где вообще непонятно что. И это должно играться. Если с фубаром проблем нет, то с мобильными плеерами жопа. Декларируют много, а в реальности все зависят от возможностей одной и той же библиотеки.

Второй конец это сам андроид. До 5й версии андроиду было пофиг, какой звук и какого качества в него пихают – он его тупо перекодировал в 16бит на 44 килогерцах (В 5м обещают эту планку поднять) и только потом передавал наружу. Поэтому народ начал придумывать разные варианты. Скажу сразу, нормальных только два. Остальные – это улучшайзеры, которые умеют только играться эквалайзером и эффектами.

Первый способ – использование внешней звуковой карточки. Или по ихнему, аудиофильскому, DAC. В этом способе плеер берет файл, декодирует его в звуковой поток и отдает DAC напрямую, минуя всякие андроидные заморочки. А DAC уже преобразовывает его в звук, ибо только для этого он и создан. Из известных мне на сегодняшних дней способов рабочий только один – подключить DAC через кабель usb-otg и найти плеер, который умеет с такими штуками работать.

Второй способ – хаканье андроида с получением прямого доступа к железу. В моменте изучения данного вопроса для меня вскрылся очень интересный факт: в топовые модели обычно вставляют и топовые чипы, в том числе и аудио. То, что их никто и ничего использовать не может – никого не волнует: маркетолухи отчитались, хомячки впечатлились и напокупали. В данном способе есть пара очередных проблем: производители вовсе не горят желанием давать доступ до внутренностей телефона и у некоторых моделей попросту нет отдельного звукового чипа.

После “всплывания” из глубин интернета появилась и еще одна проблема: качество разных реализаций декодеров тоже было разным. Одна проблема тащит за собой другую …

Походы по форумам выявили двух претендентов на звание “музыкальный плеер”: USB Audio Player PRO и Neutron. Оба стоят в районе 300 рублей, оба собрали кучу положительных отзывов на профильных форумах.

Ставлю первый. Играет. Достаю usb-otg кабель и подключаю через него SoundBlaster. Играет. С заморочками типа “сначала подключите карточку, а только потом запускайте плеер”, но играет. Ок.

Ставлю второй. Играет. Как использовать внешнюю карточку не понял, но играет. Потыкал всякие аудиофильские галочки типа “наплевать на процессор, считай все в 64х битах”. Заиграл еще лучше. Основной минус – совершенно уе…щный интерфейс. Автор (кстати наш, русскоговорящий) откровенно забил на дружелюбность к пользователям. Все, что не относится к звуку – начхать. Поэтому забудьте про плейлисты и прочие прибамбасы типа выбора откуда играть будем. Они официально есть, но не работают. Но играет хорошо, собака серая.

neutron

Казалось бы, на этом можно успокоиться. Но охота еще лучше: я стал слышать моменты, когда явно в оригинале было поярче, поизящней (о, аудифильское прорвалось). Значит, надо хакать андроид.

Опять на форумы. Мой нынешний Lenovo P70 хакать смысла особого нет: весь звук на одном чипе с процессором. Что там – фиг его знает. Через кучу времени выбора моего будущего смартфона наткнулся на немного ностальгический пост про то, какой же клевым был Samsung Galaxy S и каким гавном оказался шестой. Звуковой чип Wolfson 8994, топовый для 2010 года … Оппа! А у меня валяется мой старый SGS. И даже в рамках ТО я недавно заряжал ему аккумулятор – вполне живой.

Сначала заливаю туда тестовые треки. Слушаю. Ну в принципе неплохо, но P70 играет лучше. И довольно сильно лучше так – сказываются 5 лет разницы. Заливаю туда последний цианоген, попутно снося все накопленное непосильным трудом, включаю все галочки …

DSP

Нахожу более-менее приличное и вижу зажегшуюся иконку. Жамкаю на play … едреныть! Как он оказывается умеет играть! Одни писки, визги и междометия от меня.

В результате я получил дешевый аудиофильский плеер. Да, он тормозит, да он не выглядит гламурно и стоит копейки. Но зато 24 бита, 96kHz и 100dB SNR вместе с усилителем D/AB.

И тут я остановился. Любой шаг в сторону улучшения звука теперь для меня будет стоить денег. Нет, куда двигаться понятно и так: сначала хорошие наушники на замену моим CX-300II, а затем внешний DAC. Но вот насколько широким должен быть шаг ….

Программируем микроконтроллеры в QtCreator

Это копия моей статьи, опубликованной на хабре

qbs03
Почему-то в интернете мало документации про qbs, пора немного исправить эту ситуацию.

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

Но поверьте, это довольно быстро задалбывает. Под виндовс – MSVC, под ARM – CooCox или Keil (приношу свои соболезнования вынужденным работать под IAR), под MSP – CCS, под андроид – eclipse, под ios – Xcode, под пики – MPLAB. И ладно бы, со всем этим работать можно было бы, но ведь фиг: везде свои заморочки, тонкости и неписанные правила. Все это накладывается на общую тормознутость так популярного эклипса помноженную на криворукие дополнения от производителей.

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

Но вот с микроконтроллерами ситуация не желала складываться категорически. В основном из-за того, что везде свои хотелки и желалки. Ну ладно, про это я уже жаловался. Я бы еще долго мучался, пока внезапно не наткнулся на краткое описание qbs.

Желающие могут пошариться по инету сами, но если кратко, то это заменитель всяких make и cmake, использующая нормальный (тут должен быть смаил) язык программирования. И сам QtCreator собирается с ее помощью, значит она уже вылезла из штанишек …

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

Хватит излияний, пора попробовать. Создадим очень простой проект, в котором у нас будет десктопная и микроконтроллерная составляющая.

Открываем QtCreator, выбираем создать Non-Qt Project (что бы пока не заморачиваться сильно) и далее выбираем то, где присутствует C и Qbs. Обратите внимание на приятные взгляду слова Platform independent

qbs01

В результате получаем один main.c и qbs. Можно уже нажать “build” и получить вывод Hello World.

Открываем qbs и ничего не понимаем. Поэтому все стираем, вооружаемся интернетом и начинаем писать. Яваскрипт и все такое.

import qbs

Так, тут вроде понятно. Импортируем всякое необходимое для работы самого qbs.

Project {
name: "simple"
}

Сохраняем и наблюдаем исчезновение main.c с левой панели. При попытке запустить проект QtCreator спросит: а чего пускать-то? В принципе пока все логично.

Из чего состоит проект в терминологии qbs? Из продуктов. И их может быть несколько, но пока я сделаю один.

Project {
name: "simple"
Product {
name: "desktop"
}
}

Теперь для нашего “десктопного” укажем исходник.

Project {
name: "simple"
Product {
name: "desktop"
files: "main.c"
}
}

При попытке скомпилировать не изменится ровным счетом ничего. Подсмотрим в некоторые обучалки и добавим зависимость от cpp и укажем, что вообще-то это приложение.

Project {
name: "simple"
Product {
name: "desktop"
files: "main.c"
Depends {name: "cpp"}
type: "application"
}
}

И вот теперь при попытке собрать приложение QtCreator пошуршит немного диском и в панельке Application Output появится искомое

qbs02

Ага, значит мы на верном пути. Осталось разобраться, что делают те самые две магические строки.

Depends {name: "cpp"}

Читаю документацию и понимаю, что данной командой я устанавливаю зависимость проекта от какого-то модуля с именем cpp. Понятней стало? Мне нет.

Простым поиском нахожу что-то подобное в /usr/share/qtcreator/qbs/share/qbs/modules/ (Если у вас другая операционка, то скорее всего аналогичное лежит где-то неподалеку от QtCreator). Если говорить коротко, то там куча яваскрипта, которая в зависимости от платформы подбирает компилятор под эту платформу. Полностью повторять подобное мне смысла нет, поэтому оставляю как есть.

type: "application". Из документации: The file tags matching the product’s target artifacts. Артефакт … An Artifact represents a single file produced by a Rule or Transformer. … ерр .. Rule? Creates transformers for input tags. Напоминает ситуацию про сепулькарий .. Transformer? Creates files, typically from other files.

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

Но вернемся к нашему проекту. Давайте добавим еще один продукт, только уже для микроконтроллера

Project {
name: "simple"
Product {
name: "desktop"
files: "main.c"
Depends {name: "cpp"}
type: "application"
}
Product {
name: "micro"
files: "blink.c"
}
}

При попытке что-то сделать, нам сразу выскочит сообщение, что вообще-то файла blink.c нет. Ну, ок, добавим в проект фаил blink.c. Как видно из названия, это тот же HelloWorld, только для микроконтроллеров. Я взял из примеров для микроконтроллера семейства msp430.

#include <msp430.h>

int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= 0x01;

while (1) {
P1OUT ^= 0x01;
__delay_cycles(1000000); // 1 second @ 1MHz
}

return 0;
}

Будучи скомпилированным и залитым, он начнет дергать ножкой P1.0 с интервалом в одну секунду. А так как на этой ножке у большинства демо- и девелоперских плат висит светодиодик, то он замигает.

Теперь QtCreator не ругается, но и в микроконтроллер ничего не заливается. Странно, да?

Добавлять Depends {name: “cpp”} смысла нет, потому что установленный в системе родной gcc не в курсе про существование такой платформы, да и в дальнейшем пригодится, например для пиковских контроллеров, где вообще все свое.

Теперь воспользуемся обрывками тех сакральных буковок, что встретились раньше.

Для начала, я предпочитаю в микроконтроллерных проектах расписывать каждый функционал в своем файле. Записывать каждый файл руками? Лень. Подсматриваем решение и переписываем блок

Product {
name: "micro"
Group {
name: "msp430 sources"
files: 'src/*.c'
fileTags: ['c']
}
}

Тут создаем группу файлов, которые обзываем “msp430 sources” и тупо включаем в нее все файлы, которые подходят под маску src/*.c. Для дальнейшей работы с ними тегируем их буквой С.

Что с ними делать? У qbs есть на этот случай две штуки – Rule и Transformer. По сути они близки, но немного разные. Счас попробую описать на пальцах разницу.

Rule умеет срабатывать на каждый файл, попадающий под что-то. Может срабатывать по разу на каждый фаил (например, для вызова компилятора), а может один раз на все (линкер).

Transformer предназначен для срабатывания только на один фаил, с заранее определенным именем. Например, прошивальщик или какой-нибудь хитрый скрипт.

Ок, добавляем правило, которое должно будет сработать на все наши файлы, промаркированные как “с”.

Product {
name: "micro"
Group {
name: "msp430 sources"
files: 'src/*.c'
fileTags: ['c']
}
Rule {
inputs: ["c"]
prepare: {
var cmd = new JavaScriptCommand();
cmd.description = "file passing"
cmd.silent = false;
cmd.highlight = "compiler";
cmd.sourceCode = function() {
print("Nothing to do");
};
return cmd;
}
}
}

В принципе из синтаксиса уже все понятно. Есть inputs, есть prepare, в который засовывается яваскрипт, который выполняет необходимое. В данном случае он должен в окошке Compile Output показать file passing, и куда-то вывести Nothing to do. Ну по документации вроде так.

Запускаем перекомпиляцию всего и смотрим. Не знаю, как у вас, но я ничего не вижу. Почему? Потому что qbs больно умный, а документация к нему страдает лакунами.

Правило не срабатывает, потому что qbs считает, что оно не производит никаких действий в системе и от него ничего не зависит. В принципе это соответвует реальности, но провести проверку мешает.

Ок, за это отвечают те самые артефакты. Под ними подразумеваются результаты деятельности Rule или Transformer. Лучше всего это объяснить на примере компиляции. Когда мы компилируем .с файл, то на выходе мы получим объектный файл .о. Он нам нужен для дальнейшей линковки, но с другой стороны, мы его можем удалить, так как потом спокойно сможем сгенерировать заново.

Опять копируем пример из документации и чуть-чуть модернизируем.

Rule {
inputs: ["c"]
Artifact {
fileTags: ['obj']
filePath: '.obj/' + qbs.getHash(input.baseDir) + '/' + input.fileName + '.o'
}
prepare: {
var cmd = new JavaScriptCommand();
cmd.description = "Compiling "+ input.fileName
cmd.silent = false;
cmd.highlight = "compiler";
cmd.sourceCode = function() {
print("Nothing to do");
};
return cmd;
}
}

Теперь мы говорим, что после нашей деятельности останутся артефакты в каталоге .obj (ну и я добавил вывод того, над каким файлом мы сейчас работаем). Запускаем. Опять ничего в ответ. Почему? Ответ тот же – никому не нужны файлы с тегом ‘obj’.

Хорошо, для проверки сделаем так, что они нужны нам. И вообще, наше приложение – это один сплошной obj.

Product {
name: "micro"
type: "obj"
Group {
name: "msp430 sources"
files: 'src/*.c'
fileTags: ['c']
}
Rule {
inputs: ["c"]
Artifact {
fileTags: ['obj']
filePath: '.obj/' + qbs.getHash(input.baseDir) + '/' + input.fileName + '.o'
}
prepare: {
var cmd = new JavaScriptCommand();
cmd.description = "Compiling "+ input.fileName
cmd.silent = false;
cmd.highlight = "compiler";
cmd.sourceCode = function() {
print("Nothing to do");
};
return cmd;
}
}
}

Пробуем, и удача! В окошке появился заветный “Compiling blink.c”. Теперь давайте добавим, что бы оно реально компилировало и сразу по-быдлокодерски, то есть тупо забив все необходимое в одну кучу.

prepare: {
var args = [];
args.push("-mmcu=cc430f5137")
args.push("-g")
args.push("-Os")
args.push("-Wall")
args.push("-Wunused")
args.push('-c');
args.push(input.filePath);
args.push('-o');
args.push(output.filePath);
var compilerPath = "/usr/bin/msp430-elf-gcc"
var cmd = new Command(compilerPath, args);
cmd.description = 'compiling ' + input.fileName;
cmd.highlight = 'compiler';
return cmd;
}

Перекомпилируем все с нуля и смотрим в каталог .obj

$ ls -R1
.:
f27fede2220bcd32

./f27fede2220bcd32:
blink.c.o

Ура! Файлик появился. Теперь, для проверки я делаю еще один файлик, с хитрым названием hz.с. Если я прав, то после перекомпиляции рядом появится еще один объектный файл.

В выводе появилось

compiling blink.c
compiling hz.c

а в каталоге

./f27fede2220bcd32:
blink.c.o
hz.c.o

Все вроде ок. Теперь необходимо все это дело слинковать. А значит опять правило, только теперь для линковки.

Rule {
multiplex: true
inputs: ['obj']
Artifact {
fileTags: ['elf']
filePath: project.name + '.elf'
}
prepare: {
var args = [];
args.push("-mmcu=cc430f5137")

for (i in inputs["obj"])
args.push(inputs["obj"][i].filePath);

args.push('-o');
args.push(output.filePath);
var compilerPath = "/usr/bin/msp430-elf-gcc"
var cmd = new Command(compilerPath, args);
cmd.description = 'linking ' + project.name;
cmd.highlight = 'linker';
return cmd;
}
}

Где отличия? Во-первых, добавился флаг multiplex, который говорит о том, что это правило обрабатывает сразу все файлы данного типа скопом. А во-вторых, во входных параметрах исчез input. Появился inputs, который является массивом файлов данного типа. Ну и я вопользовался именем продукта, что бы брать имя для финальной прошивки.

Ставим тип приложения elf и пробуем собрать. Через некотрое время мы в каталоге для сборки обнаружим файл simple.elf

$ file simple.elf
simple.elf: ELF 32-bit LSB executable, TI msp430, version 1, statically linked, not stripped

То, что нам и необходимо. Его можно уже заливать в плату и наслаждаться мигающим светодиодиком.

Исходная цель достигнута: мы в одной среде разработки делаем все: и редактирование и компиляцию.

На всякий случай конечный qbs

import qbs
Project {
name: "simple"
Product {
name: "desktop"
files: "main.c"
Depends {name: "cpp"}
type: "application"
}
Product {
name: "micro"
type: "elf"
Group {
name: "msp430 sources"
files: 'src/*.c'
fileTags: ['c']
}
Rule {
inputs: ["c"]
Artifact {
fileTags: ['obj']
filePath: '.obj/' + qbs.getHash(input.baseDir) + '/' + input.fileName + '.o'
}
prepare: {
var args = [];
args.push("-mmcu=cc430f5137")
args.push("-g")
args.push("-Os")
args.push("-Wall")
args.push("-Wunused")
args.push('-c');
args.push(input.filePath);
args.push('-o');
args.push(output.filePath);
var compilerPath = "/usr/bin/msp430-elf-gcc"
var cmd = new Command(compilerPath, args);
cmd.description = 'compiling ' + input.fileName;
cmd.highlight = 'compiler';
return cmd;
}
}
Rule {
multiplex: true
inputs: ['obj']
Artifact {
fileTags: ['elf']
filePath: project.name + '.elf'
}
prepare: {
var args = [];
args.push("-mmcu=cc430f5137")

for (i in inputs["obj"])
args.push(inputs["obj"][i].filePath);

args.push('-o');
args.push(output.filePath);
var compilerPath = "/usr/bin/msp430-elf-gcc"
var cmd = new Command(compilerPath, args);
cmd.description = 'linking ' + project.name;
cmd.highlight = 'linker';
return cmd;
}
}
}
}

PS Вынос “захардкоденных” переменных в более удобное место оставлю на вашей совести, ибо это уже к обучалке по яваскрипту.

Lenovo P70

В принципе, после пары месяцев владения уже можно описать свои впечатления от агрегата. Всякие “что внутри” легко можно найти в сети, поэтому повторяться не буду, только личные впечатления.

Итак, для начала о плохом. Внутри android 4.4.4. У самого андроида только одна проблема – кривой часовой пояс. Поэтому время звонков и смсок сдвинуто на час вперед. К сожалению, нормально лечится только рутованием аппарата, поэтому забил.

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

В остальном вроде проблем нет. Все ставится, все работает … Кстати, работает очень долго. Как и предидущая модель, позволяет заряжаться не тогда, когда надо, а тогда, когда есть время. А если зарядиться забыл, то до вечера он дотянет без каких-либо проблем.

Screenshot_2015-04-01-17-18-18

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

MSP430 и Fedora Linux

В принципе, в программировании микроконтроллеров под Linux нет ничего сложного. Более-менее доступны средства разработки, а некоторые производители и вовсе официально поддерживают Linux как среду разработки.

TI тоже имеет свою фирменную среду, но она … скажем так, для хардкорных железячников. Старый, тормознутый эклипс и какие-то невнятные настройки. Залитие прошивки и ее отладка тоже доставляют много удовольствия привыкшим к нормальным средам.

В общем, долой разврат – будем делать все по-правильному, что бы программирование доставляло удовльствие, а не требовало героического преодоления трудностей.

Расписывать я буду под Fedora Linux (21), потому что я сейчас под ней. Под другие дистрибутивы инструкций как-то больше.

В чем проблема с федорой? Ведь они кровь и плоть от редхата, а тот официально поддерживает msp430-gcc, который использует и сама TI. Проблема в том, что это федора, а значит в ней все нестабильное и вообще может не работать.

И с MSP430 случилось ЭТО. В 20й версии он работал, а в 21й – уже нет. Подробнее можно посмотреть тут. Если кратко, то в федоре сломали линкер.

Что делать? Есть несколько вариантов, из которых самый простой это взять старую версию компилятора из CCS или Energia. Но добрый Brandon Nielsen решил эту проблему по-другому: просто сделал репозиторий со правильными версиями.

Открываем рутовую консоль и подключаем нужный репозитарий

dnf copr enable nielsenb/msp430-development-tools

И ставим все необходимое, соглашаясь с тем, что никто ни за что не отвечает.

yum install msp430-elf-gcc msp430-elf-binutils msp430-elf-gdb mspds msp430flasher msp430-gcc-support-files dos2unix srecord

Теперь скопипастим Makefile
#
# Makefile for msp430
#
# 'make' builds everything
# 'make clean' deletes everything except source files and Makefile
# 'make install' builds everything, and programs the MSP430 using MSPFLASHER
# You need to set TARGET, MCU and SOURCES for your project.
# TARGET is the name of the executable file to be produced
# $(TARGET).elf $(TARGET).hex and $(TARGET).txt nad $(TARGET).map are all generated.
# The TXT file is used for BSL loading, the ELF can be used for JTAG use
#
TARGET = project0
MCU = msp430f5529
# MSP430Flasher name
MSPFLASHER = MSP430Flasher
# List all the source files here
# eg if you have a source file foo.c then list it here
SOURCES = main.c delay.c
# Include are located in the Include directory
INCLUDES = -IInclude
# Add or subtract whatever MSPGCC flags you want. There are plenty more
#######################################################################################
CFLAGS = -mmcu=$(MCU) -g -Os -Wall -Wunused $(INCLUDES)
ASFLAGS = -mmcu=$(MCU) -x assembler-with-cpp -Wa,-gstabs
LDFLAGS = -mmcu=$(MCU) -Wl,-Map=$(TARGET).map
########################################################################################
CC = msp430-elf-gcc
LD = msp430-elf-ld
AR = msp430-elf-ar
AS = msp430-elf-gcc
NM = msp430-elf-nm
OBJCOPY = msp430-elf-objcopy
RANLIB = msp430-elf-ranlib
STRIP = msp430-elf-strip
SIZE = msp430-elf-size
READELF = msp430-elf-readelf
MAKETXT = srec_cat
CP = cp -p
RM = rm -f
MV = mv
########################################################################################
# the file which will include dependencies
DEPEND = $(SOURCES:.c=.d)
# all the object files
OBJECTS = $(SOURCES:.c=.o)
all: $(TARGET).elf $(TARGET).hex $(TARGET).txt
$(TARGET).elf: $(OBJECTS)
echo "Linking $@"
$(CC) $(OBJECTS) $(LDFLAGS) $(LIBS) -o $@
echo
echo ">>>> Size of Firmware <<<<" $(SIZE) $(TARGET).elf echo %.hex: %.elf $(OBJCOPY) -O ihex $< $@ %.txt: %.hex $(MAKETXT) -O $@ -TITXT $< -I unix2dos $(TARGET).txt # The above line is required for the DOS based TI BSL tool to be able to read the txt file generated from linux/unix systems. %.o: %.c echo "Compiling $<" $(CC) -c $(CFLAGS) -o $@ $< # rule for making assembler source listing, to see the code %.lst: %.c $(CC) -c $(ASFLAGS) -Wa,-anlhd $< > $@
# include the dependencies unless we're going to clean, then forget about them.
ifneq ($(MAKECMDGOALS), clean)
-include $(DEPEND)
endif
# dependencies file
# includes also considered, since some of these are our own
# (otherwise use -MM instead of -M)
%.d: %.c
echo "Generating dependencies $@ from $<" $(CC) -M ${CFLAGS} $< >$@
.SILENT:
.PHONY: clean
clean:
-$(RM) $(OBJECTS)
-$(RM) $(TARGET).*
-$(RM) $(SOURCES:.c=.lst)
-$(RM) $(DEPEND)
install: $(TARGET).txt
$(MSPFLASHER) -n $(MCU) -w "$(TARGET).txt" -v -z [VCC]

Если при попытке компиляции Вы получите

Makefile:48: *** missing separator. Stop.

то это означает лишь то, что вы нарвались на tab-hell. Все отступы выше – это не пробелы, а символы табуляции. Если отвлечься и открыть этот фаил в mc, то вы должны увидеть следующее:

mc_tab

Обратите внимание на символы “<---->” – именно ими mc показывает табуляцию. Поправьте где надо.

Теперь осталось поправить параметры MCU под мой процессор и SOURCES под мой проект и запустить make. Если все сделано правильно, то вы должны увидеть побежавшие строки, завершающиеся чем-то похожим.

Linking blink.elf

>>>> Size of Firmware <<<< text data bss dec hex filename 2906 214 152 3272 cc8 blink.elf unix2dos: converting file blink.txt to DOS format...

Если оно так, то можете себя поздравить. Теперь можно развиваться дальше.

PS С автором, чьи наработки я использовал, можно познакомиться тут

Дисплеи 4D …

… или не ходите дети в Австралию гулять.

Есть в далекой загранице такая компания – 4D Systems. Основной продукт – “интеллектуальные дисплеи”. По роду деятельности я с ними очень глубоко познакомился, так что устриц ел.

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

Причем последние версии дисплеев отличаются только разрешением или формой (да, у них есть круглые дисплеи) – все остальное у них одинаково.

Как заведено в “корпративном” мире, к этим дисплеям полагается софт для их программирования. Софт работает только под Windows и может загонять дисплеи в три режима работы.

1. Режим тупого usart терминала. Цепляем к дисплею любой внешний микроконтроллер через совершенно стандартный usart и отправляете в дисплей команды в духе “нарисуй точку”, “смонтируй флешку”, “покажи картинку с флешки”. Работает очень медленно.

2. Написание “визуальных программ”. Есть библиотечка страшненьких контролов, из которых делаются экраны, а потом в специально отведенные места записывается код. Что-то сложное написать невозможно.

3. “Полноценный”. Можно писать программы на 4DL – некой смеси паскаля и си.

Плюс прямо в IDE встроено немного утилиток типа калибровки экрана, разметки microsd карточек и терминалки. В принципе штуки полезные в плане “все свое ношу с собой”.

В общем, почти счастье любого программиста встраиваемых систем. Но как обычно, все портит реализация.

Начинается всё с редактора. Эта штука абсолютно не умеет форматировать код. Ни работы с блоками, ни нормального свертывания. Зато раздражающие комментарии – в полном объеме. Короче, этакий notepad с подсветкой. Результат – очень страшно выглядящий код.

Компилятор тоже доставляет немного удовольствия: иногда программа компилируется, но отказывается заливаться в дисплей. Добавляем где-нибудь в незначащем месте лишний пробел или что-нибудь типа i:=i; и все прекрасно компилируется и заливается. Еще больше доставляют ошибки, когда программа на дисплее просто падает на ровном месте, которое в прошлые разы не вызывало никаких нареканий. Лечится точно так же: либо лишние команды, либо просто поменять что-нибудь местами.

“Исполнятор” тоже не свободен от греха: например, если вы “примонтировали” с microsd файловую систему и с нее только читаете, то при падении программы вы с 50% вероятностью получите “убитую” флешку, которую надо снова форматировать.

Да, и большие microsd не поддерживаются. Если вам удалось найти карточку на 2Гб, то вам повезло. Если у вас больше – то будьте добры сделать раздел на 2Гб, а про остальное – забудьте.

Где еще проблемы? Перечислю кратко:

– Ошибки в документации. Неправильные аргументы, неправильные примеры, код скопипащен из примера для другой функции.
– Программисту не дают доступа ни к прерываниям, ни к какой-либо многозадачности. Вообще. Делай большой цикл на все и молись, что бы стек не переполнился.
– Сильно грузить порты ввода-вывода нельзя. Например, если включить проигрывание wav-ки с карточки и побежать исполнять код дальше, то вместо “чистого” звука услышишь его же с треском. Начнешь много и часто читать с карточки – получишь мешанину байт вместо ожидаемого. Рисуешь картинку – будь готов к потерям байт в последовательном порту.
– Отладчика нет. Вообще ни в каком виде. Отладочный вывод? Ну можно писать в usart, если он не занят. Но проще тупо на экран.

После всего этого проблемы вида “есть возможность загрузить шрифты, но нет ни описания формата, ни редактора для них” кажутся такими пустяками …

Но с другой стороны, если вы достаточно сильны духом, то за $185 долларов (сама дорогая модель) вы получите готовую уберштуку, в которой 7″ дисплей (800х480), маленький динамик и слот для карточек. Попутно будет доступно нцать выводов, на которые можно повесить всякие енкодеры, пзушки (внутри хоть и есть флеш, но писать не дают) и прочие штуковины. И после кучки оптимизаций все это будет крутиться довольно быстро и не раздражать пользователя.

В этой реальности я бы посоветовал найти отдельно 7″ дисплей и какой-нибудь контроллер. Будет и дешевле и быстрее и удобней.

Как-то так 🙂

STM32 и FreeRTOS. 5. Приносим пользу и добро!

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

Вооружившись осциллографом, я полез внутрь.

Через некоторое время поиски привели к двум проводкам, которые были в жгуте, соединявшем блоки устройства. Осциллограмма показала, что в проводках почти обычный USART. Почти — потому что «туда» данные бежали на скорости 9600, а обратно на 115200.

Продолжение тут

STM32 и FreeRTOS. 4. Шаг в сторону HAL

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

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

Но не так давно ST поняла, в какую яму она угодила и начала усиленно из нее выбираться, привлекая новые силы. И именно благодаря этому сейчас время старта сократилось до несуразно маленьких величин. Как это выглядит на практике?

Статья на хабре