Anonymous
Anonymous
в первой строке 4 таба, во второй три
Snusmumriken
Ага. Вот тот код который я скопипастил в телеграмм такой красивый и в том же виде - потому что пробелы. Изначально, табуляция сделана для форматирования колонок таблиц. И ширина таба должна быть в соответствии с ПОЛНОЙ шириной колонки. В колонке десять символов? Лепи таб на десять символов. Но только для этого документа, и для последующей печати.
Anonymous
что самое интересное
Anonymous
я заставлял какой-то опцией geany вести себя как nano
Anonymous
и выравнивание было корректное везде
Anonymous
но потом что-то пошло не так
Snusmumriken
Карочи, если тебе очень нужно красивое табличное выравнивание - ставь табы только до текста.
Snusmumriken
Вот тут - тоже пробелы. Если это копипастить - везде будет красиво. Но до текста на каждой строке - табы, чтобы нормально смотрелось у любого человека, использующего и табы и пробелы.
Snusmumriken
Табопользователь, при открытии скрипта, оставит как есть, пробелопользователь - заменит табы на желаемое количество пробелов. Все счастливы, ничего не поехало после процедуры. Дзен - это способ усидеть на обоих стульях ))) (осторожно, гифка на 40мб: https://vk.com/doc75175715_449282586?hash=19ad9890fb2a2eaf05&dl=2dd8c1470c37d89fd9)
Anonymous
ура, я нашёл, как сделать так, чтобы geany вёл себя как остальные редакторы
Anonymous
Как Vim или Emacs?
Anonymous
lf
Anonymous
da
Snusmumriken
Ещё больше оффтопика.
fgntfg
Roman
Странно, но для луа уже видел обертку, скорее всего, их не одна существует. Зачем, спрашивается, в стандалон луа проще читать доки вк и писать самому запросы. В опенрести или ещё где, где свои сокеты, оно вообще работать не будет. Тем временем, многие жалуются на нехватку либ и заброшенное состояние существующих.
Anonymous
с амазоном кто-нибудь работал?
Anonymous
не, с сервисами их злоебучими
Anonymous
они под одно API вроде сделаны
Anonymous
конкретно - Amazon Polly
Snusmumriken
mva
ШТОА
mva
а для кого же мы с @moteus пилили Lua-cURL?!?!?
Snusmumriken
ШТОА
Они распространены больше всех. Курл - узкооспециализирован для загрузки файлов. Не для "произвольной сетевой связи"
mva
нет
mva
для загрузки URL
mva
он умеет разные протоколы
mva
и он не слишком низкоуровневый в отличие от работы с голыми сокетами
Snusmumriken
Курл молодец, это да. Но специализация - не приём-передача а приём. Причём, как правило - файлы.
Roman
В resty сокеты от nginx, там все специальное неблокирующее. Ещё пример luvit, где все асинхронное и luasec тоже не катит. Да я не о том, никогда не понимал, вместо нескольких строчек кода для запроса на любой сервис люди тянут гемы, роки, либы, работают почему-то не напрямую с сервисами, а через эти либы
Alexey
там есть curl_send/curl_recv Я думаю добавить в биндинг
Snusmumriken
Почему luasec не катит в "асинхронном" luivit?
Roman
потому что он синхронный?
Alexey
тогда можно будет, например, устанавливать TLS соединение с помощью cURL А далее читать и писать поток байт
Snusmumriken
потому что он синхронный?
Там такая же асинхронность как у ноды. То есть, как бы асинхронность, но на самом деле нет. Это первое. Второе - luasec можно сделать асинхронным без особых проблем : )
Alexey
luvit реализовал tls сам. Ну и асинхронность там настоящая :)
Snusmumriken
Настоящая многопоточка? Во, а какая модель памяти? Отдельные виртуальные машины под тред?
Roman
Я пока далек от низкоуровневого, надеюсь, скоро буду шарить. Как мне кажется, для синхронного сокета нужно просто сделать запрос. А для асинхронного нужно сказать какой-то системной штуке, вроде livub, что я хочу сделать запрос, а ты меня потом дернешь. И когда запрос прошел, libuv открывает определенное вхождение виртуальной машины, как-то так
Alexey
При чем тут многопоточность? Но libuv использует пул потоков и очереди, но клиентский код однопоточный, что не мешает ему быть асинхронным
Snusmumriken
Пул потоков - каких? Потоки - это что, в данном случае?
Alexey
https://github.com/libuv/libuv/blob/v1.x/src/threadpool.c
mva
сочувствую :)
Alexey
Под windows например используются порты завершения
Alexey
не надо путать асинхронность и многопоточность. Это разные вещи
Roman
Чувак, есть за и против. За: вроде как меньше кода писать. Против: эта либа может измениться в любой момент, потом переписывать, это черный ящик, запросто может работать не как ожидаешь, делать что-то не как хочешь, в крайнем случае может отвалиться. И если можно вместо этого самому написать простой запрос, то никаких преимуществ.
Snusmumriken
Потому что я знаю довольно много реализаций параллелизма. 1. Нода - бесконечный цикл с проходом по списку активных событий и дёрганье колбеков. Асинхронность там достигается нулевым таймаутом на все потенциально блокирующие действия, и переход к следующему процессу, пока всё таки что-то не придёт в буфер. Пример подобной асинхронщины с luasocket от самого Роберто Иерузалимски: https://www.lua.org/pil/9.4.html Ну, труЪ-многопоточкой тут не пахнет, просто как бы несколько дел одновременно. 2. Треды - как отдельные виртуальные машины под каждый процесс, тут можно хоть блокировать хоть не блокировать - всё одно. Память, как правило, разделённая. Я предпочитаю такие треды. У меня где-то есть аналог ноды многопоточный, с той же сутью (lanes).
Snusmumriken
Так вот. Сокеты можно сделать асинхронными с комплектом: "оболочка + колбеки на входящую лабуду". Это обычный подход. Луасек - туда же.
Roman
Просто не работал ты на legacy проектах, с кучей зависимостей на устаревшие версии либ, где ничего нельзя обновлять, ибо все отвалится, а менять нужно, и приходиться монкипатчить это старье.
Alexey
node.js использет libuv для IO В общем да, но не совсем. Там весь IO происходит в отдельных потоках. Например в Windows это реализовано на уровне OS, и далее по завершению операции результат передается в клиентский поток. Есть другая модель когда клентский поток оповещается только о том что необходимо произвесть операцию. На счет многопоточности. Мне нравится модел share nothing. Просто запускаешь поток (с начальными параметрами) и далее использешь некий канал связи. Lanes делает примерно тоже, только проблема что его каналы нельзя привязать ни к какой модели IO, крому как polling
Snusmumriken
В ноде нет ОС-потоков :< Это легко проверяется диспетчером задач, с отображением активных потоков. Нода однопоточна. IO там происходит в том же потоке что и основной код. Просто колбеки. Посмотри пример от роберто, который в моём посте. Там корутины, но и без корутин можно всё то же самое.
Snusmumriken
https://habrahabr.ru/post/150788/ Судя по статье, многопоточность - только в отдельном модуле cluster, который, как я понимаю, автоматически запускает несколько копий ноды и выдаёт им задачки. Вне этого - однопоточка с эвентлупом.
Snusmumriken
Но сокеты умеют быть неблокирующими => ничто не мешает использовать luasocket/luasec в luvit'е. Что и требовалось доказать.
Snusmumriken
как и Lua
Ну, у меня есть lanes : )
mva
а у них - cluster ;)
mva
не так
mva
в lua нет многопоточности ИЗ КОРОБКИ
mva
как нет и gui ИЗ КОРОБКИ
mva
сама суть Lua в том, чтобы было только самое необходимое
mva
поэтому ты вполне можешь прикрутить многопоточность любым из доступных способов и делать гуй в отдельном потоке
Dika
а у них - cluster ;)
есть еще это https://github.com/audreyt/node-webworker-threads
Saphire
Вместо того, что бы делать нормальный гуй через QT, они тупо обещали браузер...
Alexey
ОС выполняет ввод.вывод в своих потоках. (там где это поддерживается)
Alexey
да, Обычно GUI предоставляют свой собственный цикл событий
Alexey
Я использовал IUP
Snusmumriken
Вот тут смотрим гуишку. Она, правда, хочет кучи либ, но зато много что умеет: https://luapower.com/
Snusmumriken
Есть ещё биндинги qt/tcl.
Snusmumriken
А что ты хочешь? : ) Если очень хочется - можно в opengl/sdl замутить ТАКОЙ гуй, который и не снился никому : )
Сейчас Electron жирно. Qt ругать за жирноту уже не в моде.
Dika
Много кто
*для электрона Очень много.
Dika
https://electron.atom.io/apps/
Snusmumriken
Можно взять love2d и заюзать какую-нибудь пользовательскую графическую либу. Всегда так делаю : )
Snusmumriken
Смотри какой пафосный https://github.com/SSYGEN/yaoui