Yuriy
Кротаны, кто-нибужь использует #webSocket на Lua? куда рыть, чтобы путь короче был.
Если вам нужен сервер, то посмотрите в сторону openresty Я использую. Очень доволен. webSockets из коробки. Все легко и непринужденно. Для клиента использовал websocket пользовал https://github.com/lipp/lua-websockets
Yuriy
Ну тогда можете пользовать lipp конечно я просто не пробовал его если честно. Но не факт что он окажется проще openresty Я кстати думал luvit умеет... а он не умеет websockets это грустно
Mikhail
Ну тогда можете пользовать lipp конечно я просто не пробовал его если честно. Но не факт что он окажется проще openresty Я кстати думал luvit умеет... а он не умеет websockets это грустно
ага. ну те очевидные предложения нагуглились давно. и да lipp примитивный сервер. но мне надо встраивать.. без наворотов в маленький проект. УПД: https://github.com/daurnimator/lua-http вот нашел и такую имплементацию.
Yuriy
ммм... Свежатинка это хорошо
Mikhail
У меня не вышло использовать эту вещь при подключении как клиент по хттпс.
я сейчас тестирую сервер (Lua) https://github.com/lipp/lua-websockets coroutine based (copas) (асинхронный не смог собрать) очень лаконично, есть все что нужно. всего 10к. спасибо про инфу по HTTPS (мож что то не то с сертификатами на сервере?)
Anonymous
Всего 10 к это вес или объем? :)))
Mikhail
Всего 10 к это вес или объем? :)))
это лол... "вес" исходников
Anonymous
Хороший вес
Anonymous
Не мои 145к
Mikhail
Не мои 145к
у тебя вероятно не библиотеки вес, а всего проекта.
Anonymous
Нет, это в килограммах
Mikhail
@Snusmumriken хой. может народ озвучить твою хабр статью про метатаблицы? и запилить не как видео урока..а типа как лекцию для ленивых и слепых.
Mikhail
Нет, это в килограммах
- у меня кот 4.5 кг макс ) - код? - нет
Mikhail
Там статья-лекция для тупых и ленивых
текст очень полезный.. но тупым и ленивым надо в уши заливать
Snusmumriken
Не хотет ((( Я типа считаю себя слишком крутым, чтобы ещё и зачитывать офигительно доходчивые тексты, которые сам написал. Мол, если нужно - пущай сами читают. Иначе - слишком тупые и ленивые, и им не нужны метатаблицы )))
Mikhail
fgntfg
а, стоп, яж ноут отдал
fgntfg
Хмм
fgntfg
видосик сделать?
Mikhail
будут. я это ви;у по просмотрам видео уроков (недоруроков) по Lua
fgntfg
/me слушает tabletop rpg
FailsBot
fgntfg слушает tabletop rpg
Mikhail
надо как скринкаст. текст ХАБР статьи на экране + тыкай мышкой и выделяй слова
fgntfg
нанять модель в купальнике, и на ней писать код
fgntfg
10/10
Mikhail
офтоп пример я учился с аутистом в вузе, которые не умел читать.. но он слушал и запоминал.
Mikhail
слабоумные -> среднеумные
Snusmumriken
Они все в js-чатиках
Ivan
почему аутистов?
MudriyTigra
Всем привет)
Revertron
Привет, опять сигналы и крипта?
Anonymous
Мультя еще и инста
Anonymous
Ребят, ни у кого работы нет нормальной? Только не луа
Anonymous
Я луа не шарю
MudriyTigra
с короны сюда)
Anonymous
Ну да, вообще не прогал на луа
Snusmumriken
Я в чатике по паскалю тоже не прогаю на паскале.
Snusmumriken
Но в целом, лучше задавай такие вопросы не нам а гуглу/hh.ru. Фиг знает что ты умеешь, пущай там решают : )
Anonymous
Хх параша
Anonymous
Ну лан, извините, не буду флудить
Anonymous
Я из чатика короны
Anonymous
Там сегодня ночью этот чат скинули)
B
Как чайки прям
Anonymous
Благодарю)
Anonymous
честно говоря, только начал изучать lua, и половины вообще не понимаю, хотя читаю русский текст на белом фоне часть информации от меня настойчиво ускользает чувствую, придется перечитывать на второй раз
Anonymous
плюс ко всему, в этой книге Иерусалимски такие запутанные примеры
Anonymous
они совсем не помогают :D
Anonymous
да конкретных вопросов я пока не сгенерировал читаю вот сейчас про замыкания и фабрики итераторов мой мозг еще таблицы то не усвоил толком, поэтому и дальше воспринимать сложно) но обязательно спрошу, если возникнет вопрос, спасибо)
Anonymous
ооо, статья про метатаблицы, благодарю)) еще и про любовь что то бонусом, почитаем
Anonymous
это очень кстати, метатаблицы тоже остались за бортом моего разума, несмотря на мои усилия их освоить :D
Anonymous
дело в том, что я не считаю себя программистом, как таковым, так как толком не знаю ни одного языка немного программировал на C++, немного программировал на нем же под микро-контроллеры немного на шарпе что-то писал немного писал на pythone в масштабах небольших скриптов для конкретных нужд то-есть, у меня есть представления о программировании, но нет углубленных знаний нигде нигде не плотно, так сказать))
Anonymous
возможно, поэтому туго идет) будь выучен хоть один язык, другой всегда учить проще
Anonymous
занятная аналогия, но не представляю себе программирование без знания языков) нет, представляю, конечно но практических приложений не представляю
Anonymous
тут не спорю
Anonymous
кстати, вот с переключением - это да, проблемы :D когда сегодня весь день читаешь/кодишь/думаешь о Lua потом тебе нужно написать код под микроконтроллер на плюсах и ты материшься минут пять, исправляя ошибки, выдаваемые компилятором в основном о забытых ";" везде где только можно
Anonymous
неблагодарное занятие привычка НЕ делать что-то приобретается невероятно быстро я бы даже сказал незаметно быстро
Anonymous
у меня неопределенное отношение к МММ и Мавроди (rip) не углублялся в его судьбу, поэтому не могу судить) насколько я знаю, сама идея - гениальна, и когда он это делал в первый раз - сам охренел от результатов но это уже оффтоп лучше спрошу про lua
Anonymous
я не понимаю зачем вызывать функцию, возвращающую в качестве значения другую функцию-итератор почему просто не вызвать функцию-итератор? =\ скорее всего, до меня просто смысл всего прочитанного не дошел, поэтому я пока не понимаю
Anonymous
вот в замыкании то и кроется смысл моего непонимания (наверно) пойду перечитаю главу про замыкания
Anonymous
из "лексической области видимости" типа
Anonymous
третье, кажется
Anonymous
на русском? на английском не очень комфортно читать
Anonymous
ну, тогда с одним разберусь тогда можно и другое почитать на английском
Anonymous
спокойного сна) спасибо за участие и дружелюбие)
Snusmumriken
спокойного сна) спасибо за участие и дружелюбие)
Карочи, суть замыканий в областях видимости. Если к каким-то локальным переменным имеет доступ и только одна функция - они не уничтожаются, как если бы были просто локальными, а заворачиваются в замыкание, пока существует эта функция. Итераторы в луа работают примерно следующим образом: Сам итератор, допустим, перебирающий числа от A до B с шагом C (всё положительное, для простоты): function iter(a, b, c) -- переменные передаются в функцию -- всё равно что -- local a, b, c = args[1], args[2], args[3] -- если бы была таблица со всеми -- принятыми аргументами c = c or 1 a = a - c -- чтобы начиналось с "a". return function() -- эта функция имеет доступ к -- локальным переменным выше, -- и может их изменять. -- Они в замыкании этой функции как раз, то есть, -- только эта функция имеет к ним доступ, -- больше никто a = a + c -- прерываем, если достигли второй границы if a > b then return end return a end end local el_ten_eleven = iter(10, 11) -- пасхалка -- И дальше эту функцию можно дёргать несколько раз: она сама, будет решать что делать дальше, используя в решении переменные из замыкания. print(el_ten_eleven()) --> 10 print(el_ten_eleven()) --> 11 print(el_ten_eleven()) --> nil И, фактически, конструкция for a, b, c, d, e in [func] do ... end - сокращение от: local it = [func] -- пока существует переменная-функция it, -- замыкание будет жить local a, b, c, d, e = it() while a do -- код твоего цикла a, b, c, d, e = it() end it = nil -- а когда она удалится - -- удалится содержимое её замыкания То есть, наш итератор может работать вот так: for i in iter(1, 10, 2) do print(i) end > 1 > 3 > 5 > 7 > 9
Tverd
Молодчина )
Snusmumriken
Моя боброта не знает границ
Snusmumriken
В качестве развлечения, напишем функцию-итератор, обходящую таблицы-массивы в обратном порядке. function ripairs(tbl) local max = #tbl + 1 return function() max = max - 1 if max > 0 and tbl[max] then return max, tbl[max] end end end for i, v in ripairs{10, 20, 30} do print(i, v) end > 3 30 > 2 20 > 1 10
fgntfg
Хмм, Снус, а можно же переопределить итерратор, не?
Snusmumriken
И, например, функцию-итератор по входящим сообщениям из сети по udp (для простоты): function receive(socket) return function() local data, ip, port = socket:receivefrom() if data then return data, ip, port end end end local udp = require'socket'.udp udp:setsockname('*', 8081) udp:settimeout(0) for data, ip, port in receive(udp) do print(data, ip, port) end Если тут выставить неограниченный таймаут, можно вообще всю логику запихнуть в цикл, он будет бесконечным: появилось сообщение - приняли, не появилось - ждём.
Elias
Мой любимый итератор: local function values(t) local i = 0 if t then return function () i = i + 1; return t[i] end else return function() end end end А потом: local arr = { 5, 20, 60 } for value in values(arr) do print(value) end
Elias
В 90% случаев индекс не нужен, поэтому ipairs надоедает :"D
fgntfg
У ipairs индекс можно в _ засунуть и забить