Обо мне

Моя фотография
Дикий Полярный Сов
Показаны сообщения с ярлыком Интересное. Показать все сообщения
Показаны сообщения с ярлыком Интересное. Показать все сообщения

понедельник, 19 апреля 2010 г.

Новое и насущное.

Увидел вчера в книжном нового, свеженького (для России) Рейвенора-отступника, и не смог пройти мимо - подхватил и утащил, аки паук, на кассу.

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

Вот так. Этот пост, конечно, не интересен будет тем, кто не в теме :]

воскресенье, 11 апреля 2010 г.

Лекция в политехе.

Был в среду на лекции "Эволюция искусственного интеллекта" в Политехническом музее.

Лекция проходила в Большой аудитории. На подобном мероприятии в политехе был впервые, а в самом политехе - в третий раз в жизни :]

В общем, пришел, сел. Пришел за 5 минут до начала (то бишь без пяти восемь). Народу было где-то половина аудитории. К тому моменту, когда началась лекция (началась она с опозданием на 10 минут) - был уже почти полный зал (только несколько верхних рядов были заполнены наполовину.

Итак, собственно про лекцию. Я по ходу делал кое-какие заметки, сейчас по ним попробую восстановить. Если что забыл - не обессудьте.


суббота, 27 марта 2010 г.

F# Mono Bug, или Микрософт как всегда.

Наткнулся сегодня на интересный баг в F#.
До конца локализовать пока не удалось, но, кажется, что паттерн матчинг с 'a option неправильно работает.
Итак. Имеем код (да, это тот самый шифр цезаря :] ):


module Caesar

let alphabet = Array.ofSeq "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.,?!+=/"

let getIndex (arr: 'a[]) (elt: 'a) =
    let optIndex = arr |> Array.tryFindIndex( (=) elt )
    match optIndex with
    | Some(x) ->
        printfn "found %A" x
        x
    | None ->
        printfn "None"
        -1

let encodeLetter (shift: int) (letter: char) =
    let idx =
        letter
        |> getIndex alphabet
    printfn "%c - %d" letter idx
    alphabet.[
        ( idx + shift ) % (Array.length alphabet)
        ]


В винде все работает, как и предполагалось - написав в fsi, к примеру

#load "caesar.fs"
Caesar.encodeLetter 5 'a';;

Получим на экране

found 0
a - 0
val it : char = 'f'

То есть - getIndex отработал как надо, достал нам индекс, что, в свою очередь означает, что паттерн матчинг Some(x) сработал. Под моно же имеем следующую картину:

None
a - -1
val it : char = 'e'

То есть явно видно, что в том же самом коде тот же самый паттерн не сработал.

Бьюсь в истерике Очень интересный баг.


UPD: Однако, если вызывать getIndex напрямую - выводит все как полагается. Значит, беспорядки начинаются уже в encodeLetter - почему-то "теряется"... пока не пойму что.

UPD2: Причина, оказывается, крылась в генерализации функции (я явно указал 'a в качестве типа параметра). Как только поменял типы параметров в getIndex на char - заработало и под Mono. Подозреваю, тут что-то связано с выводом типов. Буду ковырять дальше.

UPD3: У Mono с выводом типов вообще как-то не очень ладится. Не могли сделать все как в дотнет.

пятница, 19 февраля 2010 г.

Jonathan Coulton

Наткнулся вчера на Джонатана Коултона. Это просто праздник какой-то.
Просто кину пару ссылок с небольшими комментариями:

http://www.youtube.com/watch?v=1BmK8PYm504 (The Future Soon - песня про мальчика, который мечтает стать ученым и создать расу роботов-воинов)

http://www.youtube.com/watch?v=z53WLtowYBo (The song about evil Genius in love)

http://www.youtube.com/watch?v=j4TnhemCEmc (Codemonkey - PHP-кодеры, это про вас!)

http://www.youtube.com/watch?v=AjcH2UmK1uo (Песня про зомби от лица зомби)

Восхитительно. Большая часть песен артиста доступна с его сайта для свободного скачивания.

Кстати, именно он написал финальную песню, которую исполняет AI GladOS в игре Portal. Этого само по себе могло быть достаточно, имхо.