?

Log in

No account? Create an account

связь

На днях оповещения от ЖЖ перестали приходить мне на почту (у кого-нибудь еще такое наблюдается? Upd: разобрался, проблема была в настройках моего сервера), заглянул в список сообщений тут на сайте, внезапно увидел персональное сообщение, которое было отправлено 2 месяца назад, но ЖЖ счел его подозрительным и на почту не продублировал.

Чтобы такого впредь не случалось, всем, кому это может понадобиться, сообщаю: мне можно (и лучше) писать на info@ мой ник тут .com.

(написано в марте 2015, пост поднят вверх для заметности)

спецолимпиадное

По мотивам поста Никиты про разницу в производительности "высокоуровнего/функционального" и "низкоуровнего/императивного" кода. Взял буквально его пример с созданием массива пар чисел. Его оригинал на кложе:
(concat
 (mapv
    (fn [y] [from-x y])
    (range from-y (quot to-y 2)))
  (mapv
    (fn [y] [to-x y])
    (range (quot to-y 2) to-y)))

Как быстро он работает - не представляю.

Попробовал обе версии - "функциональную" и "императивную" - записать на D в качестве эксперимента, посмотреть, насколько компилятор справляется это дело развернуть.
struct Point { int x, y; }

auto f(int from_y, int to_y, int from_x, int to_x) {
    return chain( iota(from_y, to_y/2).map!(y => Point(from_x, y)),
                  iota(to_y/2, to_y)  .map!(y => Point(to_x, y)) ).array;   
}

auto g(int from_y, int to_y, int from_x, int to_x) {
    auto res = new Point[to_y - from_y];
    foreach(y; from_y .. to_y)
        res[y - from_y] = Point(y < to_y / 2 ? from_x : to_x, y); 
    return res;
}

На 60 миллионах точек ( f(20_000_000, 80_000_000, 1, 2) ) "функциональный" у меня работает 167 мс, "императивный" - 146 мс, разница в пределах 15%. Терпимо.
(полный текст тут, компилятор - LDC)

Попробовал записать это дело на хаскеле, но в нем я нуб, не знаю, как правильно его готовить. Вот такой вариант
import qualified Data.Vector.Unboxed as V
type Point = (Int, Int)

f :: Int -> Int -> Int -> Int -> V.Vector Point
f from_y to_y from_x to_x =
    let a = V.generate (to_y `div` 2 - from_y) (\y -> (from_x, y+from_y))
        b = V.generate (to_y - to_y `div` 2)   (\y -> (to_x, y + to_y `div` 2))
    in V.concat [a, b]

на тех же исходных данных работает 1.33 сек, т.е. примерно на порядок медленнее. Другие варианты, что я пробовал, еще медленнее. Например, если data Point = P {-# UNPACK #-} !Int !Int, то оно уже не Unboxed, и если просто Data.Vector для них использовать, то время больше трех секунд уже.
Вопрос хаскелистам: как вы unboxed массив простых структур делаете?

Tags:

транспорт

Осваиваем новую игрушку:




Творение стэнфордско-гонконгского гения. Электрический скейт, управляемый наклоном тела, аки сегвей какой без ручки. Я так понимаю, большинство электроскейтов сейчас просто с пультом управления, а этот типа умный, пульт не нужен. Телефоном можно по блютусу соединиться, посмотреть заряд батареи, переключить режим. Заявлено, что одной зарядки хватит на 18 км. Похоже на правду, часа на полтора-два активных покатушек хватает. Самое приятное, что может в горку ехать под треск шаблонов.

Сегодня в парке девочка с обычным скейтом увидела, как сын на этом катается сидя, не отталкиваясь. Не поняла, села на свой, тоже пыталась так ехать, но все никак.

Замок Генриха Восьмого



И окрестности

(все в 1080p)

Еще закат

Сегодня:


А, заодно. В прошедшие выходные:

Сити

Сегодня вечером:



При попытке полететь в сторону Tower Bridge в определенный момент дрон потерял сигнал, развернулся и сам полетел обратно, там связь восстановилась, и управляемый полет был продолжен.

Полеты

Несколько видеороликов с дрона за последние недели. Все залиты в 1080p и лучше всего выглядят при развороте на полный экран.
Read more...Collapse )

Узнал, что помимо пары камер вперед и пары камер вниз - для избежания столкновений и оценки высоты - у этого дрона еще и ультразвуковой датчик внизу на 40 кГц. И, возможно, собаки его слышат. Один раз было непросто приземлиться - собаки стали за дроном весело гоняться и высоко подпрыгивать. Пришлось дождаться пока их хозяйка не забрала.

Black hole coin

Удобную монету выпустили англичане. Бывает, придешь в магазин и вдруг понимаешь, что забыл формулу для энтропии черной дыры. А так можно посмотреть на монетку в полфунта и напомнить себе.

Полетал тут днем над центральными парками:

(HD, можно/нужно на весь экран открывать)




А вот простой способ отключить стабилизацию, и что тогда получается:
Read more...Collapse )