Home

Advertisement

Опасайся неведомой nVidia

  • Nov. 26th, 2009 at 2:59 PM
office
Жил был код, которой отлично работал годами на разных машинах и конфигурациях. Внезапно народ стал жаловаться на нестабильность при его работе: сначала система говорит "nvlddmkm stopped responding and has recovered", а потом и синий экран смерти бывает (с ошибкой в том же nvlddmkm - драйвере от nVidia). Стали экспериментировать, оказалось, что это происходит только на картах от nVidia и только при включенном Aero (полупрозрачный режим интерфейса в Висте и Cемерке). Все то же самое на ATI работает без проблем. Все то же самое, но с выключенным desktop composition (что по сути выключает Aero), тоже работает отлично. При этом в нашем коде нет вообще никакой работы с графической картой - только числодробление в несколько потоков, синхронизирующихся через семафоры. Причем проблема эта проявляется не только с нашим кодом, также бывает в некоторых игрушках, видеоплеерах и пр. Даже целый сайт есть, посвященный этой проблеме: http://www.nvlddmkm.com . Вот как бывает.

Tags:

Копирайт

  • Nov. 23rd, 2009 at 3:12 PM
office
Недавно увидел знак копирайта на деньгах:

Как-то странно и непривычно, хотя в принципе логично. Что еще занятно, в Гонконге банкноты разного номинала выпускают разные банки: эту вот HSBC, а некоторые другие - Bank of China.

Tags:

office
выводить нужно только
удовольствие другим.
даны в словаре

отдельный прикол с буквой
программирования.
решите .

ваша программа
исходного размера.
затрудняются

а вот кстати география
компактного представления .
на исходники

ощущение такое что
визуализатора орбит.
любом языке

с этим я полностью согласен
может это нормально решить.
точно известен

ваша программа
растворились в воздухе.
курицах

Задачка

  • Nov. 15th, 2009 at 4:20 PM
office
Давно хотел предложить общественности порешать такую вот задачку и собрать свежую статистику по языкам.





Дана такая таблица соответствий букв и цифр:
E | J N Q | R W X | D S Y | F T | A M | C I V | B K U | L O P | G H Z
e | j n q | r w x | d s y | f t | a m | c i v | b k u | l o p | g h z
0 |   1   |   2   |   3   |  4  |  5  |   6   |   7   |   8   |   9

Мы хотим использовать ее для записи телефонных номеров словами, чтобы их проще было запоминать.

Функциональные требования

Ваша задача состоит в написании программы, которая для заданного телефонного номера находит все возможные его записи словами и выводит их. Телефонный номер - это произвольная(!) строка из цифр, дефисов (-) и слэшей (/). Дефисы и слэши при переводе в слова не кодируются. Все слова берутся из словаря, который дан в отсортированном по алфавиту ASCII файле (одно слово на строку).
Read more... )

Будь героем

  • Nov. 14th, 2009 at 2:57 PM
office
Свежее видео из Куала Лумпура:



С учетом концовки отличный слоган подобрали, только чуть в написании ошиблись, стоило написать Be an hero. Read more... )

Tags:

Гениальность

  • Nov. 14th, 2009 at 12:38 AM
office
Вечером зашел с женой разговор про достижения генетики и генной инженерии. Вспомнили мечту фантастов о целенаправленном выращивании гениев. Сейчас очень многие генетические эксперименты проводят на мышах и курицах. Стало интересно: как себя будут вести гениальная мышь и гениальная курица?

Tags:

Языки

  • Nov. 10th, 2009 at 7:12 PM
office
Да, знание нескольких языков и парадигм программирования выглядит сущим пустяком по сравнению с этим:



Основной разговор идет на тайском, отдельные фразы - на лао, хинди, китайском и пр.

Вот еще:



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

Полундра!

  • Nov. 7th, 2009 at 7:36 PM
office
Вчера после двухнедельного отсутствия возвращаюсь на остров, вижу - многие офисы закрыты как в воскресенье, хотя на дворе только утро пятницы. Приезжаю в контору, которая занимается нашей бухгалтерией, те работают за закрытой на замок дверью. Оказывается, по всей стране управление полиции по борьбе с киберпреступностью устроило рейд в поисках пиратского софта, главным образом Винды и Офиса. Ходят по офисам, интернет-кафе, отелям и т.д. По слухам, за каждую найденную нелегальную копию штраф почти $2k. А легальных тут практически ни у кого нет, вот все и попрятались. В интернетах пишут всякие страшилки, перемежаемые вечным огнем про крутость опенсорса и качество продукции MS. Честно говоря, не ожидал, что в Юго-Восточной Азии будут вдруг так мощно с пиратством бороться.

Tags:

Погода

  • Nov. 2nd, 2009 at 7:17 PM
office
Лучшее время для любования Гонконгом - 2-е ноября, утро.

Сегодня на редкость ясная погода, обычно из-за смога и туч нифига не видно.
Незаслоненный вид на город (830 кб, 2640х1760)

Tags:

Монеты и взвешивания

  • Oct. 23rd, 2009 at 12:28 PM
office
Пару недель назад увидел у [info]mr_aleph задачку: есть 12 одинаковых с виду монет, одна из них фальшивая - отличается по весу, но неизвестно в какую сторону, нужно за максимум 3 взвешивания на чашечных весах ее найти. Если знать легче она или тяжелее, то решается очень просто, но вот без этой информации у меня быстро найти решение не получилось. Потом еще несколько раз иногда возвращался к ней мыслями, но так и не решил, даже при поддержке других членов семьи.



[info]mr_aleph тогда написал: Но потом меня посетила интересная мысль, что (мета)задача написать программу, которая строит стратегию поиска фальшивой монеты из N монет за M взвешиваний, это хороший программисткий этюд.

С этим я полностью согласен, поэтому решил написать программу, и пусть японский компьютер мне придумывает аргоритм. Задачка получилась довольно интересная, ведь не сразу ясно как именно описать предметную область и как должен выглядеть ответ: программа должна не найти монету, а по заданному числу монет и взвешиваний найти алгоритм решения задачи. В итоге у меня получилось такое решение из сотни строк Окамла с активным применением функций сильно высокого порядка и ленивых вычислений. Для 4 монет и 2 взвешиваний результат работы выглядит так:

Weigh [1 and 2]:
 if left heavier then 
  last weighting [2 and 4]:
   if left lighter then fake is 2
   if equal then fake is 1
 if left lighter then 
  last weighting [2 and 4]:
   if left heavier then fake is 2
   if equal then fake is 1
 if equal then 
  last weighting [2 and 4]:
   if left heavier then fake is 4
   if left lighter then fake is 4
   if equal then fake is 3
А для 9 монет и 3 взвешиваний вот так. Решение исходной задачки с 12 монетами программа выдала вот такое, неоптимальное но вроде рабочее. При поиске решения у меня плохо учитывается симметрия ситуаций, поэтому с ростом числа монет время работы растет очень быстро: решение для 8 монет находится за 0,2 секунды, для 9 - за 1,6с, для 10 - за 38с, а про 12 монет железяка думала 5 часов. :)

Праздник

  • Oct. 20th, 2009 at 5:22 PM
office
На крыше одного дома сидели два чертежника и ели гречневую кашу.
Вдруг один из чертежников радостно вскрикнул и достал из кармана
длинный носовой платок. Ему пришла в голову блестящая идея  — завязать в
кончик платка двадцатикопеечную монетку и швырнуть все это с крыши вниз на
улицу, и посмотреть, что из этого получится.
Второй чертежник, быстро уловив идею первого, доел гречневую кашу,
высморкался и, облизав себе пальцы, принялся наблюдать за первым
чертежником.
Однако внимание обоих чертежников было отвлечено от опыта с платком и
двадцатикопеечной монеткой. На крыше, где сидели оба чертежника, произошло
событие, не могущее быть незамеченным.
Дворник Ибрагим приколачивал к трубе длинную палку с выцветшим флагом.
Чертежники спросили Ибрагима, что это значит, на что Ибрагим отвечал:
«Это значит, что в городе праздник».— «А какой же праздник, Ибрагим?» —
спросили чертежники.
 «А праздник такой, что наш любимый поэт сочинил новую поэму»,— сказал
Ибрагим.
И чертежники, устыженные своим незнанием, растворились в воздухе.


Д. Хармс, 1935.

Это я к тому, что вышла новая книжка Пелевина.

Tags:

Haskell Indian Nations University

  • Oct. 13th, 2009 at 9:57 PM
vajrasattva
Это не для индусов, а для настоящих индейцев!
http://www.haskell.edu/

Tags:

Сравнение популярности

  • Oct. 13th, 2009 at 9:26 PM
office
Некоторые люди любят сравнивать популярность разных языков, технологий и пр. по числу запросов в поисковиках и постов в блогах. В прошлом году попался мне в руки лог поисковика AOL за весну 2006 года, содержащий 36 миллионов записей с примерно 21 миллионом различных запросов от 657 тысяч пользователей. Сделал я тогда себе (на Окамле, разумеется) анализатор этих данных, который по любому слову или набору слов выдает отсортированные по популярности содержащие их запросы. И обнаружил много интересного. В частности, там было 84 разных запроса со словом Haskell, но знаете, сколько из них относилось к языку программирования? Примерно ноль. Самые популярные - haskell texas, colleen haskell, haskell college. Остальные - Read more... )
Выводы:
1. Будете делать язык программирования, не называйте его человеческим именем!
2. Сравнивать популярность по числу поисков и блогов чревато ошибками.

P.S. А знаете, что в России самое интересное для американцев?
Read more... )

Tags:

Фальсифицируемость

  • Oct. 12th, 2009 at 10:43 AM
office
Недавно сразу много людей дали ссылку на чудесную презентацию капитана Ковингтона о том, как ясно писать и думать. Там он советует использовать только те слова, смысл которых тебе точно известен. А еще приводит принцип фальсифицируемости Поппера в такой формулировке: A belief isn’t warranted unless you could have known if it’s not true. That is, there should be some way that you could tell if it were false. После чего декларирует факт: the world is objectively real. И вот тут у меня возникло затруднение. Почему это факт? Попробуем применить указанный принцип: утверждение "мир объективно реален" обоснованно, потому что если бы оно было ложно мы могли бы это узнать. Т.е. должен быть способ определить, что имеет место отрицание объективной реальности мира. Но что есть ее отрицание? Субъективная реальность? Объективная иллюзорность? Субъективная иллюзорность? Что-то еще? Интуитивно кажется, что это должен быть субъективный идеализм / солипсизм, где мир является проекцией ума, и я плохо представляю как можно было бы определить, что он имеет место, ибо он запросто может полностью симулировать для наблюдателя объективно реальный мир. Отсюда я делаю вывод, что пока не даны ответы на эти вопросы утверждение "мир объективно реален" не фальсифицируемо. А про такие русская педивикия говорит: Таким образом для нефальсифицируемой — и оттого ненаучной — теории невозможно доказательство её ложности, но по этой же причине невозможно и доказательство истинности (за отсутствием «обратного варианта»). А вы говорите факт...

Update. [info]thesz пишет:
Приведшее вас обоих в состояние интеллектуального возбуждения высказывание "world is objectively real" на странице 93 проверяемо (testable). Как проверить, написано на странице 94.
На той странице читаем:
If you step out in front of a bus, it will run over you, even if you can find people whose opinion is different.

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

Кроме того, я говорю не о проверяемости утверждения, а о фальсифицируемости, где нужно смотреть "от противного" - искать способ опровергнуть утверждение.

И да, нефальсифицируемые утверждения не обязательно ложны. В той же вики отличный пример - утверждение "все люди смертны" нефальсифицируемо. Так-то.

Делаем из мухи слона

  • Oct. 11th, 2009 at 3:26 PM
office
Вчера давний друг, однокурсник, а ныне разработчик одной социальной сети, написал мне и другим нашим друзьям:

Я тут PHP-шников набираю, задаю всем одинаковое тестовое задание, чтобы присылали его вместе с резюме. Вот оно:

===============================================
Требуется написать программу, которая делает из "мухи" - "слона". Например:

муха -> мука -> рука -> руна -> ... -> слон

Т.е., меняя за 1 шаг по 1 букве, нужно из слова "муха" вывести слово "слон" и распечатать все шаги. Решите,
пожалуйста, задачу в этой постановке так, как сочтете нужным.
===============================================

Ощущение такое, что практически никто не может это нормально решить. Чего только не присылают...

Если у вас будет время, попробуйте, пожалуйста, решить данную задачку (на любом языке). А то я уже начинаю думать, может, я что-то не то спрашиваю...


А на днях я увидел упоминание этой задачки и там же вариант решения на PHP. Сначала не стал смотреть на решение и сделал свое, потом все же заглянул. И тогда я понял, что имел в виду автор письма.
Когда на работу устраиваются новички, это можно понять - с учетом низкого порога вхождения в РНР уровень среднего новичка там может быть сколь угодно низким. Но когда такие решения приходят от опытных вроде бы разработчиков, возникает ощущение, что все же РНР ест мозг.

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

Tags:

ICFPC judges prize

  • Oct. 8th, 2009 at 1:01 PM
office
Порадовала история про судейский приз на ICFPC этого года. В топ-10 по очкам вошла команда с лаконичным названием "when i was 4 years old i was maimed by a giant pig". Приложенное к их исходникам readme выглядело примерно так:



Т.е. в графе "используемый язык" у этой команды стоят сразу 6 языков, все они так или иначе ипользовались:



Например, PHP использовался для генерации кода на С++. Java для визуализатора орбит. Решение очень впечатлило судей, однако по правилам соревнования для судейского приза нужно было выбрать один язык, который будет вписан в объявление "XX is the tool of choice for extremely cool hackers". Они долго чесали репу, и в конце концов выдали такую формулировку:



Так-то. :)

Tags:

Project Euler

  • Oct. 4th, 2009 at 12:45 PM
office
Решать задачки из Эйлера подряд скучно (особенно из первой сотни), поэтому придумал забаву: написать или нарисовать что-нибудь осмысленное в таблице решенных задач.



Определенно, в прошлом году у меня было слишком много свободного времени. :)
Решал все на окамле. Почему-то больше всего запомнилась задачка 177.

Tags:

Анализ логов

  • Oct. 1st, 2009 at 2:57 PM
office
Сделал тут себе на Окамле анализатор логов с гейшами и го, способный отвечать на всякие каверзные вопросы о том, что за публика ходит ко мне на сайт, откуда, зачем и что там делает. Например, я могу его спросить по каким ключевым словам приходили люди из Германии, Японии и Штатов с поисковика bing на страницы, содержащие строку 'Press'. И получить наглядный ответ за 0.07 секунды на наборе из 2 гигабайт логов.



Много букв и картинок... )

На данном проекте в очередной раз понял главную проблему функциональных языков - с ними чего только не сделаешь, лишь бы не возвращаться к проектам на С++. :)
office
Я летом писал про классические парсер-комбинаторы на Окамле и жаловался, что у меня не получилось сделать рекурсивные, вроде такого:

let rec p_exp =  p_char 'a' ||| (p_char '(' >>> p_exp >>> p_char ')')

Такой парсер должен разбирать строки 'a', '(a)', '((a))' и т.д., но ругаться на '((a)'.

При попытке компиляции приведенной строчки выдавалось малоинформативное сообщение This kind of expression is not allowed as right-hand side of `let rec'. Оказывается, все очень просто. В правой части let rec может быть очень ограниченный набор конструкций, если они содержат одно из рекурсивно определяемых имен. Одна из поддерживаемых - fun. Все начинает компилироваться и правильно работать, если обернуть правую часть в нее:

let rec p_exp = fun s -> (p_char 'a' ||| (p_char '(' >>> p_exp >>> p_char ')')) s

Tags:

office
Один добрый человек поделился архивами, в которых имена файлов были на русском в кодировке UTF-8, что в его ОС в порядке вещей. Когда открываю их своим старым винраром, имена превращаются в мусор типа "01 ¦Э¦-TБTВTА¦-¦¬¦Ж¦¦¦- ¦¬¦-TГ¦¦¦-". Если же распаковываю 7-zip'ом, то гораздо лучше: "01 ╨Э╨░╤Б╤В╤А╨╛╨╕╠Ж╨║╨░ ╨╖╨▓╤Г╨║╨░". В 7-zip есть замечательная опция для задания кодировки, вот только она не работает - что с ней, что без нее получается совершенно одинаково. Решил поискать решение в инете, но мое гугл-фу оказалось недостаточно хорошим. Скачал пару утилит. Первая - какая-то суперпрограмма с описанием на чешском, в которой можно загрузить список файлов и нажать Ок, после чего ровным счетом ничего не происходит. Вторая - сурьезный ренеймер за 50 баксов, умеющий делать с именами файлов абсолютно все кроме того, что мне нужно.
Тогда я решил сделать все сам, в результате получилась такая штука на F#:
#light 
open System.IO 
open System.Text 
 
let conv s = 
  let u16 = Encoding.Unicode 
  let bytes = Encoding.Convert(u16, Encoding.GetEncoding(866), u16.GetBytes(s:string)) 
  Encoding.Convert(Encoding.UTF8, u16, bytes) |> u16.GetString  
   
Directory.GetFiles(".") |> Seq.iter (fun fname -> File.Move(fname, conv fname)) 

Смысл процесса в том, что когда архиватор распаковывает файлы, имя в UTF-8 он считает набором 8-битных символов в текущей кодировке (cp866). Винда же имена файлов хранит в 16-битном юникоде. Программа из юникода получает обратно исходную последовательность байт, трактует ее как UTF-8 и из него уже конвертит в привычный двухбайтный юникод.

Бинарник (4096 байт) можно взять тут.
Это мой самый первый опыт с F#, языка я еще не знаю, наверняка можно сделать лучше.

Отдельный прикол с буквой "й". Похоже, в какой-то из юникодных кодировок она представлена не одной буквой "й", а буквой "и" со значком наверху, навроде немецкого умляута или восточных огласовок. Для неюникодных программ это выглядит как два символа, причем второй какой-то странный. Юникодные программы такие файлы показывают и открывают нормально, а неюникодные затрудняются. Нафига нужно было так изгаляться? В русском алфавите "и" и "й" - разные буквы.