Продолжается путь по созданию игры про мехов. Чтобы она не выглядела хотя бы на первый взгляд так простенько, было принято решение добавить несколько камер. Ну то есть вид сверху, сзади подальше, сзади поближе, кокпит. На это есть несколько причин: ну во первых должно быть круто, во вторых - если в каком-то из режимов будет проседать fps , то можно переключить на другой. А так же, чтобы мех не смотрелся просто картинкой в кадре, я добавил камерам сглаживание резкости слежения (как сложно звучит, offset кароче ) Я и не подозревал в какой геморрой это выльется: то ли дрожат ноги не успевая за торсом, то ли камера не успевает за торсом, то ли фиг пойми. Если убрать эту компенсацию момента рывка камеры - всё норм двигается, но очень скучно - мех как нарисованный, а у меня-то он настоящий )) Вот вопрос: переход на cinemashine даст профит? Пропадёт тряска, или только опять зря всё переделаю? Да, Юнити я освоил недавно (и это было не так то и просто). Если найдутся люди, готовые помочь, подсказать - милости прошу. Всем отозвавшимся искреннее спасибо. Да, игру можно будет запускать на смартфоне, пк. Такие дела.
Любо вы можете протестить игру в открытом тесте на Гугл Плей. Вылетает / не вылетает, тормозит / не тормозит и так далее.
В какой программе/сайте можно отсортировать страницы документа в таком порядке, чтобы этот документ распечатался в виде книги? Не в программе выбрать "порядок в виде брошюры и распечатать", а именно создать такой документ
Вобщем настало время все это безобразие покрыть текстурами. Идея в том, что надо как-то покрывать все это разными текстурами, а если точнее, то делать привязку по высотам (для начала) . И вот тут я решил, что надо сразу заложить оптимизацию, ибо множество текстур для разных высот да плюс еще карты нормалей и все такое, вобщем надо чтобы не тормозило. Было приято решение передавать в шейдер не отдельные текстуры а массивы текстур. Итак, первая проблема, надо написать механизм который создаст карту слоев, на основании настроек привязки к высотам. Я решил, что буду делать одну большую текстуру и передавать в нее данные смещения для текселей и размер области выборки тайла. Это позволит передать в шейдер сразу всю карту. Так, значит скрипт в Unity генерирует текстуру R8, т.е. это одноканальное изображение с 255 значениями на пиксел, что по моей задумке будет указателем на индекс текстуры в массиве. Ну или проще говоря, мы будем делать семпл каждого текселя в слое с индексом взятым из карты слоев.
Аналогичным образом, очевидно надо строить и карту смешивания, потому что без смешивания мы видим резкие переходы. Тут меня ждал небольшой сюрприз. Дело в том, что мне надо как-то передать в шейдер, где "заканчивается" область одного слоя, и начинается область другого. Пока я остановился на том, что буду так-же генерировать еще одноканальную R8 текстуру (карту смешивания) которая будет содержать данные о "силе" пикселя, наверное это просто аналог альфа-канала. Значит, я делаю семпл для конкретного текселя из карты смешивания, и если значение больше 0, то делаю интерполяцию с нижним слоем... Ну это в теории, на практике пока это все еще не заработало
Все эти сложности и хитрости, мною задуманы исключительно ради оптимизации семплов, потому что я к примеру пробовал делать подобное на стандартном Terrain от Unity, и тормоза выхвали не слабые)
АААААА, точно, я ж еще и стохастическое семплирование прикрутил, так что это еще +3 семпла на тексель для текстуры и карты нормалей. так что думаю я еще отказаться от интерполяции между слоями, в пользу дезеринга ( https://ru.wikipedia.org/wiki/Дизеринг )
Нужно довести до ума скрипт преобразования голоса в текст.
Суть проблемы.
Есть некий скринридер для android, который работает на AndroLua с использованием api android (возможно неправильно выразился, но примерно так).
Так вот для данного приложения можно создавать разного рода скрипты. В данном случае нужно адаптировать или создать с нуля скрипт, который при запуске будет записывать речь, а при повторном запуске отправлять записанный файл на обработку в гигачат. Собственно, в наличии подобный скрипт есть, но он основан на гугле. Но вот это вот все – ркн, квн и прочее… Короче без костылей не работает, а то и вообще со дня на день залочат. Моих знаний в программировании в данном случае хватает на отправку кода дипсику с вводными данными, но что-то ничего не выходит. То ошибка 400, то ошибка токена.
Api ключ судя по всему рабочий, т.к. дипсик собрал скрипт на питоне, который отправляет аудио и присылает текст.
Ну в общем если кто может помочь, скину код рабочего скрипта, может на его основе получится сделать…
P.s. В сбер поддержку обращался, но по телефону они такие проблемы не решают, что не удивительно, а по почте мне написали что-то типа: мы тут не программисты, ты там на сайте посмотри в разделе помощи нуждающимся.
Как заметил @Killergoffs, действительно в формуле расчета принял ошибочно "выход" спирта 0,682л с килограмма сахара. Исправился и поставил 0,64 как и положено по формулам синтеза спирта из сахара.
Кроме этого, по предложению Евгения была добавлена функция разбавления спирта.
Многие компании, особенно крупные, используют алгоритмическое собеседования для отбора кандидатов, поэтому готовиться к нему придется. Рассказываем, как.
Начнем с того, что разработчики по-разному относятся к алгоритмическим собеседованиям. Одни — с энтузиазмом, так как им нравится решать сложные задачи и оптимизировать код под специфичные условия. Другие считают такие интервью лишними, потому что в реальной работе алгоритмы используются редко.
В целом же такое собеседование для программиста — это, как правило, стресс. И нередко такой сильный, что кандидат не может справиться с задачами, которые в спокойной обстановке легко решает. Поэтому стоит как минимум разобрать, что включает в себя такой тип интервью.
Как проходит алгоритмическое собеседование
Процесс зависит от компании, но структура обычно примерно одинаковая. Алгоритмическое собеседование занимает 40–60 минут и включает 2–3 задачи. Работу над каждой из них можно разделить на 2 логических этапа.
1. Обсуждение решения задачи
Прежде всего обязательно уточните условие задачи. Например, надо ли валидировать входные данные — или исходим из того, что вход всегда валидный. Есть ли ограничения по памяти, то есть можем ли мы использовать дополнительные структуры данных для хранения. Есть ли требования по временной эффективности задачи. Можем ли мы решить задачу в лоб, а потом попытаться оптимизировать решение, или надо сразу написать «готовое». Если задача про сортировку, то уточните, должна ли быть сортировка устойчивой или нет, а может это вовсе неважно. Общий совет такой: исходите из условий задачи и уточняйте все, что вам непонятно или где могут быть подводные камни.
Когда с условием все понятно, начинается устное обсуждение задачи, на котором кандидат должен озвучить идею решения словами, без кода. Сделать это, сохраняя логическую последовательность и связность речи, непросто даже опытным разработчикам, поэтому стоит заранее потренироваться в формулировании мыслей относительно решения других задач.
Ошибаться на этом этапе — нормально. Собеседующий понимает, что кандидат впервые видит задачу и может пойти по неправильному пути. Если вы увидите, что выбрали неправильный способ решения, просто сообщите об этом интервьюеру. Для него это будет хороший знак, что вы способны самостоятельно искать ошибки.
2. Работа с кодом
Обычно код пишут в простом текстовом редакторе без подсказок и подсветки синтаксиса. Здесь не страшно допускать опечатки, но если текст пестрит ошибками или кандидат не помнит названия основных функций, у интервьюера может создаться впечатление, что он слишком мало работал с кодом. Поэтому, если без IDE вообще никогда не писали, придется тренировать навык отдельно. Также некоторые интервьюеры допускают псевдокод на собеседовании, но подобное бывает редко.
Если вы получили минимально работающее решение, то это уже немалый успех, ведь не все кандидаты справляются в принципе с алгоритмическими задачами.
При написании кода собеседующий проверяет, как кандидат обрабатывает критические условия: например, пустой массив, нулевые значения или максимальные входные данные. Это помогает выявить, насколько человек умеет тестировать собственные решения.
В конце работы над задачей обычно пытаются найти ошибки. В некоторых случаях можно запускать код онлайн и смотреть трейсбек — зависит от конкретного работодателя и его формата собеседования. Если человек заметил ошибку, которую не увидел собеседующий, — это плюс к кандидату. Если же кандидат в упор не видит ошибку, которую заметил интервьюер, то минус.
Дополнительно могут задать вопрос о сложности алгоритма. В этом случае нужно как минимум понимать, чем отличается линейная сложность O(n) от квадратичной O(n2n^2), логарифмической O(log n) и т. д. А еще уметь правильно оценить сложность своего алгоритма по времени и по памяти. Будет лучше, если свою оценку вы подкрепите рассуждениями, почему получается именно такая сложность. Например, у нас вложенный цикл, внутри выполняются операции с линейной сложностью. Значит, общая сложность алгоритма по времени — квадратичная.
Если не знаете, как подготовиться к интервью, попробуйте курс «Алгоритмы и структуры данных». Во время обучения вы поднимете свой уровень знаний по алгоритмам.
Какие задачи дают на собеседовании
Как правило, задачи равнозначные по сложности, но разнонаправленные. Скажем, первую задачу можно решить с помощью сортировки или прохода по массиву. Ниже — пример.
В массиве из чисел найти непрерывный подмассив длиной k с максимальным средним значением. То есть такой подмассив, в котором среднее значение всех чисел будет больше, чем во всех остальных подмассивах.
Дальше дают задачу, для решения которой потребуется знание хеш-таблиц, деревьев и других структур.
Дан массив связанных списков, каждый список отсортирован в порядке возрастания. Нужно соединить все списки в один связный и отсортированный список.
Не всегда хватает времени и сил на все задачи, поэтому на какой-то из них до написания кода дело может не дойти. Если не успеваете или не знаете решения, не отчаивайтесь — начните с того, что понимаете. Программисты часто «думают руками», то есть решение приходит в процессе написания кода и поэтапной обработки входных данных, поэтому увидеть результат и в интересах работодателя тоже.
Как подготовиться к алгоритмическому собеседованию
Нужно не просто знать отдельные темы, а иметь навык решения задач. Поэтому первый совет — больше практикуйтесь. Неважно, новичок вы или уже несколько лет работаете в коммерческой разработке, начинайте готовиться за один-два месяца, чтобы прийти в форму.
Самый простой вариант — решать задачи на Leetcode и Codewars. Если вообще ничего не знаете, начинайте с легкого уровня, но не задерживайтесь на нем. Когда увидите, что дело пошло, переходите к среднему и тяжелому уровню. Если не получается придумать решение, подсмотрите в ответе — возможно, увидите новую структуру данных или алгоритм. Нормально, если из 100 задач среднего уровня получается решить 90–95.
Однако нет смысла решать задачи без знания теории. Если видите, что плохо понимаете основные алгоритмы, выделите время, чтобы подучить их. Не нужно углубляться до математических основ, теория должна идти вместе с практикой: узнал основы хеш-таблиц — порешал задачи — увидел новый подход — снова вернулся к теории.
Что еще пригодится на алгоритмическом собеседовании
Структуры данных. Как общие для всех языков — связный список, деревья, хеш-таблица, куча, очередь и стек, — так и специфичные для вашего языка.
Бинарный поиск и связанные с ним задачи. Например, стоит посмотреть First bad version, Sqrt x, 2D matrix.
Метод двух указателей и задачи со скользящим окном.
Алгоритмы на строках: найти палиндром, обратную строку и другие.
Выше далеко не весь список того, что вам может понадобиться. Если есть время, изучите, например, динамическое программирование, жадные алгоритмы, алгоритмы Ли и Дейкстры.
А чтобы снизить волнение перед реальным интервью, можете попросить друга или знакомого устроить вам тестовое собеседование.
Почувствовать себя увереннее на алгоритмическом собеседовании и повысить шансы на трудоустройство поможет онлайн-курс «Алгоритмы и структуры данных». За 4 месяца вы узнаете про часто используемые способы решения алгоритмов, научитесь писать эффективный код и прорешаете более 100 задач. Первые шесть уроков можно пройти бесплатно — пробуйте и решайте, хотите ли переходить к полной программе.