All streams
Search
Write a publication
Pull to refresh
27
0
Алексей @alex_justes

User

Send message
Урал на линии! :)
А как вы узнаете, что нашли действительно самое оптимальное решение за «линейное время»?
Логично, там и был ботнет, который всё это дело пинговал. :)
Ну, на трекболе как раз примерно раз в неделю приходится чистить «шарик». :)
Тоже заинтересовался этим вопросом. Нашел вот такой документ (FingerPrinting canvas in HTML5):

Если коротко, то:
The natural way for browsers to implement such feature is to draw on the host operating system and hardware. Using the GPU for 3D graphics (and even for 2D graphics compositing) provides substantial performance improvements, as well as battery savings on mobile devices. And using the operating system's font-rendering code for text means that browsers automatically display text in a way that is optimized for the display and consistent with the user's expectations.


cseweb.ucsd.edu/~hovav/dist/canvas.pdf
Это если магниты не будут выковыривать некоторые практичные личности. :)
Расстояние между центрами — число с плавающей точкой. Его вычисление вероятно дороже, чем сравнение нескольких пар целых чисел.
К тому же, если в box2d всё считается в целых числах, то и работать проще с целыми.
Возможно потому, что квадрат можно быстрее и проще просчитать.
Мне кажется, минусовать могут за то, что в статье об этом говорится, а ваше высказывание похоже на то, что вы не вчитывались в статью, а сразу стали писать комментарий.

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

Так, несмотря на наличие в Android стандартной библиотеки libc и других, их реализация в большинстве случаев несовместима с библиотеками от проекта GNU и сильно урезана по функционалу. По этой причине Linux-софт нужно как минимум пересобирать специально под Android и ARM-процессор, а во многих случаях еще и патчить, добавляя функционал, отсутствующий в библиотеках.
Посмотрим, что выйдет из Tizen. Но пока Tizen'а нет, android — довольно интересный полигон для экспериментов.
Не нужен большому числу рядовых пользователей — не значит не нужен совсем. А иметь возможность выполнить какую-нибудь специфичную задачу для ПК без этого самого ПК(ноутбука, нетбука и тд) бывает полезно.

А красноглазить — это отдельное удовольствие, которое может и не принесет результата, но доставит много удовольствия от решения не самой стандартной задачи.

Да и вообще: некоторые вещи нужно делать только потому, что можешь. :)

Демоны, компиляторы и т.д. не входят в BusyBox. Если функционала BusyBox вполне достаточно, то и заморачиваться не стоит, но если нужно что-то более специфичное — BotBrew и танцев с бубном будет чуть меньше.
Кстати, подобную «фольгу» мы используем в спелеологии для «самоспаса» (позволяет сохранить тепло и избежать переохлаждения в критических ситуациях). И называем её: «Космическое одеяло». :)
Долго вспоминал название, но таки вспомнил: Anvil of Dawn
Сколько времени я в ней провел…
www.old-games.ru/game/749.html

image
Таки нашел старый исходник.

Код на Haskell
#!/usr/bin/runhaskell

data Avltree a = Leaf | Node a (Avltree a) (Avltree a)

depth Leaf = 0
depth (Node _ l r) = (max (depth l) (depth r)) + 1

getl (Node _ l _) = l
getr (Node _ _ r) = r
getv (Node v _ _) = v

balance t1 t2 = (depth t1) - (depth t2)
balanceLL (Node v (Node lv ll lr) r) = (Node lv ll (Node v lr r))
balanceLR (Node v (Node lv ll (Node rlv rll rrr)) r) = (Node rlv (Node lv ll rll) (Node v rrr r))
balanceRL (Node v l (Node rv (Node lrv lrl lrr) rr)) = (Node lrv (Node v l lrl) (Node rv lrr rr))
balanceRR (Node v l (Node rv rl rr)) = (Node rv (Node v l rl) rr)

insert x Leaf = (Node x Leaf Leaf)
insert x t@(Node v l r)
    | x == v = t
    | x < v && (balance left_i r) ==  2 && x < getv l = balanceLL (Node v left_i r)
    | x < v && (balance left_i r) ==  2 && x > getv l = balanceLR (Node v left_i r)
    | x > v && (balance l right_i) == -2 && x < getv r = balanceRL (Node v l right_i)
    | x > v && (balance l right_i) == -2 && x > getv r = balanceRR (Node v l right_i)
    | x < v  = (Node v left_i r)
    | x > v  = (Node v l right_i)
        where
			left_i = insert x l
			right_i = insert x r

delete x Leaf = Leaf
delete x (Node v Leaf Leaf) = if v == x then Leaf else (Node v Leaf Leaf)
delete x (Node v l Leaf) = if v == x then l else (Node v l Leaf)
delete x (Node v Leaf r) = if v == x then r else (Node v Leaf r)
delete x (Node v l r)
    | v == x = (Node min_v l del_m)
    | v > x && abs (balance del_l r) < 2 = (Node v del_l r)
    | v < x && abs (balance l del_r) < 2 = (Node v l del_r)
    | v > x && (balance (getl r) (getr r)) < 0 = balanceRR (Node v del_l r)
    | v < x && (balance (getl l) (getr l)) > 0 = balanceLL (Node v l del_r)
    | v > x = balanceRL (Node v del_l r)
    | v < x = balanceLR (Node v l del_r)
        where
			del_m = delete min_v r
			del_l   = delete x l
			del_r   = delete x l
			min_v   = get_min (toList r)

get_min ((x,bal):xs) = x

toList Leaf = []
toList (Node x l r) = (toList l) ++ [(x,balance l r)] ++ (toList r)

isBalanced Leaf = True
isBalanced (Node _ l r) = isBalanced l && isBalanced r && abs (balance l r) < 2

main = print$isBalanced(delete 1 (insert 4(insert 5 (insert 3 (insert 9 (insert 1 Leaf))))))

Всегда пожалуйста! (:

Кстати, где-то там же была более прозрачная реализация.
hackage.haskell.org/package/AvlTree
Практически первое, что нашлось. АВЛ-дерево на Haskell.

В курсе ФИЛП (функциональное и логическое программирование) было задание написать рекурсивную реализацию АВЛ-деревьев на Haskell. Надо будет дома посмотреть, вдруг найду старые исходники.
2

Information

Rating
Does not participate
Location
Свердловск, Свердловская обл., Россия
Date of birth
Registered
Activity