- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
// https://github.com/vk-com/kphp-kdb/blob/ce1ac4fbde2d3b546936ad07d6a748958f6d2198/net/net-http-server.c#L253
if (D->wlen == 3 && !memcmp (D->word, "GET", 3)) {
D->query_type = htqt_get;
} else if (D->wlen == 4) {
if (!memcmp (D->word, "HEAD", 4)) {
D->query_type = htqt_head;
} else if (!memcmp (D->word, "POST", 4)) {
D->query_type = htqt_post;
}
}
//...
if (D->wlen != 0) {
/* HTTP/x.y */
if (D->wlen != 8) {
c->parse_state = htqp_skiptoeoln;
D->query_flags |= QF_ERROR;
} else {
if (!memcmp (D->word, "HTTP/1.0", 8)) {
D->http_ver = HTTP_V10;
} else if (!memcmp (D->word, "HTTP/1.1", 8)) {
D->http_ver = HTTP_V11;
} else {
c->parse_state = htqp_skiptoeoln;
D->query_flags |= QF_ERROR;
}
}
}
...
if (D->wlen == 4 && !strncasecmp (D->word, "host", 4)) {
D->query_flags |= QF_HOST;
} else if (D->wlen == 10 && !strncasecmp (D->word, "connection", 10)) {
D->query_flags |= QF_CONNECTION;
} else if (D->wlen == 14 && !strncasecmp (D->word, "content-length", 14)) {
D->query_flags |= QF_DATASIZE;
} else {
D->query_flags &= ~(QF_HOST | QF_DATASIZE | QF_CONNECTION);
}
//...
Великие олимпиадники-оптимизаторы, разработчики kPHP. Лучше сначала проверить длину строки, и только потом, если длина строки подходящая, проверять строку через strncasecmp (очень дорогостоящая операция)
Об их мегагениальных оптимзациях я уже ранее писал: http://govnokod.ru/15406
Но тут наверняка ж можно намного лучше заоптимизировать. Давайте подумаем, как можно улучшить сие творение истинных гениев
j123123 19.04.2016 03:38 # +2
Например, надо все возможные кобенации из больших и малельких букав запихнуть в массив "host" "Host" "hOst" "HOst" "hoSt" ну и так далее и втобы там были переменные unint32_t одно слово одна переменная, и чтоб отсортировать, а потом через двоичный поиск нахожить, еслть ли там подходящая кобенация из 4 букв, находится за скорость O(log n) сравнений кобенаций - оптимизированно
j123123 19.04.2016 03:40 # +1
Там "connection" - 10 буков это как 10 бит - а 10 бит это 2^10=1024кобенаций.
А в "content-length" 14 буков, но '-' не считается, так что всего 13 буков 2^13=8192 кобенаций
Много памяти расходуется, неэкономно. Может надо проверять кобенации кусками по 4 байт? Или какой размер будет оптимальнее?
bormand 19.04.2016 07:25 # +2
j123123 19.04.2016 07:42 # 0
j123123 19.04.2016 07:47 # 0
1024-- 19.04.2016 08:54 # +3
j123123 19.04.2016 09:10 # +1
Короче, надо эту АСЦИИ кодировку вообще искоренить невозьбранноъЪ. Надо и языки использовать исконно рюсские, чтоб только на 1C писали, на Рапире, и на языке РАЯ(исконно православном), ну и можно Языкъ Си руссифицировать, и ассемблеры всякие, это тоже
1024-- 19.04.2016 09:30 # 0
Останется разве что поле wlen да метод PUT, чтобы гейропейцы знали истинных вождей.
guest 19.04.2016 16:52 # +2
j123123 19.04.2016 19:13 # 0
Antervis 19.04.2016 08:43 # +3
Antervis 19.04.2016 08:12 # 0
j123123 19.04.2016 08:22 # 0
с какой-то непонятной херней, типа
Там в одном из членов этой структуры хранится размер строки
j123123 19.04.2016 08:28 # +1
Этим говном оно читает HTTP запрос, посланный браузером в их говновебсервер. Какие-то куски текста выцепляет. Лень разбирать это говно
chtulhu 19.04.2016 08:14 # 0
Инкапсуляция? Не, не слышал
kurwa 19.04.2016 08:43 # 0
j123123 19.04.2016 08:46 # 0
вместо
Вот эта вот херня с ручным проставлением числа букв в строке с которой мы сравниваем ту вот херню, типа в "GET" три буковки, и мы будем три буковки сравнивать, надо ручками набирать, сколько там буковок в слове, с которым мы сравниваем эту говностроку.
И еще мы ручками каждый раз пишем сначала говнопроверку, что там есть три буквы, или может быть нет? Вот если там точно три буквы, только тогда будем сравнивать с "GET"
Нет чтобы как-нибудь это автоматизировать
Antervis 19.04.2016 10:17 # 0
guest 19.04.2016 10:30 # 0
j123123 19.04.2016 16:40 # +2
guest 19.04.2016 09:22 # 0
Premature optimization во всех полях.
Dummy00001 19.04.2016 17:18 # +2
по моему опыту, такой код (я посмотрел весь файл) пишут не олимпиадники, а шахматисты.
олимпиадники ищут быстрые решения, поэтому код часто напичкан дефайнами и прочими синтаксическими подсластителями, но все таки кое-как структурирован (что бы меньше писать и быстрее рефакторить).
шахматисты же загружают проблему в моск, думают пару минут, а потом высирают 2-5К строк функцию, часто с кучей ручного нетривиального копипаста.
хотя конечно hts_parse_execute() (из которой запощеные куски выдраны) до шедевральных монументов которые я видел не дотягивает, но с 400 строками плотного кода - очень близко.
guest 19.04.2016 17:20 # −1
>>рефакторить
ого
Dummy00001 19.04.2016 17:39 # 0
> >>рефакторить
> ого
у тебя с рефакторингом похоже только позитивные ассоциации. я видел примеры где легким движением руки весь код ставился на с ног на голову.
guest 19.04.2016 18:17 # +2
Dummy00001 19.04.2016 18:20 # +1
j123123 19.04.2016 18:03 # 0
Расследование:
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 (так что похоже что ты насчет шахматиста прям в точку)
Но олимпиадников там все ж больше, чем шахматистова. Не исключаю, что тот самый код писал как раз шахматист
j123123 19.04.2016 18:07 # 0
И вообще, дают ли навыки игры в шахматы и навыки олимпиадного программирования какой-то профит, если заниматься нормальным программированием? Я например встречал мнение, что от олимпиадников бывает сложно в итоге добиться нормального читаемого кода, потому как они привыкли на тяп-ляп все писать, лишь бы эта хрень работала
nihau 19.04.2016 18:10 # 0
Каждый день приходит на работу и пишет новый обход конем доски с нуля.
Да никакого отпечатка нет, лол, просто расширение кругозора и способности думать.
j123123 19.04.2016 18:11 # 0
guest 19.04.2016 18:15 # 0
Vasiliy 19.04.2016 18:59 # 0
Dummy00001 19.04.2016 18:19 # +3
Такой народ любит долго и глубоко думать. И исходят из того что все кто будут код в будущем читать и править, могут с легкостью весь мысленный процесс повторить.
В добавок встречается код который с виду грабли, но работает. Логика как спагетти - но продумана на все... 99%. И вот что бы тот последний 1% найти где не работает, приходится эти макароны раскручивать, временами наступая на грабли каких неожиданных побочных эффектов.
Я уже двух коллег заядлых шахматистов имел. Вот такие были наблюдения. Просто в лоб тривиальный код написать у них получается только плохо. (Но преимущество что им даешь какую монументальную проблему, и они тебе за пару дней ее надежно решают.)
> Я например встречал мнение, что от олимпиадников бывает сложно в итоге добиться нормального читаемого кода, потому как они привыкли на тяп-ляп все писать, лишь бы эта хрень работала
я работал с олимпиадниками и наша проблема была что народ очень быстро решает проблему - но вот решение это оформить в продукт просто не способны. Ядро программы написать - могут. Но ядро это только 5-10%. Остальные 90-95% нужно искать кого другого. а потом появляется проблема что коммуницировать олимпиадныки тоже могут потому что у них все очевидно и говорить и объяснять нечего.
guest 19.04.2016 18:20 # +2
А потом
--Вася, а как работает твой модуль? А там ничего не понятно и ни строчки документации
--Ой, ну там все просто, почитай код
kerman 19.04.2016 20:19 # 0
Я так думаю, что профит есть. Как бывший шахматист, могу сказать, что легче воспринимать сценарии развития событий в коде, т.е. if-else-лапша
kerman 19.04.2016 20:16 # +1
Мне бы так уметь! А то думаешь тут целый день, потом 30 строчек пишешь.
Ну да ладно, я так понял, что и олимпиадников и у шахматистов код write-only, потом хрен разберёшь, что это и для чего было написано )
OCETuHCKuu_nemyx 04.08.2019 22:43 # 0
guest8 04.08.2019 22:45 # −999
npocmou_xyu 04.08.2019 23:03 # 0
OCETuHCKuu_nemyx 04.08.2019 23:07 # 0
npocmou_xyu 04.08.2019 23:11 # 0
guest8 04.08.2019 22:44 # −999
guest8 04.08.2019 22:46 # −999
guest8 04.08.2019 22:51 # −999
guest8 04.08.2019 22:55 # −999
npocmou_xyu 04.08.2019 23:10 # 0
guest8 04.08.2019 23:51 # −999
npocmou_xyu 04.08.2019 23:53 # 0
PACTPOBblu_nemyx 05.08.2019 01:30 # 0