Избранное

Позднее Ctrl + ↑

Прощёное воскресенье

Я всегда считал, что традиции сосут. Делать что-то только потому, что так принято — идиотизм. Говорить сегодня всем «я тебя за всё прощаю и ты меня прости» означает просто тупо, как робот, по алгоритму, не вдумываясь делать что-то, чему тебя ещё мама/бабушка/прабабушка научила N лет назад. А если вдуматься:

Когда люди говорят «я тебя за всё прощаю» они: а) не вспоминают ни одной провинности собеседника; б) если они ещё не простили его за что-либо, то они не прощают его за это на самом деле, а только так говорят.

Например, Вася позавчера сломал велосипед Пети. «Простивший Васю сегодня за всё» Петя обязательно будет думать про Васю плохое слово каждый раз, когда будет хотеть прокатиться на велосипеде. При этом сегодня, когда он «прощал Васю за всё», он просто не помнил эту историю с велосипедом, как и все другие истории...

Когда люди говорят «прости меня за всё» они: а) не вспоминают ни одной своей провинности перед собеседником; б) если они действительно в чём-то виноваты, то им не станет легче от того, что собеседник их «за всё простил», в том числе, и потому, что см. пункт б) двумя абзацами выше.

Вася вряд ли помнил о том, что позавчера сломал Петин велосипед, когда просил последнего «за всё его простить». Точнее говоря, даже если он об этом и помнил, вряд ли он хоть как-то связывал свою просьбу и этот инцидент.

Вы робот? Ха-ха-ха.

(Для тех, кто так и не понял: пожалуйста, не просите меня за всё вас простить сегодня и не говорите, что за всё прощаете меня.)

Комментатор Саша

Снукер, который показывают по Eurosport, комментируют Николай Сараев и некто Саша. Сараев хоть и ничего не понимает в снукере, но хотя бы в принципе бильярдный человек. Он че-то там типа тренер крутого разряда и судья крутой категории (или наоборот; в общем, он, например, судил игры в Пирамиду, которые пару недель назад показывали на канале «Спорт»). Кто такой Саша (так его называет Сараев, фамилия неизвестна) — сказать трудно. Но идиот он восхитительный. Такую чушь говорить, как говорит он, не каждый сможет.

Например, вчера, когда Пол Хантер забил не самый трудный шар, Саша сказал что-то типа «Потрясающий удар, дорогие друзья, исполнил Пол Хантер! Однако это не единственное его достоинство, наряду с тем, что он давний закадычный друг Мэтью Стивенса».

Саша знает слово «карамболь». А как известно, если знаешь умное слово, то нужно применять его как можно чаще, иначе никто не догадается, что ты сообразительный парень. «Вот, небольшой карамбольчик случился на наших с вами, дорогие друзья, глазах». Какого хрена? Что, нельзя сказать «биток ударился о желтый шар, а то бы мог получиться хороший выход»? Карамбольчик блин.

А еще у Саши всегда перед носом есть список результатов всех партий всех игроков за всю историю снукера. Поэтому, когда начинает свою серию, скажем, Марк Вильямс, Саша начинает рассказывать по датам, когда с кем Вильямс играл, с каким счетом выиграл/проиграл, какой у него номер в мировом рейтинге, сколько денег призовых, бла-бла. А потом Вильямс отыгрывается/промахивается, к столу подходит Хантер. А у Хантера было столько-то побед в таких-то турнирах, столько-то раз он выходил в четвертьфинал, а счёт личных встреч с Марком Вильямсом у них такой-то и еще он в профессионалах с такого-то года...

Жопа. Неужели в стране нет ни одного человека, который умеет говорить по-русски и шарит в снукере?

Рекурсивные высказывания в логике

Здесь пишут:

Не все утверждения, говорящие о самих себе, относятся к бессмысленным. Например, утверждение «Это предложение написано по-русски» является истинным, а утверждение «В этом предложении десять слов» ложно. И оба они совершенно осмысленны. Если допускается, что утверждение может говорить и о самом себе, то почему оно не способно со смыслом говорить и о таком своем свойстве, как истинность?

Я считаю утверждения «это утверждение ложно» бессмысленным не потому, что оно неразрешимо, а потому, что оно ссылается само на себя. В этом смысле утверждение «это утверждения истинно» настолько же бессмысленно, хотя того, что некоторые называют «парадоксом», здесь уже нет.

Утверждение «в этом предложении десять слов» не ложно и не истинно. Оно снова бессмысленно. Утверждения логикой рассматриваются в рамках их смысла, а не того, каким цветом они написаны. Рассмотрим простой пример:

В зале сидят представители России и Англии. Выступающий заявляет: «Предложение, которое я сейчас произношу, состоит из девяти слов.» Переводчик: «The sentence which I am currently declaring consists of nine words». Итак, с точки зрения русскоязычной аудитории, выступающий сказал правду, а англоязычная считает, что он соврал. При том, что переводчик не изменял смысла сказанного ни на грамм.

Еще немного замечательных «высказываний». Все они — супермегапарадоксы:

  • Я читаю это предложение первый раз
  • Это предложение отображается на экране 17-дюймового монитора
  • Предложения на этой странице не равны по количеству слов данному

Ну и какое все эти шутки имеют отношение к логике, науке?

Парадокс!

Допустим, что на лицевой стороне карточки написаны только слова: «На другой стороне этой карточки написано истинное высказывание». Ясно, что эти слова представляют собой осмысленное утверждение. Перевернув карточку, мы должны либо обнаружить обещанное высказывание, либо его нет. Если оно написано на обороте, то оно является либо истинным, либо нет. Однако на обороте стоят слова: «На другой стороне этой карточки написано ложное высказывание» — и ничего более. Допустим, что утверждение на лицевой стороне истинно. Тогда утверждение на обороте должно быть истинным и, значит, утверждение на лицевой стороне должно быть ложным. Но если утверждение на лицевой стороне ложно, тогда утверждение на обороте также должно быть ложным, и, следовательно, утверждение на лицевой стороне должно быть истинным. В итоге — парадокс.

Блин, ну что за ерундой страдают люди! Ну как можно называть такие вещи парадоксом. Это называется бред, а не парадокс. Если рекурсия не заканчивается, то она сосёт. Вот вам парадокс (импровизация): Я бегаю на 1 км/ч быстрее, чем Вася, а Вася — на 1 км/ч быстрее, чем я. Умные рассуждения: «если я бегаю со скоростью 5 км/ч, то значит Вася — со скоростью 6, но тогда получается, что я бегаю со скоростью 7, но это противоречит сказанному ранее!»

Противоречие, какой кошмар! Это парадокс, базара нет.

Люди, противоречие и парадокс — разные вещи. Если исходить из определения Stigler, что парадокс — это когда мы можем одинаково убедительно доказать два противоположных высказывания, то тогда про двухстроннюю карточку — это не парадокс по определению. Или быть может кто-то возьмется доказать мне (убедительно) и то, что на первой стороне карточки написано истинное утверждение, и то что утверждение на ней ложно?

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

Оптимайз — 2

Все помнят, как я здорово придумал вместо 20 include’ов писать 1?

Тогда прозвучала мысль, что если еще и выкинуть из склеиваемых исходников комментарии, то всё будет еще быстрее и красивее. Вопрос был в том, как их выкинуть.

Первое, что приходило в голову, это почикать регэкспом всё, что между /* и */, а также между // или # — и ньюлайном. Но это, как вы понимаете, полная лажа, ведь так мы с успехом почикаем то, что лежит в строках или HTML-коде. Чего делать не следует. Разбирать же весь синтаксис PHP ой как не хочется, тем более, что за тебя это уже один раз сделали авторы языка.

Потом Смирнов дал ссылку на POBS (так, кажется, это называется?), который, вроде как, делает, в том числе и тотальный вырез комментариев... Короче, все решения были либо неправильными, либо слишком навороченными. Но тут я придумал нечто очень красивое.

В PHP есть функция-парсер! Только она замаскирована под синтакс-хайлайтер. И называется она highlight_string. Самые умные уже всё поняли, и им дальше не интересно. А просто умные читают дальше.

Итак, функция берет переданный ей код на PHP и подсвечивает в нём синтаксис. Как? Да она просто расставляет вокруг всех комментариев <font color="#FF8000"> и </font>! Это не может не радовать. Ну, дальше всё понятно.

function strip_comments ($code) {
  // находим комментарии
  $code = highlight_string ($code, true);
  // вырезаем их
  $code = preg_replace (
    '/&lt;font color="#ff8000"&gt;(.*?)&lt;/font&gt;/i',
    '', $code);
  // вырезаем все теги, которые расставил хайлайтер -
  // больше они нам не нужны
  $code = preg_replace ('/<(?!?)(.*?)(?&lt;!?)&gt;/', '', $code);
  // заменяем расставленные хайлайтером всюду
  // неразрывные пробелы на обычные
  $code = str_replace ('&amp;nbsp;', ' ', $t);
  // восстанавливаем то, что там было раньше
  $code = unhtmlentities ($t);
}

5 строк.

Update: Благодаря этому собранный Plif из 92-килобайтного файла превратился в 77-килобайтный. Мелочь, а приятно.

Всё никак не успокоются

Люди, если я сказал, что Flash сосёт, значит так и есть, и спорить со мной не нужно.

Забавно, что многие, прочтя параграф, пытаются меня уличить в том, что не не хочу использовать Flash, а просто не умею его использовать. Следующий абзац вы можете считать официальным заявлением:

Да, я не умею использовать Flash.

Я не только не умею его использовать, но и не хочу учиться, потому, что нафиг это не надо. И не нужно меня уверять, что на Flash’е возможно сделать нормальный интерфейс («ты просто не знаешь возможностей Flash, на нём можно сделать всё»). Я убежден, что это не так. И исхожу я из одной очень простой посылки:

Я никогда не видел нормальных интерфейсов на Flash.

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

Таким образом, я прав.

Если вы придерживаетесь иного мнения, найдите пожалуйста флешевый сайт, на котором по правой кнопке мыши вылетает стандартная менюшка браузера, в которой есть пункт «Открыть в новом окне». Любой комментарий без такой ссылки будет рассматриваться как подтверждение моей правоты.

Модная специальность

Я учусь в ЮУрГУ (Южно-Уральский Государственный университет). ЮУрГУ — самый крупный ВУЗ в стране (40000 человек; для сравнения в МГУ — 27000). Разумеется, ничего хорошего в этом нет, но сейчас не об этом.

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

Разумеется, каждый факультет считает своим долгом постоянно открывать новые специальности. И разобраться сейчас в имеющейся их куче практически невозможно. Хорошо еще, если поступающий знает, что он хочет изучать... Большинство же людей в 11-м классе понятия не имеет, куда им поступать, потому, что у них нет никаких интересов, кроме, быть может, чиста побухать с дружбанами. Таким образом получается, что специальность многие люди себе выбирают по названию. Других критериев у них просто нет.

Факультеты же эти названия неустанно придумывают. Им же надо, чтобы народ шел. Названия придумывают обязательно громкие, со словами «международный», «информационный», «экономический» и обязательно «менеджмент». Например, «международный информационно-экономический менеджмент». Ах, да. «Со знанием английского языка». Такие специальности называются «модными». Там учатся самые модные люди.

И ну бы их нафиг, но мне иногда звонят знакомые мамы одиннадцатиклассников и спрашивают, куда им отдавать их детей и говорят: «А ты не знаешь, вот там у вас какая-то новая модная специальность открылась — международные информационные системы — туда может быть?» — это как-то напрягает. А иногда вопросы про новые модные специальности мне задает бабушка. Просто так, из любопытства.

Я это всё почему написал? Потому, что задолбали люди, которые учатся на модных специальностях и при этом свято верят в то, что получают образование.

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

Blackout 2003

Все видели по телеку как в Америке отключили свет? Мы в это время находились в NJ, где свет был. Узнали мы про blackout на следующий день и решили посмотреть, что по этому поводу говорят местные новостные программы.

Новостные программы у них — это как у нас программа «Окна»: супер-шоу для тех, кому совсем нечем заняться, а хочется поглазеть на что-нибудь. По крайней мере на MSNBC и FoxNews.

И вот значит, на MSNBC показывают нам программу Blackout 2003 (типа «Вырубон света 2003»; она выходила в эфир еще неделю). Показывают анонс: «Всего через 5 минут официальное заявление Джорджа Буша по поводу blackout 2003, stay tuned» . Реклама. Студия, наезд на девушку. Девушка: «Прямо сейчас вы увидите официальное заявление Джорджа Буша по поводу blackout 2003». Отбивка с текстом «Blackout 2003». Джордж Буш:

«This blackout... is a wake-up call for the whole nation... to make sure... that all our power plant systems are working properly... and... take care of them if necessary». (10-15 секунд)

Аплодисменты. (10-15 секунд)

Просто открыл глаза американцам на задачи, которые стоят перед нацией!

Опрос

  1. Является ли число 0 чётным?
  2. Является ли функция f(x)=1 чётной?
  3. Является ли число 1 простым?
  4. Является ли число −1 простым?
  5. Чему равен квадратный корень из −1?
  6. Чему равен факториал нуля?
  7. Чему равен остаток от деления нуля на ноль?

Update (17.06.2005): Правильный ответ

Штрих Шеффера

Это абсолютно необъяснимо, но штрих (!) Шеффера — это отрицание конъюнкции, а вовсе не дезъюнкции, в то время как любой первоклассник вам скажет, что штрихом в языках программирования обычно обозначается именно дезъюнкция. Раз такое дело, то:

!A = A|A (впрочем, независимо от)
AB = ! !(AB) = !(A|B) = (A|B)|(A|B)
A+B = ! !(A+B) = !(!A!B) = (A|A)|(B|B)

Простите за знак восклицательный, но так проще, чем палку над буквой рисовать. Так, значит отрицание дезъюнкции — это стрелка Пирса. Что ж, это можно запомнить. Вот так:

Стрелка Пирса

Таблица истинности для A↑B похожа на разделяющую их стрелку. Теперь, наверное, больше не буду путать их. Для стрелки Пирса:

!A = A↑A
AB = ! !(AB) = !(!A↑!B) = (A↑A)↑(B↑B)
A+B = ! !(A+B) = !(A↑B) = (A↑B)↑(A↑B)

Ранее Ctrl + ↓