Category: животные

Category was added automatically. Read all entries about "животные".

nyaload

Свет ← нормаль ← касательная ←траектория ← [dx,dy] ← кисточка

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

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


Предварительный набросок (без глаз, это неправильно): Collapse )

Как выглядит мазок этой кисточкой: Collapse )

Грубый вариант раскраски: Collapse )

И в конце:
nyaload

xss html escape

Если пишем бложек, куда хакеры посылают всякие нехорошие символы, то достаточно ли заменить

& → &
< → &lt;
> → &gt;
" → &#034;
' → &#039;


?

То что UTF-8 это однозначный UTF-8, а не ascii в многобайтовой овечьей шкурке проверено.
Есть ли какие-нибудь кривые unicode-символы, которые ломают браузер и верстку? например unicode mirror character (и прочие POP DIRECTIONAL FORMATTING, RIGHT-TO-LEFT EMBEDDING, LEFT-TO-RIGHT EMBEDDING, RIGHT-TO-LEFT MARK, LEFT-TO-RIGHT MARK)

Может, есть готовый white-list категорий символов с исключениями?

Пока что ощущение, что надо банить всё, что в этом списке начинается с Zl, Zp и с C ('\t' и '\n' обработать отдельно). Ещё что-то? Клингонский алфавит с буквами размером с экран?

import unicodedata
def is_bad_char(char):
    cat = unicodedata.category(unicode(char))
    return (cat[0] == 'C') or (cat == 'Zl') or (cat == 'Zp')



Collapse )

Ещё с html надо что-то предусматривать? updated: https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
nyaload

Поиск по блогам

Что бы поискать в ЖЖ посты юзера _winnie про котов или C++, недостаточно ввести в строке поиска "_winnie livejornal котики". Нужно кликать на "advanced", и там расставлять галочки, вводить в нужные поля ввода.

Послал письмо в суппорт (ссылка "обратная связь" внизу страницы) :

Collapse )Спасибо большое вашим специалистам за замечательный сервис, который позволяет быстро найти свои мысли и мнения других людей!
nyaload

fgrep в бинарных файлах

Искал все названия файлов во всех файлах, перекрёстные ссылки (20000 файлов, 5 гигабайт). Заюзал grep -F -a. На некоторых файлах начал зависать. Начал рыть, оказалось из-за того что бинарные файлы воспринимались как UTF-8 строки. Ну, что бы корректно работало insensitive сравнение или "[а-яА-ЯёЁ]", для тех, кто работает с текстом, а не с байтами. Мне нужны были только латинские буквы, и независающий быстрый grep.

Вот так можно отключить перекодировку внутри grep (питон/шелл):
os.environ["LC_ALL"] = "C" #prevent (f)grep of using UTF-8 on binary files
export LC_ALL=C

Обращаю внимание на флажок -a. Греп не любит бинарные файлы, этот флажок говорит ему "на самом деле это текстовый файл, жри давай". Почему-то флажок -i заставляет grep страшно тормозить, в т.ч. после смены локали. Пришлось вместо одного процесса запустить три, cat | tr '[:upper:]' '[:lower:]' | grep

upd: пересобрал grep, что бы мог брать список файлы из заданного файла, заменил его убер-функцию mbtolower на тривиальную. В противном случае невозможно было скомбинировать быстрый tolower и список файлов.
nyaload

AI должен красиво отдаваться.

Наш лид-программер, orvind, ездил недавно на GDC. У нас в компании решили организовать лекции, с пересказом интересного, от участвовавших в GDC.

Выступаю испорченным телефоном, пересказываю со слов orvind идеи Сида Мейера в Цивилизации 5.

Если есть рандом, то он не должен быть честный. Если мы попадаем с вероятностью 50%, то после промаха игрок ожидает попадание. Дадим же его с более высокой вероятностью. А не ещё плюс два промаха подряд с вероятностью 1/4.
Из комментов: В Heroes5 было свойство incorporeal - промах с 50% вероятностью.
Постоянно ставили баги что рандом бажит: как же так, промахнулся 5 раз подряд?
Объяснения, что да, иногда и так бывает, что монета падает 5 раз подряд решкой, не воздействовали. Никак не мог доказать, что 1/32 != 0.
Пришлось прикручивать счетчик промахов, чтобы не больше трех раз подряд, только тогда успокоились.
В интерпретации дизайнеров это звучало так: "у нас в Heroes 5 рандом тоже сначала бажил".


Что бы играть было интересней, замедлим слишком быстрые сейвы-лоады. Вообще, игрока надо спасать от себя - интерес в обмен на удобство/эффективность игры.

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

Несмотря на ожидания игровых журналистов и игроков-интеллектуалов - AI не должен быть непредсказуемым. Действительно неожиданный непредсказуемый AI будет выбешивать. Игроку будет приятно предсказать (адекватное) поведение противника и победить.

Награда игроку - это не обязательно новый контент (модели, текстуры, анимации). В игре заменили сообщение "Посол предлагает мир, не нападайте" на "Посол предлагает мир, не нападайте, в знак лояльности он преподносит дар: семь танцующих медведей". И это реально изменило соотношение ответов игрока. Хотя никаких анимаций или моделей медведей нет.
У игроков есть воображение, этим надо пользоваться, они сами могут улыбнуться и представить себе танцующих медведей :)
nyaload

С++ trick

вместо
if (something_bad)
{
  LOG_WARNING("something bad");
  return false;
}

Collapse )
updated: в комментах указали объективный минус, что это невозможно, если
#define LOG_WARNING do { ... } while (0).
У меня другой случай, у меня что-то типа #define LOG_WARNING f(__LINE__, __FILE__, ...)

так же указали, что если очень часто надо такое писать, то лучше
VERIFY(!something_bad, return false);

ЗЫ. <шутко> лемминги не признающие operator, идут программить на C#/Java! </шутко>

updated:
В левом углу - Sony-boy! В правом - MS-guy!
vs
*_Winnie чувствует себя настоящим тролем