В упорной борьбе Джон таки победил Джастина. Ура, товарищи! Осталось пояснить, кто же такой Джон, кто такой Джастин и почему это так важно для меня.

Все просто. Оба они лишь взятые с потолка имена для юнит-тестирования моей программы моделирования игры в покер. И победа Джона говорит о том, что тесты сегодня прошли до конца.

Строго говоря, Джон впервые победил еще неделю назад, однако проверять это пришлось вручную, долго и мучительно. Программа была совершенно не пригодна для автоматического тестирования. Пришлось переделывать полностью, в результате чего она стала раза в два короче и гораздо понятнее. Нет гарантии что она покрывает все возможные ситуации за столом, но начало положено, есть та печка от которой можно плясать дальше. Главное, возня с тестами несколько переформатировала мою голову в сторону лучшего понимания ООП вообще

ООП задумывалось как способ облегчить повторное использование и поддержку кода, сделать программы более понятными. Как обычно, ничего не получилось. ООП само по себе ничего не решает. Можно писать ужасные программы, наличие классов, наследования и полиморфизма может сделать код еще хуже, чем он мог быть вообще без ООП. Только грамотная организация архитектуры приложения поможет российской демократии, вне зависимости, будет ли оно сделано с помощью ООП, или нет

А что, собственно дальше? Мне представляется разумным сделать конвертер покерных рук и прогнать через модель всю свою базу. Это позволит проверить практически все возможные ситуации. Ну и добавит еще один кирпичик в будущую систему

Как закодировать силу покерной руки, чтобы можно было

а) легко сравнить 2 руки обычными мат. операциями

б) достаточно легко проверять при отладке

Как-то так: REC854, X222BB

Первая буква означает тип комбинации. От Z стрит-флеш до R – старшая карта. Дальше идет перечисление 5ти карт входящих в комбинацию в порядке старшинства. Старшинство, естественно с учетом типа комбинации, например  у фуллхауса сначала идут карты образующие тройку, потом карты образующие пару. Для “кольцевого” стрита туз будет в конце, как самая младшая карта. Масти отбрасываются – они на сравнение не влияют.

Осталось перекодировать сами карты, AKQJT –> FEDCB . Букву A убрал чтоб не сбивала с толку

Теперь все легко сравнивается X222BB > REC854, однозначно.

Мы в позиции X, открываемся первым. Какова вероятность что сейчас у нас лучшая рука?
Вычисляем по методу монте-карло
Количество игроков 9
Прогонов 10.000.000

UTG

100.0 61.6 57.2 53.1 48.8 45.2 41.8 38.4 34.7 31.6 29.2 25.6 23.1
61.6 97.0 14.4 12.8 11.3 10.3 9.2 8.2 7.2 6.3 5.7 4.5 4.0
57.4 14.2 93.1 2.2 1.9 1.8 1.5 1.2 1.1 1.0 0.8 0.7 0.5
53.3 12.8 2.2 89.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.0 0.0
49.2 11.5 2.0 0.3 85.4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
45.3 10.3 1.7 0.2 0.0 82.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0
41.5 9.2 1.5 0.2 0.0 0.0 78.9 0.0 0.0 0.0 0.0 0.0 0.0
38.2 8.1 1.3 0.2 0.0 0.0 0.0 75.4 0.0 0.0 0.0 0.0 0.0
34.8 7.3 1.1 0.1 0.0 0.0 0.0 0.0 72.6 0.0 0.0 0.0 0.0
31.6 6.2 0.9 0.1 0.0 0.0 0.0 0.0 0.0 69.3 0.0 0.0 0.0
28.8 5.4 0.8 0.1 0.0 0.0 0.0 0.0 0.0 0.0 66.3 0.0 0.0
25.7 4.6 0.6 0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 63.9 0.0
22.9 3.9 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 61.1

UTG+1

100.0 65.3 61.7 57.7 53.6 50.2 47.1 44.3 40.1 36.9 33.8 31.1 28.6
65.2 97.4 18.7 17.3 15.6 14.2 12.5 11.5 10.3 9.4 8.1 7.1 6.1
61.5 18.8 93.7 4.0 3.4 3.1 2.7 2.6 2.1 1.8 1.6 1.3 1.1
57.5 17.2 3.8 90.8 0.6 0.6 0.4 0.4 0.4 0.3 0.3 0.2 0.2
53.5 15.5 3.4 0.7 87.5 0.1 0.1 0.1 0.0 0.0 0.0 0.0 0.0
50.2 14.2 3.2 0.6 0.1 84.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
46.6 12.8 2.7 0.5 0.1 0.0 80.9 0.0 0.0 0.0 0.0 0.0 0.0
43.3 11.6 2.4 0.4 0.1 0.0 0.0 78.2 0.0 0.0 0.0 0.0 0.0
39.7 10.4 2.0 0.3 0.1 0.0 0.0 0.0 75.3 0.0 0.0 0.0 0.0
37.0 9.3 1.9 0.3 0.0 0.0 0.0 0.0 0.0 72.4 0.0 0.0 0.0
34.2 8.1 1.6 0.3 0.0 0.0 0.0 0.0 0.0 0.0 70.3 0.0 0.0
31.1 7.2 1.4 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 67.5 0.0
27.8 6.3 1.1 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 65.1

UTG+2

100.0 69.7 66.3 63.0 59.0 55.8 52.0 48.7 45.3 42.7 40.0 37.2 34.7
69.4 97.6 24.3 22.6 21.3 19.1 17.7 16.2 15.0 13.5 11.8 10.9 9.7
65.7 24.6 94.7 6.5 6.1 5.5 4.9 4.2 3.9 3.4 3.2 2.9 2.4
62.1 22.6 6.7 91.7 1.6 1.4 1.2 1.0 0.9 0.8 0.7 0.6 0.5
58.7 20.9 6.1 1.6 88.9 0.3 0.2 0.2 0.2 0.2 0.1 0.1 0.1
55.3 19.2 5.5 1.4 0.3 86.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0
52.2 17.5 4.9 1.1 0.2 0.1 83.9 0.0 0.0 0.0 0.0 0.0 0.0
48.8 16.2 4.5 1.1 0.2 0.0 0.0 81.2 0.0 0.0 0.0 0.0 0.0
45.7 15.0 4.0 1.0 0.2 0.0 0.0 0.0 78.6 0.0 0.0 0.0 0.0
42.8 13.3 3.5 0.8 0.1 0.0 0.0 0.0 0.0 76.2 0.0 0.0 0.0
40.1 12.3 3.2 0.7 0.1 0.0 0.0 0.0 0.0 0.0 73.8 0.0 0.0
37.3 10.9 2.8 0.6 0.1 0.0 0.0 0.0 0.0 0.0 0.0 71.1 0.0
34.5 9.7 2.4 0.4 0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 69.0

MP

100.0 73.9 70.7 67.4 64.5 60.8 58.3 55.4 52.4 49.8 47.1 44.2 41.8
73.8 98.0 31.2 29.5 27.7 26.4 23.7 22.4 21.2 19.3 18.1 16.3 15.2
70.7 31.6 95.5 11.1 10.6 9.2 8.7 7.9 7.4 6.4 6.0 5.5 4.9
67.4 29.3 10.9 93.3 3.4 3.1 2.8 2.5 2.1 2.0 1.7 1.6 1.4
64.2 27.5 10.0 3.4 90.7 0.8 0.7 0.7 0.7 0.5 0.4 0.4 0.3
61.1 25.6 9.3 3.0 0.9 88.5 0.2 0.1 0.1 0.1 0.1 0.1 0.1
58.2 24.3 8.5 2.7 0.8 0.2 86.4 0.0 0.0 0.0 0.0 0.0 0.0
55.1 22.5 8.1 2.5 0.7 0.2 0.0 83.8 0.0 0.0 0.0 0.0 0.0
52.3 20.8 7.2 2.2 0.6 0.1 0.0 0.0 81.7 0.0 0.0 0.0 0.0
49.5 19.4 6.5 2.0 0.5 0.1 0.0 0.0 0.0 79.4 0.0 0.0 0.0
47.0 18.0 6.0 1.8 0.4 0.1 0.0 0.0 0.0 0.0 77.1 0.0 0.0
44.2 16.5 5.5 1.6 0.4 0.1 0.0 0.0 0.0 0.0 0.0 75.2 0.0
41.7 15.0 4.7 1.3 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 73.6

HJ

100.0 78.7 75.5 72.9 70.0 67.7 65.3 62.4 59.7 57.6 55.3 52.7 49.9
78.3 98.4 40.1 38.3 35.8 34.6 32.8 30.9 29.0 27.5 26.0 24.2 22.8
75.6 40.4 96.5 17.9 16.8 15.0 14.3 13.5 12.7 11.7 10.9 10.1 8.8
73.0 38.5 17.8 94.4 7.1 6.3 5.9 5.5 5.2 4.6 4.2 3.8 3.4
70.0 36.4 16.7 7.0 92.7 2.3 2.3 1.9 1.9 1.6 1.2 1.3 1.1
67.4 34.9 15.4 6.5 2.4 90.7 0.8 0.7 0.5 0.5 0.4 0.4 0.3
64.8 32.6 14.5 6.0 2.2 0.8 88.6 0.2 0.2 0.1 0.1 0.1 0.0
62.5 30.8 13.5 5.5 2.0 0.7 0.2 87.0 0.0 0.0 0.0 0.0 0.0
59.8 28.8 12.6 5.1 1.8 0.6 0.1 0.0 85.1 0.0 0.0 0.0 0.0
57.1 27.4 11.6 4.6 1.6 0.5 0.1 0.0 0.0 83.1 0.0 0.0 0.0
55.0 25.7 10.9 4.2 1.4 0.4 0.1 0.0 0.0 0.0 81.5 0.0 0.0
52.5 24.2 10.2 3.9 1.3 0.4 0.1 0.0 0.0 0.0 0.0 79.9 0.0
50.1 22.6 9.1 3.4 1.1 0.3 0.1 0.0 0.0 0.0 0.0 0.0 78.3

CO

100.0 83.3 81.4 79.2 76.6 74.8 72.4 70.2 68.6 65.7 64.2 62.2 60.5
83.3 99.0 51.0 48.9 47.4 45.6 43.7 41.8 39.7 38.7 37.1 35.4 33.7
81.1 51.5 97.4 27.8 26.8 25.7 24.3 23.2 21.9 21.1 19.8 18.5 17.4
78.7 49.3 28.0 95.9 14.3 13.3 12.6 11.9 11.0 10.6 9.5 8.9 8.7
76.8 47.6 26.7 14.3 94.3 6.8 6.5 6.0 5.3 4.6 4.4 4.0 3.7
74.4 45.4 25.5 13.4 6.7 92.9 2.7 2.5 2.3 2.1 1.8 1.6 1.4
72.4 43.7 24.4 12.6 6.2 2.8 91.2 1.0 0.8 0.8 0.7 0.5 0.4
70.2 42.0 23.1 11.9 5.8 2.6 1.0 90.2 0.3 0.3 0.2 0.2 0.1
68.3 39.9 22.0 11.1 5.3 2.2 1.0 0.3 88.4 0.0 0.0 0.0 0.0
66.1 38.5 20.8 10.5 4.8 2.1 0.8 0.3 0.1 87.1 0.0 0.0 0.0
63.8 36.9 19.7 9.8 4.5 1.9 0.6 0.2 0.0 0.0 86.1 0.0 0.0
62.1 35.1 18.5 9.1 4.0 1.6 0.5 0.2 0.0 0.0 0.0 83.9 0.0
59.9 33.3 17.3 8.3 3.7 1.5 0.4 0.1 0.0 0.0 0.0 0.0 82.6

BU

100.0 88.6 86.8 85.6 83.8 82.4 80.8 79.2 77.4 75.8 74.4 73.0 71.6
88.6 99.3 64.4 62.9 60.9 59.4 58.1 56.2 54.9 53.1 52.0 50.4 48.9
86.8 64.6 98.2 43.6 42.4 40.8 39.3 38.1 37.2 35.7 34.5 33.1 31.6
85.3 63.1 43.2 97.2 28.4 27.0 26.0 24.8 23.9 22.9 22.2 21.2 19.9
83.7 61.2 42.1 28.0 96.2 17.1 16.1 15.5 15.0 13.9 13.2 12.5 11.8
82.3 59.6 41.0 27.1 17.0 95.2 9.9 9.4 8.5 8.0 7.6 7.1 6.4
80.5 58.1 39.2 26.2 16.3 10.0 94.3 5.2 4.5 4.3 3.8 3.3 3.2
79.1 56.3 38.7 25.1 15.4 9.2 5.1 93.6 2.3 2.1 1.8 1.6 1.3
77.8 55.2 37.1 24.2 14.7 8.7 4.7 2.4 92.5 1.0 0.8 0.5 0.5
75.9 53.2 36.0 23.1 13.8 7.8 4.3 2.1 1.0 91.3 0.2 0.2 0.1
74.5 51.7 34.3 22.0 13.2 7.4 3.9 1.8 0.8 0.2 90.4 0.0 0.0
73.1 50.6 33.4 21.0 12.5 7.0 3.5 1.6 0.6 0.2 0.0 89.5 0.0
71.3 48.9 32.1 20.1 11.8 6.3 3.1 1.3 0.4 0.1 0.0 0.0 88.4

SB

100.0 94.3 93.1 92.3 91.5 90.8 89.8 88.9 87.8 87.3 86.0 85.9 84.6
94.0 99.6 80.4 79.7 78.8 77.8 76.6 75.2 74.4 73.3 72.6 71.3 70.6
93.2 80.6 99.1 66.5 65.4 64.3 63.4 63.0 61.6 61.1 59.2 58.2 57.3
92.3 79.8 66.5 98.6 53.5 52.7 51.9 51.2 49.8 48.2 48.0 46.2 45.3
91.8 78.4 65.6 53.6 98.2 43.3 41.3 39.8 39.1 38.4 37.5 36.5 35.3
90.7 77.7 64.4 52.7 42.4 97.6 32.2 31.7 30.7 29.4 28.2 26.9 25.9
89.9 76.7 63.7 51.6 41.3 32.3 97.1 23.5 22.6 21.8 20.4 19.3 18.8
89.0 75.4 62.4 50.7 40.3 31.5 23.6 96.5 16.1 15.5 13.8 13.1 12.3
88.4 74.5 61.4 49.7 39.5 29.9 22.5 16.2 96.1 10.6 9.0 8.5 7.2
87.2 73.6 60.1 48.5 38.1 29.3 21.5 15.1 10.3 95.4 5.7 4.7 3.6
86.5 72.2 59.6 47.5 37.0 28.2 20.3 14.2 9.4 5.8 95.1 2.5 1.4
85.6 71.3 58.2 46.7 36.2 26.9 19.6 13.2 8.2 4.9 2.6 94.7 0.7
84.6 70.0 57.3 45.8 35.1 25.8 18.3 12.3 7.4 3.7 1.5 0.6 93.9

Примечание

Это не значит что можно открывать только зеленые руки и нужно выбрасывать красные. Это так, некоторая основа для размышлений.

Нужно освоить. Очень. Реально необходимая штука. Но как его делают для нормальных проектов, а не для hello world – я пока не очень понимаю. Тем более, когда все завязано на интерфейс.

Update 1: Попробовал TAPE – в принципе нормальное решение для простых проектов. Делал рефакторинг одной заковыристой функции, добавлял всякие проверки параметров и немножко расширял возможности. Авто-тесты сильно помогли, без них бы я дольше возюкался. Опять же вспоминается как я ее недавно случайно поломал и так же случайно это обнаружил уже на рабочем сервере…

Даже сам удивился, сколько ошибок сразу высыпалось. Обычным порядком я бы их очень долго вылавливал по одной.

Но немного напряг один нюанс. Чтобы протестить какую-то функцию, ее нужно экспортировать из модуля. Иначе же она недоступна. В результате я сделал экспорт некоторых “внутренних” функций, в данном случае это не страшно, но изначально не планировалось

Попутно немного разобрался с package.json

И вот, когда я решил один вечер насладиться покоем и хорошей книжкой, шланг, соединяющий мойку с водопроводом решил что с него хватит. Он тоже устал. Очень. Поэтому сломался и потек. Хорошо так потек. Пришлось перекрывать воду. А поскольку в 6 часов вечера ближайший магазин всяческой сантехнической поебени уже закрыт, а сидеть без воды до завтра неохота, то пришлось переться через весь город в Леруа-Мерлен. Транспорт, кстати, тоже ходит в это, совсем еще детское, время как-то не очень.

Естественно, пока я таскался, жрать без воды никто не приготовил.

И вот когда я все починил, приготовил и собрался таки насладиться остатком этого вечера… там же на кухне устала лампочка. Ну вот как-то так сложились звезды, что именно сегодня. С нетерпением жду что еще решит сегодня сломаться, времени до завтра осталось совсем немного.

Раньше я как-то не очень использовал git. Когда активно программировал – систем контроля версий еще толком не было, во всяком случае у нас они не использовались. Ни на работе, ни в институте.

А тут решил освоить и на тебе. Месяц исправно и ежедневно коммитил. Работал сначала в ветке master, перед глобальной переделкой переключился на другую… И вот пришло время смотреть результат.

Результат обескураживает. Часть файлов тупо потерялась. В обеих ветках. Картинки потерялись в мастере, но сохранились во второй.

Бля, как же хорошо что я сделал бэкап прежде чем играться с переключением веток. Как плохо что я не сделал его перед созданием второй.

Хм… есть некоторые мысли о том как это получилось. Пошел курить мануалы. Но в целом ситуация не радует.

P.S. Ага… при переключении веток он делает это как-то странно… Не удаляет лишнее. Если перед переключением  удалить все, то восстанавливает только часть файлов, остальное можно вытянуть из базы через git checkout *.*

Уфф… ничто не не пропало

Приближается момент, когда я выкачу на сервер новую версию сервиса. В нем поменяется практически все, включая структуру, формат данных и прочие глобальные вещи.

Но я смотрю, на первой версии уже теплится какая-то слабенькая жызнь, кто-то что-то создал и может быть даже пользуется. Возникает вопрос что делать. Кто виноват – и так понятно.

Автоматически сконвертировать на этот раз не выйдет. Во всяком случае это задача не тривиальная. Я перехитрил самого себя – как админ имею полный доступ к исходникам всех созданных чартов, но где они лежат, по каким адресам (и соответственно кто их создал) – знают только их авторы. Вот так вот забавно получилось.

Можно конечно все тупо снести до основанья, но ведь люди старались… Поэтому сделаю так: создам новый проект и выгружу туда бэкап старого. Кто хочет – может продолжать пользоваться, всех о переезде уведомлю почтой. А на старый адрес выложу свеженькое.

Иногда мне кажется что легче реализовать любую, самую сложную,  математику, чем относительно простой пользовательский интерфейс со всеми проверками. Каждой кнопочке – обработчик, меняем данные тут – у нас должна поменяться табличка вон там. Удалили этот элемент – убрать выделение с того…  А если пользователь введет вместо буковки цифирку? А если он вставит какие-нибудь спец-символы? А если  то, а если сё… А если он штаны попробует одеть через голову?

Штаны нужно бережно отнять, вежливо погрозить пальцем и ласковым подзатыльником вправить мозги.

Блядь, после недели мозгоёбства осталось всего-ничего – сделать превью.

Node.js рано или поздно убьет PHP. Слишком много преимуществ у платформы, которая универсальна. Единый синтаксис для клиентской и серверной стороны, а также для скриптов автоматизации, и даже передаваемых данных (JSON – это в общем-то обычная структуар данных JavaScript). Сдерживает этот процесс лишь большое количество накопленного для PHP кода. Ну так и у Perl’а огромное количество кода, и где теперь Perl?

Рано или поздно кто-то додумается сделать модуль для апача, и можно будет в систему написанную на PHP добавлять куски написанные на JavaScript. После чего они медленно сожрут ее изнутри.

Я не хочу сказать что Node.js так уж нравится всем и она идеальна. У ноды сть проблемы и достаточно серьезные. Но часто ноги у них растут из непонимания идеологии этой системы и как следствие – неправильного проектирования архитектуры своего приложения.

Внезапно обнаруживаю, что мой замечательный (кто посмеет сказать что нет?) favicon.ico превратился в какое-то радужное говно. Так и выяснилось, что бинарные файлы в gulp надо обрабатывать как-то по-особенному. То ли опции где-то задавать, то ли плагин специальный искать.

Блядь, и ведь такое ощущение, что эта ошибка только у меня и никто больше о ней не знает

… и не удивительно. Я нашел мерзавца. Это gulp-jsrefs, который, сука, должен был только скриптики менять. Которых в favico нет по определению, и быть не может. Но он между делом что-то там нашел и переделал под себя.  Шлю лучи поноса китайскому товарищу, который его написал. Или корейскому? Или японскому? Да мне в общем без разницы.

Придется выделить отдельно копирование  php через gulp-jsrefs, отдельно копирование всякой всячины.

Скачал простенький плагин gulp-jsrefs для gulp. Находит в исходниках тэги link и script с упоминанием css файла и заменяет их на несколько указанных. Оно надо когда работаете вы с кучей файлов, а потом они минифицируются и объединяются в один. Не менять же все это туда-сюда перед каждым деплоем? Ну вот плагин и  делает эту работу за вас. В исходнике указан боевой вариант, для отладки он автоматом меняется на кучу мелкой россыпью.

Поправка – должен делать.

Прямо на главной странице плагина дан нерабочий пример. Наверно предполагается, что опытный разработчик сам сразу догадается где там стоят лишние фигурные скобочки, а где сделана опечатка.

Но этого показалось  недостаточно чтобы отпугнуть неумех. Так что еще нужно залезть в исходники плагина и поправить регулярное выражение для поиска тэга link.

Плагину, на минуточку – 3 года. ТРИ ГОДА. 3 года он лежит для всеобщего обозрения и автор не удосужился поправить. Ему, как видно, не интересно.

Я не на секунду не поверю, что сделав такую утилиту для себя, он за 3 года не обнаружил, и не исправил ошибку. Но что-то помешало ему нажать пару клавиш и  закоммитить изменения.

Хорошо что плагин простой, и даже начинающий разработчик достаточно легко докопается до сути проблемы. Но что делать, когда глючит драйвер видеокарты, или ошибка в компиляторе?

Вот за это. Не люблю.

Как ни крути, а есть ситуации когда это тупо удобнее чем ебаться с блоками. Вчера пытался сделать типовую формочку: несколько полей, метка + input, сгруппированных вертикально. Что будет в метках и какой длины должны быть input'ы – заранее неизвестно, хочется чтобы оно само как-то автоматически выровнялось более-менее красивым единообразным образом . Оказалось что таблица – самый простой и предсказуемый способ достичь результата. HTML 5.0, CSS 4.0, jquery+bootstrap, ля-ля тополя…

Рабочие моменты

1. Отдельная еботня с аттрибутами role и aria. В бутстрапе они напиханы в каждый элемент. Быстрое гугление проблемы показало – нафиг не нужны. Понапихать их и надеяться что сайт автоматически станет удобным для людей с ограниченными возможностями? Черта с два. Если это нужно, то над этим надо целенаправленно работать. Тот самый случай, когда лучше никак чем как-нибудь. Я не знаю нужно ли это мне вообще, и у меня нет ресурсов чтобы этим заниматься. Люди с ограниченными возможностями, извините.

2. Осознал что делегирование событий – удобная штука. Правда она тянет за собой еще один момент. Плохо смешивать в кучу управление отображением и  поведением. Классы элементов, они все же больше для отображения. Хотя бы потому что исторически так сложилось. Чтобы управлять поведением лучше использовать data-аттрибуты. Единственное, не хотелось бы изобретать велосипед, может уже есть какие-то стандарты на эту тему?

3. селекторы + jQueru дают больше возможностей чем я реально использую. Надо как-то целенаправленно  упорядочить знания в этой области

4. создание элемента через createElement с последующим обертыванием его jQuery имеет некоторые преимущества перед генерацией строки и вставкой через innerHTML. Может даже не меньше кода, но как-то более читаемо и логично

Это (частично) люди которые ушли из ЖЖ из-за переноса серверов в Россию. Частично – потому что неизвестно сколько таких аккаунтов было до. И многие не очень-то и ушли. Так, сделали бэкап на всякий пожарный, не более того. А кто-то даже и не суетился. Некоторые сразу уползли обратно.

Прямо скажем – не фонтан. И не удивительно: монстры вроде тёмы, долбоёба, варламова, мальгина и многих других – вот именно что даже не суетились. А им то что, они персоны публичные, ФСБ про них и так все знает. Их читатели естественно тоже в массе своей остались. Хочешь читать и комментировать Носика в своей ленте без особых телодвижений – сиди в ЖЖ.

Естественно разные коммерческие топодрочеры тоже остались там. Тут и топа-то нет. Как и промоблоков и прочей лабудени.

Не взлетело.

Рабочий день сотрудника заканчивается когда он закрывает глаза. После этого начинается рабочая ночь

(с) какая-то детская сказка

Два дня я ходил вокруг да около и не знал как подступиться. А сегодня ночью мне просто приснилось каким должен быть редактор чартов “для тупых и ленивых”.

Помнится, когда-то в прошлой жизни у нас одна женщина на работе уверяла что самые лучшие идеи ей приходят утром  в душе. Программист это такая работа, которая не укладывается в рамки с 9ти до 18ти. А вообще профессия накладывает очень сильный отпечаток на личность.

Похоже я переоценил средний уровень покерных игроков. Мало кто хочет разбираться-ковыряться, как оно тут устроено, читать хелпы и т.д. Должна быть большая яркая кнопка “Создать свой чарт” – тогда на нее нажмут хотя бы из любопытства. А дальше должен быть редактор, где все добавляется одним кликом мыши. И пусть это будет еще медленнее чем писать код в вики-разметке. Просто до изучения даже вики-разметки мало кто сподобится, а вот нажимать на кнопочки – это нам по силам.

Что ж.. будем делать. А для начала попробую представить как это должно выглядеть.

P.S. https://html-online.com/editor/ – по уровню качества следует ориентироваться на что-то подобное. Тогда – респект мне и уважуха.

P.P.S. Это же старый добрый TinyMCE! Нифигасе он развился. Исходники весят 9мб, это пиздец какой-то.  Даже разобраться в этом почти нереально, не говоря уже о том чтобы сделать что-то подобное самому с нуля.

P.P.P.S Возможно все не так уж и плохо.

Он не сумел обсчитать задачку №1. Утверждает что без разницы сколько человек сбросило перед BB, количество сильных рук у него от этого не меняется. Даже простенький эквилаб выдал какой-то обнадеживающий результа – усиление спектра BB есть, и иногда довольно значительное.

Придется таки сделать свой моделятор, некоторые наработки в этом направлении у меня есть…

Есть  N (где N от 2 до 9) сферических игроков Склански-Чубукова в вакууме.

Сферический игрок Склански-Чубукова в вакууме отличается от обычного тем,  что видит карты оппонента насквозь, и тем самым имеет возможность играть оптимально.

Задача №1. Какие диапазоны рук они будут рейзить в различных позициях?

Но что есть оптимальная игра? Это понятие можно трактовать по-разному

Пример.

3 игрока, руки J2o, 98s, 76s

J2o по отдельности чуть лучше чем 98s, и лучше чем 76s. Но если в банк войдут все трое, то лучшей рукой по EV является 98s. Должен ли игрок с J2o открываться рейзом, зная что он дает достаточные шансы для колла обоим – и в этом случае он лучшим не будет? А если первым принимает решение игрок с 98s, должен ли он открываться, зная что дает достаточные шансы для колла игрокам после него, и тогда, если они сделают оптимальный колл по шансам банка, то он будет лучшим?

В таком случае модель резко усложняется. Поэтому для начала берем простую модель – игрок открывается если прямо сейчас его рука лучшая по отношению к любому другому игроку по отдельности.

Щас забацаю модель и посчитаю

Update: хм… по логике модели, выходит что позиция вообще по барабану. Ну да – они же всё видят и действуют тупо попал-не попал. Навскидку,в среднем сферические игроки будут открывать диапазон примерно  100/N % рук

Update: понял… диапазоны открытия 2ого и последующих игроков должны считаться не вообще, а при условии, что перед ним все сбросили, так мы получаем более адекватный результат, который от позиции зависеть будет.

Update: получил результат… странный. То ли я где-то ошибся, то ли до меня не доходит великая истина, открывшаяся в результате этих вычислений

Итак, у нас 3 игрока за столом, я на SB. У меня какой-нибудь K2s, BU сбросил, я смотрю в карты BB и в 65.7% случаев вижу, что мои карты лучше. Открываюсь… профит!

Ладно, у нас 9 игроков за столом, я на SB. У меня та же самая рука K2s, все сбросили, я смотрю в карты BB и… в 23.7% случаев вижу, что мои карты лучше.  В 23.7 % Карл! Как это может быть?

Разглядываю логи… при 9 игроках у BB выходит какой-то аномальный процент хороших рук. Не вообще, а конкретно в ситуации все сбросили, и остался  SB vs BB.

И в этом есть определенная логика. Если 7 игроков получили из колоды говно, с которым не стоит открываться то вероятность того что хорошие руки у SB или BB должна быть выше. Если у SB тоже говно (а K2s это вобщем-то говно) то вероятность что хорошая рука у BB значительно выше, чем в ситуации трех игроков.

Как интерееесно… это стоило потраченного вечера

…и пошел пешком.

Все, конечно, еще очень сырое. Чего только стоит вчерашнее падение сервера из-ха неудачно написанного регулярного выражения. И чартов разных надо набить побольше. Однако вылизывать себе яйца и ждать дальше смысла нет. Главное ввязаться в бой, и да поможет Франции господь. Создал тему на PokerStrategy, и пошли первые люди. И тишина… Лучше б помидорами закидали.

Отсюда идти, в общем-то некому, о любителях покера читающих мои заметки мне ничего не известно, однако, если кто в силах, зацените хотя бы с точки зрения внешнего вида и общего юзабилити. Смертельный номер! На арене цирка Интерактивные покерные чарты!

P.S. А тем временем я перечитываю классику: Харрингтон о покере, в 3ех томах. Естественно, не от нечего делать, а чтобы сбацать чарт.

P.P.S. Процесс идет

что выражение preg_match(‘/<script(\w|\W)*<\/script>/i’,$html,$matches); может убить PHP-скрипт так надежно, что он даже не успеет записать в лог - что с ним случилось?

а всего-то размер текста между открывающим и закрывающим тегами script превысил какое-то магическое значение.

я плачу и хуею… хуею и плачу…

P.S. Строго говоря, а зачем мне там круглые скобки? Подозреваю что они там не нужны совершенно, должно быть как минимум [\w\W] вместо (\w|\W)

Культурология

  

Вася Ложкин. Он сам из ЖЖ ушел, или его ушли? Дело явно было до переноса серверов в Россию

Profile

pokerfrog

February 2017

S M T W T F S
    1 2 34
567891011
12131415161718
19202122232425
262728    

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 15th, 2025 09:39 am
Powered by Dreamwidth Studios