@ProLua

Страница 77 из 307
Vlad
12.04.2017
17:19:02
я просто уже сам окончательно запутался тобишь воткнуть верхнего автора как используемый обьект нельзя, это ж не яп { "author" : { "id" : "value", "name" : "value", "surname" : "value" }, "book" : { "title" : "value", "author" : "id", "numOfPages" : "value", "genre" : "value" } } а типа потом нужно будет вытаскивать и работать как то с ним, это мне типа к книжке значит сразу приписывать ид автора что ю потом сравнивать с авторами на сходство

Рома
12.04.2017
17:19:54
да, вот как раз графкюэльный пример нашел: { "posts": { 4565633: { "author_id": 599, ... }, 4565634: { "author_id": 599, ... }, }, "autors": { 599: { "posts": [4565633,4565634] }, } }

лучше id делать ключами, чтобы потом нужного автора не искать перебором

Vlad
12.04.2017
17:22:14
в смысле парой конкретно указывать куда сразу идти? меня что то просто с простых вещей жесско паяет, вроде не сложно а понять не в состоянии

Google
Рома
12.04.2017
17:23:26
res = тот json выше author = res.authors[599] first_post = res.posts[author.posts[0]] как-то так

Vlad
12.04.2017
17:24:35
обьекты\таблицы мы получаем как таблицы? как я понял еще и с "нормальной" нумерацией с 0

Рома
12.04.2017
17:26:26
две поправки по примеру моему: json не умеет числовые ключи, не луа) и глупый js сортирует как хочет, так что выдача в таком виде без порядка

забыл, json не только для js

тогда зависит от языка

Vlad
12.04.2017
17:30:51
тут ж кстати, встроеного ничего в луа по дефолту нет для джейсона? просто у меня идет автокомплит не совсем понятно он от луа или от короны, просто пользуюсь атомом и там пачка пакетов разных

Рома
12.04.2017
17:41:37
луа зе бест для встраивания, ничего лишнего, нужен json - бери библиотеки

вся забава с json'ом - в json'е есть тип null, в луа его нет, вот и выбирай библиотеку, которая нулл реализует как тебе нравится

Vlad
12.04.2017
17:43:14
а свою проверку какую то черкануть никак? или заганять null как строку ну типа сложно, там же по сути главное получать передавать данные а остальное можно уже попробовать обрабатывать на месте

Рома
12.04.2017
17:47:53
конечно можно, не очень и сложно самому json составлять

не очень хорошо это, потому что cjson очень быстр, а самому так быстро не выйдет

по секрету, в json'е null нафиг не нужен, от него никакого эффекта в результате

я имел в виду то как пустые таблицы в jsonе хранятся - это разные библиотеки по-своему и решают

Google
Snusmumriken
12.04.2017
17:53:39
Хе-хе, на определённых данных, неплохо работает как раз формат аналогичный json'у. authors = { {name = 'Stephen Edwin King', bdate = 1974, books = {2}}, {name = 'Douglas Noël Adams', bdate = 1952, books = {1}} } books = { {title = 'The Hitchhiker’s Guide to the Galaxy', date = 1979, author = 2}, {title = 'It', date = 1990, author = 1} } Чот такое. Тут в качестве id-ключа выступает номер в параллельной группе. Выгрузка списка книг конкретного автора выглядит примерно так: getBooksByAuthor(name) local author for i, v in ipairs(authors) do if v.name == name then author = v end end if not author then return nil, 'not found' end local booklist = {} for i, v in ipairs(author.books) do table.insert(booklist, books[v]) end return booklist, #booklist end Для унификации всего этого счастья и автодополнения, нужны всякие первичные-вторичные ключи, язык запросов (или методы взаимодействия), механизмы поддержания целостности данных и прочая фигня. Но зачем, если есть sql/nosql?

я имел в виду то как пустые таблицы в jsonе хранятся - это разные библиотеки по-своему и решают
Как стандарт - пустая таблица ([]/{}). И это правильно, потому что с "другой стороны" ждут список/таблицу, и пытаются его обработать, даже если он пуст.

Рома
12.04.2017
18:02:41
как кому нравится

Snusmumriken
12.04.2017
18:02:56
Ниет, тут стандарты :3 В противном случае, json был бы опасен.

Рома
12.04.2017
18:03:07
мне этот подход не нравится, надо думать как сериализатору сказать - это пустой массив, или это пустой хеш

по этому в моей реализации пустой массив или хеш - это его отсутствие

Snusmumriken
12.04.2017
18:04:09
Не надо думать. field = {}, перед тем как мы вообще начали парсить содержимое таблицы. В общем, ты не прав, товарищ. Стандарты есть стандарты, или это уже не json.

Рома
12.04.2017
18:04:58
да парсить то другое, я про превращение пустой таблицы в json строку

Snusmumriken
12.04.2017
18:06:44
http://www.json.org/json-ru.html Почитай ECMA, тут валяется. А, пустая таблица превращается в скобки. t = {yo = {}, foo = {1, 2, 3}, bar = {a = 10, b = 20}} -> "{"yo":[], "foo":[1, 2, 3], "bar":{"a":10,"b":20}}" Пустая таблица = пустой список. Инфа сотка. Обрабатываются одинаково.

Рома
12.04.2017
18:08:05
нененене

какой это пустой список?

Snusmumriken
12.04.2017
18:08:13
"yo":[]

Рома
12.04.2017
18:08:29
и если я жду {} на другой стороне?

Snusmumriken
12.04.2017
18:08:44
Пофигу, они идентичны в плане обработки. И в стандарте json - это пустой список.

Рома
12.04.2017
18:09:15
таки да! [].что_угодно = null

Snusmumriken
12.04.2017
18:09:22
Дыа. И это правильно. А если вместо [] - ничего нет, то сама попытка сделать null.что_угодно вызовет ошибку.

Кстати, нафига велосипед изобретаешь? Из интереса?

fgntfg
12.04.2017
18:17:39
А зачем для Lua данные хранить в json?

Рома
12.04.2017
18:19:09
велосипед потому что cjson дает {} в качестве пустого массива, а у меня в js логике были методы массивные - result.reduce(...) и вываливалась ошибка типов, вот и написал велосипед

зачем - делаю лучший в мире веб фреймворк, вот прямо без преувеличений, а там json на каждом шагу

Google
Denis
12.04.2017
19:05:54
.... скоро точно пойдут вакансии джысон погромистов.

Рома
12.04.2017
19:10:23
лучше бы луа вакансии начали идти

Snusmumriken
12.04.2017
19:25:20
Хе-хе, работаю луа-программистом :3

Чай
12.04.2017
19:50:06
Тоже.

Кто на митап ходил — IPONWEB разослали информацию о вакансии.

Если кому интересно: https://hh.ru/vacancy/20000625

Vlad
12.04.2017
20:03:53
Требуемый опыт: 3–6 лет дальше смотреть не стал

Чай
12.04.2017
20:04:11
Это не чёткие рамки же.

На докладе сказали, что собеседуют всех.

Vlad
12.04.2017
20:05:15
ну от 3 до 6 да не четкие, не написали же что конкретно 3,2 =)

хотя странный подход, зачем писать так если принимаете тех кто проидет собеседование

Чай
12.04.2017
20:06:20
Может, имеют в виду не только коммерческий опыт.

Snusmumriken
12.04.2017
20:13:33
Дык есть много вакансий. Вру, немного. Я отхватил почти единственную. Мутю бекенд.

Рома
12.04.2017
20:44:49
а эти 3-6 лет их как понимать в вакансиях, что есть запись в трудовой книжке о трех годах, или если я фрилансю несколько лет и есть репозитории-проекты это доказывающие, то тоже считается?

Snusmumriken
12.04.2017
21:02:30
Нормальные работодатели воспринимают портфолио как несколько лет работы

Group Butler [beta]
12.04.2017
22:31:33
Добро пожаловать в чат pro.lua, //⁠YOGURT! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

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

Snusmumriken
13.04.2017
11:08:24
В Москве.

Vadim
13.04.2017
11:08:40
я сколько видел вакансий, так либо эмбедщики, либо надо ещё и перл знать, либо ещё чего

Google
Vadim
13.04.2017
11:08:54
ну, не считая клаудфлари, taobao и т.п.

Snusmumriken
13.04.2017
11:09:05
Ну, так подфартило. Но я и приходил не нулевиком.

Alexey
13.04.2017
11:09:57
у нас на Lua пишут в Тарантуле и в игровом направлении. И в Москв, и в Воронеже.

Vadim
13.04.2017
11:10:57
а вилки зп какие? Ну, чтобы потроллить знакомых PHP-макак :)

когда я пару лет видел вакансию - там хотели какого-то Шиву на Lua за 100k :)

Alexey
13.04.2017
11:12:15
Если человек программист, то нет разницы на каком языке он пишет. Отличие наверное только на перегретых языках - жава, мобайл

по кр мере среди ЯП с динамической типизацией - питон там, или взять пхп, перл, луа - разницы большой нет

Admin
ERROR: S client not available

Snusmumriken
13.04.2017
11:13:34
Есть не очень значительная разница в знании мелких тонкостей языков. И неимоверно огромная разница в знании фреймворков. Питоно-программисты почти никому не нужны без django, а javascript - без querry/react/node и ещё кучи либ/фреймворков. И знания их тонкостей. Это разные вселенные, в которых котируются очень разные архитектуры.

Alexey
13.04.2017
11:14:09
тоже правда

Snusmumriken
13.04.2017
11:18:26
Прочитай эту штуку: http://russian.joelonsoftware.com/Articles/LordPalmerston.html Самая суть: "Неудержимые абстракции ведут к тому, что мы живем с очень резкой кривой обучения: вы можете выучить 90% того, что вы используете каждый день за неделю обучения. Но что бы разобраться в остальных 10% займет еще пару лет. Это то, чем по настоящему опытные программисты отличаются от людей, которые говорят ”не важно, что вы хотите, что бы я сделал, я могу открыть книгу и научиться делать это”. Если вы строите команду, это нормально иметь множество менее опытных программистов для написания больших участков кода с использованием обобщенных инструментов, но команда не может начать работать, если у вас нет нескольких по настоящему опытных членов команды для выполнения действительно сложной работы." "Вы можете думать, что основу программирования составляют ваши превосходные C++ знания 90%, а различные API это только 10%-ый пушок, в котором вы сможете разобраться за несколько недель. Этим людям я скромно подсказываю: времена изменились. Соотношение изменилось на противоположное."

Alexey
13.04.2017
11:21:34
хорошо сказано.

Snusmumriken
13.04.2017
11:22:33
Товарищ, который пишет эти заметки - весьма крут. И мы пользуемся его stackowerflow и trello ну раз в неделю - это точно. Тема не устарела пятнадцать лет спустя, и не устареет до тех пор, пока сама суть программирования не изменится. Там есть ещё много что, достойное прочтения.

Vlad
13.04.2017
23:11:21
черт что то дырки в памяти случаются на ровном месте, работаешь над чем то, день\два отдохнул и по новой приходится тратить некое время что б войти в колею и все вспомнить где что зачем

Snusmumriken
13.04.2017
23:54:12
Это нормально. http://russian.joelonsoftware.com/Articles/HumanTaskSwitchesConsider.html

Человеческий мозг ограничен небольшим набором абстракций, которые можно держать в голове. Записывай и комментируй.

Рома
14.04.2017
06:05:27
Дырки в памяти легко решался __mode: 'kv' вроде так

Snusmumriken
14.04.2017
08:37:13
Попробуй повесить метатаблицу на мозги :3

Чай
14.04.2017
08:54:38
Вам смешно, а я уже ловил себя на мысли, что неосознанно придумываю метатаблицы для различных предметов. Metatable головного мозга.

Рома
14.04.2017
08:58:02
Вопрос один мучает: кто придумал подчеркивания двойные? зачем? у этого есть история или эзотерический смысл?

Google
Рома
14.04.2017
08:59:20
я явно какую-то фишку метатаблиц не просек, это сделано, чтобы не мешало юзерским ключам, вот голову ломаю - как именно оно там может мешать

Snusmumriken
14.04.2017
09:28:38
Когда ты делаешь упрощённый класс, ты пишешь что-то такое: Class = {} Class.__index = Class function Class:new(...) return setmetatable({...}, self ) function Class:__add(v) ... end function Class:__call(v) ... end function Class:__newindex(k, v) ... end function Class:foo(...) self.bar = {...} end Шоб прям в классе перегружать операторы над объектами и всем таким. Имена такие - чтобы легко запоминались, чтобы было сразу понятно что это МЕТА(метод/индекс/объект), и да, чтобы не мешали всему остальному. В луях, "приватные" поля часто делают с подчёркиванием в начале. Понятное дело что менее приватными они не становятся, но зато всем ясно что это служебная штука и менять её не стоит. Ну там, obj = { field_n = 10 _serviceField = 'servicedata', } Что-то вроде соглашения. Так же как использование "_" в качестве хранилища для ненужной переменной. i в цикле не используется - значит будет _. for _, v in ipairs(table) do v.n = v.n + 1 end

Рома
14.04.2017
09:34:52
Спасибо, все логично и продуманно

Vadim
14.04.2017
10:12:31
ipairs без надобности использовать не стоит, не знаю как в jit, а в ваниле он чуть медленнее

fgntfg
14.04.2017
10:13:56
А потом ты упарываешься и переопределяешь иттератор

Snusmumriken
14.04.2017
10:14:10
В полтора раза, да. Но ты делаешь преждевременную оптимизацию. ipairs объективно удобнее обычного цикла. Заменять ipairs на for i = 1, #t do local v = t[i] ... end будешь только в шибко нагруженных местах.

fgntfg
14.04.2017
10:16:35
ipairs лучше использовать если у тебя в таблице "дыры" или индекс не числовой

Vadim
14.04.2017
10:16:42
На правах холивара: без 10 преждевременных оптимизаций появляется electron на десктопе

Snusmumriken
14.04.2017
10:17:02
Поправка: не числовые индексы - pairs. Разница там приличная. Поправка 2: Electron появляется не только без преждевременных, но и без обыкновенных оптимизаций, и на неподходящей архитектуре.

Vadim
14.04.2017
10:18:24
тоже верно :)

Vadim
14.04.2017
14:27:21
https://blog.toggl.com/wp-content/uploads/2017/04/toggl-how-to-kill-the-dragon-with-9-programming-languages.jpg

grinchfox
15.04.2017
20:26:49
вопрос ума: Имеется система классов предметов для инвентаря, есть класс еды. У еды из разновидности есть только дефолтные значения, поведение еды не меняется. Как лучше сделать разновидность еды - разными наследниками или одним generic классом и фабрикой, которая заполняет его свойствами ?

Snusmumriken
15.04.2017
20:28:08
Один класс и фабрика, которая заполняет данные - уникальный id + набор статов/параметров из конфига еды. Если там есть эффекты - в том же конфиге набор методов. С оружием - та же фигня.

grinchfox
15.04.2017
20:28:56
да, это звучит лучше чем тонна наследников, у которых прописаны только свойства

правда конструкция получается неоднородной, тоесть одни предметы создаются одним путем, другие - другим

хотя можно сделать тип предмета параметром в конструкторе

Snusmumriken
15.04.2017
20:33:26
Ну, основной класс, который содержит кучу методов, типа: "eat", применяющий баффы при съедании, событийные методы (got/lost/бла-бла) и всё такое, которые дёргают метод соответствующей еды, если есть. При создании образца, создаётся объект, который применяет тыкнутые фабрикой методы при съедании и применении баффов, укладывании в инвентарь, извлечением из него, взятием в руку и всем таким.

grinchfox
15.04.2017
20:35:22
блин, моя сериализация к этом не готова.. дефолтные значения лежат в __index, а сериализуется только то, что есть в таблице экземпляра

так получется что экземпляр будет хранить свойства

а если не сериализовать это, то придется придумывать подкласс и сериализовать его, и при десериализации обратно задавать значения... это как-то страшновато

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