@dlangru

Страница 14 из 719
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 бота.

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