Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Великие олимпиадники-оптимизаторы, разработчики kPHP. Лучше сначала проверить длину строки, и только потом, если длина строки подходящая, проверять строку через strncasecmp (очень дорогостоящая операция)
Об их мегагениальных оптимзациях я уже ранее писал: http://govnokod.ru/15406
Но тут наверняка ж можно намного лучше заоптимизировать. Давайте подумаем, как можно улучшить сие творение истинных гениев
Например, зачем они вообще используют эту непонятную strncasecmp функцию? Вот например взять слово "host" - там всего 4 байта. Это отлично укладывается в uint32_t переменную. Но просто так засунуть слово надо игнорировать разрядность каждой буквы.
Например, надо все возможные кобенации из больших и малельких букав запихнуть в массив "host" "Host" "hOst" "HOst" "hoSt" ну и так далее и втобы там были переменные unint32_t одно слово одна переменная, и чтоб отсортировать, а потом через двоичный поиск нахожить, еслть ли там подходящая кобенация из 4 букв, находится за скорость O(log n) сравнений кобенаций - оптимизированно
Но вот у слова "connection" и "content-length" уже намного больше кобениаций будет.
Там "connection" - 10 буков это как 10 бит - а 10 бит это 2^10=1024кобенаций.
А в "content-length" 14 буков, но '-' не считается, так что всего 13 буков 2^13=8192 кобенаций
Много памяти расходуется, неэкономно. Может надо проверять кобенации кусками по 4 байт? Или какой размер будет оптимальнее?
Но этот метод недостаточно универсален, например он не будет работать с не-ascii кодировкой. Например с какой-нибудь кодировкой типа koi8-r для кириллических букв
Ну это пока. Скоро уж сделают Исконно Русский Национальный Православный Интернет ППГ(протокол передачи гипертекста, аналог капиталистического HTTP) , где вместо GET POST и HOST будет ВЗЯТЬ ОТПРАВИТЬ и ХОЗЯИН. А использование англоязычных слов надо запретить как пособничество пятой колонне. Там вон уже в новостях предлагали запретить иностранніе язblкиъ.
Короче, надо эту АСЦИИ кодировку вообще искоренить невозьбранноъЪ. Надо и языки использовать исконно рюсские, чтоб только на 1C писали, на Рапире, и на языке РАЯ(исконно православном), ну и можно Языкъ Си руссифицировать, и ассемблеры всякие, это тоже
Так в этом случае кроме сравнений кириллицы весь код переписать придётся.
Останется разве что поле wlen да метод PUT, чтобы гейропейцы знали истинных вождей.
Вот эта вот херня с ручным проставлением числа букв в строке с которой мы сравниваем ту вот херню, типа в "GET" три буковки, и мы будем три буковки сравнивать, надо ручками набирать, сколько там буковок в слове, с которым мы сравниваем эту говностроку.
И еще мы ручками каждый раз пишем сначала говнопроверку, что там есть три буквы, или может быть нет? Вот если там точно три буквы, только тогда будем сравнивать с "GET"
Нет чтобы как-нибудь это автоматизировать
Такой макрос бессмысленен, т.к. будет считать длину строки в рантайме через strcmp. Вот допустим в плюсах я могу через constexpr написать метод, который в компайлтайме посчитает длину строки и будет сверять сразу с ней. А это си, если верить тебе же.
по моему опыту, такой код (я посмотрел весь файл) пишут не олимпиадники, а шахматисты.
олимпиадники ищут быстрые решения, поэтому код часто напичкан дефайнами и прочими синтаксическими подсластителями, но все таки кое-как структурирован (что бы меньше писать и быстрее рефакторить).
шахматисты же загружают проблему в моск, думают пару минут, а потом высирают 2-5К строк функцию, часто с кучей ручного нетривиального копипаста.
хотя конечно hts_parse_execute() (из которой запощеные куски выдраны) до шедевральных монументов которые я видел не дотягивает, но с 400 строками плотного кода - очень близко.
Расследование:
Copyright 2010-2012 Vkontakte Ltd - копирайт вконтакта, это понятно
2010-2012 Nikolai Durov - это брат Павла Дурова.
В студенческие годы Николай был членом команды СПБГУ, которая является чемпионом международной студенческой олимпиады по программированию 2000—2001 годов.
2010-2012 Andrei Lopatin - Андрей Лопатин, старший преподаватель кафедры системного программирования математико-механического факультета СПБГУ - победитель открытого личного чемпионата мира по программированию TopCoder Open - 2009 в номинации Marathon Match!
Преподаватель математико-механического факультета СПбГУ Андрей Лопатин в начале «нулевых» в команде с братом Павла Дурова Николаем два года подряд выигрывал студенческий чемпионат мира по программированию ACM-ICPC. К тому же он занимался подготовкой этих самых олимпиадников
Правда я вот не совсем понимаю, как увлечение шахматами может ставить "отпечаток" на код, который этот человек выдает. Ну насчет олимпиадников я еще могу как-то логически это понять, там жеж важно побыстрее нафигачить код, чтобы он работал и проходил все тесты, а не чтоб потом кто-то сопровождал и правил этот код. А шахматы-то каким боком тут?
И вообще, дают ли навыки игры в шахматы и навыки олимпиадного программирования какой-то профит, если заниматься нормальным программированием? Я например встречал мнение, что от олимпиадников бывает сложно в итоге добиться нормального читаемого кода, потому как они привыкли на тяп-ляп все писать, лишь бы эта хрень работала
Ну если Dummy00001 так метко смог увидеть в этом коде следы шахматного программиста, который там действительно был, наверняка какой-то след все ж остается
Такой народ любит долго и глубоко думать. И исходят из того что все кто будут код в будущем читать и править, могут с легкостью весь мысленный процесс повторить.
В добавок встречается код который с виду грабли, но работает. Логика как спагетти - но продумана на все... 99%. И вот что бы тот последний 1% найти где не работает, приходится эти макароны раскручивать, временами наступая на грабли каких неожиданных побочных эффектов.
Я уже двух коллег заядлых шахматистов имел. Вот такие были наблюдения. Просто в лоб тривиальный код написать у них получается только плохо. (Но преимущество что им даешь какую монументальную проблему, и они тебе за пару дней ее надежно решают.)
> Я например встречал мнение, что от олимпиадников бывает сложно в итоге добиться нормального читаемого кода, потому как они привыкли на тяп-ляп все писать, лишь бы эта хрень работала
я работал с олимпиадниками и наша проблема была что народ очень быстро решает проблему - но вот решение это оформить в продукт просто не способны. Ядро программы написать - могут. Но ядро это только 5-10%. Остальные 90-95% нужно искать кого другого. а потом появляется проблема что коммуницировать олимпиадныки тоже могут потому что у них все очевидно и говорить и объяснять нечего.
> И вообще, дают ли навыки игры в шахматы и навыки олимпиадного программирования какой-то профит, если заниматься нормальным программированием?
Я так думаю, что профит есть. Как бывший шахматист, могу сказать, что легче воспринимать сценарии развития событий в коде, т.е. if-else-лапша
Например, надо все возможные кобенации из больших и малельких букав запихнуть в массив "host" "Host" "hOst" "HOst" "hoSt" ну и так далее и втобы там были переменные unint32_t одно слово одна переменная, и чтоб отсортировать, а потом через двоичный поиск нахожить, еслть ли там подходящая кобенация из 4 букв, находится за скорость O(log n) сравнений кобенаций - оптимизированно
Там "connection" - 10 буков это как 10 бит - а 10 бит это 2^10=1024кобенаций.
А в "content-length" 14 буков, но '-' не считается, так что всего 13 буков 2^13=8192 кобенаций
Много памяти расходуется, неэкономно. Может надо проверять кобенации кусками по 4 байт? Или какой размер будет оптимальнее?
Короче, надо эту АСЦИИ кодировку вообще искоренить невозьбранноъЪ. Надо и языки использовать исконно рюсские, чтоб только на 1C писали, на Рапире, и на языке РАЯ(исконно православном), ну и можно Языкъ Си руссифицировать, и ассемблеры всякие, это тоже
Останется разве что поле wlen да метод PUT, чтобы гейропейцы знали истинных вождей.
с какой-то непонятной херней, типа
Там в одном из членов этой структуры хранится размер строки
Этим говном оно читает HTTP запрос, посланный браузером в их говновебсервер. Какие-то куски текста выцепляет. Лень разбирать это говно
Инкапсуляция? Не, не слышал
вместо
Вот эта вот херня с ручным проставлением числа букв в строке с которой мы сравниваем ту вот херню, типа в "GET" три буковки, и мы будем три буковки сравнивать, надо ручками набирать, сколько там буковок в слове, с которым мы сравниваем эту говностроку.
И еще мы ручками каждый раз пишем сначала говнопроверку, что там есть три буквы, или может быть нет? Вот если там точно три буквы, только тогда будем сравнивать с "GET"
Нет чтобы как-нибудь это автоматизировать
Premature optimization во всех полях.
по моему опыту, такой код (я посмотрел весь файл) пишут не олимпиадники, а шахматисты.
олимпиадники ищут быстрые решения, поэтому код часто напичкан дефайнами и прочими синтаксическими подсластителями, но все таки кое-как структурирован (что бы меньше писать и быстрее рефакторить).
шахматисты же загружают проблему в моск, думают пару минут, а потом высирают 2-5К строк функцию, часто с кучей ручного нетривиального копипаста.
хотя конечно hts_parse_execute() (из которой запощеные куски выдраны) до шедевральных монументов которые я видел не дотягивает, но с 400 строками плотного кода - очень близко.
>>рефакторить
ого
> >>рефакторить
> ого
у тебя с рефакторингом похоже только позитивные ассоциации. я видел примеры где легким движением руки весь код ставился на с ног на голову.
Расследование:
Copyright 2010-2012 Vkontakte Ltd - копирайт вконтакта, это понятно
2010-2012 Nikolai Durov - это брат Павла Дурова.
В студенческие годы Николай был членом команды СПБГУ, которая является чемпионом международной студенческой олимпиады по программированию 2000—2001 годов.
2010-2012 Andrei Lopatin - Андрей Лопатин, старший преподаватель кафедры системного программирования математико-механического факультета СПБГУ - победитель открытого личного чемпионата мира по программированию TopCoder Open - 2009 в номинации Marathon Match!
Преподаватель математико-механического факультета СПбГУ Андрей Лопатин в начале «нулевых» в команде с братом Павла Дурова Николаем два года подряд выигрывал студенческий чемпионат мира по программированию ACM-ICPC. К тому же он занимался подготовкой этих самых олимпиадников
2012 Anton Maydell -- Антон Майдель, олимпиадник
к тому же еще и шахматист https://vk.com/id112908167 (так что похоже что ты насчет шахматиста прям в точку)
Но олимпиадников там все ж больше, чем шахматистова. Не исключаю, что тот самый код писал как раз шахматист
И вообще, дают ли навыки игры в шахматы и навыки олимпиадного программирования какой-то профит, если заниматься нормальным программированием? Я например встречал мнение, что от олимпиадников бывает сложно в итоге добиться нормального читаемого кода, потому как они привыкли на тяп-ляп все писать, лишь бы эта хрень работала
Каждый день приходит на работу и пишет новый обход конем доски с нуля.
Да никакого отпечатка нет, лол, просто расширение кругозора и способности думать.
Такой народ любит долго и глубоко думать. И исходят из того что все кто будут код в будущем читать и править, могут с легкостью весь мысленный процесс повторить.
В добавок встречается код который с виду грабли, но работает. Логика как спагетти - но продумана на все... 99%. И вот что бы тот последний 1% найти где не работает, приходится эти макароны раскручивать, временами наступая на грабли каких неожиданных побочных эффектов.
Я уже двух коллег заядлых шахматистов имел. Вот такие были наблюдения. Просто в лоб тривиальный код написать у них получается только плохо. (Но преимущество что им даешь какую монументальную проблему, и они тебе за пару дней ее надежно решают.)
> Я например встречал мнение, что от олимпиадников бывает сложно в итоге добиться нормального читаемого кода, потому как они привыкли на тяп-ляп все писать, лишь бы эта хрень работала
я работал с олимпиадниками и наша проблема была что народ очень быстро решает проблему - но вот решение это оформить в продукт просто не способны. Ядро программы написать - могут. Но ядро это только 5-10%. Остальные 90-95% нужно искать кого другого. а потом появляется проблема что коммуницировать олимпиадныки тоже могут потому что у них все очевидно и говорить и объяснять нечего.
А потом
--Вася, а как работает твой модуль? А там ничего не понятно и ни строчки документации
--Ой, ну там все просто, почитай код
Я так думаю, что профит есть. Как бывший шахматист, могу сказать, что легче воспринимать сценарии развития событий в коде, т.е. if-else-лапша
Мне бы так уметь! А то думаешь тут целый день, потом 30 строчек пишешь.
Ну да ладно, я так понял, что и олимпиадников и у шахматистов код write-only, потом хрен разберёшь, что это и для чего было написано )
D->wlen == 4 && !strncasecmp (D->word, "host", 4))
если вдруг вынести это в мокрос для раскрытия в компайл тайм то все, пизда
или скажем вот
http://govnokod.ru/15406