Anonymous
что Snusmumriken
FailsBot
∧_∧ ( ・ω・。)つ━☆・*。 ⊂  ノ    ・゜+. しーJ   °。+ *´¨)          .· ´¸.·*´¨) ¸.·*¨)           (¸.·´ (¸.·'* ☆
Anonymous
Прости. Запилить что ??
Anonymous
Я его знаю еще по контакту. О чем с ним можно договариваться ))))
Anonymous
Как вариант, учитывая что сообщество Lua прогеров слабоватое, то можно совместными усилиями его приумножить в разы. Вот смотри, нас тут подписчиков: 247 чел. Можно сказать что активных человек 30-40. Не знаю даже. Если бы каждый из этих сорока, каждый день (ну или через день) реализовывал бы хоть 1 одну задачку по алгоритмам и тому подобное, То за год у нас бы накопилось десяток тысяч решеных и хорошо закомментированных любых задач. Включая все олимпиадные из всевозможных учебников. Если это все запостить отдельным форумом в сети, то представь как быстро начнет увеличиваться число пишущих на Lua.
Anonymous
На прогерских форумах очень часто студенты приходят и просят решить. Представь себе базу готового кода на все случаи жизни. При чем все они составлены предельно ясно, так что можно самому студенту перевести и на С
Anonymous
Рейтинг у такого форума взлетать будет быстро.
Anonymous
Знаешь, некоторые вещи невозможно объяснить. Надо только пробовать. Я просто знаю и все. Ну хорошо, приведи мне пример хорошо структурированного сайта по готовым исходникам. На бывалых форумах задач валом, но как правило они все написаны отрывисто и невнятно. Новичок сам хер разберется. А на луа писать и не надо, даже если С или Python, то как я уже ранее говорил, код всеми участниками (тобишь нами) составляется приближенно к псевдокоду. Саму логику студент потом сам переведет в С. Если он не совсем баран.
Anonymous
Не забывай что я писал в начале. Это для энтузиастов : ) Для тех, кто влюблен в Луа
Anonymous
Те кто знают С тем более. Они овладеют им за 40 мин.
Anonymous
Я знаю С. Но только не ++. Без ООП. И вот сейчас если ты мне даешь любую задачу на алгоритмы, то я знаю что открыв Scite я напишу ее в 2 раза быстрее чем на С. Так что в этом есть смывсл
Anonymous
Ну пожалуйста: вот к примеру тематика нейронных сетей. Распознавание речи, образов, анализ, статистика. Очень модно сейчас : ) Или опять не то ? ) Тут ты спотыкнешься, сказав что этого валом в сети )))
Snusmumriken
Может быть Snusmumriken ответит. Это смышленый малый - посмотрим )
Ну типа в реальной жизни - ноль раз, Фил прав, абсолютного наложения не будет никогда из-за нематематичности макро-мира. В "виртуальной" - два раза, в полночь и полдень. Дальше будут расхождения хоть на пол градуса. Остальные случаи, типа "ну может быть, если часы чуть спешат или ещё что-то такое, то они могут накладываться чуть чаще/чуть реже, бла-бла" - меня не интересует, ибо вводятся дополнительные условия. Нет, я не смышлённый, я в opengl рисовал аналоговые часы и хотел сделать "максимально ровно", и это не получилось ))
Snusmumriken
Я влюблён в не луа а в себя, и мне просто пофигу на мнения окружающих, поэтому меня можно обсирать сколько влезет ))
Snusmumriken
Snusmumriken
Около восьми.
vvzvlad
веков
Snusmumriken
Рейтинг у такого форума взлетать будет быстро.
Есть универсальный ответ на вопрос "как реализовать тот или иной алгоритм на произвольном языке": http://rosettacode.org/wiki/Rosetta_Code Для луа нужна не "популярность" через олимпиады школьников, а неофициальные но нормальные и сравнительно популярные либы (или аналог boost, но не такой жирный и связанный), иначе скатится в паскаль, добро пожаловать: https://t.me/joinchat/BdG9wUMuKiF0sugEGC1nNQ. Мне впадлу отвечать каждый раз на дебильные вопросы, ответ на который находится в первой строке гугла, а такой "форум" будет завален именно таким, омерзительно. Школьники-олимпиадники регулярно не умеют ценить своё время и силы, и уж они совсем не будут ценить время окружающих, будут дёргать по каждой мелкой фиговине и садиться на шею. Их надо учить искать информацию, а не давать ответы. И чем сложнее эту информацию добыть - тем лучше для них: самообучаемость резко вырастет, и мб перестанут дёргать окружающих своими мизерными хотелками. Плюс луа - сам по себе - нишевой язык, таких пришибленных как я - мало. Его изначальная задача - быть встраиваемыми скриптами. Популярность луям и так резко повышают гмоды-сталкиры-опенкомпьютерс и тонны игровых движков/фреймворков, тут нам нечего делать, а учить людей надо не конкретным алгоритмам (сам алгоритм произвольной сложности - фигня, перемешивание цифр) а архитектурам, ибо они, в "с-подобной" среде - языконезависимые.
Elias
Полностью согласен всем вышесказанным согласен И я думал, что у Lua есть шанс стать таким же популярным, как Питон, но после того, как я понял сколько сил и средств было вложено в инфраструктуру Питона, я понял, что такое второй раз навряд ли пройдёт. Я считаю, что в идеале Lua надо юзать вместе с другими языками или если хочется использовать какую-нибудь конкретную штуку. Но один numpy чего стоит. У Lua вроде нет настолько универсальных вещей
Snusmumriken
http://torch.ch Не настолько универсально, но похоже.
Elias
Ага, это наверное ближайшее. И очень меня радует, что эта штука существует.
Elias
Вообще хотелось бы лично бороться с монополизмом языков и пиарить Lua, но даже не знаю, как это делать. Сейчас пишу Lua/C++ туторы, которые по идее должны быть более подробными, чем всё, что я до этого находил Но фиг знает, какой вклад это внесет. Мб какой-то перспективный проект помогать писать в свободное время? Даже не знаю.
Snusmumriken
Но сравнивая луа и питон, ты сравниваешь "сишку" от скриптов и "сиплюсплюс" от скриптов. Задачи у ЯП немножко разные: питон даёт всё что можно, а луа - всё что необходимо, и это огромная разница. И становится очевидно, почему "С++ гораздо популярнее С, но на С всё ещё много что пишут", нужны оба ЯП (хотя плюсы бы реворкнуть, ибо монстр несуразный). Мне очень понравилось то, что в луа можно особо ничего не учить, и сразу приняться за велосипед, или заточить свой скрипт под узкую специализацию, чтобы он делал это предельно хорошо, а потом залить сурц на микроконтроллер, потому что внешних либ почти нет: тут почти всё - твоё. В целом, язык выбрал случайно, года три-четыре назад, искал движок/фреймворк под "простую 2d-игрулю", когда меня припёрло учить какой-то язык, ибо визуальное программирование в construct2 - фигня, и факт что словами я напишу то же самое в пять раз быстрее - был очевиден даже для меня-непрограммиста.
Elias
Ну да, это хорошая аналогия. Только у C чуть больше силы - он может использоваться с C++ и часто делают биндинги больших библиотек, в итоге С навряд ли скоро умрёт, не смотря на все преимущества C++. У Lua же нет большого брата, что несколько сложнее делает положение. Язык выбрал я тоже почти случайно. Ну, в геймдеве Lua наверное самый универсальный и адекватный скриптовый язык. Все альтернативы чем то хуже, я считаю.
Elias
а где пишешь?
Пока что локально. Думаю сразу запостить сразу несколько статей на свой блог (eliasdaler.github.io)
Elias
Это произойдет где-то в этом месяце, надеюсь :)
Elias
Сначала будут базовые статьи, разве что. Про установку, компиляцию, Lua state, работу с переменными, загрузку и выполнение скриптов. Но я думаю, что я в этих статьях хотя бы часть вещей напишу, которые я нашёл только на третьем году знакомства с Lua, ха-ха. Не сразу понимание приходит. В конце вообще хотел бы описать всякие хаки и очень практические примеры, например как я реализовывал разные штуки в своей игре. Как разделял движок и скрипты, как делал сами скрипты более читаемыми и гибкими и пр.
Elias
Но вообще я думаю, что стоит спросить здесь: если бы вы читали ИДЕАЛЬНЫЙ (11/10) ТУТОР, то что бы вы в нём хотели видеть? Просто я часто встречаю туторы так себе. Слишком затянутые, либо слишком краткие. Либо с чрезмерным петросянством. О чём бы стоило написать, что может быть не так очевидно?
Snusmumriken
Метатаблицы. У кучи начинающих с ними проблемы, притом кратенько расписать пример для каждого метаметода. Для арифметических - уточнить что аргументы передаются в порядке выражения, и это придётся учитывать: a = a + 10 --> __add(a, 10) a = 10 + a --> __add(10, a)
Elias
Хорошая идея, спасибо Только вот не знаю, буду ли я углубляться, надо всё же будет частично посылать читать Programming in Lua. Тутор же всё же не а Lua, а о Lua/C++ :D
ShadoWalkeR
С++ в последнем стандарте очень сильно причесали - он намного лаконичней и удобней стал
ShadoWalkeR
У луа есть еще пара проблем - он осталяет ощущение незаконченности. Как будто студент делал, но некоторые моменты непродумал. Отсутсвие того же switch, к примеру. Или мне к примеру нужно было массово переименовать файлы, я пол дня убил пытаясь заставить встроенными средствами это сделать. В итоге не выдержал - поставил пакет из luarocks и увидел скомпилированную библиотеку для работы с файловой системой. luarocks тоже кстати та еще боль - он ужасно встраивается и временами пакеты им устанавливаемые просто не подхватываются. Приходится проиписывать пути руками, но это не всегда работает, поэтому установленные вещи руками перекидывать в папку с луа
Snusmumriken
У луа есть еще пара проблем - он осталяет ощущение незаконченности. Как будто студент делал, но некоторые моменты непродумал. Отсутсвие того же switch, к примеру. Или мне к примеру нужно было массово переименовать файлы, я пол дня убил пытаясь заставить встроенными средствами это сделать. В итоге не выдержал - поставил пакет из luarocks и увидел скомпилированную библиотеку для работы с файловой системой. luarocks тоже кстати та еще боль - он ужасно встраивается и временами пакеты им устанавливаемые просто не подхватываются. Приходится проиписывать пути руками, но это не всегда работает, поэтому установленные вещи руками перекидывать в папку с луа
1. Всякие свитч-кейсы, стандартное ООП, стрелочные лямбды и прочая лабуда - ну типа да, типа не хватает. Если хотите умереть от сахарного диабета - вперёд в moonscript. 2. Луарокс заточен изначально под линекс, т.е: > apt-get install luajit > apt-get install luarocks > luarocks install luasocket > luajit http = require'socket.http' print(http.request'http://yandex.ru') HTTP 200 OK ....
ShadoWalkeR
Я это в центосе делал
Snusmumriken
А я в убунте встроенной в win10, мне норм )))
ShadoWalkeR
Синтаксический сахар помогает писать программы. Если он, конечно, не вырождается в джаву 😃
ShadoWalkeR
И да - в центосе зачастую проще сделать yum install lua-%NAME% чем пытаться сделать это через luarocks
Snusmumriken
Ненене, синтаксический сахар полезен только если ты в курсе, что действительно происходит, иначе это магия и потенциальная "дырка в абстракции", т.е. дурацкая штука которая вынуждает неучей делать ошибки. Я люблю сахарок, но тщательно выясняю происходящее, иначе проблемсы. Прекол луа - в малом объёме слов, и из сахара тут, пожалуй, только двоеточие. Кстати, свитч-кейсы заменяются табличками с функциями. Например, чот такое: local rswitch = {} function rswitch.get(text) ... end function rswitch.post(text) ... end local data = socket:receive('*l;') local command, tail = data:match'(%w+) (.*)' if rswitch[command] then socket:send(rswitch[command](tail)) end Вот тебе наиболее удобный свитч-кейс, в который удобно запихивать произвольное количество команд, хоть делить на модули по две тысячи строк.
ShadoWalkeR
Я это сделал на таблице с метатаблицей на отсутствующий элемент в качестве default
ShadoWalkeR
Но я для примера приводил
Snusmumriken
Ну да, можно default в метатаблице, но это уже "извращения", тупой и читаемый вариант - вставить else, если не нашёлся в таблице.
ShadoWalkeR
С чего вдруг нечитаемый то?
Snusmumriken
local function rswitch_default(text) ... end local rswitch = setmetatable({}, {__index = function() return rswitch_default end} ) function rswitch.get(text) ... end function rswitch.post(text) ... end Ммм. Нечитаемо. Я так только в своих проектах пишу, потому что знаю что я - разберусь. А если это придётся поддерживать "белому человеку"?
ShadoWalkeR
И вы считаете что switch все еще не нужен? 😃
Snusmumriken
Не а )) Слишком редко нужен.
Snusmumriken
Читаемый вариант для тупых: local rswitch = {} function rswitch.get(text) ... end function rswitch.post(text) ... end local data = socket:receive('*l;') local command, tail = data:match'(%w+) (.*)' if rswitch[command] then socket:send(rswitch[command](tail)) else socket:send('Hai!') end
ShadoWalkeR
Вы сейчас как типовой адепт Го - те точно также любят говорить что язык идеален. А как только чтото добавляется, делают вид что так и задумано было)
Snusmumriken
Я в курсе, спасибо : ) Конечно язык идеален, да и я тоже ничего!
ShadoWalkeR
😂👍
Snusmumriken
Большая часть моего кода выглядит примерно так. Если где-то в очень редком случае нужен свитч-кейс - отдельная табличка под него.
ShadoWalkeR
В моем случае все несколько хуже - многоэтажные конструкции if - else чаще встречаются
Snusmumriken
Конкретно тут - ООП без метатаблиц на синглтонах, но если всё таки нужно много типизированных объектов - цепляется одна маленькая метатабличка. Минимум непонятных действий. Я про избыточность цепляния default к метатаблице таблицы для свитч-кейса.
ShadoWalkeR
Ну и помимо switch я бы не отказался от аналога #include - который просто вставляет содержимое одно файла в это место в другом. Да я знаю про require, dofile и тд, но это же логичный и минималистичный способ попилить одни большой скрипт на несколько мельче
Snusmumriken
dofile чем плох?
ShadoWalkeR
Насколько помню он выполняет его как скрипт а не добавляет
Snusmumriken
Require - технически выполняет скрипт как функцию и возвращает результат. Эта "функция" может работать с глобальными переменными и всем таким. Но это путь ереси, если что.
ShadoWalkeR
Я просто для астериска диалплан на луа делаю. Проблема в видимости - если я чтото выношу во внешний файл, астерисковые вещи недоступны изза порядка инициализации. А без выноса во внешние файлы extensions.lua как то сильно раздувается
Snusmumriken
На самом деле, "вставка содержимого одного файла в другой" - это кошмар и ужас, потому что приходится искать хвосты: где что объявилось, где что изменилось. Дай дураку стеклянный член - он и член разобъёт, и сам порежется.
Snusmumriken
Ты кури нормальные структуры приложений: 1. Ни один модуль не объявляет, не изменяет и не удаляет ничего глобального. Никогда. 2. Если в нескольких модулях нужен один общий - реквайрить его в каждом. Это позволяет хоть как-то сводить концы с концами. 3. Модули не должны держать никаких внутренних состояний, только возвращать класс/объект. Если нужен, например, пополняемый словарь для LZW в модуле - объявляем там локально. 4. Вся реальная движуха и единственное место для глобалов - только в одном файле, который ты запускаешь. Правила нехитрые, минимизируют 99% ошибок.
ShadoWalkeR
Я выше озвучил почему мне нужна проста вставка)
Snusmumriken
А ООП для кого придумывали? : )
ShadoWalkeR
Так, поясню получше: Как вызвать из внешнего модуля функции, которые появятся в глобалке после вызова этого файла? Потому как без них в этом модуле смысла нет
Snusmumriken
Хм. *module.lua* [[ local M = {} function M.foo(...) ... end function M.bar(...) ... end return M ]] *a.lua* [[ local module = require'module' print(module.foo(...)) ]] *b.lua* [[ local mod = require'module' print(mod.bar(...)) ]]
Snusmumriken
Вызывать require несколько раз - можно, хоть каждый раз при вызове (чуть медленнее чем обычный вызов, результат кешируется).
Snusmumriken
Карочи, переделай файл который объявляет глобалки на возвращаемую табличку с функциями.
Snusmumriken
Это можно частично сделать автозаменой, если что. Но хвосты будут находиться в десять раз проще, а область видимости - в пять раз нагляднее. Первое правило: ничего глобального в модулях, кроме использования стандартной библиотеки луа.
Snusmumriken
Ферштейн?
ShadoWalkeR
Я ищу исходники модуля чтобы пояснить)
ShadoWalkeR
https://github.com/asterisk/asterisk/blob/master/pbx/pbx_lua.c
ShadoWalkeR
Раз
Snusmumriken
Дай угадаю, он держит кучу своих состояний и объявляет глобальные define-переменные типа MAX_INCOMING_CALL_COUNT, и вообще написаны бывшими сишниками?
ShadoWalkeR
И вся логика превращается вот в такое - https://gist.github.com/igmar/4066527
ShadoWalkeR
О, только заметил - это неофициальный реп астериска - там комментарии к коду появились😂
ShadoWalkeR
В оригинальном файле все несколько печальней
Snusmumriken
Поздравляю, вы попали на придурков, писавших сишный модуль как сишники. Нормальные люди делают примерно так. Ничего глобального, возвращаем табличку с функциями.
ShadoWalkeR
Поэтому я думаю его переписать. Но на язык белок 😊
ShadoWalkeR
На самом деле этот модуль давно в астериске появился, и я не заметил чтобы он хоть как то менялся
Snusmumriken
А теперь, примерно так делают нормальные люди, когда встречаются с чем-то похожим: *module.lua* -- на случай если кто-то занял переменную, в противном случае - nil local sqlite_old = sqlite3 -- эта хрень переписывает глобал, как мудень require'sqlite3' -- делаем локальной local sql = sqlite3 -- чистим хвосты, чтобы наш модуль не потревожил глобал вот вообще никак sqlite3 = sqlite_old -- всякие модули которые цепляем, и мб сразу создаём новые объекты local channel = require'channel':new() local app = require'app' local OLE = "Phone/phone0" local APIKEY = "oursecretapikey" ... local db = {} function db:init() self.sql = sql.open('/etc/asterisk/users.sqlite') return self end function db:_hotdesk_logout(context, extension) name = channel:CALLERID("name"):get() peername = channel:CHANNEL("peername"):get() ... app.Answer() end return db -- db:init() -- типа сразу инициализируем, или нет