
Dmitry
10.05.2016
07:57:58
а .empty как я понял не будет считать [] пустым массивом?

Eto
10.05.2016
08:00:17
Сейчас не могу проверить, но по-моему там нет `empty`.

Dmitry
10.05.2016
11:44:04
а как быть в ситуации когда есть два класса и каждый из них требует экземпляра другого (еще не созданного) класса?
SQLite sqllite = new SQLite(config);
FireBird fb = new FireBird(config, sqllite);
SQLite sqllite = new SQLite(config,fb);
Но я так сделать не могу т.к. он еще не создан.

Eto
10.05.2016
12:07:07
Циклическую зависимость друг от дружки? Ещё никогда не видел такого в коде.

Google

Dmitry
11.05.2016
10:31:05
так ладно, про циклические зависимости потом. Щас другой вопрос. По @property
void main()
{
A mya = new A();
writeln(mya.a); // вот тут же а будет выведено даже если без property все делать
}
class A
{
string a() // что @propery даст?
{
return "a";
}
}
хотя все кажется разобрался. В данном случае — ничего
А почему вот тут пишут, что элементы должны быть отсортированы?
https://dlang.org/phobos/std_algorithm_setops.html#setIntersection
The ranges are assumed to be sorted by less
как просто пересечение сделать не зависимо от порядка элементов?
просто следующий код:
int [] s1 = [1,0,2,3];
int [] s2 = [1,5,4,2];
auto x = setDifference(s2,s1);
writeln(x);
Выводит: [5, 4, 2]
хотя я ожидал 5, 4 увидеть т.к. 2 есть и там и там
и я не понимаю что значит в скобках:
alias less = "a < b"

Eto
11.05.2016
12:23:50

Dmitry
11.05.2016
12:24:34
и обращаться к нему как к переменной. Типа
mya.foo = 2
так?

Eto
11.05.2016
12:25:15

Dmitry
11.05.2016
12:25:53
а можно пример таких алгоритмов?

Eto
11.05.2016
12:26:08

Dmitry
11.05.2016
12:28:35
а естьфункция которая просто разницу ищет без учета позиции?

Google

0x9d8e
11.05.2016
12:32:39
вычесть и модуль взять раве что
хоты нет

Eto
11.05.2016
12:35:55

Dmitry
11.05.2016
12:36:24
ну я думаю будет эффективней чем каждый раз свой кривой велосипед писать...

0x9d8e
11.05.2016
12:36:53
каждый раз это два раза в году скорее всего

Dmitry
11.05.2016
12:37:40
ну тем не менее

Eto
11.05.2016
12:41:36

Dmitry
11.05.2016
13:10:11
ну найти разницу между двумя массивами данных.

Just
11.05.2016
13:22:05
разве нет в Ди множеств? если есть, то может и функция есть такая. хотя в даном случае проще просто отсортировать массивы и потом стандартный метод юзать

Eto
11.05.2016
13:27:24
Вернее O(N*M).

Dmitry
11.05.2016
13:27:40
а...

Eto
11.05.2016
13:27:43
Вот, недавно писал для рабочего проекта: https://dpaste.dzfl.pl/912c1465e775
Нужно только один массив отсортировать.

Dmitry
11.05.2016
14:35:04
А диапазон это любая структура в которой правила итерации прописаны?

Eto
11.05.2016
14:44:59

Dmitry
11.05.2016
21:00:19
@sigod подскажи, а как дотянуться до пункта uыername (в самом низу)
http://www.everfall.com/paste/id.php?pootolptluqk
Просто
writeln(request[0]);
выводит мне почему-то тупо первый вопрос

Eto
11.05.2016
21:39:54
request[request.length - 1]["username"]?

Dmitry
12.05.2016
05:43:30
О, красиво! А почему у меня только первый элемент выводится. Вроде бы если у меня массив [...] а в нем { } то фигурные скобки это ни разу элемент с индексом ноль т.к. По числу как понимаю к элементам массива обращаться только можно

Eto
12.05.2016
07:51:37
В смысле?

Google

0x9d8e
12.05.2016
08:38:59
0 это первый элемент, length - 1 последний, в чём вопрос-то?

Dmitry
12.05.2016
09:53:53
Почему мой код выкусывал первый блок. Хотя не должен был бы
Щас до компа доберусь покажу. Там просто первый вопрос выводило. Хотя это, {}, а не []
Так. мне не понятно почему выводит следующую часть:
writeln(request[0]);
http://www.everfall.com/paste/id.php?nf0quid1061f
Или [0] позволяет не только по [] ходить, но и по {} ?

Eto
12.05.2016
13:30:22
Так в чём тут проблема? [0] достаёт первый элемент из массива. У которого как раз id == 1.

Dmitry
12.05.2016
13:31:24
так, в твоем варианте предполагается, что поле username всегда будет в конце, а как к нему обратиться просто по имени, не зная его позиции?

Eto
12.05.2016
13:31:58
Эм?
А, ты хочешь пройтись по массиву объектов и найти поле username?

Dmitry
12.05.2016
13:32:32
типа:
writeln(request["username"]);
только этот вариант не работает

Eto
12.05.2016
13:32:49
Конечно не работает.

Dmitry
12.05.2016
13:33:16
а почему?

0x9d8e
12.05.2016
13:33:32
потому что вложенность

Dmitry
12.05.2016
13:34:17
[{"foo" : "xxx"}{"username": "dima"}]
вроде бы так же?

Eto
12.05.2016
13:34:23
Итерируешь по всем элементам request. И ищешь тот, который содержит username поле.

Dmitry
12.05.2016
13:34:37
а... понял...
итерировать как красивее? Есть вариант лучше чем foreach?

Eto
12.05.2016
13:35:43
И foreach красив.

Dmitry
12.05.2016
13:36:49
так, а без итерации я бы мог получается если бы все было в формате: [{"foo" : "xxx", "username": "dima"}]
тогда можно было бы x["username"] писать так?

Google

0x9d8e
12.05.2016
13:37:10
x[0]['username']
Это же нумерованный массив из одного элемента, в котором содержится ассоциативный массив с ключами

Игорь
12.05.2016
13:39:42
Или как-то так
'''
{"вопросы": [...], "доп.данные": {"username": "abc"}}
'''

0x9d8e
12.05.2016
13:42:24
Да, кстати. А то перебором искать то, что всегда в одном месте не кошерно

Dmitry
12.05.2016
13:46:15
ну мало ли я куда-то перенести удумаю и потом забуду что оно в конце должно быть

0x9d8e
12.05.2016
13:47:55
Ну поэтому Игорь и предложил не в конце класть, а по имени

Dmitry
12.05.2016
13:50:07
а все, просек...
кстати, я теперь проверяю пустоту Json как:
if(v["passedtests"] == Json.emptyArray)
нормальный вариант?
или все же через length лучше ?

Eto
12.05.2016
14:51:41

Dmitry
12.05.2016
14:55:45
@sigod
А точно констукция x[0]["username"].length != 0 всегда нормальна? Просто походу она вот тут выпадает:
http://img.ctrlv.in/img/16/05/12/5734996564e62.png
т.е. оно проходит эту провернку и на следующей строке выпадает

Eto
12.05.2016
14:59:35
x это у тебя что?

Dmitry
12.05.2016
15:00:06
ну просто итерабельный JSON

Eto
12.05.2016
15:00:48
Уверен?

Dmitry
12.05.2016
15:01:03
а может быть не так?

Eto
12.05.2016
15:03:26
["username"].length != 0
Такая проверка не подойдёт. Если поля username не присутствовало в объекте, то код просто упадёт.
Лучше всего:
["username"].type == Json.Type.string_

Dmitry
12.05.2016
15:04:34
а тоесть еще и тип проверять? хорошо

Eto
12.05.2016
15:06:15
length работает только для массивов, строк и объектов. Для всех остальных она вызывает assert(false).

Google

Dmitry
12.05.2016
15:07:36
json в данном контексте же не может быть объектом или может?

Eto
12.05.2016
15:08:05
Что ты подразумеваешь под данным контекстом?

Dmitry
12.05.2016
15:09:32
ну при итерации по входному Json. вот часть json при итерации в цикле это объект?

Eto
12.05.2016
15:09:58
Если в массиве объект.

Dmitry
12.05.2016
15:10:09
а...
Так еще раз упражнение на закрепление.
[] в Json и массив в Ди это разные вещи так?

Eto
12.05.2016
20:08:29
В D [] это Index Operator.
А так же Slice Operator.
https://dlang.org/spec/operatoroverloading.html
Читай всё что связано с opIndex*.
http://dlang.org/spec/hash-map.html
И про ассоциативные массивы.

Dmitry
13.05.2016
07:29:37
чnо-то не могу понять в чем ошибка...

Eto
13.05.2016
12:17:36
Даже не знаю.

Dmitry
13.05.2016
17:05:01
Подскажите такой момент как по-уму сделать. При рефреше страницы браузер забывает авторизован ли пользователь. И сайт перебрасывает на дефолтну вьюшку для неавторизованных.
Соответственно мы каждый раз дергаем checkAuthorization и если сессия жива, то напоминаем, что пользователь авторизован и показываем ему что нужно.
В самой проверке checkAuthorization мы обращаемся к БД для того, чтобы о юзере нужную инфу собрать. К примеру какие тесты он уже пошел.
Проблема вот в чем. Запрос-ответ к БД у меня идут очень медленно. В итоге получается по событию F5 пользователя на 2 секунды сбрасывает на дефолтную вьюшку. Потом приходит ответ от БД и сервер отдает браузеру инфу, что все ок и вьюшка меняется.
Вопрос — как сделать по уму, чтобы этого лага не было?
на сервере кэш делать какой-то?
в качестве сервера использую vibed


Pavel
13.05.2016
17:09:55
Почему запрос идет медленно? Должен идти быстро, надо профилировать
Авторизацию надо проверять в каждом экшене, а не только в дефолтной вьюхе

0x9d8e
13.05.2016
17:14:51
Авторизация авто делает что-то дико избыточное. Две секунды это жуть.
"В самой проверке checkAuthorization мы обращаемся к БД для того, чтобы о юзере нужную инфу собрать. К примеру какие тесты он уже пошел." Скорее всего вот это. В авторизации мы должны просто получить id пользователя, всё остальное ужно делать если и когда понадобится.

Dmitry
13.05.2016
17:18:14
а... пасибо, я примерно так и думал. Запрос медленно наверно из-за того, что с БД приходится по HTTP перестукиваться т.к. нативного драйвера нет для ArangoDB

0x9d8e
13.05.2016
17:18:54
Ох, ну и жесть

Dmitry
13.05.2016
17:19:17
к тому же еще и через curl