Ну, на сортировку байтов так много времени не нужно, можно просто взять массив long[256] и просто посчитать, сколько каждого байта нам повстречалось. А потом записать — если нужно. Можно распараллелить — будет быстро. :-)
Отсюда можно вычислить энергетическую ценность такой сортировки, если принять потребляемую мощность каждого компа за 600 Вт — это скромно для 12 дисков на машину.
Благодарю за совет (надеюсь, это был совет, просто выраженный несколько неудачно с моей точки зрения)! Посмотрю книгу, хотя она лежит очень далеко от моей основной деятельности.
К сожалению, Ваша аналогия с кольцом не выдерживает критики, т.к. в журнале не используется содержимое книги, а изображение ее обложки. Вот кабы Вы сфотографировали кольцо и потом хвастались, что это Вы его сделали, тогда мы бы Вас пожурили. Но ежели Вы честно говорите, что это кольцо работы К. Фаберже, то честь Вам и хвала.
Насчет же закона — законы в разных странах разные, и в США и ряде стран с аналогичным законодательством в области авторского права Вам никто не может запретить сфотографировать чужую работу, будь то картина или фотография, и использовать данное изображение в своей деятельности. Запрещено только выдавать изображенную работу как свою. Кстати, отсюда и запрет на фотографирование в некоторых выставочных салонах, поскольку это единственный законный способ предотвратить тиражирование изображений. Возможно, в Вашей стране иное законодательство, но насколько мне известно, практически все страны унифицировали законы об авторском праве согласно Женевского Договора 1996 года.
Не знаю, может, это блажь, но возможно ли для отрывков кода использовать моноширинный шрифт? Конечно, сейчас выглядит он довольно-таки мило, но все же для инженерного текста (а программирование все же инженерная дисциплина, вроде строительства мостов) есть общепринятые правила, которых хотелось бы придерживаться.
В 60-70-х годах на тогдашних ЭВМ ставили подобные эксперименты. Даже обучали понятию рифмы — и ЭВМки писали стихи. Конечно, получалась полная белиберда, но они опередили Сорокина с его «Салом» годков эдак на 30. :-)
Картинки с капчей генерируются, значит, можно и флэш сгенерировать.
А насчет видео - тоже вариант. :-) Показывать отрывки из старых советских фильмов, если возраст > 30, а тем, кому меньше, то - из голливуда. Пусть отгадывают. Можно видео зашумлять - гонять с видаков и пятой-шестой копии.
К тому же, "непробиваемую" капчу сделать нельзя - если что-то видит честный пользователь, то видит и злоумышленник. If you see it, you can grab it. Т.е., даже если генерировать ActiveX каждый раз, то и его можно декомпилировать и поглядеть, что у него внутри. И это можно автоматизировать.
Насчет пункта 1 действительно ничего сделать нельзя.
А вот со вторым довольно легко, если использовать какой-нибудь random seed, например, количество тиков CPU на сервере после старта. Довольно-таки случайная величина, недоступная извне.
А ведь вариант! Капча на флэше - надо проследить, где шарик под наперстком. :-) Токмо наперстков надо побольше, чтобы вероятность случайного попадания ботом уменьшить.
Под экспертами тут явно подразумеваются консультаты из консалтинговых компаний. Вообще, IT-консалтинг - огромный бизнес, и крупные компании готовы платить им десятки и сотни тысяч долларов в год, чтобы эти эксперты управляли закупками ПО и политикой апгрейдов. Это очень большая статья расходов. К примеру, от некоторых решений могут отказаться, если они требуют сервера БД с 8 CPU и 16 GB RAM. И не из-за стоимости оборудования, а из-за стоимости SQL Server Enterprise Edition, который может стоить 50K за лицензию.
"Извините" - повелительная форма глагола, означает (или, как Вы выражаетесь, "переводится") "а ну-ка, все собрались и приняли мои извинения". :-)
Мой добрый незнакомец, спасибо за напоминание о важности знания русского языка, но все же мне кажется, что это был непрошенный совет, и уж тем более - не по существу дела.
Уточнение по тексту: фраза "Microsoft хочет заставить вас купить так много, как ей надо" по-русски, видимо, должна звучать как "Microsoft заставляет вас покупать столько, сколько ей".
Выражение "as much as it wants" - сравнительное, и не переводится "один-в-один".
Не, не получится. Уже запатентовали:
http://pericles.ipaustralia.gov.au/ols/searching/patsearch/search_section.jsp?sectionCode=DTL&keyNo=2001100012&type=I
Насчёт Турции - не совсем корректное сравнение. Надпись гласит, что доступ к сайту закрыт по решению суда. Такое бывает даже в Германии, когда блокируют доступ к сайтам нацистской направленности.
Не совсем понял связи между предложениями первого абзаца. Или Вы считаете, что статические методы не наследуются? Или я что-то упускаю?
А второе Ваше возражение явно адресовано не мне, т.к. я ничего не утверждал о 2-х и более extension methods. Я имел в виду класс-наследник, у которого есть нестатический метод с названием, подобным названию метода-расширителя. Т.к. extension methods (даже будучи статическими) вызываются как метод экземпляра, то возможна некоторая путаница.
Вот, например, что делает данный код?
public class MyClass
{
public static void Main(string[] args)
{
new MyClass().RunMe();
new MyNewClass().RunMe();
new MyAnotherNewClass().RunMe();
MyClass x = new MyClass();
x.RunMe();
x = new MyAnotherNewClass();
x.RunMe();
}
}
public class MyNewClass : MyClass
{
}
public class MyAnotherNewClass : MyNewClass
{
public void RunMe()
{
Console.WriteLine("MyAnotherNewClass.RunMe()");
}
}
public static class Utils
{
public static void RunMe(this MyClass item)
{
Console.WriteLine("MyClass.RunMe()");
}
}
Ну, тогда уж вместо for надо использовать foreach, т.к. не каждый IList реализован в виде массива - например, тот же StringBuilder внутри себя держит LinkedList, и поиск в нем занимает не O(1), а O(n).
public static string ListToString(this IList list)
{
StringBuilder result = new StringBuilder();
foreach (var item in list)
if (result.Length == 0)
result.Append(item.ToString());
else
result.AppendFormat(", {0}", item.ToString());
Тут некоторая неточность. Методы расширения требуют поддержки со стороны .NET (подумайте, что может быть, например, с extension method при наследовании классов и определении методов с такой же сигнатурой в наследуемом классе). Т.е. этот пример будет компилироваться и работать только с .NET 3.5 (т.к. System.Core.dll существует только начиная с этой версии).
P.S. Сорри за невольный педантизм.
6 часов * 4000 компов * 600 Вт = 14,4 МВт*час = 51,84 ГДж.
А если еще посчитать затраты на охлаждение… Хорошая игрушка.
К сожалению, Ваша аналогия с кольцом не выдерживает критики, т.к. в журнале не используется содержимое книги, а изображение ее обложки. Вот кабы Вы сфотографировали кольцо и потом хвастались, что это Вы его сделали, тогда мы бы Вас пожурили. Но ежели Вы честно говорите, что это кольцо работы К. Фаберже, то честь Вам и хвала.
Насчет же закона — законы в разных странах разные, и в США и ряде стран с аналогичным законодательством в области авторского права Вам никто не может запретить сфотографировать чужую работу, будь то картина или фотография, и использовать данное изображение в своей деятельности. Запрещено только выдавать изображенную работу как свою. Кстати, отсюда и запрет на фотографирование в некоторых выставочных салонах, поскольку это единственный законный способ предотвратить тиражирование изображений. Возможно, в Вашей стране иное законодательство, но насколько мне известно, практически все страны унифицировали законы об авторском праве согласно Женевского Договора 1996 года.
моноширинный шрифт
? Конечно, сейчас выглядит он довольно-таки мило, но все же для инженерного текста (а программирование все же инженерная дисциплина, вроде строительства мостов) есть общепринятые правила, которых хотелось бы придерживаться.Поглядеть можно тут
По-видимому, там было и проецирование 3-хмерного персонажа на сцену, а не монтаж изображения поверх красной точки, как это происходило в CNN.
А насчет видео - тоже вариант. :-) Показывать отрывки из старых советских фильмов, если возраст > 30, а тем, кому меньше, то - из голливуда. Пусть отгадывают. Можно видео зашумлять - гонять с видаков и пятой-шестой копии.
К тому же, "непробиваемую" капчу сделать нельзя - если что-то видит честный пользователь, то видит и злоумышленник. If you see it, you can grab it. Т.е., даже если генерировать ActiveX каждый раз, то и его можно декомпилировать и поглядеть, что у него внутри. И это можно автоматизировать.
А вот со вторым довольно легко, если использовать какой-нибудь random seed, например, количество тиков CPU на сервере после старта. Довольно-таки случайная величина, недоступная извне.
Мой добрый незнакомец, спасибо за напоминание о важности знания русского языка, но все же мне кажется, что это был непрошенный совет, и уж тем более - не по существу дела.
Приятного Вам дня!
Выражение "as much as it wants" - сравнительное, и не переводится "один-в-один".
Извиняюсь за занудство. :-)
http://pericles.ipaustralia.gov.au/ols/searching/patsearch/search_section.jsp?sectionCode=DTL&keyNo=2001100012&type=I
А второе Ваше возражение явно адресовано не мне, т.к. я ничего не утверждал о 2-х и более extension methods. Я имел в виду класс-наследник, у которого есть нестатический метод с названием, подобным названию метода-расширителя. Т.к. extension methods (даже будучи статическими) вызываются как метод экземпляра, то возможна некоторая путаница.
Вот, например, что делает данный код?
public class MyClass
{
public static void Main(string[] args)
{
new MyClass().RunMe();
new MyNewClass().RunMe();
new MyAnotherNewClass().RunMe();
MyClass x = new MyClass();
x.RunMe();
x = new MyAnotherNewClass();
x.RunMe();
}
}
public class MyNewClass : MyClass
{
}
public class MyAnotherNewClass : MyNewClass
{
public void RunMe()
{
Console.WriteLine("MyAnotherNewClass.RunMe()");
}
}
public static class Utils
{
public static void RunMe(this MyClass item)
{
Console.WriteLine("MyClass.RunMe()");
}
}
public static string ListToString(this IList list)
{
StringBuilder result = new StringBuilder();
foreach (var item in list)
if (result.Length == 0)
result.Append(item.ToString());
else
result.AppendFormat(", {0}", item.ToString());
return result.ToString();
}