June 18th, 2011

Hello computer!

сортировка

     Найдено у malaya_zemlya, утащено оттуда и немного из комментов.

     Оказывается, чтобы вывести отсортированный по возрастанию массив натуральных чисел x[n], вовсе необязательно бегать по памяти, переставляя местами элементы, или заниматься другим сложным матаном. Достаточно сделать так (bash, числа передаются в командной строке):
#!/bin/bash
function f() {
    sleep "$1"
    echo "$1"
}
while [ -n "$1" ]
do
    f "$1" &
    shift
done
wait

     Что происходит? Да очень просто: для каждого элемента x[i] создаётся отдельный процесс, который ждёт x[i] миллисекунд, а потом выводит x[i]. Ясно, что первым на вывод пойдёт число с наименьшей задержкой, то есть наименьшее, ну и так далее :-)

     Интересно, что:
        - близкий к этому алгоритм реально используется, когда нужно отсортировать "не очень большие" числа. Создаётся массив z[] достаточного размера, заполненный нулями, далее для каждого x[i] делается z[x[i]]++, а потом просто пробегаем по z[] слева направо, вычитывая ненулевые элементы. Сложность - O(n+max(x[i])), расход памяти - O(max(x[i])).
        - Время работы оригинального алгоритма - O(max(x[i])), а вот сложность (количество операций) - как бы вроде O(n) (чуть ниже я немного уточню). При этом в явном виде память не расходуется, а если учесть затраты памяти на создание процесса - получится O(n), что не так плохо для такого простого алгоритма.
        - оказывается, есть платформа (линукс, конечно), умеющая выпадать в suspend (с выключением и последующим включением процессора) при простоях в работе более единиц миллисекунд(!). На такой платформе "процессорное время" (в тактах) окажется близким к "сложности вычислений" (пока процесс выполняет sleep, процессор выключен), то есть опять получится O(n).
     На самом деле O(n) вряд ли получится - хотя в самой программе операций выполняется мало, реальной сортировкой придётся заниматься системному шедулеру, на который свалится n "задержек", и который будет вынужден "будить" процессы именно в нужном порядке. Но всё равно любопытно.
        - также, «на лекции об финитизме (философское учение, отрицающее понятие бесконечного), время ответа Есенина-Вольпина на вопрос, существует ли какое-нибудь число, было пропорционально этому числу»
Dexter's Lab

микрософт виндоуз

     Модернизировали другу домашнюю машину. Как водится, проехались по всем маломальски приличным магазинам, собрали железа и завалились ко мне на работу, дабы в тишине и уюте серверной собрать железного друга. Решили не менять старые харды с целью экономии денег на более мощный камень. Кроме злополучных хардов, сменили всё.
     Запуская машину, не успели с непривычки залезть в биос и сменить приоритет загрузки. Система пошла грузиться с харда, на котором мирно жила ничего не подозревающая «хрюша». Винда, увидев такую облаву из совершенно незнакомого железа, закономерно издала последний писк и вылетела в BSoD.
     Ребутнулись, но вспомнили, что на втором харде сидит ещё и Убунта десятая. Решили грешным делом поиздеваться и над этим бедолагой. Пускаем систему с него. Динукс хрустит хардом, мигает монитором и, мать его, запускается, причём с дровами на всё оборудование! Единственное, что мы смогли из себя выдавить:
     — Дункан?!

     http://ithappens.ru/story/6504

     А я вот уже давно не могу понять.
     Я обычно хорошо отношусь к продукции Microsoft, в том числе к собственно Windows. В винде (и другом софте от MS) можно искать и находить множество недостатков, но главную задачу - чтобы софт как правило мог поставить человек с уровнем эникейщика, и чтобы для начала работы как правило не требовалось обязательной правки конфигов, чтения исходников, и "вот тут разработчики лажанулись, но это фигня, вы вместо этой кнопки запускайте простенький скриптик..." - они решили.
     А вот с загрузкой системы (в смысле, винды) при смене железа я как-то совсем логики не понимаю. Чтобы хоть как-то загрузиться (до того состояния, в котором пользователь сможет объяснить системе, что произошло и что делать, да и сама система сможет поискать новые драйвера) нужно не так много: клава-мышь (они стандартные), жёсткий диск и его контроллер (чипсеты, конечно, бывают разные - но "подмножество" стандартных PATA/SATA покроет 99% домашних компов, причём драйвера эти в системе есть - инсталлятор-то их изначально сам ставит, это потом юзер может подоткнуть диск от материнки и проапдейтить), и видеокарта (100% которых совместимы с VGA - опять же, инсталлятор-то картинку сразу показывает, до установки "детонаторов" и "каталистов")... а, собственно, и всё. Ну, процессор ещё, но ему "драйвера" вроде как не нужны. Так вроде бы в чём проблема - грузишься на незнакомом железе, для которого нет драйверов - грузи generic драйвера на всё, что сможешь (а клавомышь, HDD с контроллером и видео такие "генерики" имеют), с остальным разбирайся в порядке общей очереди: требуй дистрибутив, интернет, и американского консула технического специалиста.
     Однако ситуация "сменил железку - навернулась система" под виндой распространена весьма, а под всякими бздями-линухами - распространена не очень. При этом главное непонимание вызывает даже не то, что "винда падает" (тоже мне, удивили), а другое.

     Сейчас у нас везде сплошной плаг-н-плей: устройство отдаёт идентификатор, система согласно идентификатору грузит драйвер, если идентификатор не подходит к драйверу - драйвер не будет загружен, ситуации вида "драйвера от одной железки заставили работать на другой железке" практически исключены. Раньше, во времена NT3.51/NT4, плаг-н-плеев не было, драйвера ставились "ручками", драйвер, конечно, мог при старте "обнюхать" железку и сказать "не моё", но мог и не обнюхать - а главное, чёткого алгоритма "что делать, если железке не нашлось драйвера" не было.
     Однако раньше, когда плаг-н-плеев не было, и ситуация "драйвер от одного чипсета загрузили на другом" была реальной - система при смене материнки или видео чаще "криво-косо, но загружалась", чем умирала. Сейчас же, несмотря на весь прогресс - чаще умирает, чем загружается.
     Где логика?!
сисадмин Глюкин

побояню (perl)

     ...особенно понравилось "можно перегружать пробелы". И правда - почему до сих пор нет языков с возможностью переопределения значения "пробела"?! Ну, и пункт 5 тоже математически хорош :-)

     http://www.linuxrsp.ru/artic/top-50-programming-quotes-of-all-time-russian.html

     22. Perl - это тот язык, который одинаково выглядит как до, так и после RSA шифрования?
     - Keith Bostic
     24. PHP - это маленькое зло, созданное некомпетентными новичками, в то время как Perl - это большое и коварное зло, созданное умелыми, но извращёнными профессионалами.
     - Jon Ribbens

     http://raby.livejournal.com/49336.html

     Возможно, я не первый, кому это приходит на ум: я точно знаю к чему именно движется разработка Perl 6, как логического и абсолютного развития Perl 5:
     Его ДАО я представляю себе приблизительно так:
     1) Любой набор символов в любой кодировке является синтаксически правильным Perl 6 кодом
     2) Всегда есть _бесконечное_ количество _различных_ способов сделать это
     3) Любой человек писавший до этого на любом языке может сразу писать на Perl 6. Он может даже не догадываться, что пишет на Perl 6. Если конечно не будет забывать ставить 1; в конце модулей
     4) 1; можно перегружать. Можно перегружать пробелы. Можно перегружать сорц фильтры с помощью регулярных выражений, которые тоже можно перегружать.
     5) Perl 6 имеет эталонную реализацию написанную на Perl 6 и не способную быть выраженной ни на каком другом языке. На Perl 6 эталонная реализация может быть выражена, но не за конечное время. Мы работаем над этим. Когда мы закончим наступит Апокалипсис.
     1;
взрывной катод

физики random физики

        - посмотри, нет у меня тут ошибок в английском?
        - да вроде нет. Только ты тут написал fwhm маленькими буквами, а я такое даже не знаю как произнести. Вот FWHM - знаю как произносится.
        - да ладно, ты же даже "РСФСР" недавно произносил, не то что такое!
        - пра-авильно! Я произносил "РСФСР" большими буквами, а не маленькими! А "рсфср" я вообще в приличном обществе произнести стесняюсь, как и "ссср"! Так что давай, заменяй на заглавные!


     Collapse )
поросёнок пётр химейер

zhzhgun

     Жгун, Зойч - Леопёрд, Зайка, Мишка, Снежинка, Лучик... да вы на талисманов Лондонской олимпиады 2012 посмотрите (и на логотип, кстати) - сразу станет ясно, что бывает и намного, намного хуже. А зайки с мишками - это ещё вполне ничего так, вполне на уровне той чебурашки, которая у нас работала медведем на Олимпиаде-80.

     С Зойчем мне одна непонятка непонятна. С одной стороны, "оргкомитет Сочи-2014 зарегистрировал права интеллектуальной соб­ственности на неофициальный символ Олимпиады — жабу Зойча", а с другой стороны, в ЖЖ Жгуна так и висит, что "векторный файл до сих пор можно скачать и напечатать, например, на футболку". А не посадят, после распечатывания-то, раз права интеллектуальной собственности теперь у оргкомитета, и правила использования пока не оглашались?..
     И, кстати - если бы олимпийский комитет не зарегистрировал бы Зойча на себя (тем более, он ему по большому счёту и не нужен), не пришлось бы в срочном порядке обнародовать тот факт, что Зойч - заказной проект, и не было бы вот этого вот шума...