@Fsharp_chat

Страница 114 из 772
Dmitry
11.05.2017
10:19:10
и сразу держи структуру типа модифицированого словаря, трекая имеющиеся границы

да-да

Arseniy
11.05.2017
10:28:31
Шаг два - из тех, кто остался, вычленить неполные дубликаты(совпадающие по верхней или нижней границе)
type Item = { upperBound : int; lowerBound : int; name : string } let items : Item list = [] let dublicates groupKey items = items |> Seq.groupBy groupKey |> Seq.filter (fun (key, xs) -> Seq.length xs > 1) |> Seq.collect snd let uppderBoundDublicates = dublicates (fun x -> x.upperBound) items let lowerBoundDublicates = dublicates (fun x -> x.lowerBound) items let emptyNames = items |> Seq.filter (fun x -> String.IsNullOrEmpty(x.name)) let anomalies = Seq.concat [ uppderBoundDublicates; lowerBoundDublicates; emptyNames] |> Set.ofSeq

Шаг два - из тех, кто остался, вычленить неполные дубликаты(совпадающие по верхней или нижней границе)
ну то есть надо получить несколько разных множеств по критериями, при этом у критериев есть приоритет. и элемент может быть только в одном множестве, даже если он соответствует нескольким, так?

Google
Vasily
11.05.2017
13:09:20
Я поразмышляю, как это правильно сформулировать

Вчерашний тоже канает

По идее

Arseniy
11.05.2017
13:32:30
ну мне кароче не ясна семантика, если мы выделили дубликаты по обоим границам. то дубликаты по одной границе надо искать только среди оставшихся или, если одна граница совпадает с чем-нибуть из уже выделенных элементов, это считается или нет.

Vasily
11.05.2017
13:32:47
Только среди оставшихся

Arseniy
11.05.2017
13:38:09
ну то есть для { upperBound = 5; lowerBound= 0; name = "a" }; { upperBound = 5; lowerBound= 2; name = "b" }; { upperBound = 5; lowerBound= 0; name = null }; { upperBound = 2; lowerBound= 0; name = "c" }; { upperBound = 9; lowerBound= 1; name = "" }; будет группа дубликатов по двум границам { upperBound = 5; lowerBound= 0; name = "a" }; { upperBound = 5; lowerBound= 0; name = null }; и группа с пустыми именем { upperBound = 9; lowerBound= 1; name = "" }; больше никаких аномалий?

Vasily
11.05.2017
13:38:33
Похоже на то

Dmitry
11.05.2017
13:39:39
такой вопрос - есть SqlDataReader, полученный из sqlCommand.ExecuteReader() из него читают (в C#) как-то так result = new ... while (reader.Read()) { var row = new Row(reader[0], reader[1], reader[2]); result = result.Add(row); } А как это идеоматиески в F# преобразовать?

Pig
11.05.2017
13:40:47
Сначала unfold, потом fold

Roman
11.05.2017
13:41:19
к F# относится только формой, но все же,такой вопрос: задано рекурентное соотношение: let rec F (n:uint) = match n with |0 -> 1 | 1 -> 2 | n -> 3 * F (n -1) - 2 * F (n-2) задачей было привести это в явный вид т.е. let F n = // тут что-то не рекурсивное решалась задача через понимание того, что F n задает линейное пространство, что действительно так: let isTrue k n= (k * F n) = k * 3 * F (n-1) - k * 2 * F (n-2) где k > 1 и let isTrueAgain = F n + F n = 3 * F (n -1) - 2 * F (n-2) + 3 * F (n -1) - 2 * F (n-2) и т.д. Дальше надо найти базисные вектора данного линенеого пространства и умножить на эти базисные вектора константы, которые тоже нужно найти, задача решаемая, но я тут вычитал, что базисными векторами будут являться геометрические прогрессии. Сам вопрос: где можно найти доказательство того, что вид базисных векторов линейного пространства рекурентных соотношений, будет геометрической прогрессией?

Arseniy
11.05.2017
13:44:59
типо такого let lazyRows = seq { while(reader.Read()) do yield Row(reader[0], reader[1], reader[2]); } let rows = List.ofSeq lazyRows

Google
Pig
11.05.2017
13:53:12
let read (r: Reader) = if r.Read () then Some (Row (r.[0], r.[1], r.[2]), r) else None let add (acc: ...) (row: Row) = acc.Add row let foo = Seq.unfold read >> Seq.fold add (new ...)

Evgeniy
11.05.2017
14:03:59
@neftedollar Я не знаком с теорией. Но вот тут, кажется, есть то, что тебя интересует. http://www.machinelearning.ru/wiki/images/6/6f/C%26LM-DA_5-RS.pdf

Evgeniy
11.05.2017
14:14:49
Я тут осознал, что уже давно никакую математику не ботал.

Нехорошо!

Vasily
11.05.2017
14:15:22
Мне больше приходится ботать не математику

А всякую практическую хрень из серии "почему медленно работает"

Roman
11.05.2017
14:17:00
Evgeniy
11.05.2017
14:17:14
Vasily А это тоже интересно. :)

Vasily
11.05.2017
14:26:43
Vasily А это тоже интересно. :)
Ну в целом да. Вот сейчас, например, думаю, как сделать вставку в базу через NHibernate порядка 500к записей, чтобы оно не отрабатывало 20 минут

Кровавый, мать его, энтерпрайз

То же решение на f#

Alexander
11.05.2017
14:29:51
TVP?

Vasily
11.05.2017
14:30:43
Не, там скорее bulk insert

Friedrich
11.05.2017
14:31:25
Чуваки, вот на этом канале опубликовали кучку докладов про F#!

https://www.youtube.com/channel/UCTdw38Cw6jcm0atBPA39a0Q

Vasily
11.05.2017
14:31:32
То же решение на f# и балк инсертах отрабатывает секунд 10

Google
Nikolay
11.05.2017
14:31:54
Кстати, чем NHibernate лучше EF?

Vasily
11.05.2017
14:32:01
НИЧЕМ

Nikolay
11.05.2017
14:32:14
А зачем тогда его используют?)

Vasily
11.05.2017
14:32:25
Тех, кто его пропагандирует, я лично готов уебать чем-нить тяжелым

Nikolay
11.05.2017
14:32:33
Или это джависты, которые услышали знакомое слово?

Vasily
11.05.2017
14:32:37
Используют в силу инерции

Ну и знакомое слово

Я бы не использовал

Без явной нужды в материализации классов

Nikolay
11.05.2017
14:33:49
Мне чёт хорошо зашёл SQL + Dapper + Slapper

Alexander
11.05.2017
14:36:18
Не, там скорее bulk insert
а там разницы в перформансе почти нет, но TVP сильно удобней в использовании

Akhmed
11.05.2017
14:36:21
а в Dapper надо было работать с SQL запросами вроде? Или можно без этого?

Alexander
11.05.2017
14:36:31
но если это одноразовая операция то и балк инсерт пойдет

Most
11.05.2017
14:37:58
да, даппер хорош

в проде живёт себе и никакой боли)

Evgeniy
11.05.2017
14:38:18
@fvnever Есть что интересное?

Friedrich
11.05.2017
14:38:44
Я дотуда ещё не скоро досмотрю, очередь накопилась. Когда посмотрю — ещё раз вброшу :)

Akhmed
11.05.2017
14:39:46
Может я не прав но даппер это упрощенный ADO.NET ? Если не так уж и много сущностей то еще можно со всем этим добром жить. Но если в проекте несколько сотен сущностей то Dapper по идее будет нехило так напрягать.

Это по сути как руками прописывать сериализацию десериализацию, но в БД

Google
Most
11.05.2017
14:41:55
EF в каком-то смысле тогда тоже "упрощенный ado.net)

Akhmed
11.05.2017
14:42:14
но тот же Code First позволяет не заниматься сериализацией данных )

Friedrich
11.05.2017
14:43:37
У EF очень много особенностей, которые мешают эффективно реализовать некоторые виды запросов.

Nikolay
11.05.2017
14:43:40
Это по сути как руками прописывать сериализацию десериализацию, но в БД
Ну там проще сериализация/десериализация делается чем в адо)

Friedrich
11.05.2017
14:43:54
Я вот не далее чем сегодня сравнивал два RowVersion в базе. И, знаете, чуть ажно не офигел.

Вообще через какой-то black duck magic их приходится сравнивать.

Akhmed
11.05.2017
14:44:55
насчет Dapper не скажу - чего не знаю - того не знаю. Но вот уже даже банки есть которые переписывают хранимки на C# с EF

понятно что это не везде возможно и что это добавляет тормозов

Friedrich
11.05.2017
14:45:05
(а ещё сегодня у меня команда полдня потратила на то, чтобы бесконечно мержить EDMX, но это другая история)

Admin
ERROR: S client not available

Akhmed
11.05.2017
14:45:18
но банкам важнее целостность данных нежели скорость выполнения запроса

Nikolay
11.05.2017
14:45:20
Изи

Резолвишь своей версией edmx

А потом обновляешь ручками)

Friedrich
11.05.2017
14:45:58
Это не всегда работает.

Nikolay
11.05.2017
14:46:11
А когда не работает?

Friedrich
11.05.2017
14:46:24
Всякие кастомизации EDMX при этом теряются.

Например, кто-нибудь мог переименовать навигационные поля в модели.

И иногда это нужно!

Google
Nikolay
11.05.2017
14:46:56
Я половину дня трахаюсь с "Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values."

:D

Friedrich
11.05.2017
14:47:18
Представь, что у нас у сущности A есть две ссылки на сущность B: class A { B Left {get;set;} B Right {get;set;}

Nikolay
11.05.2017
14:47:27
И иногда это нужно!
Но вот с этим аккуратно нужно быть, но реально зачастую проще руками поправить, чем мержить едмх

Friedrich
11.05.2017
14:48:09
EDMX по умолчанию при генерёжке обзывает соответствующие коллекции в классе B как As1 и As2.

Ты начинаешь с этим бороться, даёшь им нормальные имена, а потом архаровец стирает EDMX и пересоздаёт.

Nikolay
11.05.2017
14:48:50
:D

Friedrich
11.05.2017
14:48:53
Ой, ладно, простите, это здесь оффтоп.

Я завязываю.

Но, во всяком случае, у меня уже роптания в команде поднимаются — мол, в печку это всё, следующий проект делаем на F# :)

Friedrich
11.05.2017
14:50:35
(я не вижу, какие конкретные преимущества даст F# при реализации данного вида проектов, но свои возражения держу при себе — пускай распаляются, это к добру)

На .Net Framework?
Вероятно. На коре у нас до сих пор внешних заказов не было.

Хотя есть проект на Mono.

Nikolay
11.05.2017
14:51:25
Вероятно. На коре у нас до сих пор внешних заказов не было.
Эхх, опять я один буду с .Net Core мучаться :(

Friedrich
11.05.2017
14:51:38
Домашние проекты-то я давно портирую на Core.

Кстати, из хороших новостей: они там в 2.0 обещали универсальные линуксовые бинарники.

Так что, наверное, теперь и в арче можно будет пробовать заводить, и в nixos. Нам с @DarkByte2016 будет чем заняться :)

Evgeniy
11.05.2017
15:15:26
@fvnever Отлично! Нужно больше мест, где на F# пишут продакшн.

Igor
11.05.2017
15:31:16
Чья поделка FSharpBot и что он могет?

Летучая
11.05.2017
15:49:05
@Dolfik

Признавайся

Страница 114 из 772