Home
Programming
programming@conference.jabber.ru
Воскресенье, 22 мая 2016< ^ >
ForNeVeR установил(а) тему: # make peace
| match subject with
| Если вы не знаете с чего начать общение -> некоторые советуют прочесть http://goo.gl/jkcH5R
| логи -> http://chatlogs.jabber.ru/programming@conference.jabber.ru/
| Список картинок за предыдущие дни -> http://jpeg.catfeed.net
| Стерхи -> http://caps.catfeed.net
| Цитаты больше 4х строк -> на пастбин
| p@cjr -> дОбыча радия since Mon Sep 17 00:00:00 2001
| перед тем, как спросить -> почитайте http://mywiki.wooledge.org/XyProblem
| Войс -> просить у модераторов/админов
| В конференцию требуется -> штатный биолог, юрист, бухгалтер и врач (можно разные люди)
| _ -> Need more (та, чьё имя нельзя называть)-born packages and people!;;
Конфигурация комнаты
Участники комнаты

GMT+3
[00:10:25] <дырдырдыр> хо-хо! вмваре дало пробздеться всем в ночи
[00:12:30] <ħ> какое вмваре?
[00:12:33] <ħ> vsphere?
[00:12:40] <ħ> у тебя еще и такое есть?
[00:13:23] <дырдырдыр> :-D
[00:13:39] смекайло вошёл(а) в комнату
[00:13:48] <дырдырдыр> не знаю, lspci говорит, что там интел 440 и вмваре вга
[00:13:56] <ħ> ггг
[00:14:04] <ħ> esxi
[00:14:06] <ħ> норм
[00:16:04] <дырдырдыр> да, вклауд
[00:16:23] <дырдырдыр> сука, всё плохо
[00:16:52] <дырдырдыр> когда на убойном куры сыплются с конвейера куда попало и целая жизнь впереди, это весело
[00:16:53] <ħ> а внутри него openvz?
[00:17:03] <дырдырдыр> а внутри ФЛЕШ
[00:17:05] <дырдырдыр> блядь
[00:17:06] <sulci> дырдырдыр: не болтай глупостей как малолетка!
[00:17:10] <ħ> да
[00:17:20] <ħ> я тут пытался зайти внутрь vcenter недавно
[00:17:25] <ħ> а там флеш
[00:17:27] <ħ> ггг
[00:22:14] <дырдырдыр> блиа, пороль не подходит
[00:24:20] <ħ> может логин не подходит?
[00:25:44] <дырдырдыр> не подходит связка логина с поролем, а что именно — хз
[00:26:03] <ħ> логин в виду user@host ?
[00:26:06] <ħ> *в виде
[00:26:11] <дырдырдыр> просто юзер
[00:26:17] <ħ> а должен быть user@host
[00:26:26] <ħ> по крайней мере у меня так
[00:26:39] <дырдырдыр> хм
[00:26:57] <ħ> @vcenter.example.com чо-нибудь такое
[00:28:10] <дырдырдыр> неа
[00:32:06] Аман вышел(а) из комнаты
[00:32:34] <ħ> https://www.youtube.com/watch?v=v0roWWx7N4I
[00:35:21] <дырдырдыр> как он ловко разговаривает
[00:35:51] <ħ> ггг
[00:36:21] <ħ> http://www.cirrascale.com/cloud/
вон я предлагал блек-джеку такое сделать
[00:36:40] <дырдырдыр> кому что, а индусу внц в дом0, иначе гроб гроб кладбище пидор
[00:36:40] <sulci> дырдырдыр: не болтай глупостей как малолетка!
[00:37:38] <дырдырдыр> Шо ж, блять, с вмварью-то делать
[00:37:38] <sulci> дырдырдыр: не болтай глупостей как малолетка!
[00:37:44] <ħ> не заходит?
[00:37:52] <дырдырдыр> в поддержке меня не знает никто
[00:38:27] <дырдырдыр> не заходит
[00:38:37] <ħ> хм
[00:38:41] <ħ> нехорошо
[00:39:39] <дырдырдыр> vcloud defector
[00:41:08] <смекайло> vcloud defecator
[00:42:12] <дырдырдыр> дефекатор это слишком почётная должность для такого говна
[00:42:27] <дырдырдыр> можешь убедиться, глянув в гугль
[00:44:41] <ħ> https://www.youtube.com/watch?v=rrJTAhNhaaY
[00:46:19] <ħ> посмотрите на этих советских людей
[00:46:21] <ħ> как в зоопарке
[00:46:25] <ħ> они задают какие-то вопросы
[00:46:29] <ħ> и вспоминают толстого
[00:48:24] <дырдырдыр> О, мы однажды бухали и смотрели музыкальный ринг, там юный путен спрашивал бг, почему он ничего не может понять в текстах
[00:48:57] <ħ> ггг
[00:50:14] ħ вышел(а) из комнаты
[00:54:20] eaeee вышел(а) из комнаты: Replaced by new connection
[00:54:21] eaeee вошёл(а) в комнату
[00:59:34] eaeee вышел(а) из комнаты: Replaced by new connection
[00:59:36] eaeee вошёл(а) в комнату
[01:02:49] Guybrush вышел(а) из комнаты
[01:03:48] Guybrush вошёл(а) в комнату
[01:12:39] <дырдырдыр> чо за день? вообще всё передохло
[01:50:12] <дырдырдыр> а флеш из хромога ещё не выкинули?
[02:00:56] <дырдырдыр> забавно: в чернобыле люди боролись с пиздецом ценой жизней, а гломурные пидрилы в угаре ракинрола пиздели о хуйне. Ленин-то гриб.
[02:00:57] <sulci> дырдырдыр: не болтай глупостей как малолетка!
[02:37:12] eaeee вышел(а) из комнаты
[02:47:14] <дырдырдыр> о, починил
[03:22:54] дырдырдыр вышел(а) из комнаты
[03:37:07] m4n71k0r вышел(а) из комнаты
[04:48:19] смекайло вышел(а) из комнаты
[05:55:05] $haman вошёл(а) в комнату
[06:10:34] махт хекп вошёл(а) в комнату
[06:46:45] gr_buza@arbeiten вошёл(а) в комнату
[07:29:30] махт хекп вышел(а) из комнаты
[07:44:58] gr_buza@arbeiten вышел(а) из комнаты
[08:06:25] махт хекп вошёл(а) в комнату
[08:06:37] <махт хекп> утро
[08:06:47] <махт хекп> .wz unoo
[08:06:50] <sulci> махт хекп: Omsk, Russia - 2016.05.22 0430 UTC / 26°C / 78°F, humidity: 19%, pressure: 30.33 in. Hg (1027 hPa), wind: from the E (080 degrees) at 2 MPH (2 KT), visibility: greater than 7 mile(s)
[08:24:00] portnov вошёл(а) в комнату
[08:24:28] <portnov> утро.
[08:25:34] Аман вошёл(а) в комнату
[08:29:37] <portnov> sulci: утро?
[08:29:39] <sulci> portnov: о_О
[08:29:57] <portnov> sulci: такие дела.
[08:29:59] <sulci> portnov: это чинить
[08:34:51] <махт хекп> sulci: утро это такая проблема, которая решается сама. можно не чинить
[08:34:52] <sulci> махт хекп: гггг
[08:40:07] <Аман> .wz vept
[08:40:07] <sulci> Аман: Patna, India - 2016.05.22 0500 UTC / haze, 33°C / 91°F, humidity: 55%, pressure: 29.53 in. Hg (1000 hPa), wind: from the NNE (020 degrees) at 6 MPH (5 KT), visibility: 2 mile(s)
[08:51:07] <portnov> .wz uscm
[08:51:07] <sulci> portnov: Station name not available - 2016.05.22 0530 UTC / mostly clear, 20°C / 68°F, humidity: 34%, pressure: 29.97 in. Hg (1015 hPa), wind: from the SE (140 degrees) at 9 MPH (8 KT), visibility: greater than 7 mile(s)
[08:51:26] <Аман> hot
[08:51:36] <portnov> yup
[08:54:59] <Аман> portnov: ты есть пляж?
[08:57:42] <ForNeVeR> .wz unbb
[08:57:42] <sulci> ForNeVeR: Barnaul, Russia - 2016.05.22 0530 UTC / partly cloudy, 22°C / 71°F, humidity: 23%, pressure: 30.30 in. Hg (1026 hPa), wind: from the NE (050 degrees) at 4 MPH (4 KT) (direction variable), visibility: greater than 7 mile(s)
[08:59:06] <portnov> Аман:  right form for "do you have a beach" would be "у тебя есть рядом пляж?". And i do not have beach nearby. And anyway, water is too cold yet.
[08:59:09] <Аман> cloudy 22, what if clear 30?
[09:13:46] <махт хекп> easy
[09:16:10] <махт хекп> .wz unoo
[09:16:13] <sulci> махт хекп: Omsk, Russia - 2016.05.22 0600 UTC / 26°C / 78°F, humidity: 19%, pressure: 30.33 in. Hg (1027 hPa), wind: from the NE (050 degrees) at 7 MPH (6 KT), visibility: greater than 7 mile(s)
[09:17:14] <Аман> oops russia is burning
[09:36:50] <махт хекп> true
[09:37:39] rexim вошёл(а) в комнату
[09:38:10] <махт хекп> our Ministry of Emergency Situations discourages people from visiting forests
[09:38:24] <махт хекп> prohibits using open fire etc.
[09:39:13] <махт хекп> > humidity: 19%
quite dangerous
[09:45:37] <Аман> lol
[09:45:47] <Аман> our government never says like this
[10:07:37] <portnov> Аман: don't you have forest fires?
[10:07:54] <portnov> or humidity is too high in your region for that?
[10:09:50] <Аман> we have but nobody cares
[10:10:00] <portnov> hm.
[10:10:21] <portnov> probably it is in uninhabited areas?
[10:11:19] <Аман> no
[10:11:33] <portnov> so
[10:11:50] <portnov> russia is not the only "no-one-cares-of-anything" country...
[10:13:34] <Аман> recently i heard that our state government advised, not to after 9am and before 6pm
[10:13:48] <Аман> whole state boycotted
[10:14:25] <portnov> http://cs8.pikabu.ru/post_img/2016/05/22/4/1463893978181316043.gif
[10:18:27] <махт хекп> Аман: not to what?
[10:19:01] <Аман> cook*
[10:31:12] дырдырдыр вошёл(а) в комнату
[10:32:58] дырдырдыр вышел(а) из комнаты
[10:36:15] Аман вышел(а) из комнаты: Replaced by new connection
[10:36:16] Аман вошёл(а) в комнату
[10:39:37] ermine вошёл(а) в комнату
[10:44:19] arcade_ вышел(а) из комнаты
[10:54:37] Аман вышел(а) из комнаты: Replaced by new connection
[10:54:39] Аман вошёл(а) в комнату
[10:54:41] Mr.Purple вошёл(а) в комнату
[10:56:46] Mr.Purple вышел(а) из комнаты
[11:01:34] Bob Page вошёл(а) в комнату
[11:48:02] ħ вошёл(а) в комнату
[11:49:03] <ħ> portnov: this is because hindi are our brosers
[11:50:07] Аман вышел(а) из комнаты
[11:51:31] <ħ> https://lenta.ru/photo/2016/05/22/games90/#4 ооо, как я люблю первый варкрафт!
[11:52:04] <ħ> https://lenta.ru/photo/2016/05/22/games90/#6 settlers мне очень понравилась, но играть в неё я так и не научился
[12:37:14] Квакер-анонимка вошёл(а) в комнату
[12:38:15] olgZZZ вошёл(а) в комнату
[13:00:09] <portnov> sulci: бжжжь.
[13:00:11] <sulci> portnov: вообще можно
[13:00:32] <portnov> Квакер-анонимка: iranian?
[13:00:43] <Квакер-анонимка> русиан
[13:00:55] <portnov> do you like iggy pop?
[13:00:58] <Квакер-анонимка> прива
[13:01:14] <Квакер-анонимка> portnov: он изобрел стэйдждайвинг
[13:11:13] maxggxam вышел(а) из комнаты
[13:14:01] maxggxam вошёл(а) в комнату
[13:14:22] maxggxam вышел(а) из комнаты
[13:14:49] maxggxam вошёл(а) в комнату
[13:15:16] maxggxam вышел(а) из комнаты
[13:16:11] maxggxam вошёл(а) в комнату
[13:16:23] rexim вышел(а) из комнаты
[13:16:26] maxggxam вышел(а) из комнаты
[13:19:21] maxggxam вошёл(а) в комнату
[13:19:47] maxggxam вышел(а) из комнаты
[13:20:38] maxggxam вошёл(а) в комнату
[13:20:57] maxggxam вышел(а) из комнаты
[13:21:55] maxggxam вошёл(а) в комнату
[13:22:16] maxggxam вышел(а) из комнаты
[13:22:52] maxggxam вошёл(а) в комнату
[13:23:18] maxggxam вышел(а) из комнаты
[13:24:06] maxggxam вошёл(а) в комнату
[13:24:34] maxggxam вышел(а) из комнаты
[13:25:22] maxggxam вошёл(а) в комнату
[13:26:09] maxggxam вышел(а) из комнаты
[13:26:47] maxggxam вошёл(а) в комнату
[13:27:43] maxggxam вышел(а) из комнаты
[13:29:00] maxggxam вошёл(а) в комнату
[13:29:42] maxggxam вышел(а) из комнаты
[13:41:44] maxggxam вошёл(а) в комнату
[13:42:05] maxggxam вышел(а) из комнаты
[13:43:05] maxggxam вошёл(а) в комнату
[13:43:22] maxggxam вышел(а) из комнаты
[13:44:02] maxggxam вошёл(а) в комнату
[13:44:22] maxggxam вышел(а) из комнаты
[13:47:02] <ħ> посоны
[13:47:07] maxggxam вошёл(а) в комнату
[13:47:22] maxggxam вышел(а) из комнаты
[13:50:18] maxggxam вошёл(а) в комнату
[13:50:48] maxggxam вышел(а) из комнаты
[13:51:45] maxggxam вошёл(а) в комнату
[13:54:10] maxggxam вышел(а) из комнаты
[14:09:54] m4n71k0r вошёл(а) в комнату
[14:26:46] <ħ> ой посоны, чо-то у меня апликейшин сломался
[14:27:15] <ħ> посоны
[14:29:29] <ħ> как в gdb следить за fork-ами?
[14:35:37] rexim вошёл(а) в комнату
[14:36:32] <ħ> братва
[14:36:41] <ħ> как в этом ёбаном gdb настроить раз и навсегда историб?
[14:36:42] <sulci> ħ: не болтай глупостей как малолетка!
[14:36:45] <ħ> историю команд
[14:36:46] <ħ> зоебало
[14:46:14] <edgbla> выбрось каку
[14:46:36] <ħ> какую?
[14:46:38] <ħ> gdb?
[14:46:42] <ħ> а дебажить чем?
[14:46:45] <ħ> пальцем?
[14:47:00] <edgbla> а ты пиши без багов
[14:47:39] <ForNeVeR> Отличное решение! Как мы сами не додумались!
[14:48:15] <ħ> ForNeVeR: дело говорит! писать прямо без багов, тогда и дебагер не нужен
[14:49:37] <edgbla> я вот почти ничего не отлаживаю
[14:49:44] <edgbla> только дизасм, когда надо расковырять что-то)
[14:49:57] <ForNeVeR> Ты и кода не пишешь поди.
[14:50:49] <edgbla> пишу
[14:51:04] <edgbla> либо логов хватает, либо глазами видно
[14:51:28] <edgbla> иногда статический анализатор кода подсказывает
[14:51:42] <edgbla> корявые места
[14:52:20] <ForNeVeR> А иногда на продакшене что-нибудь произошло такое интересное, логи врут, пользователи врут, программисты тоже врут, и админы.
[14:52:41] <ħ> ForNeVeR: админы всегда врут
[14:52:54] <ForNeVeR> ħ: все всегда врут.
[15:07:47] <ħ> libmicrohttpd конечно очень прикольная вещь
[15:07:50] <ħ> но глючная
[15:14:37] eaeee вошёл(а) в комнату
[15:14:51] eaeee вышел(а) из комнаты
[15:29:40] eaeee вошёл(а) в комнату
[15:32:22] смекайло вошёл(а) в комнату
[15:32:40] eaeee вышел(а) из комнаты: Replaced by new connection
[15:32:41] eaeee вошёл(а) в комнату
[15:35:51] eaeee вышел(а) из комнаты: Replaced by new connection
[15:35:52] eaeee вошёл(а) в комнату
[15:36:25] eaeee вышел(а) из комнаты
[15:46:22] <ħ> ой
[15:46:25] <ħ> молния прямо в глаз ебнула
[15:46:26] <sulci> ħ: не болтай глупостей как малолетка!
[15:46:34] <ħ> боковым зрение увидел в окне
[15:53:03] reggies вошёл(а) в комнату
[16:00:11] reggies вышел(а) из комнаты
[16:00:25] <portnov> sulci: https://v1.std3.ru/23/83/1463915338-2383b7bb89e9310d665bcc23fe55b862.jpeg
[16:00:27] <sulci> portnov: and is better than the linker command is contained in C и малокалиберные управляемые через выплывающее меню, заголовки, и покупка даже меньше?
[16:00:57] <portnov> малокалиберные заголовки?
[16:00:59] <portnov> ну ладно.
[16:12:49] eaeee вошёл(а) в комнату
[16:24:38] rexim вышел(а) из комнаты
[16:47:37] rexim вошёл(а) в комнату
[17:05:50] eaeee вышел(а) из комнаты: Replaced by new connection
[17:05:51] eaeee вошёл(а) в комнату
[17:18:44] махт хекп вышел(а) из комнаты
[17:19:06] <ħ> ForNeVeR:
[17:19:16] <ħ> ForNeVeR: нашел свой код и проблевался: https://github.com/matwey/logfanoutd/blob/master/src/vpath.c#L21 рекомендую
[17:19:38] <ForNeVeR> Рекомендуете также проблеваться, мистер Math way?
[17:19:56] <ħ> д
[17:20:20] <ħ> смотри какой-то раскудрявый конечный автомат
[17:20:27] дырдырдыр вошёл(а) в комнату
[17:20:42] <ForNeVeR> Ну, я могу только отметить, что мне не нравятся макросы, завязанные на наличие внешних переменных.
[17:20:55] <дырдырдыр> починил всё
[17:20:56] <ForNeVeR> Впрочем, это C, лямбдами не сделать, а повторять одно и то же неохота.
[17:20:59] <ħ> дырдырдыр: я сегодня в этом твоем vsphere не мог iso примонтировать к сидирому и с него загрузится
[17:21:09] <ħ> ForNeVeR: мне тоже, именно поэтому я сделал им undef после функции
[17:21:27] <ForNeVeR> ħ: на goto бы уж сделал тогда :)
[17:21:32] <дырдырдыр> ħ, я сразу смонтировал, а шоб загрузиться там надо ф2 успеть тыкнуть, ибо порядок загрузки больше нигде нельзя указать
[17:21:41] <дырдырдыр> спермоговно это ваше всфере
[17:21:53] <смекайло> кек, у меня тоже что-то такое было: https://github.com/natsys/tempesta/blob/master/tempesta_fw/cfg.c#L353
[17:22:07] <ForNeVeR> ħ: на самом деле не страшно имхо.
[17:22:44] <дырдырдыр> надо ночальнека смотивировать выпилить из сайта небезопасный кал
[17:23:18] <ħ> так, я прикрутил сокет-активнацию, теперь надо написать unit-файл
[17:23:42] <смекайло> ħ: ты посмотри, какой вот тут раскудряый конечный автомат: https://github.com/natsys/tempesta/blob/master/tempesta_fw/http_parser.c
[17:23:58] <ForNeVeR> Да, там-то повеселее.
[17:24:09] <ħ> смекайло: ты его сгенерил или написал?
[17:24:33] <смекайло> cfg.c писал, http_parser.c допиливал
[17:24:41] <смекайло> оба написаны вручную
[17:26:40] <смекайло> если что, то там HTTP прокси внутри ядра реализован
[17:27:59] <ħ> дырдырдыр: лови его, у него HTTP внутри ядра
[17:28:06] <смекайло> а ещё там чуваки заимплементили небольшую БД внутри ядра, и ещё помню делали порт какой-то SSL-либы (LibreSSL?) в ядро, чтобы реализовать поддержку SSL termination в этом прокси
[17:28:32] <дырдырдыр> ħ, дык это модный тренд, так убер работает, чи аирбнб
[17:28:47] <дырдырдыр> и в докер это хттп из ядра пропихивает
[17:28:48] <ħ> дырдырдыр: это потому-что линукс говно
[17:29:07] <дырдырдыр> ħ, дык не линукс говно, а то говно, которое на нём запускают
[17:29:13] <смекайло> там HTTP-парсер отрабатывает прямо в softirq, без контекст-свитчей
[17:29:24] <дырдырдыр> линукс скоро будет вынужден заменить собой говно
[17:29:41] <смекайло> короче, там nginx в ядре
[17:29:46] <ħ> дырдырдыр: а чем заменить после этого линукс?
[17:29:50] <смекайло> и это позволяет защищаться от DDoS
[17:29:52] <ħ> не, круто, чо
[17:29:57] <ħ> угу
[17:29:58] <дырдырдыр> ħ, гнумачем
[17:30:01] <ħ> ггг
[17:30:07] <ħ> смекайло: а от kernel panic позвоялет защищаться?
[17:30:17] <ħ> когда косячный парсер что-то делает не так?
[17:30:28] <ħ> я думаю эта вещь очень дырява должна быть
[17:30:38] <дырдырдыр> я сёдня кернелпаников навидался и не считаю от этого линукс говном, например
[17:30:45] <дырдырдыр> наоборот он ловко продолжает работать
[17:30:45] <ForNeVeR> ħ: задефайни у себя panic() пустым макросом, и всё. Защитился :3
[17:30:49] <дырдырдыр> 2.6.32
[17:31:09] <смекайло> конечно же не защищает, и конечно же дырява
[17:31:18] <смекайло> я уже ловил там несколько buffer overflow
[17:31:36] <смекайло> и пытался написать fuzz-тесты, чтобы это дело отлавливать
[17:31:40] <ħ> это клондайк
[17:31:51] <ħ> для вредителей
[17:31:54] <ħ> сразу получаешь доступ к ядру
[17:32:08] pimiento вошёл(а) в комнату
[17:32:18] <pimiento> Доброго всем всего
[17:32:20] <смекайло> конечно, если написать всё хорошо, то всё будет безопасно
[17:32:23] <portnov> так
[17:32:28] <смекайло> но где вы видели, чтоб писали хорошо
[17:32:29] <portnov> sulci: https://habrastorage.org/getpro/geektimes/post_images/541/955/e72/541955e726b8c0908742fe6bb2e18f20.jpg смотри какая штука.
[17:32:30] <дырдырдыр> а, ещо есть модные микросервисы а хттп в едре
[17:32:31] <pimiento> ħ: вот ты
[17:32:32] <sulci> portnov: у нас еще и другие
[17:32:35] <ħ> pimiento: чо?
[17:32:41] <pimiento> ħ: ты ведь умный
[17:32:41] <ħ> pimiento: проиграли финам ваши хоккеисты
[17:32:45] <ħ> ничего не могут
[17:32:45] <pimiento> знаю
[17:32:48] <portnov> sulci: которые с вантузом вместо рук?
[17:32:49] <sulci> portnov: зная тебя на перле шарит?
[17:32:57] <ħ> pimiento: чой то я умный?
[17:33:09] <pimiento> ħ: ну ты в университете работаешь, там все умные
[17:33:17] <pimiento> меня поэтому из двух выгнали…
[17:33:22] <pimiento> так вот
[17:33:27] <pimiento> ты ведь знаешь про игру жизнь
[17:33:31] <ħ> ну да
[17:33:34] <pimiento> но я не понимаю её правил
[17:33:36] <ħ> там клеточки
[17:33:46] <ħ> я не помню правил наизусть
[17:33:55] <ħ> а в каком месте непонятно?
[17:33:58] <pimiento> ведь получается если я слева-направо считаю клетки, то одна схема выйдет, а справа-налево другая
[17:34:00] <ħ> там же просто список условий
[17:34:12] <дырдырдыр> опять конченный автомат?
[17:34:31] <pimiento> вот если у меня
* *
*
* *
[17:34:38] <pimiento> то они ведь все должны умереть?
[17:34:42] <pimiento> или как?
[17:34:43] <ħ> я никогда не думал над этим если честно, но возможно где-то в правилах указан порядок обхода?
[17:35:06] <ForNeVeR> Там же, вроде, просто отношение соседства используется.
[17:35:10] <pimiento> мне вот кажется, что не должно быть порядка обхода, время ведь кванованное
[17:35:18] <pimiento> так что будет с X ?
[17:37:14] <pimiento> а нет, говорят оно превратится в
*
* *
*
[17:37:19] <pimiento> http://pmav.eu/stuff/javascript-game-of-life-v3.1.1/
[17:38:17] <pimiento> но почему?!
A B
C
D E
A — умрёт от одиночества, B — от одиночества, C — от перенаселения, D — от одиночества и E — от одиночества
[17:38:52] <pimiento> хотя выходит что умирая каждая тройка рождает новую клетку
[17:39:11] <ForNeVeR> pimiento: когда проверяешь условия, то используй слепок предыдущего стейта.
[17:39:22] <ForNeVeR> И тогда порядок обхода неважен.
[17:40:55] <pimiento> просто я смотрю реализацию у этих ребят, например, у них выглядит так словно порядок обхода важен https://code-live.ru/post/cpp-life-game/
[17:41:45] дырдырдыр вышел(а) из комнаты
[17:42:55] <ForNeVeR> pimiento: заметь, next_generation получает две копии мира. Смотрит в prev_world, а задаёт world.
[17:43:02] <смекайло> да
[17:43:21] <смекайло> состояние клетки в текущий момент времени зависит от состояний клеток в предыдущий момент времени
[17:43:29] <смекайло> т.е. в текущем мире ты смотришь в прошлый мир
[17:43:33] <смекайло> а прошлый мир не изменяется
[17:43:57] <смекайло> и каждую клетку высчитываешь, как зависимость от соседних клеток из прошлого мира
[17:44:04] <смекайло> тогда порядок обхода вообще не важен
[17:44:12] <ħ> вопрос
[17:44:17] <ħ> можно ли соптимизировать по памяти
[17:44:46] <смекайло> что соптимизировать?
[17:44:51] <ħ> алкоритм
[17:44:56] <ħ> чтобы хранить не два мира
[17:44:59] <ħ> а меньше чем два мира
[17:45:16] <ForNeVeR> Интересный вопрос.
[17:45:20] <смекайло> я думаю можно
[17:45:22] eaeee вышел(а) из комнаты
[17:45:30] <смекайло> полная версия предыдущего мира не нужна
[17:45:41] <смекайло> нужны только соседние клетки
[17:45:56] <ħ> значит одна строка нужна дополнительная
[17:45:58] <ħ> на самом деле
[17:46:01] rexim вышел(а) из комнаты
[17:46:01] <ħ> две
[17:46:18] <ForNeVeR> смекайло: соседние для кого? Для всех же.
[17:46:32] <ForNeVeR> ħ: а там разве построчно работает?
[17:46:41] <ħ> ммм
[17:46:43] <ħ> а хз
[17:46:47] <ForNeVeR> Вроде ж и по вертикали, и по горизонтали.
[17:46:47] <смекайло> ForNeVeR: для текущей клетки делать буфер соседних, а потом перезаписывать его же
[17:47:05] <смекайло> только его нужно хитро перезаписывать как-то
[17:47:07] <ForNeVeR> смекайло: а когда рассчитываешь соседние - то тебе нужно будет знать предыдущее состояние текущей клетки!
[17:47:07] <смекайло> надо думать
[17:47:19] <pimiento> ну а если хранить не всю доску прошлого состояния, а вектор структур клеток
[17:47:33] <ForNeVeR> Мне кажется, можно на cow как-то выпендриться.
[17:47:36] <смекайло> да
[17:47:41] <pimiento> ну то есть не вектор, а дерево особое
[17:47:52] <pimiento> чтобы быстро находить нужную клетку и смотреть её состояние прошлое
[17:48:00] <ForNeVeR> 1) выбрасывать те куски, которые точно не нужны для дальнейших расчётов
2) не копировать те куски, которые ещё не захотелось поменять
[17:48:15] <pimiento> это разреженная матрица какая-то
[17:48:17] <ForNeVeR> В итоге, наверное, можно обойтись одним буфером 3x3 или около того.
[17:48:19] <pimiento> гервь, ты должен знать
[17:48:30] <ForNeVeR> Ну, уже от правил игры зависит, можно же какие угодно задать.
[17:48:41] <ħ> дерево или хеш
[17:49:02] <ForNeVeR> 2-d tree?
[17:49:06] <pimiento> хэш бала бола хэш балА бОла
[17:49:06] <смекайло> тут нужно просто изменения хранить в ассоциативном массиве
[17:49:23] <смекайло> тогда будет две версии мира
[17:49:29] <смекайло> и дифф между ними в дереве
[17:49:32] <смекайло> или хеш-таблице
[17:49:34] <pimiento> ладно, спасибо за помощь, пойду кодить теперь это дело
[17:49:37] <ForNeVeR> "Ассоциативный массив" довольно дорог по памяти.
[17:50:01] <ħ> так
[17:50:05] <смекайло> дешевле чем полная версия большого мира
[17:50:05] <ħ> надо подумать
[17:50:11] <ħ> как задать
[17:50:20] <ForNeVeR> И дифф - это в худшем случае копия всех клеток. Имхо, это в O-нотации и не оптимизация вовсе.
[17:50:21] <ħ> иерархию
[17:50:21] <pimiento> смекайло: ну да, если брать бесконечную доску
[17:50:42] <ForNeVeR> Но может оказаться практично, идея с персистентным стейтом (с диффами) мне нравится.
[17:50:54] <смекайло> можно выпендрится с динамическим программированием: чтобы считать текущую клетку не как функцию от соседних, а чтобы текущая клетка была как объект, изменяющий состояние соседних объектов
[17:51:16] <pimiento> смекайло: выглядит словно обход будет важен в твоём случае
[17:51:19] <смекайло> pimiento: да
[17:51:29] <смекайло> он и будет
[17:51:36] <pimiento> а не должен как мы выяснили
[17:51:47] <смекайло> почему не должен?
[17:52:07] <смекайло> это в идеальном варианте не должен, если есть две версии мира
[17:52:09] <ForNeVeR> От правил зависит, но чаще всего не должен.
[17:52:23] <ForNeVeR> Но ты можешь свой набор правил применить, конечно :)
[17:52:26] <pimiento> ну вот в классических правилах все умирают и рождаются одновременно
[17:52:44] <pimiento> я не хочу кастовую систему, где люди выше и левее умирают раньше чем люди ниже и правее
[17:52:44] <смекайло> ну, на правила это не должно влиять
[17:52:57] <смекайло> нужно симулировать это одновременно
[17:53:05] <ForNeVeR> смекайло: ещё как должно. В правилах написано одновременно - значит, одновременно.
[17:53:06] <смекайло> а порядок обхода - это чиста для оптимизации на нём спекулировать
[17:53:07] <pimiento> красиво стелешь
[17:53:21] <ForNeVeR> pimiento: кстати, пока ты там - запили мне для квантового компьютера заодно?
[17:53:22] <смекайло> ForNeVeR: одновременно - это что значит?
[17:53:34] <pimiento> смекайло: это значит что время квантованное
[17:53:34] <ForNeVeR> смекайло: тебе денотационно или операционно пояснить?
[17:53:45] <ForNeVeR> Или по сопатке сразу?
[17:53:47] <смекайло> дык кто мешает квантовать время?
[17:54:09] <pimiento> смекайло: для всех одинаково квантованно, а не с часовыми поясами по диагонали вниз
[17:54:19] <смекайло> не будет часовых пояснов, блин
[17:54:27] <смекайло> порядок обхода будет важен только для оптимизированного алгоритма
[17:54:52] <смекайло> алгоритм должен иметь определённый порядок обхода, но он должен обрабатывывать всё так, будто не было никакого порядка обхода
[17:55:08] <смекайло> т.е. он должен иметь состояние
[17:55:08] <pimiento> так я говорю что если у тебя каждая клетка это функция для соседей, то так будет неправильно. потому что каждая клетка должна принимать на вход значение каждого своего соседа
[17:57:23] <смекайло> так я и поясняю, что может быть можно как-то не хранить состояние всех соседей, тем более тех, что уже отработаны алгоритмом
[17:57:53] <pimiento> вообще можно оптимизировать когда у меня есть стабильные паттерны, но как понимать что паттерны изменились когда в них кто-нибудь врезался, например/
[18:00:19] <pimiento> ладно, пойду делом займсь чтоль
[18:00:53] pimiento вышел(а) из комнаты
[18:03:40] <ħ> https://www.youtube.com/watch?v=HNtAXSP7uyg вот вам
[18:06:02] <смекайло> короче, в жизненой игре минимальный оверхед по памяти, который я придумал - 1 строка + 3 клетки игрового поля
[18:07:27] <смекайло> алгоиртм перезаписывает игровое поле на лету, но он заботится о своём будущем, по-этому он сохраняет перезаписанное состояние вот в этих временных буферах, и оно используется в следующем проходе
[18:07:33] <смекайло> *в следующей итерации
[18:08:22] <ħ> оо
[18:08:23] <ħ> посоны
[18:08:28] <ħ> я придумал себе проект на rust
[18:08:36] <ħ> хотя не
[18:08:39] <ħ> не придумал
[18:08:41] <ħ> ну его
[18:08:44] <смекайло> я придумал тебе проект на rust
[18:08:54] <ħ> чо за проект?
[18:08:54] <смекайло> напиши нормальный FUSE-дрйвер для Google Drive
[18:08:59] <ħ> бля
[18:09:00] <sulci> ħ: не болтай глупостей как малолетка!
[18:09:06] <ħ> ну его этот google drive
[18:09:44] <смекайло> я вот подумываю написать на Си
[18:09:58] <ħ> зачем писать на Си, когда можно на Rust?
[18:10:02] <ħ> Rust это же првильный Си
[18:10:15] <смекайло> libfuse на Си
[18:10:23] <ħ> ну так к Rust можно прикрутить его
[18:10:30] <смекайло> не очень хочется возиться
[18:10:32] <смекайло> но вообще можно
[18:10:37] <ħ> ну, из Rust ходить прямо в libfuse
[18:10:41] <ħ> он так умеет
[18:10:51] <смекайло> но вообще, там сильные стороны языка не очень проявляются
[18:10:59] <смекайло> тредов же там не будет
[18:11:01] <смекайло> и всего такого
[18:11:13] <ħ> а почему это не будет?
[18:11:23] <ħ> треды будут на сетевой стороне
[18:11:28] <ħ> будешь в 100 потоков ходить в гугол
[18:11:54] <смекайло> да можно, но я думал что-то вроде libevent или epoll для этой цели заюзать
[18:12:06] махт хекп вошёл(а) в комнату
[18:12:10] <смекайло> чтобы без тредов как раз таки
[18:12:45] <смекайло> тогда можно не возиться с синхронизацией тредов
[18:13:08] <смекайло> ну и всё очень легковесно получается, можно хоть на роутер такой клиент будет сувать
[18:13:39] <махт хекп> зачем роутеру твой гуглодрайв?
[18:14:22] <смекайло> ну не роутер, но какой-нибудь embedded-девайс
[18:14:26] <смекайло> Internet of Things
[18:14:38] <смекайло> чтобы туда что-нибудь выкладывал
[18:14:48] <смекайло> например камера может сохранять туда фотки
[18:15:05] <смекайло> или сканнер сразу туда сканировать документы
[19:06:22] eaeee вошёл(а) в комнату
[19:27:32] gr_buza@arbeiten вошёл(а) в комнату
[19:38:53] gr_buza@arbeiten вышел(а) из комнаты
[19:38:56] gr_buza@arbeiten вошёл(а) в комнату
[19:45:47] Квакер-анонимка вышел(а) из комнаты: Replaced by new connection
[19:45:49] Квакер-анонимка вошёл(а) в комнату
[19:46:42] <portnov> так
[19:46:45] <portnov> sulci: пыщь?
[19:46:48] <sulci> portnov: тогда опять домогаются?
[19:46:53] <portnov> ых
[19:46:55] <gr_buza@arbeiten> .wz ustr
[19:46:56] <sulci> gr_buza@arbeiten: Station name not available - 2016.05.22 1630 UTC / 22°C / 71°F, humidity: 28%, pressure: 30.15 in. Hg (1021 hPa), wind: from the ESE (120 degrees) at 9 MPH (8 KT), visibility: greater than 7 mile(s)
[19:47:39] <portnov> .wz uscm
[19:47:39] <sulci> portnov: Station name not available - 2016.05.22 1630 UTC / mostly clear, 18°C / 64°F, humidity: 45%, pressure: 30.00 in. Hg (1016 hPa), wind: from the S (170 degrees) at 4 MPH (4 KT), visibility: 4 mile(s)
[19:54:08] gr_buza@arbeiten слушает технологию
[19:54:10] <gr_buza@arbeiten> чот накатило
[19:57:18] $haman вышел(а) из комнаты
[20:15:45] Bob Page вышел(а) из комнаты
[20:28:49] <ħ> gr_buza@arbeiten: какую технологию
??
[20:37:35] <махт хекп> посоны
[20:37:51] <махт хекп> оказывается ногм на стол складывать прикольно. мне понравилось
[20:37:54] <махт хекп> *ноги
[20:43:16] <ħ> а ты их откручиваешь?
[20:43:19] <ħ> и кладешь на стол
[20:53:52] <ħ> gr_buza@arbeiten: https://www.youtube.com/watch?v=OOreeUCEmOQ это что-ли?
[21:04:48] <махт хекп> ħ: так говоришь, как убдто я не свои складываю
[21:07:24] <ħ> посоны
[21:07:29] <ħ> ну ка расскажите мне
[21:07:43] <ħ> у меня есть строка
[21:08:07] <ħ> и есть набор префиксов
[21:08:30] <ħ> можно как-нибудь сматчить по префиксу строку?
[21:08:36] <ħ> наиболее жадным способом
[21:08:46] <ħ> т.е. префиксы могут быть a и abc
[21:08:51] <ħ> abcd должно подходить к последнему
[21:09:17] <махт хекп> матч префиксы по друг другу сначала
[21:09:33] <ħ> и чо делать
[21:09:34] <ħ> ну
[21:09:45] <ħ> т.е. как эту информацию сохранить и заче
[21:10:00] <ħ> я думал что можно просто построить бинарное дерево префиксов
[21:10:01] <махт хекп> ну или вот это
[21:10:04] <ħ> и выполнять по нему поиск
[21:10:23] <махт хекп> ^(?:pref1|pref2|pref2)
[21:10:28] <махт хекп> *pref3
[21:10:40] <махт хекп> а, чорт
[21:10:41] <махт хекп> не
[21:10:43] <ħ> ы?
[21:10:45] <махт хекп> ы
[21:10:55] <ħ> посоны
[21:10:58] <ħ> вы же программисты
[21:11:02] <ħ> это же какая-то задача ходовая
[21:11:26] <ħ> https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81%D0%BD%D0%BE%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE
[21:11:30] <ħ> типа этого
[21:11:35] <ħ> там вон алгоритм Карасика
[21:12:13] <махт хекп> разве что не бинарное нифига
[21:18:50] gr_buza@arbeiten вышел(а) из комнаты
[21:22:36] Аман вошёл(а) в комнату
[21:26:56] <смекайло> есть такая штука, называется rolling hash
[21:27:43] gr_buza@arbeiten вошёл(а) в комнату
[21:27:58] <ħ> перекати окрошка
[21:28:03] cheshir вошёл(а) в комнату
[21:28:12] <смекайло> короче
[21:28:20] <смекайло> смотри вот в эту сторону: https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm
[21:28:46] <махт хекп> то корасик. то карп
[21:28:47] <смекайло> сравниваешь хеш префикса с хешем начала строки
[21:29:16] <ħ> интересно, спасибо
[21:29:54] <смекайло> смари, минимальная сложность потенциального алгоритма - это O(len(prefix1) + len(prefix2) + ... + len(prefixN), иными словами, тебе по-любому придётся заглянуть в каждый символ каждого префикса
[21:30:29] <смекайло> даже если ты их положишь в дерево, тебе всё равно придётся их препроцессить как-то
[21:30:50] <ħ> ну дерево я один раз построю же
[21:30:55] <ħ> а дальше буду только искать
[21:32:18] <ħ> в педии написано что Ахо-Корасик лучше асимптотику имеет
[21:32:20] <ħ> нет разве?
[21:32:32] <смекайло> а хер знает
[21:32:46] <смекайло> слушай, а почему бы тебе просто не сгенерировать конечный автомат?
[21:32:55] <смекайло> по набору префиксов
[21:33:07] <ħ> а почему бы и не сгенерировать?
[21:33:42] <ħ> а как его сгенерировать, если мне префиксы в рантайме только известны
[21:33:49] <ħ> опять придется дерево строить
[21:33:55] <смекайло> а есть специальные штучки
[21:34:34] <смекайло> например компиляторы регекспов умеют два регекспа поORить в один, при чём он не будет иметь оверхеда последовательного сравнения по двум регеспам
[21:34:43] rexim вошёл(а) в комнату
[21:34:49] <ħ> > Informally, the algorithm constructs a finite state machine that resembles a trie with additional links between the various internal nodes.
[21:34:52] <смекайло> т.е. выходной конечный автомат именно на каждом шаге будет оба регекспа обрабатывать
[21:35:22] <смекайло> ну да, trie по сути и есть - древо префиксов
[21:36:14] <смекайло> если уж очень оптимизация интересна, то можно либо использовать HTrie (hash trie), либо генерировать байткод FSM
[21:36:24] <смекайло> и внутри байткода будет просто куча if'ов
[21:36:35] <смекайло> и это будет быстрее, чем дерево
[21:38:55] <смекайло> т.е. например есть два префикса: "foo" и "bar"
В рантайме можно сгенерировать байткод, который будет делать следующее:
if (c == 'f' || c == 'b') goto ok;
c = str[++i]]
if (c == 'o' || c == 'a') goto ok;
c = str[++i]
if (c == 'o' || c == 'r') goto ok;
[21:39:22] <смекайло> фича этого подхода в том, что такая штука будет быстрее, чем всякие дерва префиксов и прочие структуры данных
[21:39:34] <смекайло> потому что весь код целиком в кеш памяти проваливается
[21:39:48] <смекайло> даже кеш инструкций процессора
[21:39:51] <смекайло> а это охуенно быстро
[21:39:52] <sulci> смекайло: не болтай глупостей как малолетка!
[21:40:54] <смекайло> и байткод, кстати, генерить не так уж и сложно
[21:42:12] <смекайло> но это конечно всё равно потребует кучу времени на реализацию
[21:42:44] <смекайло> так что возьми либу, которая генерит FSM и позволяет их ORить
[21:42:58] <смекайло> под капотом она сделает всё что нужно
[21:54:37] rexim вышел(а) из комнаты
[22:01:37] rexim вошёл(а) в комнату
[22:21:31] <portnov> https://v1.std3.ru/500/e1/63/1463937478-e16316ef1c045767d51b61ec05f1caa7.jpeg
[22:22:30] <ħ> а какую либу то?
[22:22:33] <ħ> мне надо просто поискать на сишечке
[22:22:37] <ħ> префикс у строки
[22:22:41] portnov вышел(а) из комнаты
[22:22:45] <ħ> кто умеет?
[22:33:11] gr_buza@arbeiten вышел(а) из комнаты: Replaced by new connection
[22:33:12] gr_buza@arbeiten вошёл(а) в комнату
[22:34:38] cheshir вышел(а) из комнаты
[22:42:24] <махт хекп> отсортируй префиксы по убыванию и строки по этому списку обычным сравнением типа strncmp до первого матча
[22:42:41] <махт хекп> не так эффективно, как эти все карпы с карасиками, зато кода полторы строки
[22:42:49] <махт хекп> гервь
[22:43:25] <махт хекп> а если надо именно эффективно, то все умные ссылки уже приведены
[22:43:58] eaeee вышел(а) из комнаты
[22:44:38] <махт хекп> для задачи типа "решить один раз в жизни" самый лучший вариант, как правило тот, который быстрее всего написать
[22:45:34] <махт хекп> ħ: точнее не до первого матча... в общем пока не станет плюс возвращать
[22:47:14] gr_buza@arbeiten вышел(а) из комнаты
[22:47:15] gr_buza@arbeiten вошёл(а) в комнату
[22:47:28] <махт хекп> все длинные префиксы лексикографически стоят после коротких (в обратной сортировке до)
[22:48:18] gr_buza@arbeiten вышел(а) из комнаты
[22:48:27] gr_buza@arbeiten вошёл(а) в комнату
[22:51:05] gr_buza@arbeiten вышел(а) из комнаты: Replaced by new connection
[22:51:07] gr_buza@arbeiten вошёл(а) в комнату
[22:53:25] <ħ> махт хекп: мне надо чтобы быстро работало
[22:55:16] <махт хекп> можно ещё строки тоже отсортировать и потом не гонять их по всему списку префиксов, а только начиная с последнего совпавшего
[22:55:36] <ħ> не, строка у меня приходит по сети
[22:56:10] <махт хекп> а список префиксов статичный?
[22:56:19] <ħ> строка это url, префикс это как-бы alias, нужно понять в каком физическом месте лежит запрашиваемый ресурс.
список префиксов на старте определяется
[22:57:27] <смекайло> а список префиксов большой?
[22:57:59] <ħ> как повезет. не больше пары десятков
[22:58:10] <смекайло> тогда зачем ты вообще паришься?
[22:58:29] <смекайло> сделай посимвольное сравнение, с циклом и без вызова функций
[22:58:37] <смекайло> это будет гораздо быстрее дерева префиксов
[22:59:09] <смекайло> на паре десятков строк асимптотика вообще не играет никакой роли
[22:59:19] <смекайло> гораздо больше выиграешь на cache hit
[22:59:49] <смекайло> а для этого, тупо не вызывай никаких функций, сделай сравнение во вложенном for()
[22:59:54] <смекайло> или while
[23:00:35] <смекайло> т.е. на первой итерации сравниваешь первый символ url с первым символом каждого префикса
на второй - второй символ url со вторым символом каждого префикса
и так далее
[23:00:56] ermine вышел(а) из комнаты
[23:01:05] <ħ> ну до такого то я догадался
[23:01:12] <ħ> но получается то дерево
[23:01:16] <ħ> как на него не смотри
[23:02:10] <смекайло> нет, получается просто набор префиксов
[23:02:21] <смекайло> дерево - это когда они связаны отношением родитель/ребёнок
[23:02:26] <ħ> ну смори
[23:02:40] <ħ> я на первом символе отсеку сразу несколько префиксов
[23:02:45] <ħ> на втором еще сколько-то
[23:02:55] <ħ> ну, условно
[23:03:02] <ħ> это ж получается будто я иду по дереву
[23:03:23] <смекайло> ну, бинарный поиск - это тоже будто по дереву идёшь
[23:03:42] <смекайло> короче, если хочешь реально соптимизировать - положи все префиксы в один буфер
[23:03:50] <смекайло> наверняка ты каждый из них через malloc() выделяешь
[23:04:24] eaeee вошёл(а) в комнату
[23:04:29] <ħ> да
[23:04:59] <смекайло> положи в один буфер, он целиком провалится в кеш памяти, получишь ускорение в 100 раз
[23:05:11] <ħ> да это я понимаю
[23:06:18] <смекайло> Если хочется заморочиться, то можно ещё и spatial locality улучшить, положить в буфер сначала первый символ каждого префикса, затем второй символ каждого префикса, ну и так далее. Чтобы последоавтельный доступ к памяти был.
[23:06:27] <махт хекп> и построй дерево, которое ссылается на этот буфер, да
[23:06:46] <смекайло> на кой хер там дерево, там же 10 префиксов
[23:06:50] <ħ> махт хекп: ну да
[23:07:01] <смекайло> лучше heap, как я предложил :3
[23:07:26] <смекайло> т.е. что-то вроде
[23:07:32] <махт хекп> смекайло: ты что-то непонятное предлагаешь. цикол какой-то
[23:08:06] eaeee вышел(а) из комнаты
[23:08:07] <смекайло> так это, на кой хрен там дерево, там же 10 префиксов?
[23:08:35] <махт хекп> и чо?
[23:08:52] <смекайло> дерево будет медленнее на малых объёмах
[23:09:06] <смекайло> из-за оптимизаций в CPU
[23:09:09] <махт хекп> без нод дерево
[23:09:24] <махт хекп> как там оно сразу на индексы
[23:09:47] <смекайло> ну куча же
[23:09:49] <смекайло> heap
[23:10:13] <ħ> так куча это и есть дерево в некотором смысле
[23:11:08] <махт хекп> ещё пирамидой зовут
[23:11:22] <смекайло> короче, прогони бенчмарки
[23:11:24] <махт хекп> и ещё небось как-то
[23:12:02] <смекайло> я думаю, что поиск по куче будет таки медленней последовательного доступа, из-за плохого branch prediction и prefetching
[23:13:30] <махт хекп> смекайло: я чото ничо не понял как у тебя отсечение идёт
[23:13:50] <ħ> махт хекп: никак не идет
[23:14:33] <ħ> махт хекп: он говорит что быстрее всё просмотреть чем страницы из памяти запрашивать туда-юсда
[23:14:52] gr_buza@arbeiten вышел(а) из комнаты
[23:14:58] gr_buza@arbeiten вошёл(а) в комнату
[23:16:07] <смекайло> смари, промах L2 кеша стоит порядка 1000 циклов процессора
[23:16:44] <махт хекп> "всё" надо в код прописать?
[23:16:56] <махт хекп> а если я хочу префиксы в конфиг писать
[23:17:39] <махт хекп> а если префиксы разной длины?
[23:18:33] <смекайло> парсишь конфиг, кладёшь префиксы в двумерный массив
[23:18:46] <смекайло> разной длины - '\0' вместо символов в конце будет
[23:19:12] Квакер-анонимка вышел(а) из комнаты: QIP 2012: Спокойное общение
[23:21:12] <махт хекп> та же фигня, что со strcmp только вручную, без вызовов
[23:22:49] <смекайло> да, и это "без вызовов" на самом деле экономит значительно, если нужна действительно оптимизация
[23:22:59] <махт хекп> ну это естественно
[23:23:07] <смекайло> плюс, ты располагаешь префиксы специальным образом для оптимизации доступа к памяти
[23:23:09] <смекайло> тоесть
[23:23:14] <смекайло> допустим есть 3 префикса:
- "foo"
- "bar"
- "foobar"
После препроцессинга, у тебя должен получиться массив вот такого вида:
{    { 'f', 'b', 'f'},  {'o', 'a', 'o'},  {'o', 'r', 'o'},  {' 0, 0, 'b' },  { 0, 0, 'a' }, { 0, 0, 'r' }  }
[23:23:31] <смекайло> соответственно цикл сравнения будет:
[23:23:46] <смекайло> 1. проходить только один раз по url
2. проходить последовательно по буферу префиксов
[23:24:01] <смекайло> никогда нет прыжков назад, только последовательный доступ к памяти
[23:26:15] <смекайло> это самый экономный метод по числу обращений к памяти, который я могу придумать
[23:26:27] <смекайло> а обращения к памяти стоят дорого довольно
[23:26:44] <махт хекп> foobar надо вперёд foo ставить, не?
[23:27:01] <смекайло> ну да, можно отсортировать при препроцессинге
[23:27:14] <смекайло> а можно не сортировать
[23:27:46] <смекайло> в зависимости от того, нужно ли найти тебе самый длинный префикс, или первый попавшийся
[23:27:55] <махт хекп> самый длинный же
[23:29:16] <смекайло> ну, тогда можно положить длинные префиксы раньше в такой массив, а можно это учитывать при проходе по массиву, всё равно весь массив просматривать целиком
[23:29:18] <смекайло> можно кстати, быть ещё хитрее, и использовать векторные инструкции для сравнения
[23:30:03] <смекайло> но это уже совсем, как и вообще то, что я предложил
[23:30:08] <смекайло> такие оптимизации очень редко требуются
[23:30:14] <смекайло> лучше сначала профайлер прогнать
[23:31:05] <махт хекп> чем это хуже дерева, где все дети идут в памяти после родителей? тоже последовательный доступ
[23:32:10] <смекайло> тем, что при этом не получается последовательный доступ, и branch prediction лажает
[23:32:26] <смекайло> хотя, может и не хуже
[23:32:30] <смекайло> нужно же бенчмарки прогнать
[23:34:30] <махт хекп> в некоем буфере лежит в начале 'f', 'b', '\0'
[23:34:37] <смекайло> Просто обычно деревья довольно хреново работают на малых объёмах данных, как раз из-за спекулятивных оптимизаций в процессорах вроде branch predicton. Т.е. проц не может заранее угадать, на какого из детей ты прыгнешь (или вообще завершишь поиск). А в моём варианте, проц сможет угадать, что ты весь массив целиком последовательно читать будешь.
[23:34:51] <махт хекп> доходим до нужного символа, переходим в этом же буфере вперёд
[23:34:55] <gr_buza@arbeiten> .wz ustr
[23:34:58] <sulci> gr_buza@arbeiten: Station name not available - 2016.05.22 2000 UTC / 20°C / 68°F, humidity: 32%, pressure: 30.15 in. Hg (1021 hPa), wind: from the SE (140 degrees) at 11 MPH (10 KT), visibility: greater than 7 mile(s)
[23:35:22] <смекайло> махт хекп: а как ты узнаешь оффсет, на который нужно вперёд перейти
[23:35:28] <махт хекп> легко же
[23:35:31] <махт хекп> на 2 умножить
[23:35:39] <махт хекп> или на сколько там подходит
[23:35:54] <махт хекп> при построении буфера это определяется
[23:36:20] <махт хекп> *индекс текущий на 2
[23:37:34] <смекайло> мне кажется "умножить на 2" канать не будет в случае с N префиксами
[23:37:43] <смекайло> т.е. "умножить на 2" - это бинарная куча
[23:38:01] <махт хекп> на наименьшую степень двойки, вмещающую
[23:38:46] <махт хекп> ну или за каждым символом сразу идёт нужный оффсет
[23:39:04] <махт хекп> типа 'f', +5, 'b', +7, '\0'
[23:39:23] <махт хекп> а читать по два инта сразу
[23:39:46] <махт хекп> ну или чара, если все офсеты влезают в чар
[23:40:05] <махт хекп> всё карту переходов же заранее знаем
[23:40:16] <смекайло> Так тут дерева нету никакого. Ты FSM предлагаешь генерить, я уже это предлагал :3
[23:40:46] <смекайло> Щас расскажу почему нет дерева.
[23:41:06] <махт хекп> ну если умножать, то вполне дерево
[23:42:00] <смекайло> а если у тебя будет миллион префиксов, то в начале буфера будет миллион символов?
[23:42:12] <смекайло> я просто пытаюсь понять, как ты думаешь
[23:42:29] <махт хекп> почему миллион то?
[23:42:43] <махт хекп> только множество, состоящее из всех первых символов
[23:43:01] <махт хекп> за ними там уже вторые, с условием, что первый такой-то
[23:43:03] <махт хекп> и т.д.
[23:43:15] <смекайло> окей, зайду с другой стороны: допустим, ты прошёлся по такой куче
[23:43:26] <смекайло> как ты определишь, какой префикс ты нашёл?
[23:43:53] <смекайло> нужно значит ещё где-то хранить индекс префикса, рядом с каждым символом в буфере?
[23:44:22] <махт хекп> ну мы же по строке урла идём
[23:44:33] <махт хекп> каждый перескок это и в строке урла переход на след. символ
[23:44:50] <махт хекп> посимвольно сравниваем что в урле и что в текущем перескоке
[23:45:01] <смекайло> т.е. полученный префикс урла
[23:46:09] <смекайло> но с префиксом нужно как-то ассоциировать какую-то структурку
[23:46:34] <смекайло> т.е. нужно не просто поматчить, как я понял, а нужно url'ы раскидать по префиксам, т.е. некий load balancing
[23:46:54] <смекайло> соответственно, каждому префиксу будет соответствовать структурка какая-то, типа destination, куда этот url нужно отправлять
[23:47:25] <махт хекп> ничо не нужно ассоциировать. выход с перескоков либо положительный либо отрицательный. при полодительном у нас есть индекс в урле, до которого подстрока -- префикс
[23:48:19] <махт хекп> ну или выход с этого автомата сразу на обработчик префикса
[23:48:22] <ħ> а дальше то что делать с ним?
[23:48:31] <ħ> я же хочу роутер смастерить
[23:48:50] <ħ> ну, т.е. у меня к префиксу привязана некоторая структура, которая говорит где данные лежат от этого url-а
[23:48:58] <смекайло> ага, я и говорю
[23:49:12] <смекайло> сам по себе матчинг префиксов бесполезен, нужен некий destination, куда этот префикс ведёт
[23:49:50] <смекайло> махт хекп: короче, я думаю, что в твоём случае, к каждому символу придётся добавлять третий байт, который будет индексировать такой destination
[23:50:23] <махт хекп> не к каждому, а в конце префикса
[23:50:51] <смекайло> но тогда тебе придётся читать не по 3 байта, а по N байт (до '\0') символа
[23:51:05] <ħ> слушайте
[23:51:07] <махт хекп> зачем?
[23:51:08] <ħ> а как DNS-ы работают?
[23:51:20] <ħ> я имею ввиду там же решают похожую задачу
[23:51:24] <ħ> или нет?
[23:51:26] <ħ> нет
[23:51:28] <махт хекп> два прочитал, смотрю первый с тем, что в урле. тот -- скачу на то, что во втором байте
[23:51:31] <ħ> не всегда
[23:51:35] <махт хекп> не тот -- ещё два байта читаю
[23:52:20] <смекайло> ну да, работать будет, но я всё ещё не уверен, что быстрее, потому что куда ты прыгнешь (или вообще прочитаешь третий байт и закончишь) - это предсказать CPU не сможет
[23:53:04] <махт хекп> а зачем ему предсказывать?
[23:53:10] <махт хекп> у меня инструкция не меняется
[23:53:19] <смекайло> ħ: DNS разбивает домен на зоны, и может посчитать хеш
[23:53:54] <махт хекп> а если закончу так и отлично
[23:54:09] <смекайло> хех, CPU думает по-другому
[23:54:31] <махт хекп> это же не будет другой бранч
[23:54:55] <смекайло> в памяти будет другое место
[23:55:22] <смекайло> хотя, там префиксов не много, всё закешируется
[23:55:33] <махт хекп> у тебя тоже массив с нулями
[23:55:45] <смекайло> и инструкции закешируются в L1i, так что branch prediction fail не страшен
[23:55:56] <смекайло> не особо страшен
[23:56:12] <смекайло> мне вообще кажется, что мы тут хернёй занимаемся, и на самом деле такие оптимизации там не нужны, и пойдёт обычный strcmp()
[23:56:44] <ħ> мы интеллектуально обогащаемся
[23:56:54] <махт хекп> да, вполне. с бинарным поиском по отсортированному списку префиксов
[23:57:35] <смекайло> махт хекп: мне всё ещё не понятно, как ты собрался оптимальным образом такой буфер строить, т.е. все эти оффсеты считать
[23:57:47] <смекайло> я знаю как это делается с бинарной кучей
[23:57:51] <смекайло> типа оффсет*2
[23:58:00] <смекайло> но как это делается с переменными множествами символов?
[23:58:02] <махт хекп> а тут оффсет во втором байте
[23:58:19] <смекайло> а как ты эти оффсеты посчитаешь?
[23:58:24] <ħ> заранее же
[23:58:25] <махт хекп> ну здрасте
[23:58:28] <смекайло> т.е. как ты решаешь, куда что положить?
[23:58:34] <махт хекп> по порядку же
[23:58:38] <ħ> он отсортирует же
[23:58:42] <ħ> лексографически
[23:59:59] <смекайло> махт хекп: ну вот допустим есть три префикса:
"aa"
"aaa"
"aab"
Как для них будет выглядеть такой буфер?
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!