Ну вот сначала конкурс, а победитель уж потом будет делать расчёт пути протонов))))
На самом деле -идея про конкурс -отличная. Мне кажется, надо его устроить и выбрать такую задачу, которая была бы понятна всем (не только профи), ну что-то простое.
Сформулируем задачу и начнем?
Оценивать программы нужно по каким-то критериям -по каким бы вы оценивали?
Ну я уже предлагал, калькулятор, можно например упростить, до того, чтобы считал только целые, убрать унарный минус и функции. Тогда она элементарной становится, по идее любой справится. Оценивать.. хм.. сложный вопрос. По потоку управления данными наверное - просто посмотрим сам алгоритм, и тим участника, и постараемся какие-то характерные черты вытащить отсюда. Скорее это будет сбор статистики, а не конкурс. Если в конце побеждает "дружба", это это не конкурс, это почти вечеринка).
Например, калькулятор, в таком простом варианте, это тестовое задание при приёму в фирму, где сейчас работаю. Человек уже 20 его писало... и каждый по своему))), иногда такие клинические случаи бывают... и не было пока ни одной его классической реализации)))), все пишут что-то своё)
Мне кажется, что типирование по программам -это уже из области соционического юмора что-то, но я не против, конечно
А вообще посмотреть на проги, написанные разными участниками дискуссии -это было бы здорово.
Ну, правда, я так поняла -что предпочтения в языках расходятся? Писать будет каждый на том, что любит или лучше чтоб все писали на чем-то одном?
Ну это уж по желанию. Можем и главный приз назначить. Джек-пот там -всё такое)))
Но вечеринка -тоже отличная идея.
Красивая задача, ну просто она популярная -многие уже писали её. Но, если не придумаем чего-то более нового и интересного -давайте Вы сформулируете четко условия и начнем.
А расскажете про вирус морриса в двух словах? -ну если не влом
Ну я бы про юмор так не сказал, тимные черты проявляются достаточно чётко. В команде есть есь, дон, 2 баля, 2 роба, 1 габ, 1 штир. И у всех разный код, причём это явно видно. Ну например, запускаем сервер - упал на стадии загрузки, это или дон или робы забыли скрипты по БД прогнать))), сервер работает, работает, потом углубляется в свои мысли (бесконечном циклы) или внезапно падает так, что никто ничо понять не может, от чего и как - это бали сделали. габен отличается тем, что ленивый и просит, чтобы ему усё разживали), есь чото там делает, его никогда не видно и не слышно.
И так нужно:
Написать калькулятор, в виде консольной программы, принимающий на вход арифметическое выражение, состоящие из цифр(0..9), основных арифметических операций (+, -, *, : ), содержащие скобки в любой вложенности, и выдающее результат его. Язык для калькулятора - C, C++, Java, C#, Pascal (Delphi). Кто напишет на Visual Basic того метеоритом убьёт на месте.
Это были давние времена, когда софт был настока дырявый, что через него отбрасывали макароны. Ну и в 1988 году аспирант Роберт Моррис решил написать вирус, который использовал дыры в ОС Unix, распространялся через инет и локальные сети. В нём была ошибка из-за которой он сжирал своими копиями всю доступную оперативку, вгоняя компы в полный ступор. Если нужны точные технические характеристики, исходники и прочее, то могу их привести в полном объёме
Ого -интересная история. А сейчас в Unix-like ОС нет дыр?
нет -исходников точно не надо. Я вообще сюда хожу самообразовываться только и наверное еще буду просить мне помочь с простыми очень и глупыми вопросами -придется меня потерпеть
Windows NT (2000, XP, 2003, Vista, 2008, 7), это тоже Unix-like система. Конечно дыры есть, и будут, всегда. Слишком сложный код, сликом много людей работают, ограничены сроки. У Microsoft например хватает только сил, чтобы ядро ОС протестировать досконально... что уж тут про Linux говорить. Одна из самых защищённых систем на сегодняшний день, это OpenBSD будет. Рекордно малое количество уязвимостей и ошибок в ней, всего 2 ошибки переполнения буфера за 11 лет... по моему прилично)
Мне кажется, что Ваш пример с "Вирусом Морриса" -- скорее на моей стороне в нашей дискуссии об ассемблере и масштабах решаемых им задач. Во-первых, сам "Вирус Морриса" написан на С, а не на ассмеблере (он даже компилировал на инфицируемом компьютере часть своего кода). Во-вторых, сам Моррис -- один из двух основателей знаменитой компании ViaWeb, известной своим порталом для построения интернет-магазинов. Исходный код ViaWeb был написан на Лиспе, поэтому как раз Моррис -- это человек, мыслящий идиомами этого абстрактного языка, на чём бы он ни писал свои программы.
Кстати, строго говоря, "Вирус Морриса" вовсе не вирус. Вирус в компьютерном смысле -- это код, присоединяющий себя (или свою изменённую копию) к программам, "инфицируя" их таким образом. Вирус не может самостоятельно выполняться -- для этого нужно, чтобы запустилась инфицированная этим вирусом программа. Моррис написал код червя, а червь -- это уже самостоятельная программа, копирующая саму себя на другие машины. Ещё одна забавная деталь про Морриса -- его папа был главой Национального Центра Компьютерной Безопасности (National Computer Security Center) в Национальном Агенстве Безопасности (NSA) и как раз занимался вопросами безопасности системы UNIX.
Он не сколько ошибся, сколько недооценил плотность сети. Грубо говоря, его червь задавал вопрос каждому найденному по соседству компьютеру: "имеешь ли ты мою копию?" Если компьютер отвечал "нет", то червь, естественно, пытался его заразить. Интересное начиналось, если компьютер отвечал "да". Если бы червь отказывался в этом случае от дальнейшей атаки, то его можно было бы очень просто остановить (написав программу, отвечавшую "да" на все подобные запросы). Поэтому Моррис решил, что с вероятностью 1/7 червь всё равно должен заражать даже ответивший "да" компьютер. Выбранная им вероятность повторного заражения, 1/7, оказалась слишком большой и он вогнал в ступор практически все заражённые компьютеры, установив на них огромное количество копий своего червя.
Я как раз это и имел в виду: в самом языке поддержка регулярных выражений минимальна и все нетривиальные функции вынесены в DBMS.
Спасибо за информацию!
Ну например полнота по Тьюрингу, способность к поддержке регулярных выражений и возможность доступа к API системы.
Нет смысла оптимизировать издержки производства, начиная с дешёвого ресурса, а ведь сейчас рабочее время компьютера на много порядков дешевле рабочего времени программиста. Поэтому на фортране не переписали бы код для работы с геномом, даже ради быстродействия -- слишком накладно начинать на нём с нуля новую область. (Этот аргумент не является решающим при программировании потребительских программ, так как клиент может выбрать более быстрый продукт, но работает когда потребитель программы и разработчик -- одна и та же организация.)
Конечно трудно точно охарактеризовать степень родства тех или иных систем, но всё-таки семейство Windows -- далеко не UNIX-like система. В англоязычной Википедии есть хорошая диаграмма (в статье про UNIX), показывающая всё дерево систем, берущих начало от Unics, в том числе UNIX и его производных. Семейство UNIX включает собственно UNIX, Linux, упомянутое Вами семейство BSD, Sun OS, Mac OS X, Xenix, Solaris, Minix.
Как и языки программирования, операционные системы развиваются по сходящимся траекториям, вбирая в себя лучшие черты друг друга. Поэтому сейчас порой не сразу отличишь компьютер с Windows от другого такого же с Linux. Но если брать их прототипы 10 летней давности, фундаментальное отличие семейства UNIX от Windows становится очевидным.
А мне кажется, он на моей, там было 3 способа заражения, и один из способов включал себе атаку на Finger с переполнением буфера, и высылкой 536 байтов. По моему только знанием C тут не обойтись, а? ещё как бы ассемблер нужен , и часть, которая написана была на С, нужна была только для одного, закачки остальных частей червя на компьютер. И поэтому я про ошибку написал, ведь неправильная заданная вероятность, уже сама по себе - ошибка.
Когда я спрашивал, "Какие критерии "нормальности" системы можно привести?", я спрашивал, про критерии ОС. Полнота ОС по Тьюрингу, тут ни как быть не может)))))
Я об этом и говорил, где противоречие?
[/quote]
Xenix это работа майкрософт кстати)
Ух.. история виндоус не такая уж простая вещь, и мало кто её знает. Летом 1988 года, Билл Гейтс пригласил на работу Дейва Катлера, который уже участвовал в разработке 2х легендарных систем прошлого поколения - VMS и RSX-11, так собственно и началось создание Windows NT, которую не надо путать с 95, 98, Me, потому что у неё совершенно иная архитектура. На тот момент, Windows была следующим поколением юниха, но уже сделанная по новому (на тот день), защитные механизмы были изначально интегрированы в ядро, а не появились потом, как в линухе. По моему все отличительные особенности UNIX почти же как и в Windows. Можно даже сравнительную таблицу накидать. Wiki это не последняя инстанция, и пишут там частенько фаны того или иного направления, например фанаты linux кипятком начинают писать при слове Windows, что как ни странно только об их узколобости и может говорить , а чтобы получить хоть какую-то объективность, приходится самому рыться во множестве источников.
Это напомнило мне одну байку про Самуила Эйленберга (одного из создателей теории категорий). Как-то раз его спросили, сможет ли он управиться при поедании своего блюда с тремя китайскими палочками для еды, вместо обычных двух... На что он ответил -- естественно смогу: оставив одну из них на столе. Моя мысль была в том, что ассемблер сам по себе мало пригоден для масштабных проектов, а не в том, что он не может быть частью масштабных проектов. (Исходники червя доступны в сети -- посмотрите, какая доля кода написана на ассемблере.)
Даже более того, каждый по-настоящему масштабный проект обычно приходит к необходимости использования ассемблера для оптимизации самых узких мест, когда в процессе своего развития упирается в физические пределы быстродействия оборудования.
Хорошо, пусть будет ошибкой.
Да, я имел в виду нормальность интерпретатора командной строки, а не операционной системы. Нормальность операционной системы -- слишком большой (и потенциально взрывоопасный) вопрос, чтобы его обсуждать в этой ветке.
Я отвечал на фразу "Было бы настолько всё настолько критично к производительности, переписали бы на фортране или сях."
Да, я как раз говорил о таком "схождении" двух операционных систем. В процессе такого развития они берут друг у друга лучшие черты. Иногда это достигается путём приглашения сотрудников из компании-конкурента.
В бытность программистом писал в основном на C, практически универсальная вещь, а вообще приходилось писать практически на всем более менее популярном. А так под каждую задачу можно найти свой эффективный инструмент, где-то будет проще и эффективнее сделать скрипт на шелле с использованием стандартных программ юникса, где-то использовать ассемблер.
насколько я помню основной способ заражения заключался в переборе логинов и паролей из словаря, а затем использовалась какая-то уязвимость для получения root-привилегий
Не как-то так, а именно так!
Причем и для остальных типов верно.
Через пару месяцев Бальзаки разобраться в своей программе могут легко, т.к. абсурдности легче запоминаются А внутренняя крастота кода - это очень важно...
О Фортране. Современный Фортран живет только потому, что:
1) под него есть куча специализированных библиотек
2) самый быстрый язык это С++, а Фортран - еще быстрее С++!
Ого! Как тема-то развернулась!
Жаль, только, что ушли в сторону.
Прочитал сомнения некоторых по поводу того, что языковые особенности сами по себе направляют человека больше, чем ТИМ.
И все-таки!
Речь ведь о том, как используя имеющийся инструментарий (конструкции языка) человек решает задачу. Естественно, на java задача решается иначе, чем на perl. Но все-таки Бальзак предпочтет решить задачу лаконичнее, а Роб - структурированнее. То есть, речь идет, конечно, о дизайне кода разными ТИМами.
Конечно, ТИПИРОВАТЬ по коду я ни разу не предлагал, вряд ли это возможно...
По-моему, пора переходить к предметной дискуссии, где Ваши идеи иллюстрировались бы конкретными фрагментами кода. Не вдохновляют ли Вас на такой анализ приведённые выше программы калькулятора? Было бы очень интересно услышать Ваше мнение.
как-то пробовал сконфигурить структурный образ в голове(в электричке мозг флудит ппц). как упаковать все переменные (развивающие ГМ, интерфейсы I/O | руки/ноги/разл подв. и осяз. органы) в линейном виде... Вобщем, соционика тут только вторым боком укладывается, т.к. "скелет" треба брать из ФАМ. более того, расчет ведется по 6и переменным (12 I/O в идеале), что уже гемор ояепу + ко всему, нада обязательно привязывать астрологический календарь, ибо это весомый модификатор. все это быстренько превратилось в трехмерный график, в общем, - это еще одна тема для диссертации, а не программа(с).
Вам не кажется, что это в первую очередь от интеллекта зависит? Я тоже ленивый, но разжёвывать что-то кому-то буду в первую очередь я. Просто исходя из уровня интеллекта и профессионального уровня.
ЗЫ Что касается стиля: основной язык - С++. Собственные оценки: лаконичность, чёткость, минимум лишнего (в том числе комментов). Чужие оценки: легкочитаемость, максимальное использование принципа don't repeat yourself.
Ну, кстати, с Габенами не всё так просто))) Им мало функциональности, им надо чтоб программа была ещё и красивой -ну в их понимании красивой -от имен переменных до вложенных структур, ничего чтоб лишнего, оптимальные методы -циклы, процедуры. Всё довольно основательно делается, я знаю много прекрасных программистов - именно Габенов.
Думаю, говорить о программистах как о чем-то однородном нельзя, тексты ремесленников надо смотреть отдельно - творчество обсуждать отдельно. Для меня искусство программирования заключается в способности делать живые вещи. Собственно, интересное программирование и начинается только тогда, когда нулевой вариант проекта обретает способность жить соей жизнью. Дальше - это уже большой вопрос, кто что пишет. Обычно при выходе на правильную объектную структуру код уменьшается раза в 3, проект странным образом приобретает некоторый иммунитет и "волю к жизни". Имхо, бальзаки плохие ремесленники вообще а программисты-ремесленники еще хуже, это всё же удел рационалов-бухгалтеров. А вот красивое программирование - это да, это их да габенов еще дело.
Из особенностей моего программирования могу отметить трепетное отношение к именам, много строчек по 250 символов, красивое=правильное форматирование и очень качественные комментарии.
ну у нас и тема эта такая -полусерьезная
серьезная есть -где конкурс программистов, будут если задачи -мы её продолжим.
расскажите про отношение к именам
про комментарии -удивительно, если честно -ни одного Баля не встречала, чтоб писал комменты, а сама если и пишу какие-то какие-то, то так, что сама потом не понимаю, что написано.
Хм, что значит вот это «в лоб»?
Насколько я могу судить, у нас на фирме ЧС-ники в лидерах по скорости исполнения и устойчивости кода к «неприятностям».
Ну, это всего лишь мой опыт и моя интерпретация... Ваш опыт может быть другим Мой знакомый "жук" кстати, отлично подтянулся. Но все равно до "Макса" недотягивает по глубине.