Здравствуйте, Shmj, Вы писали:
S>Конечно только платные решения — от OpenAI самые лучше — проверял.
Давай попробуем!? А то Deepseek мне опять набредил — я продолжил мучать его этой функцией:
Deepseek:
Проблема в двойном преобразовании координат. `GetWindowRect` уже возвращает экранные координаты, но затем вы преобразуете их в оконные координаты этого же окна, что дает (0,0) относительно самого себя. Скроллбар находится в неклиентской области, поэтому его координаты должны быть относительно родительского окна или оставаться экранными.
Я:
Мне кажется, что проблема здесь не в этом: эта функция как минимум не учитывает заголовок окна, а вообще, если окно заканчивается на отрицательных координатах (такое бывает на втором мониторе) то вычитание ширины вертикального скролла из конца окна даст координаты за границами окна.
Попробуй написать корректную функцию.
Deepseek:
RECT GetVerticalScrollBarRect(HWND hwnd)
{
RECT windowRect;
GetWindowRect(hwnd, &windowRect);
RECT scrollRect = windowRect;
// Вычитаем рамки окна чтобы получить корректные координаты внутри окна
scrollRect.left = scrollRect.right - GetSystemMetrics(SM_CXVSCROLL); //<<----------- ну почему(!?), когда я тебе прямо написал, что координаты могут быть отрицательными, ты продолжаешь вычитать из оконных координат?
// Учитываем заголовок окна и рамки
scrollRect.top += GetSystemMetrics(SM_CYFRAME) + GetSystemMetrics(SM_CYCAPTION);
scrollRect.bottom -= GetSystemMetrics(SM_CYFRAME);
return scrollRect;
}
ЗЫ: Как я вообще мог надеяться на то, что оно мне "посчитает" импульс через катушку с бифилярной намоткой!? Оно даже в простых вещах бредит!
Всё сказанное выше — личное мнение, если не указано обратное.
Re[12]: У престарелых скуфных кнопкодавов реально дофига оби
Здравствуйте, rg45, Вы писали: R>Ну и как это можно использовать в продакшен решениях, где задачи несоизмеримо сложнее?
GitHub Copilot — это обертка (UI), она использует выбранную модель как бэкэнд.
Пробовал выбрать нормальную модель, типа Клода? Мои отзывы строятся на этом, т.е. использую именно последний Клод (4.5 сейчас). Пробовал с GPT — прямо заметно тупее (IMHO).
По тестам для программирования Клод самый толковый: https://www.anthropic.com/news/claude-sonnet-4-5
Вот его вывод
#include <iostream>
// Функция проверяет пересечение диапазонов [a, b) и [c, d)
// Диапазоны полуоткрытые: включают начало, исключают конецbool rangesIntersect(int a, int b, int c, int d) {
// Два диапазона пересекаются, если:
// начало первого < конец второго И начало второго < конец первогоreturn (a < d) && (c < b);
}
// Альтернативный вариант - проверка через условие НЕ пересечения
// (может быть более интуитивным)bool rangesIntersect_v2(int a, int b, int c, int d) {
// Диапазоны НЕ пересекаются, если:
// один диапазон полностью левее другогоif (b <= c || d <= a) {
return false; // не пересекаются
}
return true; // пересекаются
}
int main() {
// Тестовые примеры
// [1, 5) и [3, 7) - пересекаются в [3, 5)int res1 = rangesIntersect(1, 5, 3, 7);
std::cout << "[1, 5) и [3, 7): " << (res1 ? "пересекаются" : "не пересекаются") << std::endl;
// [1, 3) и [3, 5) - не пересекаются (смежные диапазоны)int res2 = rangesIntersect(1, 3, 3, 5);
std::cout << "[1, 3) и [3, 5): " << (res2 ? "пересекаются" : "не пересекаются") << std::endl;
// [1, 5) и [1, 5) - пересекаются (совпадают полностью)int res3 = rangesIntersect(1, 5, 1, 5);
std::cout << "[1, 5) и [1, 5): " << (res3 ? "пересекаются" : "не пересекаются") << std::endl;
// [1, 5) и [6, 10) - не пересекаются (отдельные диапазоны)int res4 = rangesIntersect(1, 5, 6, 10);
std::cout << "[1, 5) и [6, 10): " << (res4 ? "пересекаются" : "не пересекаются") << std::endl;
// [3, 8) и [2, 4) - пересекаются в [3, 4)int res5 = rangesIntersect(3, 8, 2, 4);
std::cout << "[3, 8) и [2, 4): " << (res5 ? "пересекаются" : "не пересекаются") << std::endl;
return 0;
}
выбирать модель в Copilot тут
Множитель более-менее соответсвует толковости соответствующей модели
Еще, я на С++ что-то писал последний раз лет 15 назад если не больше
Пробовал использовать с .NET — тоже получалось не очень, к сожалению.
bnk>// Альтернативный вариант - проверка через условие НЕ пересечения
bnk>// (может быть более интуитивным)
bnk>bool rangesIntersect_v2(int a, int b, int c, int d) {
bnk> // Диапазоны НЕ пересекаются, если:
bnk> // один диапазон полностью левее другого
bnk> if (b <= c || d <= a) {
bnk> return false; // не пересекаются
bnk> }
bnk> return true; // пересекаются
bnk>}
bnk>
Ну вот если бы живой человек написал такое, я бы искренне огорчился. Тут осталось лишь формально применить алгебру логики, чтобы инвертировать выражение и получить ожидаемое (a < d) && (c < b). Это как остановиться перед самым финишем.
PS. Ну а вариант выше, это однозначно зачёт
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Философ, Вы писали:
Ф>у него есть все данные! Оно "понимает", в каких координатах сейчас scrollRect. Ф>Покажи мне, что тебе твои платные "инструменты" ответят.
Я же не из z-поколения, по этому у меня нет подключенного Cursor, нет MCP-сервера и пр. Только есть через OpenAI API, а ему нужно говорить что конкретно не так и после предложенного варианта — проверять вручную и опять говорить что не так. Но чисто для любопытства кинул ваш запрос и вот что ответило:
Ты переводишь прямоугольник non‑client (окно целиком) в клиентские координаты; вертикальный скроллбар — это non‑client, поэтому в клиентских координатах он неизбежно «за пределами» (отрицательные/за client.width/height).
Либо работай в экранных/оконных координатах без конверсии, либо вычисляй по rcWindow/rcClient (GetWindowInfo/AdjustWindowRectEx/NCCALCSIZE) с учётом рамки, меню и DPI.
И учти, что скроллбар может быть слева (WS_EX_LEFTSCROLLBAR/RTL).
Но тут нужно уточнять что именно хочешь — изменить код или что именно?
=сначала спроси у GPT=
Re: У престарелых скуфных кнопкодавов реально дофига обиды на ИИ.
Здравствуйте, pkl, Вы писали:
pkl>У престарелых бесполезных кнопкодавов и всяких там DBA наблюдается прямо таки лютое-бешеное со слюнями отстаивание того, что "весь этот ваш ИИ — ГОВНО, он мне такую хрень пишет".
Меня во всем этом поражает то, когда программисты начинают относиться к коду также, как и ИИ-ассистенты, то есть без глубокого погружения в код и задачу. А кто даст время на такое погружение программистам в легаси-коде, который был написан еще теми, кого сменило уже пять команд на проекте? При таком подходе почему бы ИИ-ассистентам и не заменить "кожаных мешков"? Современная индустрия программирования оставляет желать лучшего — она слишком часто порождает глючных монстров. Поэтому место ИИ-ассистентам вполне могут и найти
Re[13]: У престарелых скуфных кнопкодавов реально дофига оби
Здравствуйте, bnk, Вы писали:
bnk>Пробовал выбрать нормальную модель, типа Клода? Мои отзывы строятся на этом, т.е. использую именно последний Клод (4.5 сейчас). Пробовал с GPT — прямо заметно тупее (IMHO). bnk>По тестам для программирования Клод самый толковый: https://www.anthropic.com/news/claude-sonnet-4-5
Поигрался я тут с этим Клодом более плотно — для промышленного использования откровенно не вытягивает пока. Типовое общение выглядит примерное так: на первый запрос он задорно отвечает: "Да! Это возможно!" и... пишет откровенную лажу. Указываю ему на эту лажу, он "Вы совершенно правы! Вот исправленный код...". В новом варианте одну лажу исправил, новой лажи напорол. После нескольких тыканий носом он, наконец, исправляет откровенную лажу, но(!) пишет теперь "Но нужно признать, что существуют определённые ограничения и эту задачу можно решить не всегда". У меня уже рвёт кабину. Какие, нахер, ограничения! Мы же вот в прошлой сессии разбирали задачу, нужно просто использовать тот подход и никаких ограничений тогда не будет! "Ах да! Вы совершенно правы". Наконец рожает рабочий вариант, но при этом выплевывает несколько экранов кода, на который без слёз смотреть нельзя. Срала-мазала, в конце поскользнулась.
и люблю. Только тут немного другая ситуация: суровым сибирским мужикам вместо пил из стали предлагают какие-то детские игрушки в яркой упаковке. На большее современный ИИ ПОКА не тянет. По крайней мере, из того, что видел я.
--
Справедливость выше закона. А человечность выше справедливости.
По моему у нас нормальная реакция на совершенно запредельный спам. A>ИИ когда-нибудь (лет через сто) наверняка будет делать то, что ему сейчас приписывают. A>Но пока это всё ещё "У него внутри неонка".
Имхо, врядли нейронка сможеть делать сложные задачи(задачи которые делает группа больше 5-7 людей), так как придется такой же обьем работы втюхивать в нейронку, а такая группа обычно долго не сидит над задачами, нейронки максимум дял средней паршивости задач, 40-50 человеко-часов
Re[16]: У престарелых скуфных кнопкодавов реально дофига оби
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, bnk, Вы писали:
bnk>>Ну как, классика же. Если что, я его только на кошках (web) использую, в тепличной среде (copilot)
bnk>>
bnk>>Купили как-то суровым сибирским лесорубам японскую бензопилу.
bnk>>Собрались в кружок лесорубы, решили ее испытать.
bnk>>Завели ее, подсунули ей деревце.
bnk>>«Вжик» — сказала японская пила.
bnk>>«У, б...» — сказали лесорубы.
bnk>>Подсунули ей деревце потолще. «Вж-ж-жик!» — сказала пила.
bnk>>«Ух, б...!» — сказали лесорубы.
bnk>>Подсунули ей толстенный кедр. «ВЖ-Ж-Ж-Ж-Ж-Ж-Ж-ЖИК!!!» — сказала пила.
bnk>>«Ух ты, б..!!» — сказали лесорубы.
bnk>>Подсунули ей железный лом. «КРЯК!» — сказала пила.
bnk>>«Ага, б...!!!» — укоризненно сказали суровые сибирские лесорубы! И ушли рубить лес топорами...
и люблю. Только тут немного другая ситуация: суровым сибирским мужикам вместо пил из стали предлагают какие-то детские игрушки в яркой упаковке. На большее современный ИИ ПОКА не тянет. По крайней мере, из того, что видел я.
резиновые топоры))
Re[9]: У престарелых скуфных кнопкодавов реально дофига обид
Здравствуйте, Shmj, Вы писали:
S>...Но чисто для любопытства кинул ваш запрос и вот что ответило:
S>
S>Ты переводишь прямоугольник non‑client (окно целиком) в клиентские координаты; вертикальный скроллбар — это non‑client, поэтому в клиентских координатах он неизбежно «за пределами» (отрицательные/за client.width/height)....
Сначала было лень комментировать — уже порядком объелся их бредом. Но раз уж тут продолжается обсуждение, то пожалуй, продолжу:
Клиентской и не_клиентской может быть область в окне: пользователю даётся клиентская область, в которой он может рисовать. В не_клиентской области располагаются такие вещи, как заголовок, скроллбары и проч.
Не существует клиентских и не_клиентских координат: есть координаты в экранном пространстве, а есть в оконном. Например, скроллбар принадлежит окну, но располагается в не_клиентской области, ровно также как и заголовок.
Ключевые понятия: client area — non‑client area; window space, screen-space.
S>Но тут нужно уточнять что именно хочешь — изменить код или что именно?
Хочу чтоб
1) оно перестало бредить при ответах на мои вопросы
2) хочу чтобы оно могло сообразить, что координаты в экранном пространстве могут быть отрицательными, и прекратило тупо вычитать из экранных координат при генерации функций мне.
3) хочу чтобы оно могло обнаруживать ошибки, описанные в п.2 хотя-бы после моей подсказки.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[10]: У престарелых скуфных кнопкодавов реально дофига обид
Здравствуйте, Философ, Вы писали:
Ф>Хочу чтоб Ф>1) оно перестало бредить при ответах на мои вопросы Ф>2) хочу чтобы оно могло сообразить, что координаты в экранном пространстве могут быть отрицательными, и прекратило тупо вычитать из экранных координат при генерации функций мне. Ф>3) хочу чтобы оно могло обнаруживать ошибки, описанные в п.2 хотя-бы после моей подсказки.
Я обычно делаю так. Создаю минимальный пример, как можно меньше строк, который демонстрирует проблему, но который можно целиком запустить. Далее даю ему пример и говорю что не так. Оно правит, я запускаю и говорю сработало ли его подсказка или нет. Обычно через 2-3 итерации срабатывает...
Если использовать MCP сервер — то оно сможет само запускать, снимать скриншот и само корректировать.
=сначала спроси у GPT=
Re[11]: У престарелых скуфных кнопкодавов реально дофига обид
Здравствуйте, Shmj, Вы писали:
S>Я обычно делаю так. Создаю минимальный пример, как можно меньше строк, который демонстрирует проблему, но который можно целиком запустить. Далее даю ему пример и говорю что не так. Оно правит, я запускаю и говорю сработало ли его подсказка или нет. Обычно через 2-3 итерации срабатывает...
Научи: чувак навёл мышь на скролл-бар, нажал левую кнопку мыши. Нужно определить, что чекл попал в скролл-бар. Проблема: сгенерированная функция рассчитывает позицию скролл-бара за границами окна, т.к. на экране, на котором располагается окно отрицательные координаты (дополнительный монитор слева от основного).
У меня пока не получается его убедить, что координаты на экране могут быть отрицательными.
Как заставить его это воспроизвести?
Всё сказанное выше — личное мнение, если не указано обратное.
Re[12]: У престарелых скуфных кнопкодавов реально дофига обид
Здравствуйте, Философ, Вы писали:
Ф>Научи: чувак навёл мышь на скролл-бар, нажал левую кнопку мыши. Нужно определить, что чекл попал в скролл-бар. Проблема: сгенерированная функция рассчитывает позицию скролл-бара за границами окна, т.к. на экране, на котором располагается окно отрицательные координаты (дополнительный монитор слева от основного). Ф>У меня пока не получается его убедить, что координаты на экране могут быть отрицательными.
Ф>Как заставить его это воспроизвести?
Минимальный код, который будет выводить координату. Т.е. изобрази проблему на практике.
=сначала спроси у GPT=
Re[13]: У престарелых скуфных кнопкодавов реально дофига обид
Здравствуйте, Shmj, Вы писали:
Ф>>Как заставить его это воспроизвести?
S>Минимальный код, который будет выводить координату. Т.е. изобрази проблему на практике.
Я правильно тебя понимаю, что мне нужно создать ещё один проект, на котором на плюсах создаю окно, и размещаю его по отрицательным координатам?
А дальше? Как ему показать, что я ткнул туда куда нужно, а попал в небо? Как можно доказать, что я ткнул туда, куда нужно?
Всё сказанное выше — личное мнение, если не указано обратное.
Re[13]: У престарелых скуфных кнопкодавов реально дофига обид
Здравствуйте, Shmj, Вы писали:
Ф>>Научи: чувак навёл мышь на скролл-бар, нажал левую кнопку мыши. Нужно определить, что чекл попал в скролл-бар. Проблема: сгенерированная функция рассчитывает позицию скролл-бара за границами окна, т.к. на экране, на котором располагается окно отрицательные координаты (дополнительный монитор слева от основного). Ф>>У меня пока не получается его убедить, что координаты на экране могут быть отрицательными.
Ф>>Как заставить его это воспроизвести?
S>Минимальный код, который будет выводить координату. Т.е. изобрази проблему на практике.
А зачем все эти приседания? Вот для чего делать столько телодвижений?
Re[14]: У престарелых скуфных кнопкодавов реально дофига обид
Здравствуйте, Философ, Вы писали:
Ф>Я правильно тебя понимаю, что мне нужно создать ещё один проект, на котором на плюсах создаю окно, и размещаю его по отрицательным координатам?
У вас реальный вопрос или просто для подколки?
Если реальный вопрос возник, реальная проблема — то конечно нужно сделать мин. проект, который демонстрирует эту проблему. Я всегда так делаю. Иногда бывает что проблема в другом, по этому мин. проект всегда обязателен.
Если просто для подколки, типа положили лом и оно не решило — то нет смысла. Нужно реальная проблема, который ты не можешь решить быстро.
Ф>А дальше? Как ему показать, что я ткнул туда куда нужно, а попал в небо? Как можно доказать, что я ткнул туда, куда нужно?
А как ты узнаешь что попал не туда?
=сначала спроси у GPT=
Re[14]: У престарелых скуфных кнопкодавов реально дофига обид
Здравствуйте, so5team, Вы писали:
S>>Минимальный код, который будет выводить координату. Т.е. изобрази проблему на практике. S>А зачем все эти приседания? Вот для чего делать столько телодвижений?
Я показываю как оно может решить вашу проблему. Т.е. если ты реально не знаешь как решить — то вот таким образом можно делегировать ему и даже не включать мозг.
=сначала спроси у GPT=
Re[15]: У престарелых скуфных кнопкодавов реально дофига обид
Здравствуйте, Shmj, Вы писали:
S>У вас реальный вопрос или просто для подколки?
Я руками сделал. Устал от их тупости и сделал руками. Это уже сделано — я прошу поделиться опытом общения с имитаторами интеллекта.
S>Если реальный вопрос возник, реальная проблема — то конечно нужно сделать мин. проект, который демонстрирует эту проблему. Я всегда так делаю. Иногда бывает что проблема в другом, по этому мин. проект всегда обязателен.
Так как это сделать? Вот, допустим, набросаю я окно, добавлю в него скроллбары, скомпилирую, дальше....?
S>Если просто для подколки, типа положили лом и оно не решило — то нет смысла. Нужно реальная проблема, который ты не можешь решить быстро.
У меня нет проблемы, однако я сделал руками. Научи объяснять такие вещи этим болванам, а то даже в твоём ответе (ответе тебе):
поэтому в клиентских координатах он неизбежно «за пределами» (отрицательные/за client.width/height).
Т.е. даже у тебя оно не восприняло, что экранные координаты на дополнительном мониторе, если он слева от основного отрицательные: позиция правого края окна отрицательна.
S>А как ты узнаешь что попал не туда?
Я это вижу. А оно?
Всё сказанное выше — личное мнение, если не указано обратное.