@dlangru

Страница 8 из 719
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) {}, то код ведь зависнет?

vibe.d их сам параллелит. Потому что все его I/O методы вызывают yield.
+ получается что если использовать сторонний код, который не работает асинхронно, то могут быть проблемы?

Eto
04.05.2016
14:27:14
+ получается что если использовать сторонний код, который не работает асинхронно, то могут быть проблемы?
Да, всё верно. Например, сейчас у меня на сервере в некоторых местах используется std.net.curl. Это рождает тормоза в обработке запросов.

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

А у go вроде асинхронные

Eto
04.05.2016
14:34:27
тоесть если я в его приложении напишу: foo() {...} bar() {...} то они автоматом ассинхронны будут?
Это зависит не от того, как ты пишешь, а от того какое API будешь использовать. Так же не стоит делать длительных вычислений. Их лучше всего выносить в отдельный поток.

Ну то есть все же сами встроенные функции стандартной библиотеки не асинхронные. Косячок-с :(
Да, это проблемка. Но даже не знаю, как её можно решить. У vibe.d слишком много всего своего.

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
А где и когда его юзать?
Ну, например, когда у тебя есть 2 запроса. И ты хочешь выполнить их одновременно.

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

Google
Eto
04.05.2016
14:43:14
Как понять что какое то апи или либа не будет работать ассинхронно?
Обычно в описании библиотеки должно быть написано. Сейчас много всяких vibe-* библиотек появляется. Сам одну такую пишу. Ну, и немного свои знания применять надо. Иногда может потребоваться в код залезть.

В рамках одной функции?
Да. Например, тебе на сервер приходит запрос. Чтобы его обработкать, тебе нужно скачать 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

а почему у меня строки так кривао аппендятся? по вопросу выше
Так ведь ты говоришь 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);

Страница 8 из 719