
Oleg
13.06.2016
13:05:08
просто для меня сейчас не совсем ясно, как выбрать из коллекции с помощью map

Dmitry
13.06.2016
13:05:45
map!(u=> u.name.canFind("foo"))
как то так вроде бы

Eto
13.06.2016
13:05:48
Никак не выбрать. map для трансформации данных.

Oleg
13.06.2016
13:06:10
вот я про тоже

Google

Dmitry
13.06.2016
13:06:17
разве мой вариант работать не будет с map?

Oleg
13.06.2016
13:06:20
нет
от создаст массив из bool элементов
он*
ну не массив
а диапазон
но смысл в этом

Eto
13.06.2016
13:06:51
Короче:
auto users = usersFromDB.filter!(e => e.login == login && e.pass == pass);
if (users.length == 1) {
// users[0] — the user we were searching for
}

Oleg
13.06.2016
13:08:33
не надо так...

Eto
13.06.2016
13:08:44
Сойдёт для начала.

Oleg
13.06.2016
13:08:55
а то "сейчас сойдёт" и потом тоже "сойдёт"

Eto
13.06.2016
13:08:59
А потом можно посолить пароль. И даже поперчить.

Google

Oleg
13.06.2016
13:09:02
нужно с самого начала делать всё правильно
как минимум стараться

Eto
13.06.2016
13:09:25
Не спорю.
Хорошо. Пример кода, как правильно использовать соль в данном случае?

Oleg
13.06.2016
13:10:01
блин, я вообще веб не программирую))) просто читал)))
но буду, через месяц
так что мне это тоже понадобится

Eto
13.06.2016
13:10:30
Даже, если ты "программируешь веб", то сам пароли ты не солишь.

Pavel
13.06.2016
13:10:31
ну пасс хешируешь через bcrypt и щастье

Oleg
13.06.2016
13:10:59
а в vibe встроенного механизма нет, как я понимаю
?

Eto
13.06.2016
13:11:05
Я не знаю.

Oleg
13.06.2016
13:11:17
кстати, кто чем занимается в общем?

Eto
13.06.2016
13:11:21
Вроде что-то было.

Oleg
13.06.2016
13:11:33
ну в целом, что делаете на D?

Dmitry
13.06.2016
13:11:37
А какой смысл делать все не через if а auto users =usersFromDB.filter! ...

Oleg
13.06.2016
13:12:17
а какой смысл делать через if?

Pavel
13.06.2016
13:12:23
Я только пишу карманные поделки на несколько десятков строк )

Dmitry
13.06.2016
13:12:44
ну через if и сразу флаг какой-то ставить

Oleg
13.06.2016
13:12:45
@chebotarevp ну хоть тематика какая?

Google

Eto
13.06.2016
13:12:53

Pavel
13.06.2016
13:13:08
я backend web dev по жизни

Oleg
13.06.2016
13:13:34
@chebotarevp на D?

Eto
13.06.2016
13:13:46

Pavel
13.06.2016
13:14:36
На D пишу в основном поделки по проксированию HTTP или что-то типа этого

Oleg
13.06.2016
13:15:15
ох как я далёк от всего этого...

Pavel
13.06.2016
13:15:50
А чем ты занимаешься?

Oleg
13.06.2016
13:16:27
сам делал раньше графические свистоперделки, сейчас доделал программу для обработки изображения со спутников
радиометрическая коррекция
ну и мелочи всякие, которые помогают моей девушке в работе

Eto
13.06.2016
13:17:24
Так, если не ошибаюсь, соление пароля будет выглядеть как-то так:
if (!user.isNull && applySalt(pass, user.salt) == user.pass_hash)
Самый глупый и тупой пример applySalt: md5(pass ~ salt).
(Так же не правильно производить сравнение хешей через ==. Нужна функция сравнения с константным временем исполнения.)

Pavel
13.06.2016
13:17:34
Ну круто же) А мне вот со временем стали интересны компилируемые языки

Dmitry
13.06.2016
13:17:40
bool wrongPassword;
bool userExists;
bool userIsAdmin;
if (usersFromDB.filter!(u=>u.login == login && u.password != password))
wrongPassword = true;
...
это вообще наркомания или норм?

Eto
13.06.2016
13:18:16
А такой if вообще компилируется?

Dmitry
13.06.2016
13:18:46
@deviator а ты в какой конторе работаешь? Радиометрическая коррекция штука редкая...

Oleg
13.06.2016
13:18:47
@DmitryBubnenkov filter возвращает диапазон
собственно что ты проверяешь?
@DmitryBubnenkov служу РФ

Dmitry
13.06.2016
13:19:18
Военный?

Google

Oleg
13.06.2016
13:19:19
на заводе Зенит
срочник

Dmitry
13.06.2016
13:19:23
а...

Pavel
13.06.2016
13:19:29
Ну D себя позиционирует как язык в котором писать так же легко и удобно как в интерпретируемых языках, при этом он такой же быстрый и низкоуровненвый как c++

Dmitry
13.06.2016
13:20:10
@deviator ну я хочу проверить несколько условий. Логин есть в БД. Пароль не верен. Логин и пароль верны. Пользователь админ.

Oleg
13.06.2016
13:20:13
@chebotarevp не на столько быстрый)
лучше посмотреть как это реализовано в django или ror
@deviator ну я хочу проверить несколько условий. Логин есть в БД. Пароль не верен. Логин и пароль верны. Пользователь админ.

Max
13.06.2016
13:20:50
Если писать как на плюсах – не скажи

Eto
13.06.2016
13:21:03

Oleg
13.06.2016
13:21:22
не, посоны, не будет)
я как-то тестировал скорость
но это была пиар статья языка D =)
если по честному, то надо было запилить код С++ тоже clang'ом
но скорость сопоставима, я не спорю
сопоставима в пределах 10%
ну не суть

Eto
13.06.2016
13:23:33
Многое упирается в сами алгоритмы и кодогенерацию.
C++ уже хрен знает сколько лет этим занимается.

Oleg
13.06.2016
13:23:58
лучше всего в результате себя показал ldc2

Google

Eto
13.06.2016
13:24:02
Ага, ясно.

Oleg
13.06.2016
13:24:21
всех распостранённых
dmd (совсем плох), gdc (в 1.5 раза медленней), ldc2 почти догнал на эквивалентном коде
код на С++ компилировался g++
эквивалентный == идентичный с точностью до синтаксических аспектов

Pavel
13.06.2016
13:25:46
10% разница в скорости это прекрасно, а удобств в D на 900% больше

Oleg
13.06.2016
13:26:26
при добавлении оптимизирующих подсказок (pure, nothow) код на ldc2 чуть-чуть обогнал C++ вариант

Eto
13.06.2016
13:26:38
Вообще, меня эти сравнения с C++ мало колышат. Где сейчас C++ используется? Да почти нигде. Куда не плюнь — везде всякая ерунда вроде Java или ещё чего похуже.

Oleg
13.06.2016
13:26:40
поэтому D это мой выбор)
10% разница в скорости это прекрасно, а удобств в D на 900% больше

Eto
13.06.2016
13:27:15

Max
13.06.2016
13:27:17
Кстати, final ко всем методам не забыл? (Они в D виртуальные по дефолту)

Oleg
13.06.2016
13:27:23
сорян)
я в курсе

Pavel
13.06.2016
13:28:15

Dmitry
13.06.2016
13:28:43
Павел и чем это плохо то?

Eto
13.06.2016
13:29:02

Oleg
13.06.2016
13:29:19
@DmitryBubnenkov зачем тебе знать какой логин ввели?

Dmitry
13.06.2016
13:29:22
А что ООП уже не в моде?

Pavel
13.06.2016
13:29:38
Без всяких map/filter