Only @ 10.05.24А что там со старзами сейчас? А то у нас армян стало много, боятся закрытия и переезжают. Пока нет новостей?
да хз, все нормально))
holden1989 @ 10.05.24овощи и фрукты потому что нужно покупать не в супермаркетах типо сити, а у местных продавцов в мелких лавках и там они будут и дешевле и вкуснее, а не резиновые. скажем помидоры в сезон будут стоить 350-400 драм за кг, 100р на р, ведро здоворой еживики 1200-1400 драмм это как бы 300+ р,
сезон короткий и чаще всего все равно все оч в сравнении с соседними странами.
а я бы скорее всего и жил в Раздане где-нибудь, если бы офиса не было. Если у людей удаленка и они не тусовщики то хз зачем им Ереван.
holden1989 @ 10.05.24в чате плюсуем в армении был случай когда чувак спиздил комфорки от плиты и чет от стиралки и сказал типо вернет когда вернут залог и уехал из страны, хз чем все закончилось :D
Так он уже и отписывался тут пару страниц назад )
SnowBeaver @ 10.05.24Ереван выглядит как какой-то постапок на фоне гор :) и как вы там живёте... наверное просто фото с таким настроением получились.
Челябинск не сильно лучше выглядит 🤣
frozenatra @ 10.05.24Давно бы уже в телегу полностью перешел.
Ну тут вон любой мой высер выводят в топ, надо это ценить!
Шо за суета?
Да здравствует форум Жопситим - самый лучший форум в мире и его мудрое руководство
Челябинск и Ереван - братья навек
awakening @ 09.05.24Собственно я тоже проебланил и не доделал, но еще 3 дня, постараюсь замарафонить и отчитываться о процессе тут, может хоть это как-то меня замотивирует (ну, или замотивирует ботоводов исправить ошибки). Было бы крайне обидно не поучаствовать в такой движухе и ничего не сдать в итоге
Раз обещал придется отчитываться в общих чертах, хоть и лень и интересно будет в основном тем кто хоть чутка умеет прогать.
Вот допустим мы хотим загрузить миллион покерной инфы и поработать с ней как аналитик, ботов найти и тд. Какие у нас есть способы, от самых казуальных до самых сложных где надо уметь хорошо прогать?
1) Просто вгрузить все в х2н, купить хороший хад, делать какие-то кастомные статы и изучать их/сопоставлять.
+ быстрый и простой импорт
+ крутые хады, попапы, рендж ресерч, еще круче все в х2н4
- база все равно лопнет после 100+гб, больше никак не загрузить
- получить доступ к базе напрямую нельзя
2) Загрузить в ПТ4 и выгружать репорты в csv и анализировать.
+ готовый набор стат/фильтров в репортах
+ изи выгружаются любые таблички, и гоняй их как хочешь
+ есть прямой доступ к базе
- ужасная скорость импорта
- база вмещает крайне мало и пт4 замедляется до 0 или может упасть.
- устаревший продукт
/// тут надо уметь минимально хотя-бы прогать, я считаю варианты выше бесперспективными поэтому перейдем сразу к следующим.
3) Копаться в базе ПТ4 напрямую без участия проги. (использовать ее только как парсер)
+ парсить ничего не надо, структуру делать не надо, все уже сделано за тебя, можно разобраться и работать с этим. записано буквально все, даже сила рук на различных улицах.
- база все равно остается безумно медленной и ограниченной по размеру и ты навсегда от этого зависишь.
Оптимизма добавлять, что даже запросы для построения репортов можно отлавливать, спрашивая у базы последние пришедшие запросы. А потом уже по логике понимать как ПТ4 в итоге строит статы у себя в окошке и делать их из результатов запроса или дорабатывать запрос самому.
В итоге все упирается в единственный и самый важный минус. Структура базы вообще никак не предназначена для больших данных и аналитики. Вопрос в том, можно ли это решить.
Можно удалять сами раздачи из базы и обновление кэшей, это увеличит возможный обьем в 2-3 раза и скорость импорта тоже.
Но что делать, если надо быстрее в 10 раз и обьем больше 100?
На ум приходит периодически перекачивать сформированную базу куда-нибудь в обьемное облако, допустим каждый час импорта, потом ее очищать и так по кругу. Тогда в облаке у нас будет готовая огромная база.
Но она будет все такой же медленной, тк опять же сама структура не под такие обьемы.
Либо можно на лету джойнить таблицы и менять структуру, а потом уже допихивать в облачную базу кусками (возможно уже и не постгрес). Но тогда и готовыми запросами не воспользоваться - придется их переделывать под измененную структуру и диалект или разбираться с нуля.
Ну и еще тут нам подложили самую большую свинью. Во всех таблицах указан только ключ player_id, который сопоставляется с ником в таблице player.
И если мы перекачаем часть базы в облако, очистим локальную базу и начнем качать по новой - PT4 создаст по новой уже существующие айдишники для игроков. И мы будем иметь один айдишник для многих игроков = база ,eltn полностью испорчена.
Ну и по итогу возникает вопрос, а не сделать ли нам парсер и новую аналитическую структуры базы с нуля.
4) Юзать свои парсеры и базы.
+ круто, можно сделать что угодно и как угодно.
- очень сложно, туча форматов, громадные сложности с расчетом ЕВ, особенно с омахой 4-5+, с двойными/тройными бордами, в общем проще сдохнуть.
Но к сожалению придется брать именно вариант 4 тк времени уже нету даже пытаться вкачать весь майн в ПТ4 и с ним работать, что получится то получится) Продолжу отчеты чуть позже ночью.
А почему нельзя использовать внешнюю базу в х2н? Там же Постгре и есть возможность подключения к любой внешней базе. Не пробовал, но ради интереса можно покопаться на досуге.
х2н4 хуже чем 3й, полно багов и сырой продукт.
awakening, Экспортировать руки можно, по любым фильтрам. Сама база может быть на любом отдельном компе, ограничений вроде нет никаких. Честно говоря не вижу проблемы никакой. Создать в сети огромную базу и к ней подключаться. А нужные руки или импортить просто или экспортировать аналогично и добавлять в другие программы если нужно. Можно и не на компе создать а в любом хостинге арендовать сервер линукс и создать там огромную базу постгре и подключаться к ней. Всей толпой))) База Джипситим, все руки, за все время, во всех видах покера. Директор Городецкий, бухгалтер awakening, подключение 10 долларов.
Плюсы внешней базы - не занимает место на компе, комп всегда мобильный и подключаться можно хоть откуда, надежный бэкап базы.
Минусы - зависимость от интернета и его качества. Оплата аренды хостинга.
Only, это невозможно. Во 1 даже если бы скорость импорта не падала, загрузка длилась бы чуть ли не дольше чем появляются новые руки со всех румов. Во 2 она будет падать до 0, потому что там вставляется очень много данных в неприспособленные для этого таблицы. Мб сделано как-то что по одной или по 10 рук вставляется, и поэтому все так плохо. Но на алгоритмы вставки повлиять невозможно тк они зашиты в ПТ4. Можно только снять ключи с таблиц например или что-то такое, но он их скорее всего пересоздаст автоматически, опять же с этим ничего не сделать. И даже если замучиться и что-то придумать хитрое, останутся разные приколы. Например на Вин сервер через какое-то время ПТ4 постгрес у меня просто удалял все таблицы сам и без каких-либо причин при вполне обычных удаленных запросах к нему. Даже сапорт не помог никак это решить. А месяцами грузить это все и проверять что на этот раз выкинет эта прога не сильно хочется.
Единственный норм способ это действительно скриптом потихоньку сливать уже закачанные данные в облако, при этом удаляя несколько ненужных мелких таблиц и подменяя айди игроков на их ники. Проблемно в общем.
awakening, Про пт4 я не в курсе. Даже не знаю какую базу они используют, я про х2н писал. А скрестить разные проги вряд ли получится, только импорт-экспорт рук. Что в принципе тоже нормально. По скорости я тоже не проверял, но могу на досуге проверить, мне не сложно. Только я в постгре базах не силен и придется освоить.
Only, сама собственная база h2n зашифрована и из нее никак не вытащить ничего запросами. Можно только какие-то определенные руки выгрузить в проге
awakening, вопрос нуба- а холдем менеджер не использовать?
Итак продолжим. У нас есть хендхистори
и надо чета с ней сделать и как-то запихать статы в базу.
Если мы откроем ПТ4 и посмотрим как это устроено у них, мы увидим кучу флагов = 0 либо 1
В инете кстати можно найти вполне подробную документацию и порыться.
Столбцов очень много, поэтому они названы по четкой структуре, например,
cnt_t_raise - был рейз по терну или нет.
amount_f_bet - размер бета по флопу.
То есть например если игрок делает на префлопе VPIP, то is_calls = 1, а если не делает то is_calls = 0. Далее если мы сложим все is_calls и поделим на кол-во рук игрока, мы получим VPIP.
С более сложными статами уже немного по другому. Нужно делать как и в ПТ4, а именно учитывать именно возможность совершения действия. То есть, если до игрока, например, был один рейз И он не был олл-ином, то он попадает в ситуацию возможности совершения 3бета и получает 3bet_opportunity = 1. И если он этот 3бет совершил, то получает 3bet = 1. итого 3bet/3bet_opportunity будет равен проценту 3бета.
Но для начала перед тем как парсить это все и раскидывать флаги, лучше привести в промежуточный стандартизированный формат словаря.
hm2/pt4 предлагают подобный формат для румов https://hh-specs.handhistory.org/examples/holdem-tournament-hand-pokerstars
Это надо как минимум потому что форматов дохера и будет тупо под каждый писать парсеры (но впринципе раньше я так и делал). Если прям серьезно этим заниматься, то надо сначала парсить хистори разных форматов под шаблонный, а потом уже по шаблонному словарю вычислять и раскидывать флаги и прочее для добавления в базу.
Со скрипом с этим может справиться гпт 4, но еле-еле.
Ну и потом когда у нас есть унифицированный и упорядоченный словарь действий игроков по всем улицам, мы включаем воображение и фигачим статы, сразу продумывая какие еще столбцы понадобятся для их вычисления. Например сразу напрашивается добавить в столбец позу игрока, и тогда у нас одна стата ПФР сгруппированная по различным позам далее даст ПФР со всех поз, также и с 3бетами и тд.
По итогу для каждого игрока будет подобное, общие хар-ки руки можно как в ПТ4 вынести в отдельную таблицу, а можно все в одной.
Можно сразу добавить ченить новое, например тут это face_3bet для расчета именно того в скольки проц случаев человек получает 3бет на своей рейз.
Ну и с префлопа сразу необходимо сохранить вид спота (рейзд, лимпд, 3бет) и ласт рейзера. Это пригодится далее чтобы понимать, кто цбетит, кто донкает.
Попутно сохраняем флаги если игрок выиграл на шд/был на флопе и подобное, чтобы рассчитать ввсф/втсд/вонсд.
Лучше всего примерно прописать всю логику стат словами, а потом ее реализовать, ну или опять же отдать чату гпт который наделает миллион ошибок и надо будет их исправлять, и времени может потратиться еще больше чем самому. Например на флопе это будет описано как то так:
в player_data есть 'name_last_raiser': 'httrdc', запомним это и будем смотреть flop_actions;
если до игрока не было bets то у него flop_bet_opp = 1 и если он сам сделал bet то flop_bet = 1.
если до игрока не было bets и он является last_raiser, то у него flop_cbet_opp = 1 и если он сделал bets то записываем flop_bet_amount и flop_bet_amount_bb (и в случаях bet и в случаях cbet) и flop_cbet = 1, далее смотрим ситуации, если до игрока уже был bet и этот bet сделал last_raiser. в таком случае у нас flop_fold_to_cbet_opp = 1, а далее в зависимости от нашего решения либо flop_fold_to_cbet = 1 либо flop_raise_to_cbet = 1 либо flop_call_to_cbet = 1. Также нужно понять flop_position (OP или OOP). тут логика такая надо посмотреть 'position': position игроков, оставшихся на флопе, и OP у нас только один игрок, находящийся в лучшей позиции (SB/BB/UTG... и так далее до баттона улучшаются позиции)
Дальше флопа щас делать не буду, тк уже все гораздо сложнее. Можно ограничиться простыми показателями по типу агры, тк на любой улице это просто сумма пассивных действий/сумму активных.
Естественно по ходу всех этих манипуляций будет вылезать куча всякого дерьма, например вот такие вот ники
которые не может обработать парсер, и надо его дорабатывать.
Самое упоротое это вроде ники в каком-то руме типа
Seat 1: Clown: raises 2434.00
Seat 4: Cloraises raises 2434.00
То есть в самом нике двоеточие или ключевое слово, которое обычно в регулярном выражении используется как разделитель)
Под каждое действие лучше вручную прописать тесты, или потом все забудется очень быстро и доработать будет сложно.
Тесты как для парсеров в унифицированный словарь,
Так и для распихивания флагов игрокам.
По-хорошему надо придумать все самые мудреные розыгрыши и правильные ответы на тест и все это проверить.
Ну и когда мы разобрались, уже начинаем парсить весь майн и скидывать его в базу, попутно придумывая запросы-группировки для окончательных стат, ну и проверяя-сверяя итоги с каким-нибудь х2н хотя бы примерно.
На этом моменте мы внезапно понимаем, что скорость обработки уже упала до условных 500 раздач/сек, а ведь у нас еще не сделан нормально терн и ривер. Питон впринципе медленный для таких задач, и надо тщательно переделывать и оптимизировать парсер. Либо хотя бы организовать много потоков загрузки - это уже возможно в отличие от ПТ4.
В целом уже очевидно, что я не успею за полтора дня, но раз уж обещал то попытаюсь.
awakening, какими бы ни были прекомпилированными и оптимизированными регекспы, они всё равно раз в 100 (минимум) медленнее, чем обычные сравнения в нужных местах и if-else.
Manslay, если сделать прям минимум, например won/showed ситуации смотреть не во всей руке, а именно после *** SHOWDOWN ***, и так во многих ситуациях, то уже возможно х3-4 увеличить скорость, но сейчас на это времени нет)
Ереван выглядит как какой-то постапок на фоне гор :) и как вы там живёте... наверное просто фото с таким настроением получились.