
Marina
14.01.2017
14:40:01
все сработало отлично!
а есть какие-то стайл гайды для кода?

Octo@dshacks
15.01.2017
15:06:01
как-то можно в hex перевести?
нашел

Alejandro
15.01.2017
23:52:31
Фига нафлудили )))

Google

Arsen
18.01.2017
21:51:47
всем привет.
вопрос возник. как экранировать просто все двойные кавычки в строке?
(json объект и там очень много string полей)
пока решил загрузкой объекта из файла.
всем спасибо.

Alexey
18.01.2017
23:34:19
regular expressions

fox.lua
19.01.2017
02:47:22
знаков равенства может быть столько, сколько нужно
в т.ч. и ноль штук
главное, чтобы их количество и справа, и слева совпадало

Alexander
23.01.2017
14:45:44
мне в Lua не хватает подлинных констант.
Чтобы написал const ZZZ=Y (вместо local ZZZ=Y) и не боялся, что нечаянное присваивание испортит эту переменную
один из выходов - сделать неизменяемую таблицу (http://lua-users.org/wiki/ImmutableObjects = Immutability of tables (read-only tables)).
но она ж будет медленнее работать?

Snusmumriken
23.01.2017
14:46:05
setfenv на что?

Alexander
23.01.2017
14:48:43

Google

Snusmumriken
23.01.2017
14:49:28
Пардон, setfenv - переключение глобального пространства, чтобы не затирать то что уже есть в глобале.

Alexander
23.01.2017
14:49:45
дыык
так если я в глобале определяю константные переменные?

Snusmumriken
23.01.2017
14:51:23
..То провешиваешь линк на константы в маленькую свёрнутую вселенную, определённую через setfenv.
А так - можно запилить отдельную условно глобальную табличку "const":
local const = {}
const.xxx = yyy
Константы традиционно объявляются в начале файла. Мне сложно придумать задачу, для которой их необходимо дополнительно объявлять где-то посередине. А пока все константы наверху - легко увидеть что что-то затираешь.

Marina
23.01.2017
14:51:39
а в чем сложность написать local?

Alexander
23.01.2017
14:51:58
"Константы традиционно объявляются в начале файла." согласен

Snusmumriken
23.01.2017
14:54:00
https://ilovelua.wordpress.com/tag/require/
Тут довольно популярно описано применение setfenv, и модулей на их основе.
Лично мне лень с этим морочиться, ибо объявить кучу локальных, а потом выгрузить фабрику - удобнее.

Alexander
23.01.2017
14:54:07
а регексы в стиле (foo|bar) делаем через Lrexlib ?

Snusmumriken
23.01.2017
14:54:15
lpeg.

Alexander
23.01.2017
14:54:36
ага, видел и это
интересует именно практика сообщества

Snusmumriken
23.01.2017
14:54:46
Оно, правда, сравнительно сложное, но могучее и быстрое. На освоение уйдёт много времени.
Для моих задачек всегда хватало стандартных регулярок, там нет сложного синтаксического анализа.
Всю дорогу нужно было что-то выдрать, поэтому если не нужна оптимизация - string.match, а если нужна - string.find + string.sub: связка работает примерно в 15 раз быстрее match, и зависимость нелинейная, то есть, длиннее обрабатываемый текст - быстрее работает find + sub.

Alexander
23.01.2017
14:58:03
прикольно про ~15 раз

Snusmumriken
23.01.2017
14:58:46
Ну, для обработки пользовательского ввода можно не париться, человек медленно печатает : 3

Alexander
23.01.2017
14:59:10
а если у меня этих обезьян на входе бота 1000 человек? :)
насколько я усвоил дух языка, то можно провести аналогию с RISC-процессорами по сравнению с CISC: упрощенный набор инструкций, которые выполняются очень быстро (в жертву приносятся такие алгоритмы, которые нужны редко, и лучше их самому писать)

Snusmumriken
23.01.2017
15:02:05
Тоже можно.
Человек, в среднем, печатает сообщение в пол минуты. Тысяча сообщений в пол минуты - 33.(3)с/сек. Это довольно мало : 3

Google

Alexander
23.01.2017
15:03:14
да-да, моя максимальная нагрузка в самые жесткие моменты была не больше 2-3 человек в секунду, это оооочень мааааааало )

fox.lua
23.01.2017
15:03:35

Snusmumriken
23.01.2017
15:04:03
Не в курсе точно, не лез в корни регулярок. Просто тесты.

Alexander
23.01.2017
15:04:06
мне, кстати, и нравится. в интерпретаторе есть только то, что нужно и о чем ты знаешь

Snusmumriken
23.01.2017
15:05:13
Хех, как раз сегодня утром про goto вспомнил.

Alexander
23.01.2017
15:06:18
БОЛЬШОЙ АДРОННЫЙ ХУЕСОСНЫЙ КОЛЛАЙДЕР

Snusmumriken
23.01.2017
15:07:00
Есть отличная библиотека для lua, решающая сложную коллизию между полигональными объектами.
Называется hardon collider. Нет, это не опечатка. Тут примерно тройная игра слов.

Alexander
23.01.2017
15:08:08
а, фу
там же еще else

Snusmumriken
23.01.2017
15:08:23
not succ - значит коллизии совсем нет, и это можно пропускать.
https://psv4.vk.me/c810130/u75175715/docs/97ca6e4f02d8/AABB.gif
Дрожание - в старой версии, так что на него можно забить.

Alexander
23.01.2017
15:09:40
короче завернул бы все это в наружний if/then или вынес весь if a.dynamic в подфункцию
ооо, красота

Snusmumriken
23.01.2017
15:11:11

Alexander
23.01.2017
15:11:57
похоже на эскиз для игры с физикой

Snusmumriken
23.01.2017
15:15:43
Ну, физики тут особо нема. Над ней надо поработать, да и вообще переделать систему под классовые коллайдеры на колбеках. Пардон, большие гифки.

Alex Фэils?︙
23.01.2017
15:16:19
крутяк, а у меня физика была такая ?
(Это я во флеше анимировал давно когда-то. все равно не въехал до конца в то, как бы это красиво сделать с моментами инерции и пр.)

Google

Alexander
23.01.2017
15:17:16
большой адронный взбалтыватель

Snusmumriken
23.01.2017
15:17:18
Ну, он хоть ПОВОРАЧИВАЕТСЯ : 3
Значит уже не AABB.
Другое дело что для всяких платформеров с прочими 2d-игрулями супер-реальная физика не нужна.

Admin
ERROR: S client not available

Alexander
23.01.2017
15:17:31

Snusmumriken
23.01.2017
15:18:10
Вот тут - физон абсолютно упругих столкновений + несколько шейдеров.
Но за счёт простоты формы, нет никаких сложных пертурбаций. Факт коллизии считается тупо как сумма радиусов, вектор выхода - сумма радиусов - дистанция между объектами.

Alexander
23.01.2017
15:18:29
абсолютно упругие столкновения - боже упаси
некорректный обсчет абсолютно упругих столкновений может же приводить к казусам, когда ты чуть-чуть толкнул автомобиль у стены, на сантиметр, а он взлетел на десять метров вверх
в игрушке типа carmageddon такое весело, но когда у тебя симулятор городской среды, с цивильными пешеходами и зданиями и прочим, чешешь репу

Snusmumriken
23.01.2017
15:20:46
Ты можешь увидеть на гифке, как сильно отскакивает самый мелкий камушек.
Импульс - масса * вектор движения. Масса и размер, в данном случае - одно и то же (по экспоненте, но всё же). Очень большие объекты - очень, очень инертные.

Alexander
23.01.2017
15:21:24
ага, очень реалистично отображено

Snusmumriken
23.01.2017
15:24:44
Ну, по сути, это простенький решатель коллизии, когда мы передаём собственное ускорение. Всё из рукипедии.
Офигенно. Давай без этого, лады?

Alexander
23.01.2017
15:41:27
разложение вектора импульса по координатным осям, проведенным через центры круглых тел.
получается, в общем случае (для тел произвольной формы) вдоль нормали и касательной плоскости соударения.
и что если нормаль не проходит через центр масс тела, то образуется вращательный момент
это увлекательно и я понял, но в моем ближайшем будущем задачек по физике твердого тела не предвидится :)

Alexey
23.01.2017
15:45:29

Snusmumriken
23.01.2017
15:50:07
Да, именно так : 3
В луях встроены ограничения на метки, из серии 'нельзя ссылаться на метки вне области видимости', плюс говорящие имена. Вдобавок, тут промежуточный вариант: он будет заменен на вызов колбеков, и метка будет ниже точки перехода на три-пять строк.

Alexey
23.01.2017
15:51:32
Тут самый кейс для if. :)
Если это — тогда итерация выполняется.

Snusmumriken
23.01.2017
15:53:03
Хех, меня слегка напрягают люди, которые бросаются из крайности в крайность.
"Дейкстра сказал что goto - говно, значит все кто его используют - говно".
Хехе.
Goto, равно как и любой оператор - инструмент.
И я лучше использую его, чем буду мутить такие конструкции:
if a > b then
if c < b then
if e > 25 then
if c < 25 then
if k > 35 then
if d > e then
a = 10
end
end
else
if k > 22 then
if d > e then
a = 15
end
end
end
end
end

Google

Snusmumriken
23.01.2017
15:56:24
Конструкция для примера.
На моей практике, хорошо воспринимается вложенность до трёх уровней.

Alexey
23.01.2017
15:56:25

Snusmumriken
23.01.2017
15:56:36
Ну что поделать, какой есть : )

Alexey
23.01.2017
15:56:41
Напрягают люди в интернете и я почему-то только за то, что имею своё мнение — сходи подрочи.
А в твоём примере сейчас — это всё объединяется в пару простых условий.

Snusmumriken
23.01.2017
15:57:09
> Конструкция для примера.
Это чисто демонстрация вложенности. Мне лень придумывать примеры, где это было было бы обосновано и сокращалось через goto, благо подобный пример я приводил выше.
На тему напряжения по поводу чужого мнения - аналогичное утрирование, ибо я просто не имею личных дел с такими людьми : )
Спасибо за совет, но я нахожу его неудачным: мастурбацией снимается возбуждение цнс. Напряжение - другими способами.

Alexander
23.01.2017
16:02:27
У меня такой вывод, что любое средство хорошо, если оно понятно

Snusmumriken
23.01.2017
16:02:32
Да. Обычно, понятными являются традиционные приёмы, но можно сделать так чтобы что-то необычное было понятным. Например, оставив комментарий, или используя говорящие имена.
Я использовал три тонкости, используя goto:
1. Объективная польза;
2. Говорящая метка, по имени стандартного оператора во многих языках, с соответствующим поведением;
3. Хвост метки в области видимости даже небольшого монитора, отдельно выделен на собственной строке.

Alexander
23.01.2017
16:04:15
Тем более, что в луа goto не бездумный опасный jump как в Си setjmp, а структурно ограниченный

Alex Фэils?︙
23.01.2017
16:09:19