....
while (true){
console.out("let world wait");
}
....
while(sleep(10) == 10){
console.out("You've guess!");
sleep(20);
console.out("Let play again!");
}
........
Бывает и хуже, но уже по понедельникам....
вот еще:
[cut]
.....
.....
[cut]
sub a, b
jump safely_proc
[cut]
....
....
[cut]
nop
nop
nop
nop
safely_proc: nop
nop
nop
nop
nop
mov c, a
....
....
....
На вопрос: зачем метку обвесил нопами, автор сказал: это помехоустойчивый код, вдруг щетчег команд сбойнет....
Я не нашелся что ответить.
Инопланетяне в конфе. Дожили.
Зато понятно, весело и логично
depo_broker
26.4.2008, 11:51
по первой шутке я понял так, что так компьютер учат быть похожим на матрицу :-)) типа, после глупостей человека, сидящего за компом, комп, как бы с ним разговаривает рекламными лозунгами и его мысли читает :-) да?
второе не вкуриваю пока.. йезыка не знаю.
С уважением
| QUOTE (depo_broker @ 26.04.2008, 11:51) |
второе не вкуриваю пока.. йезыка не знаю.
|
Макс, ща я тебя научу курить такое:
mov - переместить данные из dest в target
sub - вычитать
jump (в большинстве диалектов обычно - jmp) - безусловный переход, к команде, стоящей на указываемой метке
nop - нет операции (ничо не делать, перейти к след команде).
[cut]
.....
.....
[cut] - кусок кода вырезан, неважно чо он делает, известно лишь что там что-то есть но на это на плювать.
depo_broker
28.4.2008, 18:06
Мммм.. а что это за йезык-то?.. ну да не важно- этта часть кода- типо "бегущий слон" штолле?
В таком случае- талантлив, шельмец!.. :-))
С уважением
Гэта ассемблер. Лана, не парься - при встрече растолкую на палцах =)
| QUOTE (Ozzy @ 25.04.2008, 14:23) |
На вопрос: зачем метку обвесил нопами, автор сказал: это помехоустойчивый код, вдруг щетчег команд сбойнет....
Я не нашелся что ответить. |
Да этому баяну уж лет десять. Дело не в количестве памяти и помехоустойчивости, а в тараканах в голове...
| QUOTE (Paul @ 29.04.2008, 11:24) |
| Да этому баяну уж лет десять. |
Точней - декабрь 1996 года, ст. Бологое, контроллер управления ЭЦ ДЦ.
Код-ревью производил впс самолично, непосредственно на объекте. Все в то время были помешаны на помехоустойчивости микроконтроллерного управления безопасностью движения поездов.
Так это вы и есть автор сего шедевра?
То, что нужна помехоустойчивость - эт понятно. Особенно на ж/д транспорте. Правда, не такая, как на авиа транспорте
Только то, что тут написано, никакого полезного действия на помехоустойчивость не оказывает, ага.
| QUOTE (Paul @ 29.04.2008, 14:02) |
Так это вы и есть автор сего шедевра? То, что нужна помехоустойчивость - эт понятно. Особенно на ж/д транспорте. Правда, не такая, как на авиа транспорте Только то, что тут написано, никакого полезного действия на помехоустойчивость не оказывает, ага. |
Я автор код-ревью сего шидевра.
Автор кода - вполне уважаемый в своих кругах чел, нынче наверно даже где-то ктн... =)) В тот день привелось мне указать, что сбойнуть может не токмо щетчег команд, но и иные какие каскады. Это замечание стало квинтессенцией темы его дисера.
Однако, защите от сбоя счетчика тоже не поможет
Забавные там у вас ктн...
Ну тогда он ктном и не был, после моего код-ревью призадумался, озадачился и отемился. Набралсо ума, в общем, с моей-то подачи.
зыЖ таки вспомнил: тот код я ревьюил именно в понедельник: в вскр выезжали, ночью приезжали, поутряне уже косяки косяками вылавливали.
Вот еще, оценка задачи разработчиком, по типу "нах дох нахярили, расхяривай нах":
| QUOTE |
что надо сделать: - процедура формирования массива закачки 2 часа - процедура анализа активности хостов 4 часа - процедура сбора статистики 2-4 часов - отладка всего от 4-8 часов (если не будет подводных камней ) + отладка SQL процедур +4-8 часов
|
Итого на 10 часов разработки - 16 часов багофикса. Или другими словами - из каждых 10 строчек первично разработанного (и осмысленного) кода предполагается переосмыслить и заменить 16. Да и то если не будет подводных камней. Из пояснений программера я так не понял, какие подводные камни нужны для разработки, и что в случае если я ему достану эти подводные камни, будет ли работа сделана быстрей и насколько.
Еще абзац.
Кодревьюил свежеиспеченный код перед выкладкой. Завернул на доработку.
перлы:
В N мест встречается подобное, с вариациями стрингов и интов:
| QUOTE |
strncpy( str, "([[:punct:]|[:space:]])*",24); str +=24; *str++ = *from; esc_count += 25;
|
Но иногда встречалось и такое:
| QUOTE |
*str++ = '['; *str++ = ' '; *str++ = ']'; *str++ = '+'; esc_count +=3;
|
| QUOTE |
int dbl_buff_len = BUFSIZE; dbl_buff_len = dbl_buff_len << 1; initid->max_length = dbl_buff_len ; initid->ptr = malloc( dbl_buff_len );
|
далее dbl_buff_len нигде не участвует....
Аналогичное удвоение в другом куске кода работает так:
| QUOTE |
int dbl_buff_len = BUFSIZE + BUFSIZE;
|
Любопытно что мешало чюдаку напесать #define DBLBUFSIZE BUFSIZE << 1
Но когда я увидел такую строчку:
| QUOTE |
*length=esc_count + 48; // 48;
|
я понял что человек программирует методом статистического научного тыка.
Куда катится ИТ?????
Дожили.
Еще один чюдак.
Взял я его к себе, с надеждой что чел Старой Закалки, старше меня лет на 10ть, и на собеседовании разумные речи говорил...
Так вот он с пеной у рта мне доказывал что strncpy работает быстрей чем strcpy. Даже тот мой аргумент что надо проверять два условия у strncpy - на длину и окончание строки, супротив одного у strcpy - на окончание строки, не убедил чела. Отсыл к сорцам ничего не дал - потому что - во всеуслышание - "нечего сорцы смотреть если я и так знаю".
Ткнул носом в сорцы. strncpy - основной цикл 5 строк, 9 операторов, strcpy - 1 строка, 4 оператора.
На следующий день чюдак скромненько извенилсо по аське.
Извенить чтоле?..
И за что в ИТ растут ЗП????
Если солнце утром аккуратно всходит,
а потом опять же вечером заходит,
не считай за баги пятна. В этом коде
ничего не трогай, лучше выпей пива.
Починили давешний баг. Теперь восстанавливают бекапы. Закат солнца производится вручную.
Оззи, многие персонажи старой закалки считают западлом верить в оптимизатор и полагают что полученный код, "оптимизированный" (как им кажется) вручную способен без труда прочесть любой другой персонаж старой закалки (што правда). Персонажей новой закалки они за людей не признают.
Насчет стиля: бывает "инженерный" подход к кодированию, когда место каждого оператора продумывается ДО того как он размещается в коде. А бывает "скульптура" - когда код формируется в процессе размышлений. "Скульптурный" подход хорош для прототипирования неочевидной задачи. Но часто остается и в финальном коде.
Всмомнил как мы потратили немало усилий во второй версии Софта чтобы оптимизировать графическое ядро для целочисленных операций. Плавающий сопроцессор был тогда редкостью и работал не шустро быстро. Оптимизировали. Более того, штатный математик мог доказать что его целочисленный код - наиболее эффективен. Этот код, кстати, до сих пор работает, уже лет 15.
А потом Интел выпустил новую модель процессора, в которой математический сопроцессор был встроенным (как и есть по сей день) и на некоторых операциях работал чуть ли ни быстрее чем целочисленный.
С тех пор я болт забил на мелочную оптимизацию, все равно пока продукт делаешь производительность вырастет больше чем можно сэкономить. Вот так и получаются уроды типа Висты.
| QUOTE (Yar @ 12.05.2008, 13:05) |
многие персонажи старой закалки считают западлом верить .................................... С тех пор я болт забил на мелочную оптимизацию, все равно пока продукт делаешь производительность вырастет больше чем можно сэкономить. Вот так и получаются уроды типа Висты. |
Хе-хе!!!

А не проявления ли это "проявляющейся закалки" ?
И чем Виста-то не угодила? Каток "технического "-прогресса_"" неумолим
И всем хочется кушать - значит нужны поводы заставить _клиента_ купить новый комп., новую ось, новое прикладное ПО...
И разработчики при деле - всё отлично
Яр, мелочность оптимзации одного и того же кода очень сильно зависит от решаемой задачи.
В графических двиглах - используемых в фотошопах, кадах и прочих корелах а также подвижных играх на закрытом воздухе - обычно количество операций велико, при довольно скромном наборе примитивов (формализованных объектов). А вот количество обрабатываемых объектов на один камень обычно не сильно велико - даже если дезигнер придумает афигенный сурфейс и пожелает его отрендерить в тыще ракурсов.
В информационных же системах традиционно громаден объем обрабатываемых объектов (сиречь примитивов), при небогатом наборе оных операций, и вся работа происходит на ограниченном наборе камней - то есть много меньше одного камня на одного клиента (тобишь СМО по типу "вас тут много а я одна и зарплата маленкая - всево 3.3 вольта").
Так вот, если выходить на графическую информационную систему - не в смысле поиска клучевых слов "по картинкам" ака гугль и даже не ОЦР ака "Поток" в лице гаишной распозновалки заведомо помытых номеров (потому ща навалились чтоб нумера мыли), а более правильную: поиск похожего фрагмента в базе картин - вот тут окромя оптимальности графодвигла, решаемой ну скажем сопроцессором или аксилиратором (или даже графическим сервантом что разумней) приходит на ум оптимальность логодвигла, что решается обычно людьми.
Ключевое слово - "мелочная". Мне пару раз удавалось оптимизировать работающий (и продаваемый!) код раз в 100. Но это другая история и другие методы.
Виста - порождение законов Паркинсона в чистом виде. Была история о разработке панельки "Logout | Shutdown | Restart" в Висте. Рекомендую найти и ознакомиться.
Оззи: штобы понять чем мелочная оптимизация отличается от действительно полезной надо изучать результат работы оптимизатора компилятора. И изучать соответствующую информацию после выхода каждой его новой версии. Тогда и будет понятно о чем надо заморачиваться, а на что времени тратить не стоит. Со временем в голове возникают наборы правил, типа устойчивых выражений в человеческом языке.
Профайлер еще рулит.
Яр: дык и нету спора-то, а где нет спора - нет диспута, а нет диспута - то вроде как и проблемы нет.
А проблема есть, и ты правильно ее обозначил: разница в подходах. Скульптурный подход никак не годится для решения конкретных задач, которые имеют четкое определение входов-выходов, и задача кодера заключается лишь в осознанном набивании кода в соответствии со здравым смыслом и - главное - имеющимся опытом в использовании всех доступных инструментов и определении необходимости использования и разработки иных, пока еще недоступных. Незачем заниматься излишней оптимизацией и даже профайлином, если ты полагаешься на опыт чела.
Но если полагаешься на опыт, а потом видишь откровенные коры, начинаешь немного сомневаться в справедливости и больше верить в Создателя, коего пути, ведомо, неисповедимы.
> Скульптурный подход никак не годится для решения конкретных задач, которые имеют четкое определение входов-выходов
Согласен. Но человек слаб. Иногда простой, ясный и красивый инженерный код тупит невероятно, из-за какой-то мелочи. Мы давеча не поленились выпустить новый релиз одного из продуктов, который я смог ускорить в 10 раз, заменив 2 строки кода. Так и написали: "new features: works 10 times faster".
| QUOTE (Yar @ 12.05.2008, 14:07) |
| ... я смог ускорить в 10 раз, заменив 2 строки кода... |
я знаю как это делается =))
меняем на
Национальный индусский способ показать заказчику прогресс =))
| QUOTE (Ozzy @ 12.05.2008, 14:19) |
| QUOTE (Yar @ 12.05.2008, 14:07) | | ... я смог ускорить в 10 раз, заменив 2 строки кода... |
я знаю как это делается =))
меняем на
Национальный индусский способ показать заказчику прогресс =))
|
Как ни странно - похоже. Но, конечно, сложнее и без индусских штучек. Кстати, ноги проблемы росли из уродского кода микрософта.
Longobard
12.5.2008, 15:01
Это еще цветочки. Я видел использование nanosleep-а во всяких постоянно вызываемых функциях. Потом два месяца эти перцы делали вид, что оптимизировали код, а на деле занимались другим проектом за деньги заказчика проекта с нанослипом. Так что смотрите профайлером на основные дырки в производительности. Обнаружить "левые" задержки производительности можно довольно быстро, имея в руках нормальный профайлер.
Ващет я всегда ищю sleep в чужом коде, до профайлера не доходит. А ищю потому, что некоторые деятели синхронизируют две параллельные задачи перекурами надолго (sleep(600) обычное дело =))), не заботясь о семафорах и прочих непацанских ивентов.
Вот еще кора.
Приходид чел вчера к мне, грит: вот, задача. Как решать?
Подымаю коды. Быстро смотрю что к чему. Ищу решение. Походу поясняю челу что я делаю, справляюсь о том верно ли я понимаю задачу, убеждаюсь в том что все ему понятно итп.
В конце концов нахожу вариант решения, сиречь рутину, которую можно использовать как паттерн, ессно следует изменить кой-какие источники данных ну и вызовы кой-каких рутин.
Чел удовлетворен и ушел решать задачю.
Прошли сутки.
Пришел чел сення к мне, грит: вот, задача. Как решать?
У меня ощущение Дня сурка. Говорю что вчера же я растолковывал сию таску и преуспел.
Начинаю все сызнова.
Выхожу на тот паттерн который указал вчера, походу предлагая в следующий раз приходить к мне с устройством записи типо блокнота или на худой конец видеокамеры и прочаяипрочая.
Так вот на том паттерне чел сказал: ой! понял в чем моя проблема! Однако не понял: я смотрю те источники данных что указано в сей рутине, а там вовсе не те данные.
Я ощущаю признаки надвигающегося срыва....
Объясняю снова что надо изменить, в конце концов удовлетворяю профессиональное любопытство чела, и он удаляется для решения таски.
Каково же было мое изумление, когда чз нескоко время он сново пришел к мне и сказал, что все понял, только спрашивает моего разрешения использовать этот паттерн для решения его задачи.....
Вроде не молдаванин и не таджыг.
Высокие блин тихнологии!
Нынче у одного из дивелоперов ДР. Диалог:
XXX (12:38) :
на кухне торт расшарили с правами 777 !
ZZZ (12:38) :
тоесть в него можно писать???????
с правами 777 можно всем делать что угодно, даже исполнять торт. для писать-читать достаточно шестерок
Правда исполнить торт можно все го 1 раз - например, выполнить его в... именинника.
Я вот тоже поржал сначала, а потом задумался о том как "исполнить" торт.
Если торт вкусный, то:
# id siroco
uid=800(siroco) gid=800(nordica_rules)
# chown siroco the_cake
# chmod 700 the_cake
Не. Я этот скрипт не буду исполнять.
У тебя нету прав на исполнение мной твоих скриптов =)))
Пойду исполню торт.
Кииииборги...
Нет, это просто последствия жизни по юних и жава
плять: Чувствую что хочу в сортир.
Иду в сортир, беру с собой кружку чтоб наполнить чаем походу.
Кружку чаем наполняю, в сортир зайти забываю.
Чай же пью, выпиваю полностью кружку.
Через некоторое время goto плять.