@Fsharp_chat

Страница 195 из 772
Evgeniy
05.06.2017
14:31:47
@neftedollar То, что я видел в документации, посвящено примерам MLP.

Мне кажется, что сейчас бессмысленно писать свою библиотеку для глубокого обучения. Есть серьезные фреймворки, за которыми стоят большие компании.

Но это уже оффтоп. :)

Google
Pavel
05.06.2017
14:40:18
смысл есть только ради самообразования. чтобы подбирать гиперпараметры, изменять архитектуру нейронной сети нужно понимать, как это все работает

а так да, лучше брать готовые, хорошо документированные решения, за которыми стоят серьезные компании

Roman
05.06.2017
15:59:33
О. теперь TensorFlowSharp можно ставить из nuget The easiest way to get started is to use the NuGet package for TensorFlowSharp which contains both the .NET API as well as the native libraries for 64-bit Linux, Mac and Windows using the CPU backend.

Evgeniy
05.06.2017
15:59:46
Годно!

Akhmed
05.06.2017
16:00:17
Мне тут задачку интересную подкинули опять

кому интересно предлагаю подключиться к решению

На ввод дается геном ДНК, строка например "aaaabbсaa" нужно преобразовать этот текст в другую строку типа "a4b2с1a2"

Roman
05.06.2017
16:01:10
Годно!
из минусов на винду пока только под CPU

Годно!
зато можно билдеры понаписать на F#

Evgeniy
05.06.2017
16:02:45
Я смотрю, все фанатеют по билдерам. :)

Roman
05.06.2017
16:03:16
Я смотрю, все фанатеют по билдерам. :)
ну так описание гарфа вычислений tf как раз отлично отлично должно описываться конкретным dsl

Google
Akhmed
05.06.2017
16:04:00
да - простое сжатие

я сделал и на C# и на F#

у меня на F# решение выглядит пострашнее нежели на C# ))

Vasily
05.06.2017
16:07:12
Однопроходное надо?

Akhmed
05.06.2017
16:08:12
по идее да

и на C# и на F# сделал однопроходное решение

Vasily
05.06.2017
16:08:59
Рекурсивная функция по массиву со счетчиком

Akhmed
05.06.2017
16:09:09
да, все правильно

Vasily
05.06.2017
16:09:43
И аккумулятор под результат

Akhmed
05.06.2017
16:10:14
вот на C# как то так: public static string Zip(string input) { var symbol = 'a'; var count = 0; var sb=new StringBuilder(); foreach (var c in input) { if (symbol == c) { count++; } else { if (count > 0) { sb.Append(symbol); sb.Append(count); symbol = c; count = 1; } } } if (count > 0) { sb.Append(symbol); sb.Append(count); } return sb.ToString(); }

Vasily
05.06.2017
16:13:45
Что-то вроде if ( v= hd) then recfunc hd tl acc counter+1 else recfunc hd tl acc+counter.ToString() 1

Ну и там дополнительная логика

Компа под рукой нет

Friedrich
05.06.2017
16:25:53
о, супер! авлония кросплатформенная благодаря gtk оказывется. не хватало ещё возиться с корявыми заброшенными биндингами кондовых линупсовых либ
Простите, я чуть подустал сегодня, но всё равно пару слов вставлю: Авалония кроссплатформенная не благодаря GTK, а всего лишь GTK# используется в качестве одной из реализаций одного из компонентов; это довольно минорная деталь, на самом деле. Нативный гуй — тема очень специфичная, сами понимаете, и поэтому Авалония требует от целевой платформы реализации двух основных компонентов: - оконной системы (для управления окнами и попапами, рисования хедеров окон, запуска/завершения и пр.) - системы рендеринга (понятно для чего) Реализации оконной системы пока есть на Win32, GTK3, GTK# (хз чем различаются, не спрашивайте), ну и под мобилки что-то. Это буквально три функции по управлению окнами, а не какая-то там глубинная межплатформенная завязка на GTK. Реализации рендера пока что есть на Direct2D, Skia и Cairo (которая, кажется, планируется к выпиливанию в пользу Skia), ну и ещё какая-то экспериментальщина на фреймбуфере и JS Canvas (!). Я в коде разбирался и делал небольшие примеры на Авалонии и могу сказать, что в целом наличием такого фреймворка я очень доволен, и то, что сделано (а сделано с одной стороны много, а с другой пока ещё очень мало) и с архитектурной, и с практической точки зрения, прямо сильно-сильно радует. Я считаю, что когда опенсорсные товарищи конкурируют с мастодонтами типа WPF и преуспевают в этом, мы, как опенсорс-сообщество, должны это приветствовать всеми силами.

Evgeniy
05.06.2017
16:33:45
@fvnever Обещают скоро запилить нативный OSX бэкенд.

Friedrich
05.06.2017
16:34:14
Для рендера или для оконной системы? Я что-то слышал, но пропустил, бэкенд чего именно :)

(колупнул быстренько в коде — GTK3 это нативный бэкенд на интеропе, а GTK# управляемый)

Evgeniy
05.06.2017
16:35:58
Для окон.

Что избавит от GTK зависимости.

Aleksander
05.06.2017
16:38:31
Google
Aleksander
05.06.2017
16:42:07
let s = "aaaabbсaa" let rec rle xs = match xs with | [] -> [] | head::tail -> match rle(tail) with | (acc,head')::tail' when head = head' -> (acc + 1, head') :: tail' | tail' -> (1,head) ::tail' let pairs = s |> Seq.toList |> rle let s' = new string [| for (cnt,ch) in pairs do yield ch yield! cnt.ToString()|] printfn "%A" s printfn "%A" s'

Akhmed
05.06.2017
16:44:38
у меня вот такое решение open System let tostring (txt:string) (s:char) (c:int) = txt+string s+string c let zip input= let rec fold count symbol output arr= match arr with | hd :: tl when hd=symbol -> fold (count+1) hd output tl | hd :: tl when hd<>symbol && count=0 -> fold 1 hd output tl | hd :: tl when hd<>symbol -> fold 1 hd (tostring output symbol count) tl | [] when count > 0 -> tostring output symbol count | _ -> output input |> Seq.toList |> fold 0 ' ' "" |> string "aaaabbbbbcccddd" |> zip |> printf "%A"

https://dotnetfiddle.net/nqOLNw

Nikolay
05.06.2017
16:51:44
Простите, я чуть подустал сегодня, но всё равно пару слов вставлю: Авалония кроссплатформенная не благодаря GTK, а всего лишь GTK# используется в качестве одной из реализаций одного из компонентов; это довольно минорная деталь, на самом деле. Нативный гуй — тема очень специфичная, сами понимаете, и поэтому Авалония требует от целевой платформы реализации двух основных компонентов: - оконной системы (для управления окнами и попапами, рисования хедеров окон, запуска/завершения и пр.) - системы рендеринга (понятно для чего) Реализации оконной системы пока есть на Win32, GTK3, GTK# (хз чем различаются, не спрашивайте), ну и под мобилки что-то. Это буквально три функции по управлению окнами, а не какая-то там глубинная межплатформенная завязка на GTK. Реализации рендера пока что есть на Direct2D, Skia и Cairo (которая, кажется, планируется к выпиливанию в пользу Skia), ну и ещё какая-то экспериментальщина на фреймбуфере и JS Canvas (!). Я в коде разбирался и делал небольшие примеры на Авалонии и могу сказать, что в целом наличием такого фреймворка я очень доволен, и то, что сделано (а сделано с одной стороны много, а с другой пока ещё очень мало) и с архитектурной, и с практической точки зрения, прямо сильно-сильно радует. Я считаю, что когда опенсорсные товарищи конкурируют с мастодонтами типа WPF и преуспевают в этом, мы, как опенсорс-сообщество, должны это приветствовать всеми силами.
Поэтому нужно тайп провайдер пилить)

Friedrich
05.06.2017
16:53:07
Я уже пойду щас спать, но вот вам идейка: а что, если не тайп-провайдер? Мы же можем генерить билдеры с помощью Fody или чего-нибудь навроде того, а?

Friedrich
05.06.2017
16:54:19
А ты их тоже в Fody оборачивай!

Nikolay
05.06.2017
16:54:34
А пардон, это что такое? :3

Типа T4?

Friedrich
05.06.2017
16:54:44
Это такой кодеген специальный

Типа T4?
Цели схожие, но механизм реализации совсем другой.

Nikolay
05.06.2017
16:55:16
А код когда генерируется?

На этапе компиляции?

Friedrich
05.06.2017
16:55:45
Там msbuild target отдельный. Типа, компиляешь обычный код, а потом постпроцессишь на fody

Но можно и вообще как-нибудь выпендриться и через Mono.Cecil всё нагенерить.

Надо подумать об этом, дело интересное. Не припомню, чтобы кто-нибудь генерировал F#-подобный код на Mono.Cecil. А там своя специфика (всё нужно обмазывать специальными атрибутами и пр.)

Pawel
05.06.2017
17:08:50
Простите, я чуть подустал сегодня, но всё равно пару слов вставлю: Авалония кроссплатформенная не благодаря GTK, а всего лишь GTK# используется в качестве одной из реализаций одного из компонентов; это довольно минорная деталь, на самом деле. Нативный гуй — тема очень специфичная, сами понимаете, и поэтому Авалония требует от целевой платформы реализации двух основных компонентов: - оконной системы (для управления окнами и попапами, рисования хедеров окон, запуска/завершения и пр.) - системы рендеринга (понятно для чего) Реализации оконной системы пока есть на Win32, GTK3, GTK# (хз чем различаются, не спрашивайте), ну и под мобилки что-то. Это буквально три функции по управлению окнами, а не какая-то там глубинная межплатформенная завязка на GTK. Реализации рендера пока что есть на Direct2D, Skia и Cairo (которая, кажется, планируется к выпиливанию в пользу Skia), ну и ещё какая-то экспериментальщина на фреймбуфере и JS Canvas (!). Я в коде разбирался и делал небольшие примеры на Авалонии и могу сказать, что в целом наличием такого фреймворка я очень доволен, и то, что сделано (а сделано с одной стороны много, а с другой пока ещё очень мало) и с архитектурной, и с практической точки зрения, прямо сильно-сильно радует. Я считаю, что когда опенсорсные товарищи конкурируют с мастодонтами типа WPF и преуспевают в этом, мы, как опенсорс-сообщество, должны это приветствовать всеми силами.
интересный пост!

Roman
05.06.2017
17:14:59
вот на C# как то так: public static string Zip(string input) { var symbol = 'a'; var count = 0; var sb=new StringBuilder(); foreach (var c in input) { if (symbol == c) { count++; } else { if (count > 0) { sb.Append(symbol); sb.Append(count); symbol = c; count = 1; } } } if (count > 0) { sb.Append(symbol); sb.Append(count); } return sb.ToString(); }
open System.Text type DNA = { Top : char * int DNA : StringBuilder } with override this.ToString() = this.DNA.Append(sprintf "%c%i" (fst this.Top) (snd this.Top)).ToString() static member Create s = { Top = s; DNA = StringBuilder() } let collect (st:string) = let add l c = match l with |{ Top = (ch,i) ; DNA = sb } as dna when ch = c -> { dna with Top = (c, i+1) } |{Top = (ch,i) ; DNA = sb } as dna -> { Top = (c,1); DNA = dna.DNA.Append( sprintf "%c%i" (fst dna.Top) (snd dna.Top) ) } let arr = st.ToCharArray() let acc = arr.[1..] |> Array.fold (add) (DNA.Create (arr.[0],1)) acc.ToString() ооп кароче) зато за один проход

Akhmed
05.06.2017
17:16:30
на F# тоже получилось решение с одним проходом. Но с рекурсией

Google
Nikolay
05.06.2017
17:54:15
Почему при использовании for получается один тип, а при Seq - другой?

JObject for - KeyValuePair<string, JToken> Jobject Seq - JToken

Roman
05.06.2017
18:03:04
дай больше кода

Nikolay
05.06.2017
18:03:50




Так норм?)

Evgeniy
05.06.2017
18:08:59
@Dolfik Не норм. Контекста нет, скопировать, чтобы проверить, нельзя.

Видимо, Seq иначе интерпретирует твой словарь.

Nikolay
05.06.2017
18:16:39
Вот пример с Newtonsoft.Json: let jObject = JObject() for k in jObject do printf "%s" k.Key // ok jObject |> Seq.iter (fun f -> printf "%s" f.Key) // ne ok

Roman
05.06.2017
18:18:11
тут очевидно вызывается GetEnumerator

Nikolay
05.06.2017
18:18:37
Roman
05.06.2017
18:19:53
тут хз. Возможно тоже вызывается GetEnumerator а потом по нему проходится через индексатор.

https://github.com/JamesNK/Newtonsoft.Json/blob/8956d3ca9cba20a85c0a61874f92b2c20dfc21f4/Src/Newtonsoft.Json/Linq/JObject.cs и https://github.com/JamesNK/Newtonsoft.Json/blob/b8e60c773bfbd765b9131694a01569e067b37d99/Src/Newtonsoft.Json/Linq/JObject.Async.cs других файлов с JObject нет

Aleksander
05.06.2017
18:33:19
JObject просто реализует IEnumerable несколько раз

от IDictionary<string,JToken> ему досталось IEnumerable<KeyValuePair<..,..>>

Roman
05.06.2017
18:35:40
от IDictionary<string,JToken> ему досталось IEnumerable<KeyValuePair<..,..>>
https://github.com/JamesNK/Newtonsoft.Json/blob/8956d3ca9cba20a85c0a61874f92b2c20dfc21f4/Src/Newtonsoft.Json/Linq/JObject.cs#L690

JObject просто реализует IEnumerable несколько раз
да, JContainer наследуется от IList<Jtoken>

Aleksander
05.06.2017
18:41:18
и судя по всему, выбор реализации IEnumerable в for и seq реализован по-разному

Pawel
05.06.2017
18:41:28
Простите, я чуть подустал сегодня, но всё равно пару слов вставлю: Авалония кроссплатформенная не благодаря GTK, а всего лишь GTK# используется в качестве одной из реализаций одного из компонентов; это довольно минорная деталь, на самом деле. Нативный гуй — тема очень специфичная, сами понимаете, и поэтому Авалония требует от целевой платформы реализации двух основных компонентов: - оконной системы (для управления окнами и попапами, рисования хедеров окон, запуска/завершения и пр.) - системы рендеринга (понятно для чего) Реализации оконной системы пока есть на Win32, GTK3, GTK# (хз чем различаются, не спрашивайте), ну и под мобилки что-то. Это буквально три функции по управлению окнами, а не какая-то там глубинная межплатформенная завязка на GTK. Реализации рендера пока что есть на Direct2D, Skia и Cairo (которая, кажется, планируется к выпиливанию в пользу Skia), ну и ещё какая-то экспериментальщина на фреймбуфере и JS Canvas (!). Я в коде разбирался и делал небольшие примеры на Авалонии и могу сказать, что в целом наличием такого фреймворка я очень доволен, и то, что сделано (а сделано с одной стороны много, а с другой пока ещё очень мало) и с архитектурной, и с практической точки зрения, прямо сильно-сильно радует. Я считаю, что когда опенсорсные товарищи конкурируют с мастодонтами типа WPF и преуспевают в этом, мы, как опенсорс-сообщество, должны это приветствовать всеми силами.
нее, gtk - это именно что библиотека (плохая) контролов для GNU-сных линупсоидов (страшны как черт), а не оконная система, как XWindow и win32. Уважающему себя (условно) кросплатформенному гую (qt, xwidgets, javafx, swt, electron и т.п) потребность в gtk примерно как C++сная stl для донетчика. При этом Gtk, на минуточку, сам есть кросплатформенный гуй-фреймворк, правда годится разве что для легаси или чтобы накидать что-то по-быстрому для нетребовательной аудитории клерков. По этому для меня сам факт наличия ГТК в зависимостях - это диагноз. Ещё очень любопытно в чём именно плюсы архитектуры Авалонии, где Авалония конкурирует с WPF (который микры убили, но не закопали, ибо легаси) и где преуспевает, вот это всё. Ну и в качестве сабжевого конструктива, если уж опенсорц-комьюнити net/F# и следует что-то приветствовать, так это ImGui.NET. Вот он - прерасен во всём, кастомеры рыдают от щастья. А Авлония, положа руку на сердце, ничего иновационного, кроме богомерзкого ХАМЛа, который в F# нафиг не нужен, не предложила пока что.

Google
Roman
05.06.2017
18:45:03
нее, gtk - это именно что библиотека (плохая) контролов для GNU-сных линупсоидов (страшны как черт), а не оконная система, как XWindow и win32. Уважающему себя (условно) кросплатформенному гую (qt, xwidgets, javafx, swt, electron и т.п) потребность в gtk примерно как C++сная stl для донетчика. При этом Gtk, на минуточку, сам есть кросплатформенный гуй-фреймворк, правда годится разве что для легаси или чтобы накидать что-то по-быстрому для нетребовательной аудитории клерков. По этому для меня сам факт наличия ГТК в зависимостях - это диагноз. Ещё очень любопытно в чём именно плюсы архитектуры Авалонии, где Авалония конкурирует с WPF (который микры убили, но не закопали, ибо легаси) и где преуспевает, вот это всё. Ну и в качестве сабжевого конструктива, если уж опенсорц-комьюнити net/F# и следует что-то приветствовать, так это ImGui.NET. Вот он - прерасен во всём, кастомеры рыдают от щастья. А Авлония, положа руку на сердце, ничего иновационного, кроме богомерзкого ХАМЛа, который в F# нафиг не нужен, не предложила пока что.
public unsafe SampleWindow() long* ptr = (long*)_textInputBuffer.ToPointer(); Это сэмпл. Она мб и прекрасна, но очевидно сыра. https://github.com/mellinoe/ImGui.NET/blob/master/src/ImGui.NET.SampleProgram/SampleWindow.cs

Pawel
05.06.2017
18:56:39
там если что не хелуворд

WF будут содержать большее бойлерплейта

Roman
05.06.2017
18:58:22
[url=https://ibb.co/hCW50v][img]https://preview.ibb.co/iNyk0v/image.png[/img][/url]
Да, я видел что может та сишная либа. Но враппер все еще сырой. т.к. в гуях использовать unsafe код это прям показатель. Для перфоманса, я бы еще понял, но это же гуй!

Pawel
05.06.2017
18:58:49
WPF ни фига не будет ни проще, ни даже заметно короче)

Roman
05.06.2017
18:59:31
В любом случае, если начнешь писать обертку для ImGui.NET на F# то будет круто!)

Pawel
05.06.2017
18:59:45
ну так F# для того и нужен, чтобы писать простые обёртки net для сложного не безопасного кода

я покачто юзаю как есть

есть какие-то хелперы, утилитки

Evgeniy
05.06.2017
19:02:47
@ruzzke_mir Так Avalonia не использует контролы из GTK.

Pawel
05.06.2017
19:05:23
@gsomix ну так г-н по ссылке инклудил её тогда для чего?

Evgeniy
05.06.2017
19:05:35
@ruzzke_mir Для окошек.

Pawel
05.06.2017
19:19:45
@gsomix я тебе верю. но они могут и передумать а ты можешь не знать каких нибудь деталей использования ГТК в Авалонии. Так что пусть парни осваивают нативные окна под XWindow тогда и будет базар за них @neftedollar не хелувордный (как это принято ), а раскрывающий абилки библиотеки чуть ли не на 90%. Естественно он будет объёмный по коду.

Evgeniy
05.06.2017
19:22:05
@ruzzke_mir Avalonia использует Win32 или GTK для окошек. Могу показать документацию по архитектуре. Более того, для OSX делают нативный бэкенд для окошек, чтобы GTK не тащить.

Nikolay
05.06.2017
19:23:24
Странно. for внутри seq { } тоже возвращает JToken вместо KeyValuePair

Pawel
05.06.2017
19:27:43
@neftedollar а кто сказал что перформанс не имеет значение для гуя? меня лично как-то напрягают тормозные WPF приложения, может я какой-то не правильный) но гораздо приятнее когда fps большой. Вот телеграм-клиент например у меня 15 МБ (qt, unsafe) мозга. А хелуворд на WPF, safe почему то 100 МБ. Че та я за unsafe

Evgeniy
05.06.2017
19:28:23
@neftedollar @ruzzke_mir Давайте завязывать с UI оффтопом.

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