@ProLua

Страница 51 из 307
Group Butler [beta]
10.02.2017
22:06:13
Добро пожаловать в чат pro.lua, Endor! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Добро пожаловать в чат pro.lua, Victor! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Snusmumriken
12.02.2017
02:57:00
Он считает, что она медленная и много весит и не стоит себя
Стоит, при довольно специфических требованиях, типа "рулить проектом на тысячи файлов и мегабайты кода", при избыточном железе для разработки. А для создания небольших прог из десяти файлов по 500 строк каждый - бессмысленно и беспощадно.



Google
Ixtis
12.02.2017
06:52:20
Кажется я неверно написал VC имел в виду, атом от MS

Tverd
12.02.2017
10:20:27
Visual studio code, что бы не было недоговоренности ))))

Snusmumriken
13.02.2017
17:51:09
Да, это лучше, но все равно тяжеловато. Хе-хе. На самом деле, мне просто лень привыкать к новым шорткатам и писать плагины, потому что в голом виде он довольно уныл для кодинга на луях. И да, это браузер, со всеми прелестями (тормозами и лагами) жаваскрипта.

Tverd
13.02.2017
18:35:09
А для нотепада для луёв все есть?

Или тоже искать надо?

Snusmumriken
13.02.2017
18:49:27
Смотря что тебе нужно :3 Я своровал парсер функций и объектов, теперь они отображаются в списке функций справа (можно и карту документа пихнуть, но не нужно), а автодополнение луа-кода на месте. Плюс тут нормальный поиск/замена с регулярками, оно нормально открывает огромные файлы и вообще ведёт себя как спартанская, но ide. Плюс можно замутить набор шорткатов для запуска проекта. Тоже ничего так.

Единственное что расстраивает - нет на ARM-процессоры (ибо даже вайна нема). Под вайном, кстати, работает как нативное приложение.

Tverd
13.02.2017
19:40:30
А под арм зачем? На распберри?

Или на планшете? )

Group Butler [beta]
14.02.2017
09:54:12
Добро пожаловать в чат pro.lua, ᴹᵞᴬᵁ~✈?? ‮‮! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Добро пожаловать в чат pro.lua, Sergey! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Добро пожаловать в чат pro.lua, Vadim! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Snusmumriken
15.02.2017
00:36:09
И тишина : )

Google
Alexander
15.02.2017
00:37:29
Snusmumriken
15.02.2017
01:03:21
Да, меня тоже нарягло, довольно известный прикол с Wingdings и "Q33 NY", который в нём отображается как ✈️?? ☠✡

А "NYC" (NewYorkCity) - ☠✡? :3

Если кому неожиданно нужны http(s) post/get на луях - обращайтесь.

Alexander
15.02.2017
02:07:31
в смысле?

Snusmumriken
15.02.2017
02:08:19
Ну, знаешь, нужен контент веб-странички, или запостить что-то ботом. Ну, или написать на чистых луях телеграмм-бота. Https мой, правда, только с ffi, ибо биндинг libcurl. Обнаружил что на чистых луях нет почти ничего мультиплатформенного, что тянет https.

Alexander
15.02.2017
02:10:09


вот у меня такой https для телегам бота

Snusmumriken
15.02.2017
02:11:11
А чем ты делаешь https.request? :3 И на какой платформе?

Alexander
15.02.2017
02:11:27
local https = require "ssl.https"

дебиан х64

Snusmumriken
15.02.2017
02:12:54
Во-от, у тебя luasec. Это потому что у тебя линуксы. Без линуксов, проблематично получить рабочий https, ибо luasec не компилится под вендой. А если и компилится - то криво.

Alexander
15.02.2017
02:13:17
теперь понял проблему

пойду спать, ночи )

Snusmumriken
15.02.2017
02:13:32
Моя цель - мультиплатформа. Потому и предлагаю биндинг libcurl, который работает везде (с luajit), и умеет далеко не только в https, но и 'DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos), file transfer resume, http proxy tunneling and more!' Можно почту принимать. И отправлять. И файлики. Приятных.

Tverd
15.02.2017
06:14:24
Ты юзаешь его асинхронно?

этот либкурл

Snusmumriken
15.02.2017
09:47:25
Если в отдельном треде или передача через UDP - то да : ) Я просто почти всегда делаю что-то сетевое многопоточным.

Alexander
15.02.2017
09:54:41
а у меня же задача, которую я сейчас решаю - это телеграмный бот. и сервер либо отвечает моментально, либо висит (в очень редкие моменты тотального выпаления сервиса, которые случаются 2-3 раза в год). и в том и в другом случае смысла в асинхронности нет - при нормальной работе обработка запроса идет гораздо быстрее, чем длится разрешенный интервал между сообщениями в серии. Поэтому мне достаточно двух потоков - один принимает сообщения по вебхуку, генерит ответы в базу и подает сигнал второму - демону, и тот рассылает все накопленное в базе

еще у меня есть большая и сложная программа на Си, работающая с несколькими сетевыим интерфейсами и в ней на каждый интерфейс свой поток.

Google
Tverd
15.02.2017
09:56:02
меня вот что интересует, я могу прикрутить libev, и будет асинхронный tcp и udp. А async dns?

Snusmumriken
15.02.2017
10:16:19
еще у меня есть большая и сложная программа на Си, работающая с несколькими сетевыим интерфейсами и в ней на каждый интерфейс свой поток.
lanes в помощь, хуле, мутишь отдельные трэды. Правда, тут смотри как это можно организовать: Вспомогательный тред, который занимается только приёмом/передачей, высылает тебе на главный поток - текст и id, ты их обрабатываешь в главном, и отправляешь обратно на воркер, который ассоциирует соки (sock/соединение с конкретным челом) с id. Вспомогательный должен быть неблокирующим (срабатывающим только тогда, когда что-то законченное пришло на сокет), крутится в бесконечном цикле, смотрит, что пришло от главного треда и отправляет по соку, ассоциированному с ID, и проверяет, не пришло ли чо входящее по сети. Конкретно с телеграммом - проще, потому что тут практически всё - твои запросы с сервака, т.е. мы оперируем клиентом. Тут уже можно вплоть до блокирующие соединений в один поток мутить.

Alexander
15.02.2017
10:21:44
lanes в помощь, хуле, мутишь отдельные трэды. Правда, тут смотри как это можно организовать: Вспомогательный тред, который занимается только приёмом/передачей, высылает тебе на главный поток - текст и id, ты их обрабатываешь в главном, и отправляешь обратно на воркер, который ассоциирует соки (sock/соединение с конкретным челом) с id. Вспомогательный должен быть неблокирующим (срабатывающим только тогда, когда что-то законченное пришло на сокет), крутится в бесконечном цикле, смотрит, что пришло от главного треда и отправляет по соку, ассоциированному с ID, и проверяет, не пришло ли чо входящее по сети. Конкретно с телеграммом - проще, потому что тут практически всё - твои запросы с сервака, т.е. мы оперируем клиентом. Тут уже можно вплоть до блокирующие соединений в один поток мутить.
дык, в общем случае логично. но телеграм упрощает же. Входящий блок написан на php (потому что привычнее, и уже есть наработанная база скриптов с телеграмом) и работает по запросу с сервера (вебхук же). Определив, что надо сделать, он кладет ответ в базу (это может быть и рассылка по нескольким юзерам бота), шлет udp-пакет на конкретный порт на 127.0.0.1 а на этом порту слушает луа-скрипт, работающий в бесконечном цикле, по такому UDP пакету он выгребает из базы подготовленные сообщения и рассылает их по клиентам.

Snusmumriken
15.02.2017
10:24:08
Ох, это похоже на извращение, ну оки :3

Ixtis
15.02.2017
21:47:13
https://daurnimator.github.io/lua-http/

В копилку lua http

Alexander
15.02.2017
22:14:48
Ох, это похоже на извращение, ну оки :3
пинг, есть вопрос по твоему модулю arrays

Snusmumriken
16.02.2017
01:16:52
?

Ну так чего там? В той массиво-либе только чекер может чуть странно работать без luajit, по пока неизвестной мне причине, ибо нет использования расширенных синтаксисов.

Alexander
16.02.2017
10:38:14
кхм

да, сорри

я хотел убедиться, что она именно твоего авторста и саркастически поинтересоваться, использовал ли ты сам ее алгоритм бинарной вставки ) ибо там две ошибки, из-за которых я потерял вечер, сначала доверяясь твоему опыту :(

Snusmumriken
16.02.2017
10:40:05
Да, сам писал, бинарку тестил, хм. Где ошибки?

Эй-эй! Что там с ошибками!

Alexander
16.02.2017
10:52:48
1. если вставлять в пустой массив, то получается цикл от 1 до 0 с обращением к несуществующему array[1] пришлось вставить строку local i, j = 1, #array if j == 0 then return 1 end fcomp = fcomp or default 2. никогда не вставляет в конец массива, и может вставить в порядке 2 1 потому что вместо return #array должно быть return #array + 1

Tverd
16.02.2017
10:52:56
Покажите хоть модуль

Alexander
16.02.2017
10:53:30
Tverd
16.02.2017
10:55:10
этот
Спасибо, поглядим

Alexander
16.02.2017
10:55:24
обсужаем local function binsearch(array, value, fcomp)

а в остальном годная библиотека. мне как раз нужен упорядоченный массив с разреженными индексами (т.е. идущими не подряд 1 2 3 4, а в духе 5 10 25 30 35)

Google
Tverd
16.02.2017
11:03:22
а какой вид массива? { 2 = 10, 5 = 20, 10 = 80, 100 = 4 }

Snusmumriken
16.02.2017
11:06:03
1. если вставлять в пустой массив, то получается цикл от 1 до 0 с обращением к несуществующему array[1] пришлось вставить строку local i, j = 1, #array if j == 0 then return 1 end fcomp = fcomp or default 2. никогда не вставляет в конец массива, и может вставить в порядке 2 1 потому что вместо return #array должно быть return #array + 1
Сяп, я лох и забыл проверить с граничными значениями. Пишу все это счастье, обычно, часа в три ночи, когда завтра на работу :3 Правда, не знаю как ты будешь её использовать с разреженными массивами.

Alexander
16.02.2017
11:07:46
в пхп для этого можно делать ksort и обычный foreach, а в луе - дополнительный массив, в котором проиндексированные обычным способом элементы ссылаются на нужные мне разреженные значения

а какой вид массива? { 2 = 10, 5 = 20, 10 = 80, 100 = 4 }
в луа такое не считается упорядоченным. ipairs не будет работать, а pairs может выдать в произвольном порядке

Tverd
16.02.2017
11:08:51
ну да, не будет, по этому и спрашиваю

Alexander
16.02.2017
11:09:34
вот и для такого я использую сию библиотеку. для меня это очередь отправки сообщений, а "разреженные индексы" - это время, когда можно отправить очередное сообщение

Admin
ERROR: S client not available

Tverd
16.02.2017
11:09:57
Я как раз таймеры пишу, интересно

Alexander
16.02.2017
11:10:20
и я выбираю из упорядоченного array первый элемент очереди и жду, когда указанный в нем момент времени наступит. и просле этого уже шлю.

Tverd
16.02.2017
11:10:33
это что бы не перебирать весь массив?

Alexander
16.02.2017
11:10:38
конечно

многократный поиск минимума - неэффективно

Tverd
16.02.2017
11:11:32
блин, идея хорошая... надо бы мне развить ее

а как ты обращаться будешь к первому элементу?

Alexander
16.02.2017
11:13:32
это тупо queue[1]

в нем уже есть ссылка на нужный мне объект

Snusmumriken
16.02.2017
11:13:54
Хех, я делал эту штуку для хранения элементов коллизии с индексацией расположения объектов по одной из осей через sweep and prune : ) Гномья сортировка - для тех же целей: при движении, объекты незначительно меняются местами, поэтому гномы оказываются быстрее quicksort. Функциональщину прикрутил для лулзов.

Tverd
16.02.2017
11:14:30
понятно, то есть в момент добавления события в очередь, оно записывается в нужный индекс исходя из времени?

Alexander
16.02.2017
11:15:36
и функция сравнения выглядит так local row_compare = function(a, b). return a.planned < b.planned end где planned - этто таймстамп в миллисекундах, я работаю с точностью до 1 мс. этого достаточно, так как мне нужны интервалы от 30 мс и выше

Google
Tverd
16.02.2017
11:16:32
все, теперь ясно... гуд!

Snusmumriken
16.02.2017
11:18:01
Кстати неплохая тема, да. Просто смотрим первый (или последний) элемент, и если его время пришло - выполняем, удаляя событие. Кстати, советую удалять из конца массива, ибо при удалении из начала - под капотом луёв происходит слишком много сдвигов.

Tverd
16.02.2017
11:18:37
Вот хорошее замечание

кстати, надо потестить насколько

Snusmumriken
16.02.2017
11:21:10
Я тестил на телефоне, вставка в начало медленнее примерно на (n - маленькое с), где n - длина массива. Удаление из начала массива длиной в миллион элементов, чуть меньше чем в миллион раз медленнее чем удаление из конца.

Tverd
16.02.2017
11:21:29
ого... понятно

Alexander
16.02.2017
11:21:34
у меня таких масштабов нет

максимум тысяча примерно

Snusmumriken
16.02.2017
11:22:13
у меня таких масштабов нет
Ну, я просто стараюсь учитывать подобные случаи, ибо пишу либы.

Alexander
16.02.2017
11:22:47
мне кажется, на тысячу сдвигов вполне хватит одной миллисекунды

а быстрее совсем не надо

Snusmumriken
16.02.2017
11:23:04
Хватит, хватит :3

Alexander
16.02.2017
11:23:04
так что оставлю как есть.

Snusmumriken
16.02.2017
11:25:15
Благо компы сейчас быстрые. На самом деле, это проблема всех динамических штук. Двусвязные списки, в данном случае, хороши. Хоть и жрут кучу памяти, и медленный поиск. Хотя на тему поиска, можно внести дополнительную индексацию, которую, правда, нужно обновлять.

maxx
16.02.2017
11:29:16
зачем двусвязный список, если для таких задач есть B-tree? там сложность поиска логарифмическая. а тормоза с динамикой можно убрать, если свой аллокатор сделать: сначала выделить большой кусок памяти средствами системы, а там уже играться как-угодно по-своему

например https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE-%D1%87%D1%91%D1%80%D0%BD%D0%BE%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE

Страница 51 из 307