Petr
Теперь осталось найти кого-нибудь с плохим гитхабом для максимального морального самоутверждения.
Hello, World! 🎄
Давай искать)
Hello, World! 🎄
Хотя, нет. Вдруг найдем у того, у кого лучше. И нас опозорят.
Igor
я был прав:
На самом деле чем меньше тем лучше, это значит)))
Igor
Тут линейная зависимость количества котрибуций и психического здоровья
Hello, World! 🎄
Не понимаю тебя
Hello, World! 🎄
Ты хочешь сказать, что чем больше коммитов, тем больше псих?
Igor
Не понимаю тебя
Ну, чем меньше коммитов сделал, тем лучше себя чувствует твоё психологическое здоровье
Hello, World! 🎄
Я просто поставил себе задачу программировать чаще
Igor
Пока что 22ой у меня самый насыщенный
Snusmumriken
У меня текущий год самый насыщенный
Hello, World! 🎄
У меня текущий год самый насыщенный
Мы же знаем, что на работе отдельный хостинг для кода
Snusmumriken
Там вообще фигня
Snusmumriken
Но там в среднем 5-10 коммитов в месяц.
Snusmumriken
Я люблю сидеть и полностью разрабатывать фичу а потом коммитить её один раз уже готовой и отлаженной, а потом можно ещё пару коммитов фиксов если нашли что фиксить.
Vlad
У меня сейчас в основном используется личный Git сервер
Igor
У меня сейчас в основном используется личный Git сервер
О, я пытался gitea развернуть на малинке у себя... не очень удачный опыт)
Ivan
Я люблю сидеть и полностью разрабатывать фичу а потом коммитить её один раз уже готовой и отлаженной, а потом можно ещё пару коммитов фиксов если нашли что фиксить.
А если ты поначалу был на правильном пути, а потом немножко накосячил и хочешь вернуться к той точке, где все в ажуре и переделать?
Vlad
О, я пытался gitea развернуть на малинке у себя... не очень удачный опыт)
У меня на VPS в докере, по сути пара команд, не считая поднятия SSH
Vlad
Но оно подробно расписано в доке и довольно легко настраивается
Igor
У меня на VPS в докере, по сути пара команд, не считая поднятия SSH
Да не, сам-то gitea настроить не проблема. Фигня в том, что он кушает дохрена))
Igor
У меня малина буквально задыхаться начала, а это я и без докера поднимал даже
Vlad
Его я развернул на домашнем сервере
Igor
Его я развернул на домашнем сервере
У меня дома есть сервачок на арче, который я включаю когда надо по WoL (экономлю энергию, так сказать) ну и малина, которая вечно крутится
Igor
У меня на ней раньше была вебморда от гита стандартная, которая ещё по CGI общается
Igor
Но отказался от неё в пользу гитхаба
Vlad
Мой сервак потребляет максимум 10Вт (китай-пк на Intel N100)
Vlad
Потому держу постоянно включённым
Igor
Ну у меня сервак просто на полноценной платформе, ещё и не с самым нежрущим камнем
Igor
Там стоит, если правильно помню, FX-8300 и 750 Ti
Igor
Нафига?
Иногда графику линуксовую тестить приходится, а комп основной перезапускать не охота
Igor
Да и нужно было куда-то видеокарту определить)))
Igor
А то че она без дела скучала лежала
Igor
В любом случае 99% времени она тупо простаивает
Igor
Но хотя бы используется
Михаил
Я знаю еще одного кандидата. Практически непобедимого
Михаил
github.com/reglnk количество коммитов немного обманчиво, но всё же
ведутся работы над многими петами, не заливающиеся на гитхаб, даже в приватные репы
Михаил
пока что
Михаил
а потом один коммит на +1278 -343 строк
Михаил
Igor
Вот сейчас началось что-то странное... Я не понимаю, почему у меня поток 2 умирает вместе с потоком 1, по идее поток 2 должен вечно вообще выполняться
Igor
Если закомментить resume для первого потока, то второй вечно и работает
Igor
В основной кодовой базе я с ещё более странным багом столкнулся, тут я его просто повторить пытался в изолированном окружении. Там у меня вообще основной луастейт улетает в панику какого-то хрена при выполнении примерно такого же кода.
Igor
Причем пишет, что ошибка в test.lua, а на самом деле вызов производился в соседнем скрипте-корутине и вообще внутри pcall, так что в панику улететь он ну никак не мог.
Igor
Этот test.lua не взаимодействует с инвалидным объектом вообще никак, это делает соседняя корутина только, test.lua в этот момент буквально только coroutine.yield() делает
Igor
Может идеи у кого есть че за хрень...
Igor
Стек по 10 раз для каждой корутины проверил, всё в порядке нигде ничего лишнего не пушится, все операции синхронизированы
Igor
Неужели resume должен вызываться внутри основного стейта только
Igor
Хотя скорее всего так и есть, это я тупанул... Сейчас как раз и проверю.
Igor
Видимо не только это проблемой было, я продолжаю в панику улетать...
Igor
Не, всё, я устал. Буквально 5 часов безрезультатного дебага. Я понятия не имею, почему оно падает...
UtoECat
Хотя скорее всего так и есть, это я тупанул... Сейчас как раз и проверю.
если сурцы луа с собой таскаешь - на время отладки можешь LUAI_ASSERT обхявить, чтобы больше ассертов в интерпретаторе отрабатывало на время отладки.
Igor
Луа у меня статически слинкован с проектом
Igor
Так что с исходниками проблем нет особой
Igor
В основной кодовой базе я с ещё более странным багом столкнулся, тут я его просто повторить пытался в изолированном окружении. Там у меня вообще основной луастейт улетает в панику какого-то хрена при выполнении примерно такого же кода.
Я ну сначала подумал, что крашится из-за того что вне lua_call'а основного потока вызываю lua_resume для корутин, попробовал всё в вызовы обернуть, но всё тот де результат... Условно у меня есть два скрипта chatexec.lua и test.lua оба состоят из бесконечных циклов типа local function processEvent(evname, evarg) end while true do processEvent(coroutine.yield()) end У скрипта test.lua так вообще можно сказать пустой обработчик, там только есть принт, который выводит объект со ссылкой на энтити игрока при эвенте соединения с сервером. И воо когда chatexec.lua пытается получить доступ к инвалидному объекту, отрабатывает паника основного потока, хотя chatexec обращается к удалённому объекту внутри pcall, а значит просто pcall должен был ошибку вернуть вот эту о попытке обратиться к удаленному объекту... И самое интересное, что если я оставлю только один скрипт chatexec.lua в автозагрузке, или закомменчу принт внутри test.lua, то всё отрабатывает ровно такч как и должно. Но как я уже сказал, повреждений стека нет нигде, несколько раз уже проверил, чуть ли не до дыр его затёр уже. В общем хрен знает, что ему не нравится.
UtoECat
Попробовал ещё раз ассерты включить на всякий, ни один из них не отработал
хммм... Смотри, вот такой код у меня работает. Просто для примера набросал. Постепенно выполняет корутины в пуле. Теоретически, он не делает ничего, что бы отличалось кардинально от твоего кода. Может попробуешь свои функции createObject подкинуть сюда и проверить работает или нет. Если нет - твои функции что-то всё-таки корраптят. единственное - я не делаю lua_ref тут, корутины живы только потому что они остаются нетронутыми на стеке главного потока
Snusmumriken
А если ты поначалу был на правильном пути, а потом немножко накосячил и хочешь вернуться к той точке, где все в ажуре и переделать?
Я всегда на правильном пути. Откат бывает нужен только тогда, когда: — Я (или кто-то ещё) накатил свою великую фичу, связанную с чьей-то ещё фичей (или моей), а вторая сторона не успевает, не накатила и задерживается. Но, через время, придётся повторить коммит. — Просто некие фатальные ошибки, когда баг критичен но требует много времени на исправление, а его уже накатили и он уже портит жизнь на проде. Но после фикса будет повторный коммит с тем же самым но исправленным. Ну, я к тому, что "переделывать" не нужно, нужно поправить.
Михаил
а потом один коммит на +1278 -343 строк
о, как я предсказал такое событие
Михаил
Михаил
ну почти столько
Михаил
должны быть простые проверки, на какой машине запускается код
Igor
В основном проекте можно сказать что-то такое же и происходит, просто создается юзердата, разве что она чуть побольше
Igor
И холдит в себе C++ класс, которому я сделал in-memory инициализацию
Igor
Ну типа вот
UtoECat
Вот сейчас началось что-то странное... Я не понимаю, почему у меня поток 2 умирает вместе с потоком 1, по идее поток 2 должен вечно вообще выполняться
я продебажил код и понял почему он падает. Ты делаешь resume() на мёртвую корутину в цикле этом) И с ассертами (#define LUAI_ASSERT в исходниках луашки) это ловится корректно : [utoecat@utopc test]$ ./main 0 0 threads : 0 0object created threads : 0 0object accessed Object accessed successfully: 1337 threads : 0 0Object invalidated threads : 0 0object accessed main: minilua.h:19093: index2value: Assertion `(idx != 0 && -idx <= L->top - (ci->func + 1)) && "invalid index"' failed. или нет погоди
UtoECat
я продебажил код и понял почему он падает. Ты делаешь resume() на мёртвую корутину в цикле этом) И с ассертами (#define LUAI_ASSERT в исходниках луашки) это ловится корректно : [utoecat@utopc test]$ ./main 0 0 threads : 0 0object created threads : 0 0object accessed Object accessed successfully: 1337 threads : 0 0Object invalidated threads : 0 0object accessed main: minilua.h:19093: index2value: Assertion `(idx != 0 && -idx <= L->top - (ci->func + 1)) && "invalid index"' failed. или нет погоди
while (!L1_died || !L2_died) { ///printf("threads : %i %i\n", L1_died, L2_died); int nres = 0; if (!L1_died) { if (L1_died != (lua_resume(L1, nullptr, 0, &nres) != LUA_YIELD)) { printf("Thread 1 died: %s\n", lua_gettop(L1) ? lua_tostring(L1, -1) : NULL); L1_died = true; } lua_pop(L1, nres); } if (!L2_died) { nres = 0; if (L2_died != (lua_resume(L2, nullptr, 0, &nres) != LUA_YIELD)) { printf("Thread 2 died: %s\n", lua_gettop(L2) ? lua_tostring(L2, -1) : NULL); L2_died = true; } lua_pop(L2, nres); } } вот так всё работает у меня)