
Dmitry
13.06.2016
17:43:46
уф... для меня это на грани понимания

Oleg
13.06.2016
17:44:31
а если нужно "меньше букав", то, по соглашению, alias имени шаблона возвращается без обращения к подпространству имён шаблона

Pavel
13.06.2016
17:44:54

Dmitry
13.06.2016
17:45:18
там все на столько дуболомно?

Google

Oleg
13.06.2016
17:46:46
template sqr( size_t K )
{
enum sqr = K * K;
}
auto a = sqr!5; // a == 25

Pavel
13.06.2016
17:46:52
Почему же, просто там нет такой магии трудной для понимания

Oleg
13.06.2016
17:46:56
вот пример простенький

Dmitry
13.06.2016
17:47:05
пасибо постараюсь разобраться

Oleg
13.06.2016
17:47:37
ребят, а кто чем пользуется для (де)сериализации json?
https://github.com/rcorre/jsonizer я вот этим
но я немного не понял автора
https://github.com/rcorre/jsonizer/pull/25
обсудили момент, он вроде согласен, но не принимает pullrequest
а этот функционал нужен в некоторых ситуациях

Eto
13.06.2016
17:50:42

Oleg
13.06.2016
17:50:42
может кто подскажет библиотечку, где это сделанно уже?
@sigod но это же просто std.json на другой лад

Google

Oleg
13.06.2016
17:51:32
я чуточку про другое
https://github.com/rcorre/jsonizer/blob/master/README.md#jsonize-and-jsonizeme

Eto
13.06.2016
17:53:15
Вообще, я имел ввиду, что используется код доступный в vibe.d
А вот именно такое в проекте не требовалось.

Oleg
13.06.2016
17:54:29
отвечал он достаточно оперативно

Eto
13.06.2016
17:55:05
Тогда пингани его.
Вообще, он не получает оповещения о новых коммитах в PR.

Pavel
13.06.2016
17:55:25
Он ждет еще подтверждений что ПР ок
Если написать парочку ? то он смержит думаю =)

Oleg
13.06.2016
17:58:06
ну ладно

Dmitry
14.06.2016
07:59:21
@deviator я перечитал все что ты писал еще раз. А шаблоны и лямбды это же немного разные понятия. Получается я в шаблон лямбду передаю через map! тот же

Eto
14.06.2016
08:24:06
`map` — это шаблонная функция. Т.е. шаблон, по сути.

Dmitry
14.06.2016
08:25:38
Шаблоны обычно нужны для всеядности? Чтобы аргументы разного типа можно было передавать?

Eto
14.06.2016
08:35:57
Вроде того. Шаблоны принимают аргументы времени компиляции.

Dmitry
14.06.2016
10:02:19
а о чем может быть ошибка: "Writing past end of output stream."
Судя по всему ошибка где-то тут, только никак не могу понять в чем она:
Походу оно с исключением даже падает http://img.ctrlv.in/img/16/06/14/575fd92fb459e.png

Eto
14.06.2016
10:55:50
Похоже, что ты дважды writeJsonBody вызываешь.

Dmitry
14.06.2016
10:57:03
а может причиной быть не вызыванный где то response?

Eto
14.06.2016
10:58:47
Если он невызванный, то почему кидает ошибку, что output stream уже закрыт?

Google

Eto
14.06.2016
10:58:56
Удали лишний writeJsonBody.

Dmitry
14.06.2016
11:01:38
так, ошибка вроде ушла. Осталось разобраться с тем, почему он после рефреша страницы юзера как админа перелогинивает. Ну это я уже сам постараюсь.
Но по идее при выходе же я правильно сессию пользователя сбрасываю?
просто мне непонятно почему рефреш страницы тогда админскую сессию возвращает у юзера, если до юзера был залогинен админ
м... кажется понял в чем причина. У меня структура отвечающая за сессию глобально объявлена
А если у меня набор вложенных структур, могу я следующим образом до второй дотянуться?
struct AuthInfo
{
User user;
}
struct User
{
int id;
string login;
}
AuthInfo _auth;
Вот так: _auth.user.login

Eto
14.06.2016
11:22:44
Да

Oleg
14.06.2016
11:28:54
эх

Dmitry
14.06.2016
11:30:00
@deviator я просто кучу времени про те же диапазоны читал в попытке понять где их можно применять и как не говоря уже о шаблонах

Oleg
14.06.2016
11:31:28
диапазоны это ленивые массивы =)
зачастую
но не суть
скажи откуда ты берёшь информацию
где ты читаешь, что тратишь кучу времени
просто книжка от Александреску очень годная

Dmitry
14.06.2016
11:32:42
я ее много раз читал...

Oleg
14.06.2016
11:33:21
хм...

Dmitry
14.06.2016
11:33:30
только для меня это как математика... ее я вообще не понимаю) тут понимаю с огромным трудом)

Oleg
14.06.2016
11:33:56
ну не знаю

Google

Oleg
14.06.2016
11:34:03
математика сложнее в разы
там намного более сложные абстракции
вообще способность понимать математику это способность мыслить абстракциями
с программированием в этом они похожи

Dmitry
14.06.2016
11:35:28
ну вот у меня с этим косяк...

Oleg
14.06.2016
11:35:37
а к программированию нужно относиться как к составлению рецептов в повареной книге, например)
это просто последовательность действий

Dmitry
14.06.2016
11:49:12
Так. Вот допустим я ставлю сессию (пример из доки):
req.session.set("loginUser", req.form["user"]);
Как мне теперь получить то что я туда записал?
http://vibed.org/api/vibe.http.session/Session.get
Ругается что не с теми аргументами вызываю:responseBody["username"] = req.session.get("login");

Oleg
14.06.2016
11:50:14

Dmitry
14.06.2016
11:50:15
такой вариант тоже не катит:
Session.get("login");

Oleg
14.06.2016
11:50:26
ох...
Session это тип

Dmitry
14.06.2016
11:50:37
`C:\Users\bubenkov_di\AppData\Roaming\dub\packages\vibe-d-0.7.30-alpha.1\vibe-d\source\vibe\http\session.d(81,49): Error: undefined identifier 'T'
source\app.d(186,51): Error: template vibe.http.session.Session.get cannot deduce function from argument types !()(string), candidates are:
C:\Users\bubenkov_di\AppData\Roaming\dub\packages\vibe-d-0.7.30-alpha.1\vibe-d\source\vibe\http\session.d(81,11): vibe.http.session.Session.get(T)(string key, lazy T def_value = T.init)`

Oleg
14.06.2016
11:50:41
а get нет статическая функция
не*
ты должен указать тип
функция get — шаблонная
либо ты указываешь параметр по умолчанию (его тип используется), либо ты явно указываешь тип

Dmitry
14.06.2016
11:52:09
req.session.get!string("login"); ?

Oleg
14.06.2016
11:52:14
да

Google

Oleg
14.06.2016
11:52:28
либо вторым аргументом указываешь
req.session.get("login","");

Dmitry
14.06.2016
11:53:34
а что значит:
lazy T def_value = T.init

Oleg
14.06.2016
11:54:09
когда ты передаёшь параметры в функцию они вычисляются сначала, а потом передаются
lazy позволяет вычислить только при необходимости
сейчас пример скину

Dmitry
14.06.2016
11:57:03
правильно ли я понимаю, что кроме имени юзера в параметры сессии я могу еще записать админ он или нет.
Юзера я пишу вот так:
req.session.set!string("login", _auth.user.login);
Праивльно ли будет админа записать как-то так:
req.session.set!string("isAdmin", true);
?

Oleg
14.06.2016
11:57:08
import std.stdio;
int func()
{
writeln( "call func" );
return 42;
}
void foo( bool print, lazy int val )
{
writeln( "start foo" );
if( print ) writeln( val );
writeln( "end foo" );
}
void bar( bool print, int val )
{
writeln( "start bar" );
if( print ) writeln( val );
writeln( "end bar" );
}
void main()
{
foo( true, func() );
writeln();
foo( false, func() );
writeln();
bar( true, func() );
writeln();
bar( false, func() );
}
нет, не правильно
потому что ты выставляешь` bool` значение, а параметризируешь функцию string

Dmitry
14.06.2016
11:58:37
req.session.set!bool("isAdmin", true); так?

Oleg
14.06.2016
11:59:07
так, но опять же...
компилятор может сам вычислить T
req.session.set( "isAdmin", true );
второй параметр имеет тип bool, он сам вычислится
тебе нужно явно указывать его, если есть непонятки
req.session.set!float( "timeout", 2 );
потому что литерал 2 это int

Dmitry
14.06.2016
12:01:29
а.... ок понял
в ленивые вычисления пока лезть не буду. Но за пример спасибо)

Oleg
14.06.2016
12:02:57
ты запусти пример и посмотри что и когда выводится на экран