Пожаловаться на
В Гугле есть сервис, чтобы пожаловаться на публичную персону.
fun, internet, fuckusability — 25 March 2010
Скоро переход на летнее время
28 марта Россия переходит на летнее время.

Муниципальные службы Москвы начали подготовку к переходу.

Альфаблок
Через три дня после блокирования моей карты Альфа-банк прислал-таки смску: Uvazhaemyj klient ALFA-BANKA!V svjazi s komprometaciej Vasha karta 5*45 budet perevypushena i dostavlena v Vashe otdelenie Banka v techenie 2 nedel.

На фоне Сапсана
После тестирования скростного «Сапсана», который едет из Москвы в Питер за три часа 45 минут, весьма нелепо смотрится реклама ноутбука с аккумулятором, способным работать 9 часов, в рекламе которого емкость аккумулятора иллюстрируют расстоянием от Москвы до Питера.

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

Jacob und Wilhelm Grimm
Вчера читал ребенку сказку про Рапунцель.
Сегодня читаем про Румпельштильцхен.
child, literature, fun — 20 August 2009
Вычисление синуса в XSLT
XSLT помимо хороших, но утилитарных качеств дает необъятные возможности для разных фантазий. Вот еще одна фантазия, которая потребовалась мне для демонстрации возможностей XSLT и производительности libxslt.
Если не подключать никаких расширений, то в базовом комплекте XSLT (а точнее, XPath) не имет в наборе тригонометрических функций. Доступна лишь арифметика: сложить, умножить, разделить, получить остаток — которой, впрочем, достаточно и для того, чтобы вычислить синус и косинус. Мой шаблон для вычисления синуса состоит ровно из ста строк (включая пустые). Это, конечно не три символа для вызова функции sin в любом языке программирования: здесь интерес представляет сам процесс.
Значение синуса для данного x вычислить относительно просто, воспользовавшись разложением в степенной ряд:

Иными словами, требуется сложить нечетные степени x, поочередно меняя знак (наглядно и визуально):

Тестировать правильность вычисления я буду на двух величинах: sin(π) и sin(π/2). Соответственно, результатом должны быть ноль и единица.
Исходные данные записаны в XML:
<?xml version="1.0"?>
<math>
<sin x="3.1415926535898"/>
<sin x="1.5707963267949"/>
</math>
Глядя на формулу вычисления синуса, сразу становится понятным, что потребуются рекурсивные вызовы в XSLT. Чуть позже понимаешь, что рекурсия нужна не только для подсчета суммы, но и для вычисления факториала, и для возведения в степень.
XSLT-шаблон будет самостоятельно печатать результат, поэтому я изменяю режим вывода на текстовый и печатаю нужные строки:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="//sin">
<xsl:text>sin(</xsl:text>
<xsl:value-of select="@x"/>
<xsl:text>) = </xsl:text>
<xsl:call-template name="sin-row">
<xsl:with-param name="x" select="@x"/>
<xsl:with-param name="N" select="10"/>
</xsl:call-template>
<xsl:text> </xsl:text>
</xsl:template>
Именованный шаблон sin-row (который и вычисляет синус) получает на входе переменную x и число слагаемых в ряду, которые я хочу учитывать. Чем больше слагаемых, тем больше точность и дольше вычисления.
<xsl:template name="sin-row">
<xsl:param name="x"/>
<xsl:param name="n" select="0"/>
<xsl:param name="N" select="5"/>
<xsl:param name="sin" select="0"/>
Внутри sin-row вычисляются промежуточные значения — множители, участвующие в вычислении очередного слагаемого: p1 — это степень –1, p2 — нечетная степень x, fact — факториал в знаменателе.
<xsl:variable name="p1">
<xsl:call-template name="power">
<xsl:with-param name="x" select="-1"/>
<xsl:with-param name="n" select="$n"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="p2">
<xsl:call-template name="power">
<xsl:with-param name="x" select="$x"/>
<xsl:with-param name="n" select="2 * $n + 1"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="fact">
<xsl:call-template name="factorial">
<xsl:with-param name="n" select="2 * $n + 1"/>
</xsl:call-template>
</xsl:variable>
Результат суммируется с величиной, полученной на предыдущей итерации:
<xsl:variable name="sum" select="$sin + $p1 * $p2 div $fact"/>
Итерации повторяются до тех пор, пока не будет достигнуто предварительно заданное число слагаемых N:
<xsl:choose>
<xsl:when test="$n < $N">
<xsl:call-template name="sin-row">
<xsl:with-param name="x" select="$x"/>
<xsl:with-param name="n" select="$n + 1"/>
<xsl:with-param name="N" select="$N"/>
<xsl:with-param name="sin" select="$sum"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$sum"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Возведение в степень выполняет вторая итеративная функция — шаблон с именем power. Его построение довольно прямолинейно: передавая текущее вычисленное значение, повторно вызывать самого себя, пока не иссякнет запрошенный показатель степени:
<xsl:template name="power">
<xsl:param name="x"/>
<xsl:param name="n"/>
<xsl:choose>
<xsl:when test="$n = 0">1</xsl:when>
<xsl:when test="$n = 1">
<xsl:value-of select="$x"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="pow-1">
<xsl:call-template name="power">
<xsl:with-param name="x" select="$x"/>
<xsl:with-param name="n" select="$n - 1"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$x * $pow-1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Очень похоже устроен шаблон для вычисления факториала. Разница с power лишь в том, что здесь перемножаются номера итераций, а не аргумент.
<xsl:template name="factorial">
<xsl:param name="n"/>
<xsl:variable name="fact-1">
<xsl:choose>
<xsl:when test="$n <= 1">1</xsl:when>
<xsl:otherwise>
<xsl:call-template name="factorial">
<xsl:with-param name="n" select="$n - 1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$n * $fact-1"/>
</xsl:template>
Все готово для тестирования. Запускаем процессор и передаем ему данные из XML:
$ xsltproc sin.xslt sin.xml
На экране появляются результаты:
sin(3.1415926535898) = 1.03457906425793e-11
sin(1.5707963267949) = 1
Единица для sin(π/2) получилось вообще идеальной; результат sin(π) очень близок к нулю.
Скорость работы с учетом того, что требуется прочитать с диска два файла — вдвое меньше, чем вызов функции на перле. Честно говоря, я ожидал, что XSLT будет работать еще медленнее, особенно, если учесть, что в моем примере никак не оптимизированы три момента: во-первых, чередование знака возможно определять, используя деление по модулю, а не вызывом итеративной функции возведения в степень; во-вторых, вычисленные на предыдущих итерациях степени x и промежуточные значения факториала вычисляются вновь и вновь, хотя их следовало бы запоминать и передавать на следующую итерацию.
programming, xslt, fun, maths — 26 July 2009
Зачем телефону камера
В то время как я думаю, как бы попробовать в действии CDMA-связь (скайлинковская симка-то есть, но обычный GSM-телефон с ней не работает), мысль ученых придумала использовать камеру телефона в медицинских целях.

«В ходе опытов гаджет объединили с одной из популярных моделей мобильного телефона Nokia, со встроенной фотокамерой разрешением 3,2 мегапикселя.
К устройству также прилагается держатель, фиксирующий стеклянные пластины с пробами крови».
fun — 23 July 2009
Дата проведения
Материал для тестового задания к вакансии информационного дизайнера.

fun, outer, fuckusability — 17 July 2009
Видео | пытаться | покупать | подробнее
Жесть кнопок на русском сайте Nero:

fun, russian — 27 May 2009
Про избыточность
Тут на днях мой last-name-тезка интересовался, где бы почитать про логику. Артём, все есть на улицах :-) Вот, например, учебник про избыточность.

Эти экспонаты находятся на Новинском бульваре.
fun, outer — 24 April 2009
Willkommen
В Берлине несколько аэропортов. На юго-востоке — Шёнефельд, на северо-западе — Тегель.
Компания Askania развесила около Шенефельда вот такую рекламу.

Такой же плакат висит и внутри здания.
Adamo vs. Pushnoy
Слева — реклама ультратонкого ноутбука Adamo by Dell. Справа — Лазарева с терменвоксом в «Хороших шутках».

Флаги в Пизе
Административное здание в Пизе на площади Vittorio Emanuele II.

Здание административное, поэтому такой флаг выглядит словно шутка выходного дня, но это не так. И в новостях ничего про это не написано, зато нашелся специализированный сайт, на котором отмечены координаты почти двух тысяч флагов, которые висят на зданиях в Пизе.
Двенадцать способов правильно сфотографироваться у Пизанской башни
1. Подпереть башню ладонью







2. Придерживать двумя ладонями






3. Упираться руками на одном уровне


4. Коснуться одним пальцем

5. Коснуться двумя пальцами

6. Втиснуться боком

7. Прижаться спиной

8. Измерить высоту рукой

9. Взять башню между ярусами

10. Фривольно

11. Держать башню группой



12. Автофото

Бонус-кадр

Закрытый объектив и открытый OpenMoko
Эту смешную фотку девушки, фотографирующую через спецфильтр, я привез из Хорватии в апреле этого года. Но размещаю ее здесь не просто так. Справа в черной одежде — Харальд Вельте, чувак, который увлекательно рассказывает про OpenMoko (про телефоны на линуксе).

Технология dontclick — каждому!
Вставьте к себе на страницу эти две строчки перед закрывающим тегом </body>, и будет у вас безкликовая навигация. Йох-ху!
<script type="text/javascript" src="http://deeptext.ru/js/dontclick.js"></script>
<script>dontclick();</script>
Желаемую задержку на переход можно установить самому, вызвав dontclick с параметром (в миллисекундах):
<script>dontclick(1000);</script>
internet, fun — 25 November 2008
Про свет
Сегодня я потерял в квартире мобильный телефон. При вызове он издает короткий звук, после чего включается виброзвонок. То есть, если потерять телефон в помещении, то найти его не так просто, особенно если он лежит где-нибудь на чем-то мягком.
Но зато он же светится при вызове. Не вопрос: выключаю везде свет и звоню себе с городского номера. Вижу, что-то светится. Наклоняюсь разглядеть поближе — из глаз искры. В темноте со всей силы наткнулся лбом на спинку кресла.
А телефон-то оказался спрятанным на диване под одеялом.
fun, light, fuck-usability — 4 October 2008
Соответствия
Правильное.
В Москве на Мерзляковском переулке находится банк Сибконтакт:

Неправильное.
Посольство Беларусии расположено на Армянском переулке.
moscow, navigation, fun — 19 April 2002
CD-SUN
На днях сделал надпись на болванке и не дав ей высохнуть, вставил в дисковод.

fun — 16 April 2002
























