sharpc (sharpc) wrote,
sharpc
sharpc

Category:
  • Music:

Канонические образцы

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


Числа


Допустим, где-нибудь в коде вам нужно вернуть произвольное целое число. Разумеется, это должно быть число 42, которое является ответом на Главный Вопрос Жизни, Вселенной и Всего Такого, согласно книге Дугласа Адамса «Автостопом по Галактике».
Нужно число поменьше? Рэндалл Мунро предлагает использовать 4 в качестве случайного числа, выбранного броском игральной кости. Побольше? Возьмите 1729, число Рамануджана-Харди, наименьшее число, представимое двумя способами в виде суммы двух кубов. В Футураме, например, оно используется повсеместно.



Строки


Нужно вывести какую-нибудь строку? Выводите foobar. Больше двухсот RFC (документов, описывающих, среди всего прочего, протокол HTTP) используют для примера коротких строк (например, имен файлов) foo, bar или foobar. Более подробно этимология и встречаемость этих метасинтаксических переменных описана в RFC 3092.

Для демонстрации шрифтов чаще всего используются панграммы — короткие предложения, в которых встречаются все буквы алфавита. Например, Windows открывает файлы шрифтов, изображая ими фразы «Съешь же ещё этих мягких французских булок, да выпей чаю» и "The quick brown fox jumps over the lazy dog".

А если нужно сразу много текста? Веб-дизайнеры часто используют в качестве filler text (на русский этот термин переводится неожиданно — «рыба») искаженный отрывок из трактата Цицерона на латыни — Lorem ipsum. Он настолько популярен, что его вставка вошла в стандартные функции некоторых текстовых редакторов.


Имена


Короткая строка должна быть именем? В русском языке традиционно используется имя Иван Иванович (часто добавляют фамилию, какую бы вы думали? Иванов). Например, в авиации и космонавтике так называют манекен, запускаемый до человека для проверки безопасности. Более современный экземплификант с оттенком пренебрежения — Вася Пупкин. На английском наивные анонимусы представляются как John Doe или John Smith. Поклонники Стругацких могут использовать имя Полуэкт, которое использовал в качестве placeholder name забывчивый Ученый Кот.

Криптографы часто используют стандартные имена вместо описания ролей в криптографических протоколах. В них обычно Алиса (A) отправляет сообщение Бобу (B), пассивно их ломает Ева (Eavesdropper), активно Мэллори (Malicious), ну а Трент (Trusted Arbitrator) служит нейтральным арбитром.

Нужно как-то назвать редкое химическое вещество? В английской традиции используется unobtainium, а для русского уха благозвучнее хрендобудий.

Часто бывает нужно написать (скажем, в примере использования сетевой библиотеки) какой-нибудь сайт или электропочту. IETF зарезервировала для этих целей example.com и username@example.com. Свой демонстрационный адрес есть и для кириллических доменов. Выглядит он ужасно в любом виде: испытание или xn--80akhbyknj4f.

Код


А если строка должна быть программой? С подачи Кернигана первой программой, которую обычно пишут на новом языке программирования для теста компилятора, запускающей среды и средств вывода, является программа "Hello, world!", которая выводит эту строчку на экран. А сегодня не каждый язык программирования способен делать сильно больше. Наиболее известен среди таких языков HQ9+. Кроме вывода (иногда подключения модулей) в программе "Hello, world!" обычно ничего нет. Поэтому для демонстрации синтаксиса языка программирования придуман алгоритм Трабба Пардо-Кнута. В этом алгоритме есть ввод и вывод, математические выражения, условия и циклы, массивы, вызов и объявление функций. Используйте именно его для короткой демонстрации синтаксиса какого-нибудь языка вместо квиксорта, факториала или чисел Фибоначчи.

#include <iostream>
#include <cmath>
using namespace std;
 
double f(double x) {
    return sqrt(abs(x)) + 5*x*x*x;
}
 
int main() {
    double vs[11];
    for (auto& v : vs) cin >> v;
    for (int i = 10; i >= 0; --i) {
        auto x = f(vs[i]);
        (x > 400 ? cout << "TOO LARGE" : cout << x) << endl;
    }
}

Мой пример для Scala с непременными map map map был выпилен из википедии занудами под предлогом «здесь вам не Rosetta Code», а компактную реализацию для C++ заменили вырвиглазной жабой. Безжалостно уничтожили и усилия камрада udpn в области Haskell.

Если программа должна иллюстрировать работу с сетью, как правило пишут echo service, просто закачивающий файлы обратно в интернет возвращающий присланные пакеты клиенту.

На джаджах для теста системы сдачи обычно существуют задачи A+B, где предлагается посчитать и вывести сумму двух целых чисел. Например, это первая задача на Тимусе.

Переменные цикла в коде традиционно называют i, j, k, …. Эта традиция пошла с Фортрана, где тип переменных определялся по первой букве названия (целочисленный для i).

На стыке примеров кода и чисел находятся примеры шестнадцатеричных констант, таких как 0xDEADBEEF или 0xBAADF00D. У них богатая история.

Консоль


Большинство пользователей используют консоль, чтобы набрать ping ya.ru, но юниксоиды иногда хвастаются ей. Чтобы в качестве текста не палить первую из трех команд для сборки Gentoo, они используют команду cowsay:
$ fortune | cowsay
 ________________________________________
/ You have Egyptian flu: you're going to \
\ be a mummy.                            /
 ----------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Кроме коровы доступен пингвин.

Отдельной строкой стоит упомянуть 68-байтную COM-программу, состоящую из печатаемых символов, используемую в качестве стандартного тестового файла для антивирусов — EICAR test file.

Графика


А если нужна не строка, а картинка? С 1973 года специалисты по обработке изображений рекомендуют использовать стандартную фотографию «Лена» 512×512 с девушкой в шляпке. Учитывая, что фотография является фрагментом из журнала Playboy, кроме шляпки на полной версии фотографии других предметов одежды нет. Сама же Лена Седерберг стала маскотом этой области науки и даже посещает конференции.



Другой безусловно известной картинкой является «Безмятежность» из Windows XP.

Телевизионщикам тоже бывает нужно показать какую-нибудь картинку вместо того, чтобы работать, но Лена редко вписывается в формат. Раньше использовали Philips PM5544, теперь чаще SMPTE color bars.

Немного особняком стоят заполняющие цвета. В реальном мире, например в киноиндустрии, используют «зеленый экран», на фоне которого снимают разные сцены, а его зеленый (иногда он синий) цвет позже заменяют на работу 3D-художников. В Windows в качестве такого «прозрачного» цвета в файлах ресурсов используют фиолетовый (#FF00FF).

В области 3D графики полного единодушия не наблюдается. В OpenGL и DirectX включена модель чайника Юта, которой скоро будет 40 лет. Если хочется больше полигонов, тридэшники обычно извращаются над моделями из Stanford scanning repository, чаще всего над кроликом. Рейтрейсеры меряются графоном на стандартной сцене Cornell box.



Аудио и видео


Известных звуков мало. Редкий боевик или шутер уже почти полвека обходится без крика Вильгельма. В комплекте с Winamp шел короткий MP3-файл про Llama. Можно вспомнить еще тестовый звук Skype или «о-оу» из ICQ.

Совершенно нет никакого порядка с тестовым видеороликом. Его место ожидаемо не смог занять ролик с азиатским карапузом, идущий с Movie Maker, поэтому каждый исследователь или обзорщик использует свой любимый фильм.

Датасеты


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

Первым тестом архиваторов был преимущественно текстовый Calgary Corpus, появившийся в 1987. Позже его заменили на Canterbury Corpus. Оба этих корпуса небольшие, 2-3 МБ, поэтому на сайте CompressionRatings, где архиваторы меряются длиной сжатого сообщения, а рвет всех nanozip, используется свой набор файлов.

В машинном зрении и обучении разные стандартные датасеты очень популярны. Есть база рукописных символов MNIST с ~60к образцами и заметно бОльшая UNIPEN с ~5кк. Есть базы для соревнований по OCR от ICDAR. Сложнее достать базы лиц, такие как FERET. Стоит упомянуть сборник датасетов UCI Machine Learning Repository.

Биология


Проблема стандартных образцов волнует не только программистов, но и биологов, повсеместно истязающих модельные организмы с целью чего-нибудь выяснить. Больше всего из них известны кишечная палочка E.coli, червь C.elegans, муха-дрозофила и мышь. Когда биологи хотят выяснить что-нибудь про людей, вместо людей часто берут свиней или шимпанзе.


Где еще вы встречали буриданову проблему?
Tags: программирование
Subscribe

  • Инфраструктура Python

    В ноябре 2017 я начал собирать в виде IPython Notebook сниппеты работы с разными полезными для исследовательского программирования библиотеками…

  • Теормин по STL для СП, часть 2/2

    Это продолжение части 1. <algorithm>В STL реализованы некоторые простые и часто используемые обобщенные алгоритмы. Обобщенные они потому,…

  • Теормин по STL для СП, часть 1/2

    Это теоретический минимум по STL для занимающихся спортивным программированием, подмножество возможностей стандартной библиотеки C++, полезных для…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 26 comments

  • Инфраструктура Python

    В ноябре 2017 я начал собирать в виде IPython Notebook сниппеты работы с разными полезными для исследовательского программирования библиотеками…

  • Теормин по STL для СП, часть 2/2

    Это продолжение части 1. <algorithm>В STL реализованы некоторые простые и часто используемые обобщенные алгоритмы. Обобщенные они потому,…

  • Теормин по STL для СП, часть 1/2

    Это теоретический минимум по STL для занимающихся спортивным программированием, подмножество возможностей стандартной библиотеки C++, полезных для…