R4SAS
acetone: крч ты не понял о чем я...
R4SAS
github.com/PurpleI2P/i2pd/pull/1852/files#diff-4e6905e39e063af15b495fc4364bcfe821f48262cdd77a101dde89a3a34a9889R363
R4SAS
я имел в виду написать всё это одной строкой
R4SAS
как сделано в имеющихся строках
R4SAS
а вообще, надо делать fprintf
R4SAS
чтобы можно было строки с форматированием
R4SAS
orignal: как такое делается?
R4SAS
через шаблон?
orignal
что именно?
R4SAS
написать обработчик который будет брать перевод и подставлять в него значения переданные
orignal
да шаблон
R4SAS
типа "To add host %s in router's addressbook, click here"
orignal
variadic teomplate
orignal
посмотри как в Log.h сделано
R4SAS
ок
orignal
%s это сишная лажа
R4SAS
а как лучге?
R4SAS
лучше*
orignal
как проще
orignal
хоть так хоть так
R4SAS
ну, мне форматируемый строки
R4SAS
конкатенация нафиг не сдалать
R4SAS
сь*
R4SAS
просто в чем проблема
orignal
можно с форматированием
R4SAS
в разных языках по разному строится фраза
orignal
например дегс предпочитает форматирование
R4SAS
и иногда в азиатских оно шиворот на выворот
orignal
а я поток
R4SAS
так, а каким лучше делать формат?
R4SAS
sprintf в буфер, а потом его отдавать?
R4SAS
или же fprintf?
orignal
snprintf
R4SAS
так а откуда я буду брать размер буфера?
orignal
это размер той строки куда ты пишешь
R4SAS
ну дык мне надо тогда либо запас делать, либо вычислять
R4SAS
size_t size = snprintf(NULL, 0, tr_str, std::forward<TArgs>(args)...); char* str = malloc(size);
R4SAS
я так наверно буду вычислять его
orignal
ну а ты как думал?
orignal
потому я и использую stringstream
R4SAS
ну а как я тебе сделаю формат в stringstream?
R4SAS
правильно понимаю?
orignal
а кто free(str) будет вызывать?
R4SAS
а где я его тебе вызову?
R4SAS
если мне его надо возвратить
R4SAS
но опять же, нужно вернуть в std::string
orignal
std:string s(str); free(str); return s;
orignal
второй
R4SAS
ок
orignal
malloc не используй
R4SAS
rjcnskb
R4SAS
костыли)))
orignal
вместо него new char[size];
R4SAS
ок
orignal
он тебе вообще не нужен
orignal
а нет на самом деле нужен
R4SAS
он - кто?
orignal
new или amlloc
orignal
нет на нужен
R4SAS
new char str[size];?
orignal
ты можешь сделать std::string s (size, 0);
orignal
и потом в sprintf передавать s.data ()
R4SAS
мммм
R4SAS
извращение
orignal
нет потому что лишний malloc не вызываеся
R4SAS
только чую что будет хрень
R4SAS
не знаю, правильно ли делать tr для всех форм
orignal
вроде нормально
orignal
но проверь что работает
R4SAS
есть предположение что у меня случайно можнет вызываться функция для множественного числа (вторая) если я случайно передам в tr ("фывфывф", "подставка1", число1)
orignal
кстати std(size + 1, 0) надо
R4SAS
обавил
R4SAS
сейчас проверим...
R4SAS
пока что не запустил, но сразу пошел поглядеть на код
R4SAS
s << num << " " << tr("day", "days", num) << ", ";
R4SAS
вот чего вызовется в таком случае?)))
R4SAS
либо (2) либо (3) )))
orignal
думаю просто day напечатается
R4SAS
т.е. вызовет третий оверлоад?
orignal
думаю вот этот std::string tr (TValue&& arg, TValue&& arg2, int& n)
orignal
или ругнется на ambigious
R4SAS
не ругнулось при сборке, что весьма странно
orignal
значит вот этотм
R4SAS
хотя... я просто еще не переписывал строки чтобы они были с форматом
R4SAS
так... а как быть если я хочу чтобы было всё вместе?
R4SAS
сложности )
R4SAS
ладно, надо додумать будет
R4SAS
вероятно всё же придется отдельную функцию объявлять
R4SAS
пример:
R4SAS
tr("%d day", "%d days", num)
orignal
наерное
orignal
"Ahh we are running out of bandwidth any carriers want to help chip in?"
orignal
stromyclould написали
orignal
ну и что я говорил? ))
orignal
таки аутпрокси
R4SAS
хе
R4SAS
сделал вот так
orignal
ну спрашивали что если моя гипотеза верна почему они не замечают нагрузку
R4SAS
но почему то компилятор ругается
orignal
замечают как видишь
orignal
на что ругается?
R4SAS
почему ему не ясно что раз параметров больше чем надо, то юзаем второй ntr?
orignal
комметируй разные варианты и смотри какой сработает
orignal
с шаблонами вообще все слодно
R4SAS
а, ясно
R4SAS
я ему 2 раза TValue передавал
R4SAS
а размеры строк то разные
R4SAS
значит надо 2 разных typename
orignal
угу
R4SAS
ща поправим строки и испытаем...
R4SAS
хе, в зажопинске вполне стабильный трафик
R4SAS
более 1 ТБ за 2 дня и 15 часов
R4SAS
провайдер там наверно охуевает
R4SAS
)))
orignal
пизды не дадут?
R4SAS
не знаю)))
R4SAS
orignal: гдет фигня происходит
R4SAS
точно size + 1?
R4SAS
почему то везде один символ съедает
R4SAS
Sent: 5,18 Mi (17,44 KiB/)
R4SAS
пришлось конкретно size = size + 1 сделать
R4SAS
orignal: лол
R4SAS
крч гейось не знает std::string().data()
R4SAS
точнее там оно в не тот тип перегоняется
weko
Стандарты be like
Vort
столько фигни в плюсы понатыкали, а до интерполяции строк так и не добрались :/ вот как по-нормальному решается эта проблема: en.wikipedia.org/wiki/String_interpolation
Vort
хотя нет, не прав, интерполяция с разными языками работать не будет
orignal
R4SAS &str[0] тогда
orignal
делов то
R4SAS
orignal: кудав?
R4SAS
вместо .data()?
orignal
да
R4SAS
orignal: а откуда такое извращение?
R4SAS
"1000 и 1 костыль для С++"
weko
что за любовные старасти в #ls2 ?))))
weko
страсти*
whothefuckami
чому не str.front() ??
R4SAS
whothefuckami: я тож на него смотрел
R4SAS
но вот есть ли оно в гейосевых плюсах - другой вопрос
whothefuckami
В каких-каких плюсах?
R4SAS
макось
whothefuckami
А там другой c++?
whothefuckami
standart violation?????
R4SAS
остальные системы молча собрались
R4SAS
попробуем указатель
weko
whothefuckami: про стандарты я тут уже шутканул))))
weko
возник такой вопрос. как сделать мультихоуминг, но на одном роутере? тоесть запустить несколько дестинейшенов с разными туннелями из одних ключей?
whothefuckami
Больше на баг компилятора похоже
whothefuckami
Так не должно быть как вот на гейсос
whothefuckami
Хуйня какая-то
R4SAS
weko: никак
R4SAS
запускай 2 роутера рядом с одним и тем же ключом туннеля
weko
жаль. была бы полезная фича
weko
угу
weko
это понятно)
weko
горождение костылей как всегда
whothefuckami
Макоси как майки что ли?
R4SAS
так а какой же это мультихоминг, когда всё на одном и том же роутере?
weko
R4SAS: суть в распрределении нагрузки, когда не хватает 16 туннелей
R4SAS
у меня рег крутится на 2х ш2зв стоящих на одной машине
R4SAS
если одит отвалится, то второй точон доступен
R4SAS
один*
weko
вот, тоже вариант использования
weko
а
weko
на разных
weko
понял)
R4SAS
и при этом один из них во всяком случае быстрее ответит
R4SAS
так что у меня рег обычно секунды 4-5 ищется всего лишь, а потом уже прогружается
weko
понял зачем ещё именно 2 роутера - чтобы на разные флудфила слать лиссет
weko
флудфилы*
R4SAS
угу
weko
в теории можно и это сделать в одном роутере, но я уже представляю какие это костыли....
R4SAS
вроде порнографию с .front() скушало
weko
прямо перед глазами - создаю стрим - половина туннелей дохнет))
weko
лол просто джава отлупы би лайк
whothefuckami
Это всё джава!!
weko
оно всё никак не может начать передачу
weko
походу у сервера старый лиссет клиента, а клиент новый лиссет не отправил))
weko
у клиента просто уже тыщу раз тыннели сменились
weko
пошло!!!
weko
ура
weko
спустя минуты 3
orignal
R4SAS какое?
orignal
это из std::vector ))
orignal
так всегда делают
orignal
это трюк еще с 90-х ))
Vort
привычное извращение )
weko
orignal: кстати я щас вот что понял - можно не один ш2з стрим делить на несколько туннелей, а один стрим от приложения делить на несколько ш2з стримов
weko
именно внутри i2pd
orignal
а смысл?
weko
ну так по изначальной версии чтобы затыков не было
weko
мы данные пускаем по разным туннелям в итоге
weko
предположим шанс затыка за 1 секунду 5%, тогда если у нас 2 туннеля то шанс затыка в секунду 0.05^2 = 0.25%
weko
2 стрима в данном случае
orignal
ну сколько тебе говорить
weko
что?
orignal
что на один и тот же адрес всегда идет по одним и тем же тоннелям
orignal
причем специально
weko
я прямо только видел разные туннели
weko
только что*
orignal
к одному адресу?
weko
да
weko
да
orignal
что именно ты видел?
weko
что по разным туннелям одновременно добавлялся трафик когда были стримы только на один адрес
weko
что по разным туннелям одновременно добавлялся трафик когда были стримы только на один адрес
weko
ой бля
weko
вот щас вижу
weko
стримов 10 висит
orignal
ну там еще по времени
orignal
там на короткое время только через один тоннель
orignal
типа чтобы с сайта картинки грузить
weko
+
weko
заметил
weko
сначала шло по одному потом по разным пошло
orignal
там где то в Garic.cpp это есть
weko
вот если можно через время по разным, почему нельзя сразу? да даже если не сразу, это уже хорошо
weko
я же не из пальца взял предложение
weko
я проверил
weko
вижу идёт по разным
orignal
ну представь себе что кто то открывает страницу с картинками
weko
иногда идёт по нескольким туннелям, значит сделать чтобы всегда шло по разным реально, правильно?
weko
как я понял это зависит от скорости туннеля
weko
например если туннель быстрый то всего в него пихается
orignal
тут думать надо с логиквой
weko
это возможно или нет?
weko
чтобы шло всегда по разным
orignal
все возможно
orignal
посмотри как выбирается тоннель в Streaming.cpp
weko
хорошо, как тебе идея тогда? назвать это 'low packet loss mode' предположим
weko
ща гляну
orignal
идея такая что это экспериментировать надо
orignal
то что счас сделано оно на тот момент работало лучше всего
weko
понял окей, тогда можно пока что сделать в виде отельной программы, и смотреть как работает
orignal
или просто напиши свой вариант streaming.cpp и пробуй
weko
)
weko
логика выбора туннеля в TunnelPool.cpp как я понял
orignal
ну это дальше
orignal
когда надо новый
Vort
(вдруг кому надо: в Snowflake недавно внесли исправление для обхода российской цензуры. если у кого не работало - можно снова пробовать с обновлёнными версиями)
weko
а, понял.
weko
orignal: кажется я понял. первый раз он берёт туннель из уже существующего routingPath, потом уже следущий выбранный тунель будет случайный
weko
потому что там условие что туннель ещё не выбран
weko
интересно. надо попробовать убрать этот кусок для полнценного теста
weko
862-873
weko
orignal: верно?
orignal
там вроде не случайный а самый свежий
orignal
я уже не помню
weko
я конечно не эксперт но яне вижу логики для самого свежего туннеля
weko
выбирается самый последний - ага
weko
из tunnels
weko
а в tunnels видимо идут по порядку создания - это я хЗ
orignal
там set у которого сортировка в обратном порядке по времени
weko
тоесть почти рандомно
weko
?
orignal
почему?
orignal
говорю же самый свежий
weko
а, ладно
weko
я туплю
orignal
по времени создания
weko
да окей
Vort
эхх, с последними коммитами теперь в вебконсоли числа с запятыми вместо точек :(
Vort
странно такое видеть в англоязычном интерфейсе
orignal
R4SAS чего там наделал? ))
Vort
особенно странно это выглядит в местах наподобие ⇒ oAkk ⇒ 793747091:me ( 116ms ) established, 23,09 KiB
orignal
а в IP адресвз что?
Vort
там нормально
weko
странно вообще видеть запятые вместо точек)))
Vort
вопрос в том, плавающая запятая или плавающая точка )
weko
в коде всегда точки, запятые на глаза будут давить
Vort
обычно это к языку интерфейса привязывается
weko
запытые нужны только для разделения разрядов)
weko
тысячи милионы
Vort
"запытые нужны только для разделения разрядов)" - в каких-то языках действительно такое есть, но по-моему, ни в русском, ни в английском не используется
Vort
"Разделитель групп разрядов"
Vort
"Таким образом, значение точки и запятой оказывается зависимым от контекста (например, запись 1,546 в английской нотации обозначает одна тысяча пятьсот сорок шесть, а в русской — одна целая пятьсот сорок шесть тысячных)"
Vort
"Поэтому, чтобы избежать неоднозначности, международные стандарты (ISO 31-0, Международное бюро мер и весов, ИЮПАК) рекомендуют использовать для разделителя групп разрядов только неразрывный пробел"
Vort
"neither dots nor commas are ever inserted in the spaces between groups"
Vort
чуть почитал историю - в английском и с запятой группировка используется и с пробелом
weko
Вообще снижение трафика заметно
weko
А может это субъективно
orignal
у меня тоже заметно