Category: животные

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

nyaload

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

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

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


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

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

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

И в конце:
nyaload

Купи слона. Купи слона. Купи слона.

Совет, повторённый более трёх раз (или рекламируемый более пяти минут) — это не совет, а навязчивость.
Можете эту показывать формулу людям, которые «просто хотят помочь», и проверять себя «а не надоедаю ли я своими советами».
Даже если совет правильный («кончай бухать»), то повторенный в четвертый раз подряд он вызовет скорее раздражение.

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

Но в качестве первоначального приближения можно использовать простую формулу.
nyaload

MurmurHash грабли

Сегодня отлаживал, почему фильтр блума не работает.

Оказалось, что "набор независимых хеш-функций" выбирается как MurmurHash64(..., seed) для seed от 0 до k.
Так же оказалось, что такой набор MurmurHash64 функций генерирут одинаковый набор хешей для строк, отличающихся в младших битах.

В результате, если положить в фильтр блума строку "cat", то там оказывается за компанию и "bat". Если положить "good", то фильтр содержит и "food".
nyaload

Персонализация бывает разной

Персональные рекомендации ютуба считают, что мне надо показывать котят, смешные приколы, аниме (да, две недели назад я посмотрел несколько AMV) и Петросяна (да, я проверял, правда ли он шутит не смешно). Короче, ужасные.

Персональные рекомендации твиттера... гхм, гораздо специализированей и точнее:
Collapse )
nyaload

fast utf-8 validation

Наткнулся на простую и быструю библиотеку декодирования UTF-8, кроссплатформенную, с валидацией всех возможных ошибок в utf-8 (overlong, surrogate pairs) - http://bjoern.hoehrmann.de/utf-8/decoder/dfa , без бранчинга ( «?:» заменяется на стандатный битхак mask=((int)x-1)>>31), легко векторизуется до чтения dword/qword. Декодирование рассматривается как конечный автомат, конечный автомат загонятся в таблицу [char x state] →state

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

Не законом Мура единым ускоряем софт
nyaload

mailware!

В связи с тем, что Mail.Ru поднимает[?] температуру воды с лягушкой[?] чуть быстрее конкурентов, предлагается термин-дразнилка mailware (мыльварь).

mailware - это malware оправдываемый словами «А чо они все рекламные листовки разносят по подъездам, мы тоже так хотим, сейчас раскрасим стены вашего подъезда в свою рекламу»
nyaload

grep is unstable

Раньше фильтровал символы с кодом больше 0xffff (никаких кошачьих смайликов) в UTF-8 потоке как

LC_ALL=C grep -v `echo "[A-B][A-B][A-B]" | tr AB "\200\277"` || true

Это выкидывает строки со слишком длинными последовательностями байтов 10xxxxxx в UTF-8 символах, UTF-8 на входе гарантировано корректный.

Внезапно при смене окружения перестало фильтровать, без диагностики (просто пропускает "большие" символы сквозь себя). GNU grep 2.6.3, если что. tr отрабатывает корректно.

Сменил на питон,
  check = re.compile(3 * ('[' + ''.join(map(chr, xrange(0x80, 0xc0))) + ']'))
  for l in sys.stdin:
    if not re.search(check, l):
      sys.stdout.write(l)


В восемь раз медленней, фи. Но работает.