пятница, 3 июля 2015 г.

Про OpenGL

Как я упомянул в предыдущем посте, хочется изобразить летающие шарики в объемном виде. Для этого вчера я попытался нарисовать всего один шарик с помощью lwjgl 2, у меня получилось, я изобразил красное пятно на белом фоне, но на это у меня ушла пара часов. В связи с чем есть кое-какие вопросы.
Во-первых, стало ясно, что просто так, с наскоку, OpenGL использовать не получится. Мне очень не хочется писать код, собирая в гугле кусочки какой-то работающей фигни, но не понимая, что она делает. А экспериментировать путем вписывания других значений не очень выходит, потому что результаты бывают совсем интуитивно-непонятные. Так что хотел бы спросить совета, если кто имел опыт, чего бы такого хорошего почитать, чтобы понять побольше, и чтобы не про старые версии OpenGL. Потому как я уже где-то нашел, что с версии 3.0 все стало как-то немного иначе.
Во-вторых, у меня теперь есть большой вопрос, на чем писать. В принципе, для Java есть несколько реализаций биндингов OpenGL: JOGL, LWJGL2, LWJGL3, который использует JGLFW. От этого уже начинает плавиться мозг, но похоже современнее всего из них LWJGL3, который, правда, еще не зарелизился. Есть другой вариант - забить на Java и для полнейшего прогружения мозга в новую среду писать на С++, чтобы можно было совсем уж заниматься тем, что в языках с управляемой памятью делать не получится (ну, для шариков это не обязательно, но для кубиков может понадобиться). Правда, на C++ я не писал уже давно, и писал раньше максимум хелловорлды.
Ну и в третьих, если остаться на Java, то стоит ли этот самый LWJGL3 уже использовать... или JOGL внезапно лучше, судя по его описаниям?
Кстати есть один плюс в Java для опенсорца - если такое писать, то зависимости, как правило, не приходится качать руками, если использовать Maven, который умеет затянуть все сам. А вот как с инфраструктурой для C++, которая давала бы такие возможности, как maven - уже непонятно.

Относительно прошлого поста и перевода цветовой температуры в RGB, получился такой вот код: https://gist.github.com/stasikos/06b02d18f570fc1eaa9f. Там есть маленький тест, который генерит картинку с разной температурой, результат кажется мне адекватным, так что спасибо тому чуваку за его полиномы. :)

четверг, 2 июля 2015 г.

Кончился очередной сумасшедший день, в котором все наложилось и сбило обычные ритмы. Неправильное обещание выпускать серии летсплея в определенные дни, наверное, сказалось. Как только подошло время заливать серию на Youtube, стало весело. Сначала провайдер приказал "наши специалисты уже работают над исправлением проблемы, ждите", а потом появилось жгучее желание поднять еще один сервис по работе прям щас. Параллельно кое-кто решил, что его взломали и требовал внимания к собственной персоне. В общем, дурдом.
Вчерашний вечер внезапно посвятил исследованию проблемы генерирования планетарных систем, которые бы вменяемо выглядели. Я давно начал этим заниматься, так что просто дорабатывал вещи, которые были сугубо случайными. А, как говорится, случайные числа появляются там, где мы чего-то не знаем. Вот я решил узнать.

foo-5

вторник, 30 июня 2015 г.

Хобби просто для мозга

Оказалось, писать каждый день как-бы сложно. Если в начале идеи в голову лезли просто пачками и я не успевал их записывать, то теперь уже все, как говорят у нас, "пасочки".
Вчера я даже начал размышлять и написал какой-то пост, но выбросил его в мусорник. Не вписывался в концепцию. Но сегодня роились идеи в голове и надо бы их упорядочить. Дело в том, что пока я играл во всякие Minecraft и KSP у меня из головы не вылезала мысль - так или иначе моддеры пытаются добавить хардкорного реализма в игру. Какие-то реальные физические законы, иногда даже не совсем реальные, но в теоретически возможные технологии, в общем, добавить побольше хайтека пытаются создать. Как тот же IC2/GregTech в Minecraft или KSP Interstellar. Иногда у них хорошо получается, но все равно не исчезает ощущение, что это как-то прикручено скотчем и приклеено жвачкой, ведь монолитное ядро игры как-бы не предполагало такого геймплея. В итоге все жутко тормозит, а ведь их еще и пишут на переносимых языках с байткодом. Хотя, возможно, многие проблемы производительнсти как раз возникли из-за невозможности оптимизировать совсем неродные вещи. Так бывает.
Поэтому меня некоторое время не оставляет мысль, что надо думать над 99-м клоном Майнкрафта (ну, на самом деле я как-то смотрел, сколько есть таких игр вообще и их там насчиталось порядка 90). Чтобы все уж сразу было задумано как в жизни и с рассчетом на размашистые проекты игрока в стиле "Железного человека", который из говна и палок построил звезду смерти и улетел. Ну, точнее некототорого количества игроков, потому что масштабные проекты в одиночку это очень накладно и все-таки когда-нибудь надоет.
Это еще не значит, что его можно будет начинать писать, но концепции продумываются сильно заранее. И первое, что мне пришло на ум, это посмотреть на недостатки того, что уже есть. И, конечно, я не смотрел на 99 клонов Майнкрафта, среди которых, почему-то, оказалась и KSP. Но некоторые из них я посмотрел на уровне описания задумки.

Итак, начнем с того, чего не хватает в KSP: Все замечательно, кроме того, что, во-первых, сложные аппараты страшно тормозят, во-вторых, статическая, неизменяемая солнечная система позволяет поиграть один раз, все изучить и уйти отдыхать надолго. Кроме того, система местами обладает необъяснимыми свойствами с точки зрения здравого смысла (например, неиспаряющийся лед Минмуса, который по всем данным должен быть из льда). Выдумана она так, чтобы определенным образом создавать геймплей с прогрессирующей сложностью. Что полезно для получения представления о космических полетах в принципе, но бесполезно для более глубокого изучения темы.

Что касается Minecraft: он хорош для того, для чего придуман - для средневековых построек на плоской бесконечной карте, походов в другие измерения и убивания дракона. На него уже давно пытаются прикрутить космические полеты на Луну и Марс (хотя Overworld не является в должной степени похожим на Землю), которые являются еще одним способом телепортации. Также пытались сделать так, чтобы блоки не могли просто висеть в воздухе, добавляя гравитацию и для них тоже, чтобы шахты осыпались, а крыши домов проваливались. В какой-то ограниченной степени это получалось. В общем, там есть десятки модов, которые пытаются сделать, чтобы было "как на самом деле". Даже добываемые из под земли ресурсы переставали быть случайно размазанными по всей карте, собираясь в обширные и богатые месторождения. И постоянно чего-то не хватает. Люди пытаются сделать воздухоплавание, мореплавание, космонавтику, термоядерные реакторы, настоящее электричество, и это все на фоне меланхоличного запиливания красивых флажков в оригинальную игру. Я так подозреваю, что некоторым из них нужно Life3d, эдакий играбельный, но все-таки симулятор. Хотя ведь и магические вещи выдумывают.

Вот и стал я думать, а нельзя ли придумать такой игровой движок, который бы позволял все что угодно именно для таких вот любителей? :) Ну, чтобы там хоть и был фактор случайности, но только в такой мере, чтобы бывали неожиданности. Остальные неожиданности должны бы просто вытекать из начального "семени", как это и принято. Ведь куда ни копни - везде в этом есть интересные задачи, расширяющие вполне настоящие знания о том, как этот наш мир, собственно, устроен.
Как-то ради интереса я даже попробовал написать генератор "случайного набора звездных систем". Казалось бы, что может быть проще - делаем N случайных звезд, впуливаем вокруг них M случайных планет с K случайных спутников. И всё, типа, готово. Но получится, на самом деле, слишком много случайностей. Во-первых, количество и масса планет все-таки зависят от массы самой звезды. Во-вторых, их орбиты не могут быть совсем уж случайными, а должны оказаться такими, чтобы возникающие между ними силы не изменяли эти самые орбиты до неузнаваемости. Это я еще не касаюсь того, что это должны быть за планеты. Будет ли у них атмосфера? Из чего они будут состоять? Как быстро они будут обращаться? Какова температура на этих планетах? Будет ли там вода? Могла ли на них возникнуть какая-то жизнь? И если да, то как давно? :)

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

воскресенье, 28 июня 2015 г.

О дисциплине, самосовершенствовании и обо всем таком

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

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

Единственное, что иногда помогало - это хитрая уловка с помощью техники "Помодоро", когда худо-бедно на 25-30 минут можно было все-таки включиться во что-то.

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

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

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

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

Выводы:
Инструменты: сначала, конечно, я смотрел на то что есть, искал нечто все в одном. Которое позволит и исследовать свое поведение (путем учета времени), и хранить списки задач и, даже, содержало бы в себе таймер от помидоры. В конце концов прокрастинирование не позволило такой инструмент создать, но нашлись готовые, правда, отдельные. Остановился на MyLifeOrganized, за возможность делать практически все, что хотелось и при этом еще использовать ее и на смартфоне тоже, и даже синхронизировать, там же - aTimeLogger для учета времени, и обычная Pomodroido. В целом, меня все устраивает, хотя пришлось и долгое время подбирать это все для себя. Например, "контексты" из ГТД я стал использовать так же, как и ядро ос - в смысле "процесс". Контекстами стали виды деятельности, по которым я просто бегаю с помощью фильтра и выполняю. Пока что это неплохо работает. Но все равно остаются какие-то подтеки краски и общая неряшливость.

Например: другим людям свойственно тебя отвлекать. Хорошо, если это случилось по работе и это автоматически попало в рабочее время (но все-таки сломало работу над рабочим проектом, вызвав переклчюение контекста). Но есть просто родственники, домашние и даже те ребята, которым ты когда-то согласился иногда помогать. Эти люди обычно требуют внимания здесь и сейчас.
Вторая нерешенная проблема - почему-то очень сложно психологически придерживаться этой модели, если в этот день запланировано что-то на вечер. Причина мне совершенно непонятна, и даже идей, с чем это может быть связано, у меня нету.
Третья, конечно, связана с тем, что не получается быть роботом и иногда случаются помутнения рассудка после завершения работы в каком-то контексте. Можно просто забыть, что нужно приступать к следующему, залипнув в интернеты, а потом снова становится "лень". Помогает пока перезагрузка с помощью дремоты. В итоге из 24 часов, с учетом того, что сон тоже тикает в системе учета времени, 4-5 часов все равно куда-то выпадают, как непосчитанные. И как-то не верится, что это все - походы по своим делам и перерывы. И выглядит довольно-таки объемным куском, что досаждает и не дает спать спокойно.

суббота, 27 июня 2015 г.

Про мои хобби

Итак, чтобы развернуто ответить на вопросы к предыдущему посту, да и так, чтобы это было всем видно, конечно, теперь мне нужно рассказать, что я имел в виду под хобби. Конечно, хобби несколько более банальные, нежели есть у многих уважаемых моих читатателей, пожалуй.
Первым среди них, так как эта тема меня пока еще больше всего волнует, хочется перечислить такую странную вещь, как попытка делать лестплеи на своем канале Youtube. Здесь, конечно, можно вообще пожурить, мол, игры, фу, как можно, взрослый мужик ведь уже. Ну, во-первых, я смотрю очень много взрослых мужиков с женами и детьми, которые делают то же самое. Во-вторых, я нашел в этом очень интересный инструмент, который позволяет не просто убивать время и энергию в компьютерных играх. Конечно, сами по себе игры могут быть пустой тратой времени, но так как я по жизни люблю чем-то заморачиваться, каждая игра, в которой я залип, позволила мне чему-то научиться. Начиная с ролевых игр, которые позволили изучать английский немного более широко, пока я еще был в школе и кончая играми, в которых можно узнать и многое об окружающем мире. Я не говорю про всякий трехмерный экшен, где можно, разве что, тренировать тактику, скорость наведения мышки и реакцию, хотя и такое было. Буквально пару лет я как-то убил на World Of Tanks, оттачивая свои навыки интуитивного понимания, под каким углом снаряд войдет вон в ту бронеплиту и прочие не очень полезные в жизни навыки. Но, конечно, некоторый интерес к бронетехнике, ее истории и конструкциям это позволило удовлетворить. Но потом стало очень уныло. Это не мешало мне записывать видео без комментариев из реплеев хороших боев, просто на память и чтобы показать одному интересующемуся темой товарищу, который играет в игры по Youtube, что становится, судя по всему, довольно модным занятием.
Потом я случайно решился скачать демку Майнкрафта и меня настолько затянуло, что я купил себе полную версию. Конечно, через пару недель ее ограниченный набор возможностей мне все-таки надоел, и все было бы хорошо, об этом можно было бы забыть, если бы интерес к каким-то идеям механизмов и игровых механик в оригинальной игре не привел меня к просмотрю летсплеев по этой игре на Youtube, где я открыл для себя невообразимое количество модов для Майнкрафта. И, как любого воспитанного на советской детской технической литературе, меня заинтересовали именно те из них, которые принято называть "индустриальными", то есть позволяли минимизировать ручной труд и строить огромные производственные цепочки, сталкиваясь с проблемами массового производства, добычи ресурсов и автоматизации. Есть и неплохие ребята, которые про это умеют снимать, и достаточно интересно, скажем, семейная пара SteamLynx или Ваня Сережкин. Это, правда, не было толчком начать делать это самому, пока мне не намекнули все-таки попробовать. Так я начал снимать свой первый опыт, на своей собственной сборке модов для Minecraft, и сделал из этого опыта ряд выводов.
Во-первых, это как-то прокачивает способность рассказывать, показывать, и как-то повышает уверенность в себе. Во-вторых, черт возьми, это снижает интерес к самой игре, как это ни странно, превращая ее не просто в развлечение, а в деятельность более осмысленную, ведь вместо простого получения удовольствия от "пофиг, как получится", мы получаем необходимость получить связанную по смыслу последовательность событий, которые было бы еще и интересно показать. А это - напряжение мозга. Пост-обработка материала это дополнительные затраты энергии и владение кое-каким программным обеспечением для работы со звуком и нелинейного видеомонтажа.
Но, конечно, через примерно полгода Майнкрафт мне начал надоедать. Один коллега уже точно знал, что мне нравятся игры в стиле песочницы с богатым набором модов для создания собственного геймплея и подкинул мне такую игру как Kerbal Space Program. Поначалу, она показалась симулятором космической программы, но, быстренько разобравшись во всем, что есть в оригинальной игре, я, конечно же, стал изучать другие летсплеи и поистине огромный набор модов самой разной направленности. Конечно, это снова кончилось обширной сборкой собственного модпака и в съемку нового летсплея. Но это уже был новый тип, который требовал совсем иного подхода. Чтобы не вырезать кучу довольно-таки затянутых игровых моментов (а ведь KSP в этом смысле ничем не лучше симуляторов, и "экшен" случается, дай боже, только в 10% игрового времени вообще) и снабжать все материалом о законах нашей вселенной, про историю космонавтики, космических технологиях, пришлось записывать видео, затем обрабатывать его, ускорять и снабжать уже пост-комментарием. И тут я понял, что я разучился быстро и качественно писать тексты. Собственно, спустя несколько месяцев этого опыта, это и привело меня назад к блоггингу. Правда, это еще приводит меня, например, к риторике и способности выразительно и живо читать, но решение этой проблемы я пока не решил.
Ну, и чтобы закончить с темой этого хобби, хочется отметить, что тщательный анализ и обработка собственного голоса производит невероятное впечатление, которое, судя по чужому опыту, намного улучшает способность говорить вообще. Так что, как по мне, не такая уж это и бесполезная затея.

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

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

Ну и последним оказалось то, чем я интересовался, наверное, года с 2005, когда впервые услышал такие модные слова как "тайм-менеджмент", "личная эффективность" и бла-бла-бла. Не сразу стало ясно, насколько большая часть материалов по этой теме являлась полной ерундой, да и работа в офисе как-то не особо располагала к использованию каких-то инструментов. Но когда большую часть времени я работаю дома, это стало актуальным. С ростом числа интересов и разных дел, которые нужно делать регулярно - еще более актуальным. Можно, конечно, было просто опустить руки и решить, что невозможно делать кучу разных вещей и при этом все успевать, но ведь... есть же люди, у которых получается! Но началось все намного прозаичнее. В один определенный момент я понял, что у меня просто не получается спокойно работать дома, особенно, если речь идет о программировании. У меня потерялась возможность концентрации на задачах, я постоянно терял нить и, по сути, бездельничал, имитируя бурную деятельность, страшно уставал и с каждым днем все сложнее было заставить себя заниматься любимым когда-то делом. И тогда появилась острая необходимость начать смотреть на происходящее как-бы со стороны, пробовать что-то менять, и кто-то может даже найти в прошлом мои идеи об инструментах, которые бы позволяли и помнить, что нужно делать, и при этом померять, что ты делал. Инструменты создавать заново не пришлось, они нашлись, но про то, что я использую теперь и как, можно рассказывать долго.

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

пятница, 26 июня 2015 г.

Я вернулся

Я очень долго не занимался такой штукой как блоггинг, хотя в 2010 году у меня еще были планы вести тематический блог про системное администрирование. Но потом как-то это само собой умерло. Стало либо не о чем писать (ну, потому что соглашения с работодателем не подразумевало раскрытие чего-либо), либо мне казалось, что вещи настолько банальные, что профессионалы об этом не пишут, как о чем-то таком, что само по себе подразумевается. Потом я и вовсе стал не совсем чистым системным или сетевым администратором, и даже больше стал заниматься написанием кода. Делать из блога что-то вроде "всё обо всём" тогда не хотелось. А теперь есть несколько факторов, которые и вовсе, как мне кажется, свели на нет блоггинг как таковой. То ли неисписавшееся поколение уже выросло и забыло про это занятие, то ли исписалось, то ли их место заняли другие виды социальных сетей. В общем, как-то начинать снова теперь очень странно, но у меня были причины начать это делать.

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

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

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

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

Почему я считаю себя кому-то интересным? Да я так и вовсе не считаю, просто верю, что еще остались олдсукльные любители читать тексты, а не слушать их фоном на Ютубике. Правда, последним и я что-то начал увлекаться местами.

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

воскресенье, 14 июля 2013 г.

Pulseaudio, twitch and broadcasting

Как-то ради интереса решил постримить то, как я играю в WoT на http://www.twitch.tv/skogut. Первой проблемой было запилить, собственно, захват видео. Я нашел скриптик, и он, в общем-то работает. Но я немного его подправил под реалии wine + World Of Tanks и свои 4 ядра:
 #! /bin/bash  
 # originaly from http://tinyurl.com/twitch-linux from taladan  
 # www.youtube.com/user/taladan  
 # gist created by brodul  
 INRES=`xwininfo -name "WoT Client" | awk '/geometry/ {print $2}' | sed -e 's/\+.*//g'`  
 #INRES="1280x800" # input resolution  
 #OUTRES="1280x720" # Output resolution  
 OUTRES="640x380" # Output resolution  
 #OUTRES="$INRES" # Output resolution  
 FPS="18" # target FPS  
 QUAL="fast" # one of the many FFMPEG preset on (k)ubuntu found in /usr/share/ffmpeg  
 # If you have low bandwidth, put the qual preset on 'fast' (upload bandwidth)  
 # If you have medium bandwitch put it on normal to medium  
 CORNER=`xwininfo -name "WoT Client" | awk '/Corners/ {print $2}' | sed -re 's/\+(.*)\+(.*)/+\1,\2/'`  
 echo "INRES: $INRES CORNER: $CORNER"  
 # Write your key in a file named .twitch_key in your home directory  
 STREAM_KEY=$(cat ~/.twitch_key) # This is your streamkey generated by jtv/twitch found at: http://www.justin.tv/broadcast/adv_other  
 URL="rtmp://live-ams.twitch.tv/app/"   
 #BITRATE=2048000   
 BITRATE=1024000   
 nice taskset -c 1,2,3 avconv \  
 -f x11grab -s $INRES -r "$FPS" -i :0.0"$CORNER" \  
 -f alsa -ac 2 -i pulse \  
 -vcodec libx264 -s $OUTRES -preset $QUAL \  
 -acodec libmp3lame -ar 44100 -threads 3 -qscale 3 -b $BITRATE -bufsize 512k \  
 -f flv "${URL}${STREAM_KEY}"  

Основное изменение - это поиск окна WoT и определение его местоположения на экране.

С этим все ясно. Следующей проблемой было сделать так, чтобы можно было и говорить в микрофон и зрители стрима могли это слышать. После гугления был обнаружен хинт про module-loopback в pulse. Так я и сделал :)

 pactl load-module module-loopback latency_msec=1 sink=alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo  

Однако, с таким подходом, я слышу и себя, что делает для моего мозга ужасную обратную связь, которая мешает нормально говорить.
После вдумчивого чтения документации по модулям pulseaudio, меня осенило.
В pulse есть модуль null-sink, который ничего никуда не выводит. Так вот, достаточно его загрузить, выбрать как устройство, с которого будет идти запись в стрим (через pavucontrol, например).
Далее загружаем аж два module-loopback:

 pactl load-module module-loopback latency_msec=1 sink=null  
 pactl load-module module-loopback latency_msec=1 sink=null  

После чего в том же pavucontrol источником звука для этих (для этого надо включить отображение Virtual streams в Recording) мы выбираем 1) Monitor o НашаЗвуковаяПлата для захвата звука из приложения (в данном случае World Of Tanks и любые другие звуки), для второго loopback мы выбираем, собственно, саму звуковую плату (для захвата микрофона). И вуаля - мы слышим звук из игры, мы не слышим себя, зато зритель слышит всё!

Следующим шагом, видимо, будет запиливание автоматического выбора источников звука для loopback с помощью pactl, чтобы не нужно было ничего делать руками в pavucontrol, но я так спешил поделиться радостью, что пока не сделал этого.