fgntfg
fgntfg
Если уж off-topic то серьезный
Tverd
Snusmumriken
кстати вопрос к работающим программистам, часто ли встает вопрос временных рамок работы и насколько они жесткие?
Ну смотря что делаешь. Если чинишь частично неработающую систему, названивает какой-нибудь особый клиент (для обработки которого выделен отдельный сервак), и ему срочно - тут офигенно жёсткие рамки. Или когда ты делаешь фиговину, с которой УЖЕ должны работать другие люди, тут ты уже задерживаешь всех, и тебе, ясное дело, приходится делать ОЧЕНЬ быстро. Но такое не всегда. В целом, ещё зависит от того, работает ли компания по методологиям, в особенности - scrum. Никогда не работай там где используют методику scrum, твоя жизнь превращается в вечный дедлайн на протяжении всех лет разработки проекта. И да, тут как раз "бесконечные правки которые надо успеть сделать за неделю". Не то чтобы scrum плох, но его пытаются использовать "по максимуму", запихивая в "текущую неделю" - ВСЕ хотелки заказчика, даже если там два месяца работы. А "текущая неделя" - там типа очень много коротких циклов разработки: работаем с понедельника по среду, в четверг-пятницу - всё тестируем, показываем заказчику, он говорит "Хочу ещё вот это!" и с понедельника - команда приступает. Ясен хрен что заказчик хочет всего подряд, и некоторые вещи делаются месяцами.
Snusmumriken
Блин, что это за треш сейчас был?
Snusmumriken
Превращаем луа-чатик в трейдерский чатик, только потому что какой-то ушлёпок запостил ссылку на нашу фиговину в какой-то трейдерской фигне, и к нам попёрли трейдеры, да?
Snusmumriken
А меня не ебёт и не чешет твоё мнение на тему этого чата, на тему языков, на тему твоего "самого правильного мнения и образа жизни" и прочей хуйни. Или ты начинаешь задавать конкретные вопросы по языку луа, или ты съёбываешь отсюда к бабуле, и прекращаешь пиздеть на тему своих прибылей, ибо это МЕНЯ не волнует )))
Elias
Я не поверил своим глазам, когда проснулся и увидел ~200 сообщений этого трэша
fgntfg
Snusmumriken
Я не поверил своим глазам, когда проснулся и увидел ~200 сообщений этого трэша
Та же фигня. В общем, треш вычищен кроме одного сообщения, на которое я ответил. Если прочитает и вкурит - ок, сможет просвящаться об "недалёких программистишек", не вкурит - покатится в трейдерские чаты.
Elias
Отлично Вообще, надо бы мне почитать чатик, потому что я здесь совсем недавно, но кажется тут бывали очень интересные дискуссии. Что-то чатики по C++ как-то не такие ламповые, возможно из-за большого количества людей.
Snusmumriken
И там нет меня )))
Elias
😆
Snusmumriken
@annelinlol , могу ещё трейсрут присобачить, или с линексов потестить, потому что ttl тут довольно приличный. Кстати, откуда такой красивый ойпишник? ))
Elias
Как думаете, с чего стоит начать изучать все эти модные библиотеки, на котором пишут бэк-энд? Видел, что очень популярен OpenResty, но с какой стороны подступиться - не очень понятно. Просто кажется, что 99% работ на Lua связаны с подобными вещами, так что надо бы поэкспериментировать, пока время есть. :D
Snusmumriken
Хмм. На самом деле можешь развлечься знаешь с чем? а) тарантул, написать какое-нибудь тарантуло-приложение, которое крутится в бесконечном цикле, пишет в базу что угодно, хоть динамику погоды с какого-нибудь сайта (условно раз в несколько часов), и принимает json-запросы, мол, "хочу погоду получить в таком-то городе на такое-то время". б) рести - не сложный, это тот же nginx с несколькими лишними командами в конфиг-файле. Я для него написал несколько смешных фиговинок, и у меня даже есть сайт!
Snusmumriken
Да, луа-шаблонизатор - одна из тех смешных фиговинок. Мне просто лень на html шпрехать.
Elias
:D Спасибо, попробую что-нибудь сделать А нет крутых туторов/книг, которые считаются эталонными? (Скорее всего это официальная документация, но мало ли)
Snusmumriken
Только официальная документация. Но тут та же суть что в php, просто вместо echo - ngx.say. Остальное - абсолютно то же самое.
Snusmumriken
Конфиг примерно такой. Доки по нему - на сайтах у nginx/resty.
Elias
Хорошо :D Выглядит просто и понятно —---- И я тут наконец начал писать Lua/C++ туторы, которых будет столько, что целую книгу можно сделать потом. Долго откладывал, но теперь пришла мотивация, ура. Просто я 4 года назад начал писать туторы и они очень даже добились. Если погуглить "lua c++", то скорее всего мой блог будет первым результатом. Но теперь больно смотреть на то, что я понаписал, потому что есть много вещей, которые можно делать гораздо лучше. Ну, 4 года задротства не просто так были. :D
Snusmumriken
Самое противное, что через четыре года ты будешь точно так же смотреть на свои текущие туторы, потому что четыре года не просто так были : ) Я к тому чтобы ты не заморачивался.
Elias
Ха-ха, надеюсь, что нет. К тому же, не сказать, чтобы я предыдущие статьи считал безумно ошибочными. Скорее они просто недостаточно в глубину копают, а так ошибок не так много. И я думаю быстро выйти за пределы того, про что говорят обычно. А то часто останавливаются на самых основах, а то, как это применять в реальной жизни, не показывают. Для меня было большим открытием то, что на Lua можно писать огромную часть кода, которая лишь изредка вызывает C++. О таком обычно не пишут. :)
Danil
Как разбить слово на отдельные символы?
Snusmumriken
Ха-ха, надеюсь, что нет. К тому же, не сказать, чтобы я предыдущие статьи считал безумно ошибочными. Скорее они просто недостаточно в глубину копают, а так ошибок не так много. И я думаю быстро выйти за пределы того, про что говорят обычно. А то часто останавливаются на самых основах, а то, как это применять в реальной жизни, не показывают. Для меня было большим открытием то, что на Lua можно писать огромную часть кода, которая лишь изредка вызывает C++. О таком обычно не пишут. :)
Ну, это можно заметить по многочисленным воплям о крутизне resty/tarantool/redis, благодаря встраиваемым луа-скриптам, а так же - в принципе, по существованию скриптовых языков. Ну, я постоянно пересекался на начале с каким-нибудь комплектом либ вроде torch, где много ускорялок и утилитарных функций для луа. Тот факт что такое существует - тонко намекает что на этом всём пишут действительно много кода, и только иногда - выглядывают на сишную сторону, когда нужна какая-то конкретная тяжёлая/невозможная в скрипте функция.
Snusmumriken
Как разбить слово на отдельные символы?
str = 'Yoyo nigga!' for c in str:gmatch'.' do print(c) end Y o y o n i g g a ! Как альтернатива - str:sub(i, i).
Snusmumriken
Danil
Спасибо
Danil
А как теперь к каждому символу присвоить какое либо значение переменной?
Elias
Ну, это можно заметить по многочисленным воплям о крутизне resty/tarantool/redis, благодаря встраиваемым луа-скриптам, а так же - в принципе, по существованию скриптовых языков. Ну, я постоянно пересекался на начале с каким-нибудь комплектом либ вроде torch, где много ускорялок и утилитарных функций для луа. Тот факт что такое существует - тонко намекает что на этом всём пишут действительно много кода, и только иногда - выглядывают на сишную сторону, когда нужна какая-то конкретная тяжёлая/невозможная в скрипте функция.
Ага В Питоне это как-то более распространено, со всеми этими Numpy, Scipy и пр. В итоге люди пишут сначала на Python, а потом уже вызывают C/C++ А Lua часто рассматривают как бонус к C++, где вызываются кастомные вещи. Очень долго я использовал Lua как штуку, которая в 99% случаев вызывала только C++ функции и на скриптовой стороне делала мало. Но когда я понял, как легко можно на Lua стороне делать почти всё, моя жизнь стала в разы лучше. :D
Snusmumriken
А как теперь к каждому символу присвоить какое либо значение переменной?
Ты хочешь какие-то символы заменить на другие? Давай рассказывай что хочешь, потому что путей решения тут много, и каждый оптимален в своём случае.
Danil
Хочу сделать шифратор
Danil
Пишешь слово оно возвращает тебе его в виде языка Морзы
Snusmumriken
Хе, тогда давай string.gsub
Snusmumriken
Только заменяешь каждый символ на соответствие в табличке.
Danil
https://pastebin.com/raw/GYBjUhUQ
Danil
Что-то не пашет ЖВ
Danil
:d
Danil
😞
Snusmumriken
Danil
Вау
Snusmumriken
Вау
https://pastebin.com/4M8vVZHw Добавил пробелов в коды, чтобы разделять "буквы"
Elias
Прекрасный тестовый пример
Snusmumriken
У него мало букв, и они часто повторяются, легко проверять корректность трансляции. Хотя лучше было бы ещё добавить не только односимвольные замены.
Snusmumriken
В общем виде, функция примерно такого вида. Тут можно добавлять больше букв на замену, меняя диапазон шатания по таблице трансляции.
Elias
А ссылочку почему не кидаешь? Я бы почитал.
Пока что новые статьи ещё в процессе написания. Как только допишу первые - кину сюда
Serge
Да я бы и старые почитал... Но нет, так нет.
Elias
Да я бы и старые почитал... Но нет, так нет.
https://eliasdaler.wordpress.com/ Старые все вот здесь
Elias
В последних статьях я использовал LuaBridge, но теперь всем советую sol2, он гораздо лучше и удобнее. :)
Snusmumriken
В последних статьях я использовал LuaBridge, но теперь всем советую sol2, он гораздо лучше и удобнее. :)
Карочи, основная концепция связки "компилируемые + интерпретируемые": Компилируемый язык - это типа автомобиль. Он быстр, мощен, у него есть руль, рычаги и прочая фигня, на нём можно быстро доехать из А в Б, и ещё привезти с собой кучу барахла. Скрипт - это водитель. Он дёргает рычаги и крутит руль, загружает багажник и всё такое (может ещё кофе выпить в ближайшей забегаловке, или сменить машину на фуру, если есть необходимость и его мама это позволяет). Если ты только дёргаешь сишные функции из скрипта - ты делаешь не автомобиль а поезд, у которого только одни рельсы, и он может гонять только по ограниченному пространству, а когда ты делаешь именно тачилу - у водителя больше свободы но и больше ответственности: куда повернуть в данный момент, или "что там на дорожных знаках? Главная дорога?" и приходится учитывать других водятлов, которые могут внезапно отожрать 100% проца и 99% памяти. Мне нравится такая метафора, ибо гибкая достаточно.
Elias
Да, хорошая метафора. В принципе, если иметь хорошую C++ основу, то и из Lua можно делать автомобиль, что показывают проекты типа Love2D, который на самом деле SDL, и даёт возможность делать почти всё, что захочется. Что мне ещё нравится в том, чтобы использовать Lua очень много, так это то, что отпадает необходимость писать адовые шаблоны в C++, которые потом ещё нужно как-то биндить к Lua. Почти любую функцию в Lua можно рассматривать как шаблонную + возможность добавить к любой таблице поля в зависимости от того, что хочешь делать - это то, что в C++ делается либо наследованием, либо магическими unordered_map. Ну и поворотным событием для меня стало то, что из C++ вызывать Lua слишком часто не стоит. Это безумно медленною. Из Lua вызывать C++ - безумно быстро. Поэтому есть дополнительная мотивация в том, чтобы Lua управлял C++, а не наоборот. :)
Snusmumriken
Я, кстати, стал дёргать луа из С++, но в сравнительно редкие моменты и без pcall (ибо он как раз жутко медленный). И это входит в специфику моей задачи.
Snusmumriken
С++ выгружает в луа таблицу с таблицами, запоминает одну из таблиц которую выгрузил, и ищет в ней функции, которые пользователь может добавить, вызывая если они есть. Да, это сократило мой предыдущий код с очередью событий во много раз, а ещё, колбеки вызываются только когда они есть. Просто в противном случае, какой-нибудь колбек выгружающий картинку на пару мегабайт будет висеть в памяти ненужным, пока не вызовут/не очистят.
Elias
Я просто как-то вызывал из C++ Lua-функции "update" для каждой машины состояний. И когда Entity на экране было много, я почувствовал всю боль вызова Lua из C++. Потом я решил изменить направление - кидал список Entity в Lua, и там вызывал в цикле "update" для каждой активной Entity. Профит был огромным и игра перестала тормозить вообще когда-либо. Ускорение раз в 100 было. :D
Snusmumriken
Уу, да, тут офигенно высокая частота. У меня где-то по колбеку в десять-двадцать секунд, почти пофигу насколько медленно. Разве что при подключеннии к чату с 200 чел - будет чуть медленнее, с пол секунды отработает, ибо call а не pcall. Pcall - за пару-тройку секунд.
Elias
У меня сейчас за итерацию игрового цикла вызывается от силы 3-4 функции Lua из C++. Самый главнй монстр - функция "update", которая уже апдейтит все менеджеры на стороне Lua, которые управляют почти всей игровой логикой, а также обрабатывают ивенты
Elias
И да, редкие колбеки - это прекрасно. :D
Snusmumriken
Ты знаешь как это решили в love2d? Там С++-сторона вызывает два скрипта в принципе, и оба из них вшиты в память. Основной прекол - скрипт-загрузчик, который делает всю необходимую дичь, и дёргает как раз update/draw: https://love2d.org/wiki/love.run https://bitbucket.org/rude/love/src/37e1ced87caf25db7b2a5a8f502af7f3b6eacbd2/src/scripts/boot.lua?at=default&fileviewer=file-view-default То есть, C++ делает свою работу и вообще не отсвечивает, предоставляя только набор функций.
Snusmumriken
А у тебя - как будто машина сам говорит водителю: "Чел, ты сейчас будешь делать эту фигню, заткнулся и сделал, я сказал!"
Elias
Ага, как-то читал исходный код Love2D и оценил эпичность всего этого. Возможно и у себя так сделаю когда-нибудь. Потенциально это не так трудно и уже всё довольно близко к этому, потому что мой код выглядит примерно так: while (game is running) { update(dt); updateLua(dt); render(window); } Но ничто мне не мешает сделать сам цикл внутри Lua и вызывать update/render C++ через Lua :D
Snusmumriken
Ну в love.run как раз это и есть, только чуть сложнее, ибо ещё события. Со стороны скриптов, кстати, ничто не мешает переписать функцию love.run, или вообще убрать её. Она вызывается один раз, если есть. Т.е. из love2d можно сделать прогу на одно исполнение без цикла, без проблем, или, например, убрать вызов луа-колбеков, благо они тоже вызываются с луа-стороны. То что я из С++ вызываю луа-функции - это тоже луа-функция. Ну, можно не вызывать луа-функцию, и С++ не будет говорить что делать.
Elias
Ну у меня события тоже есть, просто они внутри update. Там я просто обрабатываю ивенты, которые мне даёт SFML И возможно, когда-нибудь я переберусь на Love2D окончательно. В принципе, он довольно мало ограничивает, и это круто. Разве что слишком много кода на C++/SFML уже написано, поэтому пока что не думаю такого делать. :D
Elias
Кстати, ты не видел каких-нибудь хорошо написанных игр на Love2D? А то я много видел довольно ужасного кода, а красоты маловато. :D
Snusmumriken
Ну, не совсем игра, но что-то похожее на движок: https://bitbucket.org/MainTomato/tank-o-box/src/5629390212fec558a7ded405f754ab11a2524fe7?at=develop boot.lua в корне не используется, как раз скопипастен с love2d. Либы class, ffivec(vec), gamestate - мои.
Elias
Заценю А то как-то посмотрел на код mari0, самой популярной игры на love2d, и загрустил
Elias
Там прям вещи в духе player.x = 5 + player.y * 3 И в целом очень всё захардкожено и вроде даже машин состояний нет, хотя игра довольно сложная
Snusmumriken
Мммм ))) Есть хардкод, но в конкретном классе, и то, это тесты ))
Elias
Что такое 0.2 и 1.5? :D
Snusmumriken
Ну, фактор торможения, который заодно ограничивает максимальную скорость, и вектор торможения при движении "боком", т.е. угловое торможение. Это же танчик, он не может боком ехать. А вперёд и жопой вперёд - пожалуйста. Но заносы присутствуют, и это как раз для входа в занос.
Elias
Введи переменные braking_factor braking_side_factor И всё прекрасно. :D В Don't Starve таких было так много, что они их в большие отдельные файлы запихивали, которые называли "TUNING". И это хорошая философия, потому что быстро позволяла настраивать мелкие вещи в игре не копаясь в коде
Snusmumriken
Дык чувак, это даже не игра а тест движка, для личного использования ))) Но тут очень грамотная архитектура, пусть это и самопеар. Я несколько лет шёл к такой архитектуре, поглядывая по сторонам.
Elias
Ну тогда всё ок. Потом скажу, что о ней думаю. ;D И если интересно, то могу кинуть приглашение в приватный репозиторий моей игры. Я тоже считаю, что у меня крутая архитектура. И да, я к ней ̶д̶ж̶в̶а̶ 4 года шёл, так что многое успел усовершенствовать. :3
Snusmumriken
Вот самих игр на love не шибко много, да. Спроси, кстати, у (@ Nefrace) из чата по love2d, у него много неплохих прототипов, правда, я смотрел в основном на графон а не на качество кода : )
Snusmumriken
https://t.me/love2d_ru
Snusmumriken
Я уточняю что это самопеар ))) А потом тыкаю человека, которого тоже можно спросить. И, кто бы мог подумать, я - довольно донный человек, но я понять не могу, почему ты мне до сих пор не поклоняешься как божеству ))
Elias
Я стараюсь вообще всё параметризировать в своём коде, поэтому делаю вот такие вещи, вместо хардкода: -- pre attack animation (charge, etc.) if attack.preAnimationName then playAnimation(e, attack.preAnimationName) end -- main attack animation e:setAnimation(attack.animationName) -- wait for damage frame if attack.damageStartFrame then -- otherwise damage starts from first frame waitForAnimationFrame(e, attack.damageStartFrame) end -- create damage if attack.createDamage then attack.createDamage(e) else startPrimaryItemDamage(e, attack) args.damageActive = true end *G E N E R I C S* В итоге такие вещи используются не только для конкретных entity, а почти для всех. :D