Всем добрый вечер. Человек в тапочках — это я. При загрузке на Slide Share из презентации пропадает несколько картинок. Предал собственное любопытство и не стал разбираться в причинах такого поведения. PDF со всеми картинками доступен по ссылке chernyy.ru/yapse/upload/trilateration-with-ibeacons.pdf
Я думаю мы сейчас не откроем ничего нового, но нам понравились условия у этих издательств- Chillingo (среди клиентов — Angry Birds, Cut the Rope), G5, FDG Entertainment, Playmous, Renatus, Wooga, Kongregate, Rovio Stars, Game Insight, KamaGames (да, мы считаем что у наших партнеров по цеху неплохие условия, мы же сами с ними работаем, в конце концов :). У каждого издателя будут немного разные условия, и многое будет зависеть от именно Вашей игры. Не надо жалеть времени на поиски издателя- мы написали доброй сотне издательств прежде чем нашли «свой» вариант.
Просто, если есть желание добавить студентам, не только ума, но и «сердца». (а я всегда стараюсь исходить из принципа, что в подавляющем большинстве случаев люди хотят сделать как лучше) То, подобная инициатива была бы воспринята более адекватно, если ей бы занялся некто независимый и никак не ангажированный. А хороший философ или хороший культуролог обязательно должны иметь обширные знания о самых различных религиях и о различных точках зрения об этих религиях. Тогда, получив необходимый и широкий объем знаний, студент мог бы сам решить, что ему нравится и что не нравится, нужна ли ему религия и какая именно.
Верёвки и прочую soft-body (если постараться то и rigid-body) физику можно писать используя интегрирование Верле.
Вся теория завязана на том, что скорость — разница между текущим и предыдущим её положением.
Применительно к задаче реализация сводится к следующему (псевдокод):
Есть набор точек (joints) связанных пружинками (links).
Задача каждой точки — двигаться согласно скорости.
joint.update
tempPos = pos // запоминаем текущую позицию во временную переменную
pos += pos - lastPos // прибавляем скорость
pos += gravity // и вектор гравитации
lastPos = tempPos
Задача каждой пружинки — поддерживать нужное расстояние между её joint'ами.
link.update
delta = joint[1].pos - joint[0].pos // вектор в сторону второй точки
length = sqrt(delta.x^2 + delta.y^2) // текущее расстояние между точками
delta /= length // нормализация вектора
delta *= length - LINK_LENGTH // LINK_LENGTH - расстояние которое следует поддерживать
delta *= FORCE // FORCE - коэффициент упругости пружинки (0..1)
// расталкиваем точки в противоположных направлениях
joint[0].pos += delta * 0.5
joint[1].pos -= delta * 0.5
Сама организация цикла обновления сводится к обновлению всех joint'ов, и нескольким иттерациям обновления всех link'ов (для стабилизации).
Таким незамысловатым способом можно создавать верёвки, рэгдоллы (ограничить углы между link'ами), волосы и даже некий аналог твёрдотельной физики. Реализация простая и никаких физических движков не требует. Пример работы такой физики.
Я сказал. Для titlecase не использовать uppercase, а взять соответсвующее поле Unicode. Например, здесь (titlecase — последняя колонка). Для сравнения не использовать не uppercase, не lowercase, а использовать CaseFolding. Не закладываться на длину строки после изменения регистра. А разные языки программирования — отдельная тема, всё сразу не влазит :-)
В принципе, если интересуют инструменты с открытым исходным кодом, такое можно запросто сделать в узловом редакторе Blender.
Боке на этом изображении не видно, но среди есть куча узлов на все случаи жизни. Блюр тут даже не пригодился из-за наличия defocus, а вот тона подкрутить или перспективу — с этим любую сцену можно превратить в игрушку :)
Маску тоже можно генерировать процедурно, просто мне лень было в соседнюю панель лезть. Но любой человек, работавший с композерами подтвердит, что Tilt-shift по предложенной модели делается в полпинка (тут не могу не вспомнить эту статью)
когда-то начинал писать подобную серию статей для C# разработчиков, но после первого поста забросил — Objective-C для C# разработчиков
ваш подход «через шок» мне кажется интереснее.
<мысливслух>может тоже стоит возобновить и таки дописать этот предполагаемый цикл.</мысливслух>
>>>Это Вы имеете в виду, на чистую свежеустановленную MySQL в том числе? Т.е. вопрос в том, можем ли мы просто закинуть файлы в datadir, и MySQL будет их видеть сразу как базу?
Да.
Для MyISAM достаточно .MYD, .MYI, .frm положить в каталог схемы. Кстати, можно даже на ходу.
Для InnoDB нужен ibdata — метаинформация хранится там (даже при использовании innodb_file_per_table) + .frm + .ibd (если стоит innodb_file_per_table)
>>>PPS. Вы не против, если я дополню статью Вашими советами?
Если у вас сохранился весь datadir, то никаких пустых баз с идентичной структурой создавать не нужно. Достаточно просто заменить все файлы и откорректировать размер логов InnoDB.
Далее стартуем MySQL и внимательно смотрим лог. Должен стартануть и выполнить восстановление.
Если восстановление не проходит, тогда в конфиге ставим innodb_force_recovery=1 (http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html) и пробуем стартовать. Если не стартуем, ставим innodb_force_recovery=2 и пробуем стартовать. И т.д. до 6.
Если сразу стартуете с innodb_force_recovery=6, то вы рискуете получить БД в inconsistent state. Т.е. целостность (согласованность) данных может быть нарушена.
Если вы дошли до innodb_force_recovery=6 и это не помогло, то очень грустно — нужно восстанавливать в полуручном режиме.
это старый мультфильм такой про «и так сойдет...»
<гнусляво>хабр уже не торт</гнусляво>а по теме — выступление монаха на Google Tech
и
там есть и другие выступления о медитации и мозге, если поискать
www.youtube.com/watch?v=ohmtXMLb5dg — 2 часть
Вся теория завязана на том, что скорость — разница между текущим и предыдущим её положением.
Применительно к задаче реализация сводится к следующему (псевдокод):
Есть набор точек (joints) связанных пружинками (links).
Задача каждой точки — двигаться согласно скорости.
joint.update
tempPos = pos // запоминаем текущую позицию во временную переменную
pos += pos - lastPos // прибавляем скорость
pos += gravity // и вектор гравитации
lastPos = tempPos
Задача каждой пружинки — поддерживать нужное расстояние между её joint'ами.
link.update
delta = joint[1].pos - joint[0].pos // вектор в сторону второй точки
length = sqrt(delta.x^2 + delta.y^2) // текущее расстояние между точками
delta /= length // нормализация вектора
delta *= length - LINK_LENGTH // LINK_LENGTH - расстояние которое следует поддерживать
delta *= FORCE // FORCE - коэффициент упругости пружинки (0..1)
// расталкиваем точки в противоположных направлениях
joint[0].pos += delta * 0.5
joint[1].pos -= delta * 0.5
Сама организация цикла обновления сводится к обновлению всех joint'ов, и нескольким иттерациям обновления всех link'ов (для стабилизации).
Таким незамысловатым способом можно создавать верёвки, рэгдоллы (ограничить углы между link'ами), волосы и даже некий аналог твёрдотельной физики. Реализация простая и никаких физических движков не требует.
Пример работы такой физики.
В данной статье имеется хорошая реализация контроля доступа, более правильного, на мой взгляд.
Боке на этом изображении не видно, но среди есть куча узлов на все случаи жизни. Блюр тут даже не пригодился из-за наличия defocus, а вот тона подкрутить или перспективу — с этим любую сцену можно превратить в игрушку :)
Маску тоже можно генерировать процедурно, просто мне лень было в соседнюю панель лезть. Но любой человек, работавший с композерами подтвердит, что Tilt-shift по предложенной модели делается в полпинка (тут не могу не вспомнить эту статью)
ваш подход «через шок» мне кажется интереснее.
<мысливслух>может тоже стоит возобновить и таки дописать этот предполагаемый цикл.</мысливслух>
« ALT (зажать) + 0171 (на цифровой клавиатуре)
» ALT + 0187
Аналогично можно и другие символы вставлять
Да.
Для MyISAM достаточно .MYD, .MYI, .frm положить в каталог схемы. Кстати, можно даже на ходу.
Для InnoDB нужен ibdata — метаинформация хранится там (даже при использовании innodb_file_per_table) + .frm + .ibd (если стоит innodb_file_per_table)
>>>PPS. Вы не против, если я дополню статью Вашими советами?
Не против.
Далее стартуем MySQL и внимательно смотрим лог. Должен стартануть и выполнить восстановление.
Если восстановление не проходит, тогда в конфиге ставим innodb_force_recovery=1 (http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html) и пробуем стартовать. Если не стартуем, ставим innodb_force_recovery=2 и пробуем стартовать. И т.д. до 6.
Если сразу стартуете с innodb_force_recovery=6, то вы рискуете получить БД в inconsistent state. Т.е. целостность (согласованность) данных может быть нарушена.
Если вы дошли до innodb_force_recovery=6 и это не помогло, то очень грустно — нужно восстанавливать в полуручном режиме.