ash’s blog / все про fun

Окрашинно

Прикольное дополнение к моей недавней заметке про надпись «Окрашено» из книги Taalfoutjes («Языковые ошибочки»), изданной в этом году.


Осторожно, окрашинно!
Знают ли маляры о том, что слово nat пишется с t на конце? Они пишут его с d, а иногда даже с dt.

dutch, nl, language, fun, error — 6 ноября 2013

Поговорите с иностранцем

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

 

Когда живешь несколько лет в чужой стране и каждый день в магазине сталкиваешься с повторяющимися вопросами типа «Пакет нужен?» или «Чек возьмете?», начинаешь отвечать «нет» на все подряд. Как-то я зашел в магазин за новыми джинсами. Подхожу к кассе. Кассир мне что-то говорит, я отвечаю «нет». Она дальше:

— Нет?
— Нет-нет.
— Да? Па-ра-та-ра-ба-ра скидка та-та-на-па-па-па? Может быть вам ра-па-па на-на-на со скидкой?
— Нет, спасибо.
— ОК, 59 евро.

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

 

Вечером на кассе. Пока расплачиваюсь, кассир меняется, а чек мне не дали. А мне он прям нужен в этот раз.

— Простите, можно лес?
— Что-что?
— Лес, говорю, можно? Мне нужен лес.
— ??
— Э-м. Ну лес, такая маленькая бумажка. А, чек!

(Чек по-голландски — bon, а лес — bos.)

 

Думаете, это меня остановит? Никогда. Я не занимался голландским почти два года, живя здесь, а теперь три занятия в неделю, так что надо пользоваться случаем. Захожу в следующий магазин, а в голове уже готова парочка предложений для разговора. А предложения такие отточенные и хорошие, почти предмет искусства, я их прорепетировал три-четыре раза. Разговор с продавцом пошел очень легко. Я говорю, он отвечает. Я делаю паузу, чтобы немного проанализировать, что он ответил, и — ура! — понимаю ответ. Еще вопрос — еще ответ.

Но наконец:

— Ох, не. Говори помедленнее.
— Оу, пардон. Скажи, откуда ты?
— Из Москвы.
— Да? А не похоже. По акценту ты как из Южной Африки.

(Магазин — Apple Store, продавец молодой, поэтому разговор на je ты не вызывает вопросов.)

 

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

— Добрый вечер!
— Угу.
— Сегодня у вас остановится мой коллега. Вот у меня есть номер его брони. Вы можете передать ему ключи? Он еще летит в самолете, а прибытие полдевятого, так что он тут будет где-то в десять. Можно оставить ключи вам?

Ну правда здорово? Такой длинный монолог. И знаете, что мне ответили в гостинице?

— Sorry, I don't speak Dutch.

 

Heb je voor een jaar of twee in het buitenland gewoond? Dan kun je enkele woorden en kleine zinnen hard studeren. ‘Tasje?’ ‘Bonnetje erbij?’ Als je ze elke dag hoort, begin je altijd ‘Nee’ te zeggen. Je wordt een automaat dat alleen één woord zegt.

Nou ben ik in de winkel om een nieuwe jeans te kopen. Ik ga naar de kassa. De verkoper zei iets. Ik zei ‘Nee’. Zij vraagt verder:

— Nee?
— Nee, nee.
— Ja? Pa-ra-ta-ra-ba-ra korting ta-ta-na-pa-pa-pa? Misschien wilt u ra-pa-pa na-na-na met korting?
— Nee, dank u.
— OK, negenenvijftig euro.

Nou, het was bijna twee jaar geleden. Vandaag ken ik meer woorden natuurlijk. En ik ben ook niet bang om Nederlands te spreken in winkels. Ik weet dat ik altijd Engels kan gebruiken, dus probeer ik spreek zo lang als mogelijk.

Een avond. Ik ben in de winkel bij de kassa. Terwijl ik betaal, gaat de kassier weg en een andere vrouw komt. En ik heb geen bon genomen!

Nou, ik heb het niet nodig, maar ik wil een praatje maken.
— Mevrouw, kan ik een bos hebben?
— Wat zegt u?
— Een bos. Ik wil een bos. Kan ik?
— ??
— Erm… Een bos. Een kleine papier. Oh. De bon.

Denk je dat het kan me stoppen? Nooit. Nou, ik had geen Nederlandse lessen voor bijna twee jaar, en nu ga ik naar de les drie keer per week dus ik zal meer gelegenheden hebben. Ik ga naar andere winkel en ik heb een paar zinnen in mijn hoofd vóór ik in de winkel ben. Ja, ja, mijn zinnen zijn zo goed, ze zijn bijna kunst: ik heb ze drie of vier keer gerepeteerd. Een praatje met de verkoper was erg makkelijk. Ik zeg, hij antwoordt. Ik maak een pauze om zijn woorden te analyseren. Oh, ik weet wat hij heeft gevraagd! Volgende vraag, volgend antwoord.

Eindelijk:

— Oh, nee, je spreek te snel.
— Oh, sorry. Zeg, waar kom je vandaan?
— Uit Moskou.
— Je ziet er uit niet zoals die uit Moskou. Je accent zegt dat je uit zuid Afrika bent.

Gisteren moest ik om de sleutels van de office aan mijn collega geven.

Hij kwam uit Moskou voor een week, en zijn vlucht was te laat. Ik ga naar zijn hotel en doe een kleine voorstelling.

— Goedenavond. Mijn collega gaat hier verblijven vanavond. Ik heb zijn reserveringsnummer. Kan u hem deze sleutels geven? Hij is nu in het vliegtuig, en de aankomst is om half negen, dus hij moet bijna om tien uur in het hotel zijn. Kan ik de sleutels aan u geven?

Prima, hé? Wat de vrouw in het hotel heeft me geantwoord, denk je?

— Sorry, I don’t speak Dutch.

dutch, nl, language, fun — 2 ноября 2013

Сортировка на Go

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

package main

import(
    "fmt"
    "time"
)

var get_value chan int

func send_value(x int) {
    time.Sleep(int64(x) * 1E8)
    get_value <- x
}

func main() {
    values := []int{3, 1, 9, 7, 2, 6, 4, 8, 5, 10}

    get_value = make(chan int)

    for _, x := range values {
        go send_value(x)
    }
    for range values {
        fmt.Println(<- get_value)
    }
}

Самое большое умиление (изумление?) — отказ компилятора самостоятельно расширять типы, например, попытка умножения int на int64 приводит к ошибке компиляции.

Конструкция с переменной _ и оператором range — типовой подход для обхода массивов без счетчиков.

Очень приятный (хоть и по-паскалевски выглядящий) оператор :=, который позволяет немного экономить на объявлении типа переменной.

Ну а за реализацию конкурентных вычислений — респект и уважуха.

go, programming, fun, algorithm — 3 июля 2011

Facebook vs. ВКонтакте

Вверху — оригинальный пост Толика про ВКонтакте, внизу — перевод, сделанный Google Translate, попавший на Say Perl.

fun, compare, russian, english, translate — 7 января 2011

Загадка про Икею и ножницы

Сколько ножниц нужно купить в Икее, чтобы ими можно было начать пользоваться дома?

Ножницы IKEA

fun, ikea — 24 декабря 2010

fun — 9 сентября 2010

Моя первая AJAX-почта

Слышал, что какую-то почту переводят полностью на AJAX. Сегодня я получил AJAX-письмо, правда, пока это спам.

fun, mail, ajax — 8 сентября 2010

Маленькие хитрости

Как из подручных средств сделать объявление.

fun, label — 18 августа 2010

amsterdam, fun, poster, street — 13 августа 2010

amsterdam, fun, bicycle — 13 августа 2010

moscow, parade, fun, policeman — 30 апреля 2010

Пожаловаться на

В Гугле есть сервис, чтобы пожаловаться на публичную персону.

fun, internet, fuckusability — 25 марта 2010

Скоро переход на летнее время

28 марта Россия переходит на летнее время.

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

fun, moscow, snow, dst — 19 марта 2010

fun, history, details — 12 марта 2010

compare, fun, google, buzz, it — 9 февраля 2010

Альфаблок

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

banks, fun, travel, posterr — 1 февраля 2010

Snowman

Открыл чудесный unicodesnowmanforyou.com во всех браузерах, что были под рукой :-)

fun, internet, unicode, browser — 24 декабря 2009

На фоне Сапсана

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

fun, advert, sapsan — 19 декабря 2009

Своя формула

Яндекс не разглашает своих алгоритмов ранжинования записей в блогах в их рейтинге.

Надо дать возможность каждому подобрать свою секретную формулу:

fun, interface, whoyougle — 6 ноября 2009

Незваным гостем вы себя почуствуете

Чешские авиалинии учудили с переводом названия своей промо-акции.

fun, air, ru — 7 сентября 2009

Остановка

Москва, Новинский бульвар. 2 сентября.

fun, cool, outer, moscow — 3 сентября 2009

Jacob und Wilhelm Grimm

Вчера читал ребенку сказку про Рапунцель.

Сегодня читаем про Румпельштильцхен.

child, literature, fun — 20 августа 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>&#10;</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 &lt; $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 &lt;= 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 июля 2009

Зачем телефону камера

В то время как я думаю, как бы попробовать в действии CDMA-связь (скайлинковская симка-то есть, но обычный GSM-телефон с ней не работает), мысль ученых придумала использовать камеру телефона в медицинских целях.

«В ходе опытов гаджет объединили с одной из популярных моделей мобильного телефона Nokia, со встроенной фотокамерой разрешением 3,2 мегапикселя.

К устройству также прилагается держатель, фиксирующий стеклянные пластины с пробами крови».

fun — 23 июля 2009

Дата проведения

Материал для тестового задания к вакансии информационного дизайнера.

fun, outer, fuckusability — 17 июля 2009

Справочник маршрутных такси

Издана необычная книга :-)

book, fun — 25 июня 2009

fun — 9 июня 2009

sign, fun, compare — 28 мая 2009

fun, russian — 27 мая 2009

Про избыточность

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

Эти экспонаты находятся на Новинском бульваре.

fun, outer — 24 апреля 2009

Willkommen

В Берлине несколько аэропортов. На юго-востоке — Шёнефельд, на северо-западе — Тегель.

Компания Askania развесила около Шенефельда вот такую рекламу.

Такой же плакат висит и внутри здания.

fun, germany, berlin — 13 апреля 2009

fun, crisis — 26 марта 2009

Adamo vs. Pushnoy

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

fun, laptop, compare — 18 марта 2009

fun, label — 1 марта 2009

paris, france, fun — 14 февраля 2009

fun — 13 февраля 2009

fun, language — 2 февраля 2009

outer, fun — 2 января 2009

fun — 30 декабря 2008

Про мощь и мощность

А ведь имели в виду наверное «мощь» :-)

error, fun, russian — 30 декабря 2008

Флаги в Пизе

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

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

travel, italy, pisa, fun — 24 декабря 2008

Двенадцать способов правильно сфотографироваться у Пизанской башни

1. Подпереть башню ладонью















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













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





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



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



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



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



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



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



10. Фривольно



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







12. Автофото



Бонус-кадр

travel, italy, pisa, tower, fun — 22 декабря 2008

Закрытый объектив и открытый OpenMoko

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

travel, croatia, openmoko, fun — 26 ноября 2008

Технология 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 ноября 2008

Про свет

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

Но зато он же светится при вызове. Не вопрос: выключаю везде свет и звоню себе с городского номера. Вижу, что-то светится. Наклоняюсь разглядеть поближе — из глаз искры. В темноте со всей силы наткнулся лбом на спинку кресла.

А телефон-то оказался спрятанным на диване под одеялом.

fun, light, fuck-usability — 4 октября 2008

sign, fun — 8 мая 2002

fun — 27 апреля 2002

МОП

Что такое МОП?

fun — 22 апреля 2002

Загадочная реклама

Что может рекламировать этот сюжет?

fun — 20 апреля 2002

Соответствия

Правильное.
В Москве на Мерзляковском переулке находится банк Сибконтакт:

Неправильное.
Посольство Беларусии расположено на Армянском переулке.

moscow, navigation, fun — 19 апреля 2002

Лифт и здоровье

Это — фрагмент из инструкции, наклееной на дверь лифта:

fun, russian — 18 апреля 2002

CD-SUN

На днях сделал надпись на болванке и не дав ей высохнуть, вставил в дисковод.

fun — 16 апреля 2002