И этот человек догадался, что этот код «рисует лабиринт в stdout»? Лично у меня, когда я увидел эту строчку, возникло желание не понять, что оно делает, а тупо нейтрализовать и просто удовлетворить формальным требованиям (это несложно сделать даже без макросов):
int main() {
int R = 0;
int e = 0;
int C = 0;
char *u = 0;
int (*P)();
for( ; P("\n"), R-- ; P("|"))
for(e=C; e--; P("_" + ( *u++/8)%2))
P("| " + (*u/4)%2);
return 0;
}
Или всё-таки предполагается, что на соискатель должен догадаться об оригинальном назначении кода и написать программу, которая бы строила лабиринт?
По-моему, достаточно было просто сжать картинку в три-четыре раза по горизонтали с интерполяцией «nearest neighbour»: думаю, это скомпенсировало бы небольшой сдвиг и хеш оказался бы одинаковым. Или просто посчитать статистические свойства картинки: средние значения всех пикселей или отдельных каналов.
Тем не менее, в топ языка Lua вкралось число 0x00 (неужели в языке, где нет встроенных побитовых операций, так часто используются шестнадцатеричные константы?).
Как человек, принимавший участие в подготовке этой статьи, хочу выразить некоторое недовольство переводами терминов, которые выбрал автор.
«Свойство-ориентированное тестирование», хотя и является формально верной калькой с английского «property-based testing», звучит и выглядит ужасно. Возможно, следовало бы оттолкнуться от альтернативного термина «generator-driven testing» и воспользоваться описательным переводом. Как по мне, самым подходящим названием было бы «эвристически-рандомизированное тестирование».
Тарификация телефонных разговоров — это как раз тот случай, где не следует использовать местное время: если не требуется делать дневных/ночных тарифов, то биллинг вообще может целиком и полностью работать в UTC, ничего не зная о существовании местного времени.
Я не суперспец в ПЛИС, но с каких пор копипаста называется повторным использованием кода? Разве не следует вынести общую функциональность в отдельный именованный модуль?
Если же клиент покупает в интернет-магазине iPhone 3G за 22 999 ₽, он не может оплатить 20 000 или 25 000 ₽, ему надо перечислить магазину именно 22 999 ₽, поэтому потребовалось разработать новый протокол.
Из каких соображений понадобилось в оригинальном протоколе реализовывать подобное искусственное ограничение: что мешало просто передавать сумму числом? Это как если бы по TCP/IP можно было передавать только пакеты длиной 50, 100, 500 и 1000 байт.
Всё остальное развивается и прилагается (если требуется).
Без поддержки на уровне синтаксиса многим из этого «всё остальное» будет просто невозможно нормально пользоваться, ну или, как минимум, предельно неудобное. Например, сравните удобство работы:
со строками в чистом C и C++ (где есть поддержка классов на уровне синтаксиса);
с традиционными ФП-шными map и filter в Lua (альтернативно: Python) и Haskell (где есть удобный синтаксис для лямбда-функций и срезов операторов);
с уже упомянутым Parboiled в Java и Scala (где есть кастомные и перегруженные операторы).
Синтаксис очень важен, в отличие от вечных споров вида «фигурные скобки против begin—end».
Можно немного подробнее про OpenCL — почему он «не очень» на AMD-картах?
У самого пока что для экспериментов с OpenCL только старая nVidia-карточка. Жажду со временем разорить университет на несколько видеокарт и присматриваюсь больше к AMD — у них шина памяти шире, и стоят дешевле Тесл.
Действительно, зачем Windows поддерживать стандартизованные технологии, когда свои родные vendor lock-in'ы работают как часы? А разработчики не треснут, напишут отдельную версию для Windows.
Если без сарказма, то OpenGL — это не столько игры (которые сегодня часто изначально ориентируются на DX-рендер), сколько программы визуализации чего бы то ни было. Научных данных, например. И необходимость думать о том, что где-то там на некой очень популярной платформе может внезапно не оказаться OpenGL, лично меня, например, очень удручает.
Вы уже как-то определитесь, они единое логическое приложение или таки не связаны.
Думаю, это следует читать как «содержит набор сервисов, фреймворков и библиотек, написанных специально для приложения и нигде более в свободном виде не использующихся». Они вроде как и не связаны, но и по-отдельности никому не нужны.
«Анемичная» модель в виде массива в качестве сущности бизнес-логики, наверное, совсем не айс, но в качестве DTO — почему нет? DTO не особенно нужна инкапсуляция, а хранить массив таких объектов в глобальной переменной никто не заставляет.
Кстати, в Python есть такая вещь, как collections.namedtuple, которая очень подходит для сущностей сложнее кортежа, но недостаточно сложных для написания отдельного рукотворного класса. Уверен, что в насквозь динамическом PHP можно сделать аналог (или он уже существует).
Само собой, зло — потому и кавычки. Но концептуально «PHP Object Notation» (или «PHP Array Notation»?) ничем не хуже JSON, кроме отсутствия аналога функции json_decode.
А чем описанное в статье использование PHP-массивов принципиально отличается от JSON, который сейчас, вроде как, везде принято любить? По-моему, это абсолютно то же самое, этот код можно даже вынести в отдельный файл (с расширением .phpon?) или хранить в БД, «декодируя» вызовом функции eval. Поэтому, думаю, определённая легитимная область применения у этого подхода есть, частично совпадающая с областью применения JSON/YAML/XML.
И этот человек догадался, что этот код «рисует лабиринт в stdout»? Лично у меня, когда я увидел эту строчку, возникло желание не понять, что оно делает, а тупо нейтрализовать и просто удовлетворить формальным требованиям (это несложно сделать даже без макросов):
Или всё-таки предполагается, что на соискатель должен догадаться об оригинальном назначении кода и написать программу, которая бы строила лабиринт?
По-моему, достаточно было просто сжать картинку в три-четыре раза по горизонтали с интерполяцией «nearest neighbour»: думаю, это скомпенсировало бы небольшой сдвиг и хеш оказался бы одинаковым. Или просто посчитать статистические свойства картинки: средние значения всех пикселей или отдельных каналов.
Нейронная сеть тут точно оверкилл :-).
Не могли бы вы поискать ссылку на эту историю?
Тем не менее, в топ языка Lua вкралось число
0x00
(неужели в языке, где нет встроенных побитовых операций, так часто используются шестнадцатеричные константы?).Как человек, принимавший участие в подготовке этой статьи, хочу выразить некоторое недовольство переводами терминов, которые выбрал автор.
«Свойство-ориентированное тестирование», хотя и является формально верной калькой с английского «property-based testing», звучит и выглядит ужасно. Возможно, следовало бы оттолкнуться от альтернативного термина «generator-driven testing» и воспользоваться описательным переводом. Как по мне, самым подходящим названием было бы «эвристически-рандомизированное тестирование».
Тарификация телефонных разговоров — это как раз тот случай, где не следует использовать местное время: если не требуется делать дневных/ночных тарифов, то биллинг вообще может целиком и полностью работать в UTC, ничего не зная о существовании местного времени.
Я не суперспец в ПЛИС, но с каких пор копипаста называется повторным использованием кода? Разве не следует вынести общую функциональность в отдельный именованный модуль?
Из каких соображений понадобилось в оригинальном протоколе реализовывать подобное искусственное ограничение: что мешало просто передавать сумму числом? Это как если бы по TCP/IP можно было передавать только пакеты длиной 50, 100, 500 и 1000 байт.
Думаю, не следует переводить System C таким образом: это, всё-таки, имя собственное.
Без поддержки на уровне синтаксиса многим из этого «всё остальное» будет просто невозможно нормально пользоваться, ну или, как минимум, предельно неудобное. Например, сравните удобство работы:
map
иfilter
в Lua (альтернативно: Python) и Haskell (где есть удобный синтаксис для лямбда-функций и срезов операторов);Синтаксис очень важен, в отличие от вечных споров вида «фигурные скобки против begin—end».
У самого пока что для экспериментов с OpenCL только старая nVidia-карточка. Жажду со временем разорить университет на несколько видеокарт и присматриваюсь больше к AMD — у них шина памяти шире, и стоят дешевле Тесл.
Если без сарказма, то OpenGL — это не столько игры (которые сегодня часто изначально ориентируются на DX-рендер), сколько программы визуализации чего бы то ни было. Научных данных, например. И необходимость думать о том, что где-то там на некой очень популярной платформе может внезапно не оказаться OpenGL, лично меня, например, очень удручает.
Думаю, это следует читать как «содержит набор сервисов, фреймворков и библиотек, написанных специально для приложения и нигде более в свободном виде не использующихся». Они вроде как и не связаны, но и по-отдельности никому не нужны.
Кстати, в Python есть такая вещь, как
collections.namedtuple
, которая очень подходит для сущностей сложнее кортежа, но недостаточно сложных для написания отдельного рукотворного класса. Уверен, что в насквозь динамическом PHP можно сделать аналог (или он уже существует).