
Eto
04.05.2016
14:21:30
Но конечно можешь, если знаешь, что делаешь.

Dmitry
04.05.2016
14:21:54
нужно ли каждую функцию в runTask оборачивать или вайб их сам как-то параллелелит?

Eto
04.05.2016
14:22:30
vibe.d их сам параллелит. Потому что все его I/O методы вызывают yield.

Dmitry
04.05.2016
14:23:19
тоесть если я в его приложении напишу:
foo() {...}
bar() {...}
то они автоматом ассинхронны будут?

Google

Pavel
04.05.2016
14:23:22
А конструкции языка он параллелит? Если например написать while(true) {}, то код ведь зависнет?

Eto
04.05.2016
14:27:14

Pavel
04.05.2016
14:28:31
Ну то есть все же сами встроенные функции стандартной библиотеки не асинхронные. Косячок-с :(
А у go вроде асинхронные

Eto
04.05.2016
14:34:27

Dmitry
04.05.2016
14:39:24
Ну так мне рантаск не нужен?

Eto
04.05.2016
14:39:48
Думаю нет.

Dmitry
04.05.2016
14:40:15
А где и когда его юзать?
Как понять что какое то апи или либа не будет работать ассинхронно?

Eto
04.05.2016
14:41:13

Dmitry
04.05.2016
14:41:54
В рамках одной функции?

Google

Eto
04.05.2016
14:43:14
В рамках одной функции?
Да. Например, тебе на сервер приходит запрос. Чтобы его обработкать, тебе нужно скачать 2 файла откуда-то из интернета. Запросы друг от друга не зависят, поэтому ты можешь выполнить их одновременно.

Dmitry
04.05.2016
14:44:32
Что будет если результаты одной функции зависят от другой? Висеть будет?

Eto
04.05.2016
14:45:34
Нет, будут выполняться другие файберы.

Dmitry
04.05.2016
14:46:19
А эти как? Типа понемногу их выполнение будет идти?

Eto
04.05.2016
14:47:55
От yield до yield.

Dmitry
04.05.2016
14:49:23
Ну ялд же вызывается для функции не явно так?
Тоесть на каждую функцию какой то квант времени выделяется который сам планировщик вайба выделяет верно?

Eto
04.05.2016
14:55:09
Нет, в vibe.d нет планировщика.
На сколько я понимаю все I/O функции vibe.d просто вызывают yield. Тем или иным образом. Например, если залезть в requestHTTP, то в конце-концов окажемся на строчке getEventDriver().connectTCP(...).

Dmitry
04.05.2016
14:59:31
А в какой момент они это делают? Я это никак в толк не могу взять

Eto
04.05.2016
15:03:49
Вот, посмотри на пример: http://dlang.org/phobos/std_concurrency.html#.Generator

Dmitry
04.05.2016
16:02:02
оно на каждой итерации чтоли файбер возвращает?

Eto
04.05.2016
16:21:53
Нет. Этот код просто в пример, как эта асинхронность работает.

Dmitry
04.05.2016
20:06:56
ни у кого идей нет что не так у меня?
http://stackoverflow.com/questions/37034311/arangodb-cant-send-request-with-curl

Eto
04.05.2016
20:24:51
{"id":1,"question":"aaa"},{"id":2,"question":"bbb?"}
Невалидный JSON. Это видимо массив, а значит [] не хватает.

Dmitry
04.05.2016
20:25:39
Я пробовал и так тоже:
echo [{"id":1,"question":"aaa"},{"id":2,"question":"bbb?"}] | curl -X POST --data-binary @- --dump - http://localhost:8529/_db/otest/_api/document/?collection=sitetestanswers
не помогло

Eto
04.05.2016
20:26:21
А через dlang-requests пробовал такое посылать?

Dmitry
04.05.2016
20:26:38
да, все возможные комбинации испробовал

Google

Eto
04.05.2016
20:31:48
Даже не знаю. Вроде должно работать.

Pavel
04.05.2016
21:16:01
Начни тестить с самого простого, пошли '{}'
или '[]'
Если будет падать с ошибкой невалидного жсона значит что-то не так с библиотекой
Если все ок, то набивай жсон постепенно до своего искомого вида

Игорь
04.05.2016
21:23:40
Попробуй так:
echo '[{"id":1,"question":"aaa"},{"id":2,"question":"bbb?"}]' | curl -X POST --data-binary @- --dump - http://localhost:8529/_db/otest/_api/document/?collection=sitetestanswers
С дополнительными кавычками вокруг echo
Извиняюсь, вижу в каментах стока уже предлогали...

Dmitry
04.05.2016
21:30:02
нифига не могу разобраться.
такая фот фигня улетает нормально
Json j1 = Json(["field1": Json("foo"), "field2": Json(42), "field3": Json(true)]);
а вот объект с вложениями уже все

Игорь
04.05.2016
21:32:28
А что если в хеадер добавить
"Contet-Type": "application/json"

Dmitry
04.05.2016
21:33:11
фишка в том что работает только простой запрос с одним вложением
вот этот работает:
echo {"id":2,"question":"bbb?"} | curl -X POST —data-binary @- —dump - http://localhost:8529/_db/otest/_api/document/?collection=sitetestanswers

Игорь
04.05.2016
21:34:11
А как выглядит код, который обрабатывает этот запрос?
http://localhost:8529/_db/otest/_api/document/?collection=sitetestanswers

Dmitry
04.05.2016
21:35:03
ну это БД просто ArangoDB

Игорь
04.05.2016
21:38:50
А ты пытаешься получить документ?
Или создать?

Dmitry
04.05.2016
21:39:54
создать

Игорь
04.05.2016
21:59:10
echo '{"some_data":[{"id":1, "question":"aaa"},{"id":2, "question":"bbb?"}]}' | curl -X POST --data-binary @- --dump - http://localhost:8529/_db/otest/_api/document?collection=sitetestanswers
HTTP/1.1 202 Accepted
Location: /_db/otest/_api/document/sitetestanswers/83220390
Server: ArangoDB
Content-Type: application/json; charset=utf-8
Etag: "83220390"
Connection: Keep-Alive
Content-Length: 84
{"error":false,"_id":"sitetestanswers/83220390","_rev":"83220390","_key":"83220390"}

Google

Игорь
04.05.2016
22:10:54
Тоже самое картинкой, если требуется подтверждение, что в консоли оно работает http://screencloud.net/v/l5fZ
Надеюсь это поможет...

Dmitry
05.05.2016
05:02:08
Игорь, спасибо большое, а не мог бы проверить через dlang requests или через вайб?


Игорь
05.05.2016
05:52:16
Этот код успешно добавляет документ в коллекцию:
import std.stdio;
import requests.http;
void main(string[] args) {
string collectionUrl = "http://localhost:8529/_db/otest/_api/document?collection=sitetestanswers";
auto rq = Request();
rq.verbosity = 2;
string s = `{"some_data":[{"id":1, "question":"aaa"},{"id":2, "question":"bbb?"}]}`;
auto rs = rq.post(collectionUrl, s, "application/json");
writeln("SENDED");
}
Вот консольный вывод:
wirbi@zenbook:~/projects/testarango/arango$ dub run
Performing "debug" build using dmd for x86_64.
requests 0.1.0: target for configuration "library" is up to date.
arango ~master: building configuration "application"...
Linking...
To force a rebuild of up-to-date targets, run again with --force.
Running ./bin/arango
> POST /_db/otest/_api/document?collection=sitetestanswers HTTP/1.1
> Content-Length: 70
> Connection: Close
> Host: localhost:8529
> Content-Type: application/json
>
< HTTP/1.1 202 Accepted
< Location: /_db/otest/_api/document/sitetestanswers/2407520166
< Server: ArangoDB
< Content-Type: application/json; charset=utf-8
< Etag: "2407520166"
< Connection: Close
< Content-Length: 90
< 90 bytes of body received
SENDED


Dmitry
05.05.2016
09:43:38
Спасибо огромное, а не мог бы с этим проверить https://gist.github.com/bubnenkoff/aaeaf49bcfff0cc505071c06c15ca983
Я за компом буду только вечером
А... Ты получается ключ для массива добавил? Типа key: mydata так?

Игорь
05.05.2016
10:25:40
Я исходил из логики, что документ не может быть массивом, но может быть словарем (в терминах питона).
Если бы я был разработчиком этой БД, то сделал тоже самое, что бы не было пересечения понимания, массив данных с массивом документов.

Dmitry
06.05.2016
13:48:10
Вот таков вот вопрос. Следующий код вызывает две функции. Вопрос. Почему функция пишущая в консоль тройки ничего не пишет.
http://img.ctrlv.in/img/16/05/06/572ca05c2b06c.png
такое чувство она вообще не вызывается
так, хотя походу вот оно матюгается:
.
> POST /_db/otest/_api/document/?collection=sitetestanswers HTTP/1.1
> Content-Length: 2977
> Conne
ой: Task terminated with uncaught exception: Got JSON of type array, expected object.
да все проблема решена

Just
06.05.2016
13:52:37
а что было не так?

Dmitry
06.05.2016
13:53:07
да я вместо объекта JSON в функцию передавал сам объект (правильно называю то?) req

Just
06.05.2016
13:53:43
вот я тоже смотрел и думал, что такое req
он выше определен, не видно

Dmitry
06.05.2016
13:56:15
есть какой-то вменяемый способ пользователя кроме как по ИП узнавать?
Суть такая, что мне нужно в БД какую-то инфу хранить, которая бы позволила знать, что этот человек уже заходил. Куки как строку хранить или еще что есть?

Google

Eto
06.05.2016
13:57:39
Стандартная реализация сессий. Обычно через куки передаётся.
Если для браузера. Если REST, или иное, API, то можно и через хедеры.

Dmitry
06.05.2016
13:59:18
Механизм какой? В БД сохранять куку, а потом когда заходит кто-то, то пробегаться и смотреть был ли человек с такой же?

Eto
06.05.2016
14:07:55
Да.

Dmitry
06.05.2016
14:43:37
А надо ли внизу новый объект rq создавать если вверху он уже создан?
http://img.ctrlv.in/img/16/05/06/572cad740fcc1.png
Еще вопрос. У меня есть элемент с типом JSON мне нужно проверить есть ли в нем определенное значение. Не могу понять почему canFind не работает:
У меня есть массив sting [] в структуре. Добавляю в него данные:
visitordata.passedtests ~= (v["passedtests"]).toString;
Получается вот такая ерунда:
["\"[one1111test, twotest4]\"", "firsttest"]
почему firsttest добавляется как отдельный массив?

Eto
07.05.2016
15:47:40
v["passedtests"].get!(string[]).canFind(passedtestFromCurrentQuestion)

Dmitry
07.05.2016
15:50:33
погоди, что не так в моем коде и что твой делает?
get! получается шаблон перебирающий внутри массива элементов?

Eto
07.05.2016
16:10:36
opIndex возвращет Json. Ты не можешь использовать canFind на Json.

Dmitry
07.05.2016
16:11:40
а почему у меня строки так кривао аппендятся? по вопросу выше

Eto
07.05.2016
16:11:50
get [get] — Converts the JSON value to the corresponding D type - types must match exactly.
http://vibed.org/api/vibe.data.json/Json

Dmitry
07.05.2016
16:13:17
а как адекватно проблему решить?

Eto
07.05.2016
16:13:47
get! использовать.

Dmitry
07.05.2016
16:14:13
спасибо
Подскажите, а как по простому обратиться к вложенному Json?
writeln(to!string(visitorsInfo["result"]));
а как взять элемент уже в нем?
хоетлось бы как-то типа:
writeln(to!string(visitorsInfo["result.ip"])); // берем ip

Eto
09.05.2016
10:08:56
writeln(visitorInfo["result"]["ip"].to!string);