
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?


Рома
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! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Vadim
13.04.2017
11:08:02

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, а сериализуется только то, что есть в таблице экземпляра
так получется что экземпляр будет хранить свойства
а если не сериализовать это, то придется придумывать подкласс и сериализовать его, и при десериализации обратно задавать значения... это как-то страшновато