April 10th, 2013

moose, transparent

об обезьянах

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

"The earliest mention I could find of this experiment was in the popular business/self-help book, Competing for the future by Gary Hamel and C. K. Prahalad (1996)... The authors did not provide a source for this claim... the most reasonable conclusion is that C. K. Prahalad or Gary Hamel made up the experiment for their book.

Here is a quote from an "anthropology professor who's worked with hundreds of monkeys over the last 30 years." When asked what he thought of the experiment, he responded succinctly with:

If you have bananas on a pole, you'll lose your bananas."

Также есть хорошая статья 15-летней давности, в которой развенчивается этот миф и еще два похожих (про кузнечиков, которые перестают прыгать и слонов, которые не пытаются вырваться).

(via stas)
moose, transparent

о точном и приблизительном

Объявление на столбе (номера телефонов отрезал):



Увидел его издалека и некоторое время думал, что же за слово зачеркнули и написали "круглый"? Неужели "квадратный"? В конце концов не выдержал, подошел поближе, стал присматриваться.

Разобрал в конце концов - "восьмиугольный".
moose, transparent

мимоходом

Я купил сегодня камертон-вилку - в основном "просто так", потому что никогда своего не было и любопытно. В магазине, когда я спросил, есть ли у них тюнер (я не знал, как сказать "камертон" на иврите, поэтому начал с "тюнер", а потом нарисовал его в воздухе руками), продавец спросил меня: "Для чего, для гитары?" И я, совершенно не подумав, брякнул: "нет, для цифрового пианино".

Он на меня очень странно посмотрел, а я только когда вышел из магазина понял, что что-то не так сказал.
moose, transparent

давайте разберемся

Если скомпилировать и запустить вот эту программу из Obfuscated C Contest, 2006:


main(_){_^448&&main(-~_);putchar(--_%64?32|-~7[__TIME__-_/8%8][">'txiZ^(~z?"-48]>>";;;====~$::199"[_*2&8|_/64]/(_&2?1:8)%8&1:10);}


то она покажет время в таком формате:

    !!  !!!!                !!  !!!!            !!!!!!  !!!!!! 
    !!  !!                  !!  !!              !!  !!  !!  !! 
    !!  !!                  !!  !!              !!  !!  !!  !! 
    !!  !!!!      !!        !!  !!!!      !!    !!  !!  !!!!!! 
    !!  !!  !!              !!  !!  !!          !!  !!  !!  !! 
    !!  !!  !!              !!  !!  !!          !!  !!  !!  !! 
    !!  !!!!!!              !!  !!!!!!          !!!!!!  !!!!!! 



Как она это делает? Я сознательно не читаю объяснения на stackoverflow и разбираюсь сам; если вы хотите, можете попробовать тоже сами разобраться или проследить мой анализ.

Будем потихоньку приводить программу к читабельному виду. Вместо _ переименуем аргумент main в привычный argc, отделим первую строку и вставим в нее пробелы:


main(argc) {
  argc ^ 448 && main( - ~ argc);
  putchar(--argc%64?32|-~7[__TIME__-argc/8%8][">'txiZ^(~z?"-48]>>";;;====~$::199"[argc*2&8|argc/64]/(argc&2?1:8)%8&1:10);
}


Мы помним, что argc при запуске программы без аргументов равен 1 (потому что argv, который тут игнорируется, включает в себя первым элементом имя программы).
Если argc XOR 448 равно нулю, тогда часть после && не будет выполняться, и после длинного вызова putchar() функция завершится. Если же не равно нулю, то выполнится рекурсивный вызов со значением "- ~ argc"; что это такое? ~ это побитовая инверсия, т.е. все единицы в нули и наоборот; и к этому мы применяем арифметический минус.
Вспомним, что в стандартном представлении "дополнение до 2" применить минус это "инверсия всех битов, а потом плюс 1". Значит, "- ~ argc" означает "инверсия, потом еще инверсия, потом плюс 1", или просто +1.

Поскольку argc начинается с 1, условие argc^448 не станет равно нулю, пока argc не вырастет до 448, а дальше он расти уже не будет, потому что не будет рекурсивных вызовов. Значит, это условие можно заменить просто на сравнение.

Неконец, в огромном вызове putchar пока что обратим внимание, что тернарный оператор argc%64? простирается до самого конца.

Следующая версия кода:
Collapse )
moose, transparent

r.i.p.

Пишут, что умер математик Андрей Зелевинский avzel. Я не знал его лично, очень ценил и уважал по встречам в ЖЖ, и слышал о нем только самое хорошее.

Мои соболезнования родным и всем знакомым...
moose, transparent

мимоходом об играх и автоматике

Computer program that learns to play classic NES games



Очень интересное видео о программе, которая учится играть в классические Нинтендо-игры следующим забавным образом: во время тренировки, когда играет человек, она все время записывает полные снимки рабочей памяти консоли (всего 2KB), и потом ищет в них растущие лексикографически последовательности байтов, потому что они скорее всего соответствуют кол-ву очков, номеру уровня итд. Потом она играет сама, стремясь увеличить эти самые байты в памяти.

Если 15-минутное видео слишком длинно и неудобно, то во-первых демки начинаются на 06:20, а во-вторых, вот статья автора. Она написана в веселом стиле ("The NES is based around an 8-bit processor running at 1.79 MHz, the Ricoh 2A03. 8 bits is really small. You can see them all right here: 00001111."), и была послана на первоапрельскую конференцию, где обычно пишут о выдуманных исследованиях, но тут вроде бы все честно.

Кстати, я помню, что похожим образом в свое время (а может и сейчас) ломали игры: анализом памяти находили места, где записан номер уровня или кол-во денег или ресурсов, и писали программку, которая позволяла менять это все. Возможно, оттуда автор почерпнул идею. Но играть автоматически, не "зная" ничего ни о смысле сигналов ввода, ни о том, что на экране, а только ради увеличения байтов в памяти - это следующий уровень, остроумно.
moose, transparent

про фейсбук

Вот это, кстати, написано в точности обо мне:
За свою долгую и плодотворную жизнь техногика я видел много пользовательских интефейсов.
[...] При мне менялись технологии и концепции. [...] Я был в сетях Fido и Compuserve, писал электронные письма до Эпохи интернета, общался в чатах и конференциях годы до появления ICQ, хранил файлы в «облаке» чуть ли не до рождения некоторых нынешних стартаперов в модной области Cloud. У меня даже несколько лет был собственный блог задолго до сегодняшнего блог-сумасшествия и десятков доступных платформ для блоггинга.

И так далее, и тому подобное.

Все это хвастливое вступление необходимо мне для следующего заявления: я не могу разобраться в Фейсбуке. Нет, я прекрасно понимаю что это такое, зачем существует, куда идет и как монетизируется. Я не разбираюсь в его интерфейсе! Я никогда не знаю что мне покажет Фейсбук в любой конкретный момент времени, не соображаю принцип формирования ленты, не понимаю какие фотографии выберутся для поста с альбомом и какие из них будут показаны на мобильном устройстве. Я не имею понятия «лайкаю» ли я пост, фотографию или альбом. Я чувствую себя тупицей в его настройках, особенно настройках приватности и уведомлений. Я не знаю кто прочтет мои посты, а главное, почему он их прочтет. Я не ведаю что происходит с постами, остающимися глубоко внизу. Я не чувствую логики продукта, несмотря на несколько безуспешных попыток и, в общем-то, достаточно живой аккаунт для фоток детей и кота. Меня не покидает ощущение, что фейсбук писали марсиане.
И дальше там тоже интересные соображения.
moose, transparent

чуть-чуть о фортепиано, и вопрос

(не вполне ясно, кому будет интересна эта запись)

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

Я давно собираюсь написать об этом подробную запись, и по-видимому ее ждет судьба всех подробных записей, которые я долго планирую написать. Поэтому я лучше напишу в двух словах, а длинно и подробно - уж как выйдет. Да, продолжаю заниматься. Я сделал значительный перерыв летом (такое лето-плюс, месяца четыре), и продолжил заниматься с другим учителем, но занимаюсь и бросать не собираюсь. Несмотря на то, что я технически хорошо продвинулся в первый год занятий, и к концу девятого месяца разучивал первую инвенцию Баха в до-мажор, я пришел к выводу, что много важного из базисных вещей пропустил. Так что в этом году я в определенной мере вернулся к менее сложным вещам, но стараюсь изучать и играть их лучше, особое внимание уделяя:

- игре с листа (я это невыразимо плохо могу делать, но постепенно, очень медленно, улучшаюсь; в прошлом я просто не пытался)
- уметь играть, следя за нотами (ввиду отличной памяти я в прошлом в 100% случаев быстро выучивал наизусть, и не мог следить за нотами одновременно с игрой)
- твердо выучить основные начала теории (тональности, аккорды итд.) и использовать их для лучшего понимания музыки

Последние две недели я занимаюсь вот этим сочинением композитора 19 века Сезара Франка, которое мне очень нравится. Это из его собрания "L'Organiste", раздел "Семь пьес в до-мажоре и до-миноре":

Collapse )

Сейчас я не очень ужасно играю его без педали и разучиваю игру с педалью, которую мне нужно самому придумать здесь (сочинение было написано для разновидности органа без педали, как я понимаю). Мне кажется, что педаль надо держать все время и менять более или менее на первой и третьей доле каждого такта, хоть не уверен, что это везде так, и совсем неясно, что делать ближе к концу, начиная с 19 такта. Если есть умные люди, которые посоветуют, буду рад. Если кому-то интересно, я могу попробовать записать, как я ее играю, хотя никаких особых достижений там ожидать не следует.

Но на самом деле у меня есть более серьезная просьба. Я хочу намного лучше, чем это сейчас умею, понимать музыку, которую пытаюсь играть, с гармонической точки зрения. Мне бы очень помогло, если бы знающий человек сделал для меня подробный гармонический анализ этой простой вещи, то есть объяснил бы подробно, что вот тут такой-то аккорд, а тут такой-то септаккорд, хоть я этого мог не заметить, потому что отсутствует одна из нот, а тут модуляция в такую-то тональность, а в целом тут, смотрите, такая-то тема и вот так-то происходит ее разрешение. Последовательность аккордов по ступеням тональности тут вот такая итп. Возможно, я сейчас написал глупости, потому что сам лишь смутно представляю, как должен выглядеть подробный гармонический анализ, я же не учился этому, но насколько я понимаю, есть такая штука - подробный гармонический анализ; и вот как он должен выглядеть, такое мне бы хотелось увидеть, чем подробнее, тем лучше. Если есть кто-то (не ученик, как я, а реально знающий настоящий музыкант/учитель), кто может это мне дать, хоть в комментариях тут, хоть в личной почте (avorobey@gmail.com), буду вам весьма благодарен. Если это очень трудоемкая работа (я понятия не имею, так это или нет), я готов вам за нее заплатить, но тогда сначала спишитесь со мной и обсудим это.