
0x9d8e
10.06.2016
11:14:05
Это зависит от того, чего ты больше хочешь. Или меньше памяти жрать (эта структура небось в одном экземпляре чаще всего будет или как?) или меньше кода писать.

Max
10.06.2016
11:15:24
Можно вообще убить двух зайцев тем же кортежом, к примеру

0x9d8e
10.06.2016
11:29:25
Наверное всётаки действительно две т.к. со временем часто оказывается, что юзеры есть разных типов (с разными полями). И чтобы не усложнять авторизацию разными типами пользователей для авторизации как раз и пойдёт отдельная структура, общая для любых юзеров.

Dmitry
11.06.2016
10:11:41
А как происходит чтение бинарного файла? Ведь чтобы прочитать файл нам нужно выделить для него блок памяти какого-то размера.
Но когда мы читаем файл мы же не выполняем операцию подсчета в явном виде. Она происходит скрыто? т.е. в начале считается размер файла, потом выделяется блок памяти, потом он считается?

Google

Oleg
11.06.2016
10:12:35
вопрос о стандартной библиотеке или о системном вызове?

Dmitry
11.06.2016
10:12:55
И так и сяк
Системный вызов это дергание API ОС?

Oleg
11.06.2016
10:13:30
да

Dmitry
11.06.2016
10:13:47
В нем как все реализовано?

Oleg
11.06.2016
10:13:54
вообще-то подсчёт идёт
для каждого открытого файла в структуре процесса хранится дескриптор

Dmitry
11.06.2016
10:14:24
а как он сделан? При обращении к файлу в начале считается его размер?

Oleg
11.06.2016
10:14:29
там есть переменная (кажется seek)
нет
просто читает
есть символ конца файла
на нём и останавливается

Google

Dmitry
11.06.2016
10:15:33
Тоесть первое чтение идет лишь для того тчj,s размер получить?
Просто мы же не можем его прочитать в память т.к. не знаем размер сколько ему нужно выделить

Oleg
11.06.2016
10:15:57
размер файла не хранится в самом файле
не...
файл целиком мы не можем просто так прочитать
нужно у файловой системы запросить его размер
он хранится отдельно
от самого файла

Dmitry
11.06.2016
10:16:36
все ФС размер хранят?

Oleg
11.06.2016
10:16:40
да
кажется да
ext, ntfs точно
и помимо размера много всякой информации

Dmitry
11.06.2016
10:17:07
Тоесть в начале мы запрашиваем у ФС размер файла? Потом выделяем в оперативной памяти такой же блок?

Oleg
11.06.2016
10:17:28
этого не делает системный вызов
системый вызов read
размер файла запрашивается отдельно
по сути не всегда даже это надо
можно читать файл блоками, пока не упрёшься в конец
и обрабатывать файл этими блоками

Google

Oleg
11.06.2016
10:18:38
такой подход единственно верный, если файл не может быть физически помещён в память
какова задача то изначально?

Dmitry
11.06.2016
10:18:57
разобраться в вопросе

Oleg
11.06.2016
10:19:50
если надо прочитать файл в оперативу целиком, то последовательность такая:
1. запрашивается размер файла
2. выделяется буфер этого размера
3. читается одним вызовом весь буфер
вот только не всегда это нужно

Dmitry
11.06.2016
10:20:31
Так это реализация API так?

Oleg
11.06.2016
10:20:39
нет
отдельно идут вызовы запроса аттрибутов файла, один из которых размер
отдельно вызов чтения
ну и отдельно вызов на выделение памяти

Dmitry
11.06.2016
10:21:33
Тоесть так работают сами библиотечные функции в том же Ди?

Oleg
11.06.2016
10:22:37
вызов readText выполняет такую последовательность

Dmitry
11.06.2016
10:24:19
Как я понимаю можно еще читать в небольшой буфер все скользящим окном?

Oleg
11.06.2016
10:24:36
да

Dmitry
11.06.2016
10:25:00
И какие плюсы\минусы данного решения?

Oleg
11.06.2016
10:28:15
такой подход единственно верный, если файл не может быть физически помещён в память
да и если ты не хочешь тратить много оперативы при обработке файла
да и быстрее в некоторых ситуациях
вот например весит у тебя файл, который нужно обработать, несколько гигов
и ты не хочешь тратить несколько гигов оперативы

Google

Dmitry
11.06.2016
10:28:45
Угу, понял. А в Ди какая функция это умеет делать?

Oleg
11.06.2016
10:29:52
ну блин
обычная, которая читает в буфер
rawRead

Pavel
11.06.2016
11:07:39
Когда ты читаешь файл и не знаешь его размера, то есть стандартный паттерн удваивания буфера
Если ты прочитал кусочек файла и уже не помещается в буфер, то выделяем под буфер в 2 раза больше места
Ну это нас так в универе учили :) В реальности там посложнее конечно алгоритм

Oleg
11.06.2016
11:19:11
а в какой ситуации ты не знаешь размер файла?
хотя, видимо, если ты его передаёшь по сети
но там можно сразу писать в файл

Dmitry
13.06.2016
12:56:25
А можно как-то в одной строке два условия проверить?
Чтобы на писать &&
if (usersFromDB.filter!(u=>u.login == login) && usersFromDB.filter!(u=>u.pass == pass))

Eto
13.06.2016
12:58:35
Этот код явно работает не так, как тебе надо.

Oleg
13.06.2016
12:58:36
чёрт, что это за код?
это же просто жесть

Dmitry
13.06.2016
12:58:50
да? Почему?

Oleg
13.06.2016
12:59:02
нельзя хранить в явном виде пароли в базе

Dmitry
13.06.2016
12:59:20
Да я понимаю, тут пока такой вариант сойдет
Ну блин..)) А как надо то?

Eto
13.06.2016
13:00:26
1. Пароли в явном виде
2. filter в if условии
3. Ищется пользователь с определённым логином. Затем ищется пользователь с определённым паролем. Это могут быть (и будут) 2 разных пользователя.

Oleg
13.06.2016
13:00:29
ну обычно берут хеш с логина и пароля

Google

Oleg
13.06.2016
13:00:48
а уже хеш хранится и сверяется

Dmitry
13.06.2016
13:00:53
Если не фильтр, то что тогда?

Oleg
13.06.2016
13:01:02
find?

Eto
13.06.2016
13:01:06
canFind
Или фильтр, и затем проверка в `if`е.

Dmitry
13.06.2016
13:01:31
В документации было так:
// Filtering items (similar to WHERE clause from SQL)
auto found = db.collection!Country("Countries").filter!(s => (s.name == "Poland" || s.name.canFind("ar")));

Oleg
13.06.2016
13:01:35
@sigod как ты форматируешь текст?)))
@DmitryBubnenkov когда тебе много людей нужно выбрать, то да, но всё равно нет

Eto
13.06.2016
13:02:47
@deviator блоки кода из Markdown поддерживаются. Только в Telegram Desktop.

Oleg
13.06.2016
13:02:57
collection.filter!f1.filter!f2
test
о, отлично) чёт не пробовал даже)

Eto
13.06.2016
13:03:43
Там очень кривое решение у Телеграм.

Dmitry
13.06.2016
13:04:07
Вообще фильтр или map нужен?

Eto
13.06.2016
13:04:08
Можно жирным выделить, но только через @bold бота.