@Fsharp_chat

Страница 83 из 772
Evgeniy
28.04.2017
10:35:12
Какой там самый безболезненный способ получить питон в винде?

Anaconda?

Roman
28.04.2017
10:35:20
Я тут вспомнил, что есть же волшебный CodingGame!

и там можно порешать задачки с помощью F#

Google
Roman
28.04.2017
10:36:19
Например

https://www.codingame.com/ide/puzzle/the-descent

Pavel
28.04.2017
10:38:07
дай подумать... как насчёт, чтобы СКОЧАТЬ и УСТОНОВИТЬ?

Evgeniy
28.04.2017
10:39:29
Давайте я поясню тогда.

Pavel
28.04.2017
10:39:59
Только без с вертушки в ши!

Evgeniy
28.04.2017
10:40:03
В идеале я хочу, чтобы питон жил в своем мирке и не гадил везде.

Pavel
28.04.2017
10:40:22
Ну будет у тебя папочка c:\python27\

Pavel
28.04.2017
10:41:12
Вообще, если я линуксами обмазываться собираюсь, я делаю vagrantfile и пишу vagrant up

Artemko
28.04.2017
10:41:15
поставишь через chocolatey даже PATH не тронет

Evgeniy
28.04.2017
10:41:31
А куда pip будет либы ставить? Они system-wide будут? Как менеджить версии питона и библиотек?

Artemko
28.04.2017
10:41:36
Я тут вспомнил, что есть же волшебный CodingGame!
добавляйтесь в друзяшки https://www.codingame.com/profile/7a6ff61528d7feecf19ec8b56fb158d29932511

Google
Artemko
28.04.2017
10:42:04
А куда pip будет либы ставить? Они system-wide будут? Как менеджить версии питона и библиотек?
слуш, ты хотел попробовать тензор. попробуешь и снесешь, зачем тебе pip?

и тем более менеджить версии

Roman
28.04.2017
10:42:27
Там вроде можно сделать комнату. Что очень поможет попробовать F# в действии тем кто не хочет писать либы например)

Evgeniy
28.04.2017
10:42:35
Ну, тензор ставится через pip.

Roman
28.04.2017
10:42:49
Ну, тензор ставится через pip.
только для python api же, нет?

Evgeniy
28.04.2017
10:43:10
На сайте тензора написано, что обязательно нужен питон и пип.

Отчего я и жалуюсь.

То есть, я не собираюсь использовать питон для скриптования, но установить все равно должен.

Мне не кажется, что это хорошая практика.

Roman
28.04.2017
10:44:46
добавил в Coding games комнату /join fsharp_ru

Evgeniy
28.04.2017
10:53:08
Спасибо, чуваки, но кажется, лучший способ управляться с питоном -- это conda.

Friedrich
28.04.2017
11:00:42
чем это он может гадить?
Питон гадит своими либами себе в C:\Python2\SitePackages, и у тебя будут проблемы при несовместимости установленных либ с какими-нибудь новыми пакетами, например. Хотелось бы локально для каждого проекта каталог с либами, как в NuGet.

Давайте не будем тут оффтопить, товарищи. Питон это отдельная история.

(да-да, я тоже наоффтопил, простите, больше не буду, сам виноват)

А замену для IonicZip я вам щас найду.

Я вот это юзал.

Nikolay
28.04.2017
11:05:31
Ну ок

Google
Nikolay
28.04.2017
11:05:39
Но сам понимаешь, это всё тестить надо

Friedrich
28.04.2017
11:05:44
Согласен.

Nikolay
28.04.2017
11:08:05
Кстати, как тестить библиотеки, которые завязаны на API?

Friedrich
28.04.2017
11:08:52
Я считаю, что так: - выделяешь завязанный на слой отдельно от кода, абстрагируешь интерфейсом - в остальном коде делаешь зависимость от этого интерфейса - мокаешь интерфейс для тестов

Ну, это для юнит-тестов.

Если хочешь тестировать интеграцию с API — ну, надо в нём искать опции по тестовой интеграции.

Для примера могу рассказать, как тестировал Trello-адаптер на Java. Просто завёл отдельного юзера и проект в настоящем Trello, и туда его натравливаю во время тестов.

Nikolay
28.04.2017
11:10:30
На реальном апи не уверен, что хорошая идея тестить

С одной стороны да, ты будешь уверен, что у тебя всё ок проходит

Vlad
28.04.2017
11:10:49
ну это интеграционные тесты и будут в любом случае

Friedrich
28.04.2017
11:12:01
С другой стороны, тесты у тебя будут затягиваться
И внешнему контрибьютору, который не владеет ключами доступа к тестовому сервису, будет сложно у себя выполнить тесты.

Да, это реальная проблема.

Nikolay
28.04.2017
11:12:26
Телеграму бы тестовый сервер сделать)

Friedrich
28.04.2017
11:13:00
В F# тогда не получится модули использовать
Как говаривает старина @gsomix, не нужно стремиться использовать F#-only штуки для всего. Если тебе не хватает функциональных абстракций, ты _можешь_ использовать ООП, если это уместно.

В F# тогда не получится модули использовать
А ещё, если ты грамотно архитектурируешь проект, то тебе это может и не пригодиться!

Ну, вспомни ту схемку из доклада про болл и хилл: у тебя домен-логика находится в ядре приложения, и сформирована в основном чистыми функциями. Самое важное — это протестировать их.

Nikolay
28.04.2017
11:14:32
А потом их обернуть в класс + интерфейс?

Friedrich
28.04.2017
11:14:37
А тестирование интеграций со внешними API, СУБД и пр. — это чёткие техничские задачи, для которых можно писать интеграционные тесты.

Google
Nikolay
28.04.2017
11:14:52
Я просто хз, мб это в ФП как-то по другому решается

Вот например Haskell, там же нет таких штук

Friedrich
28.04.2017
11:15:34
А потом их обернуть в класс + интерфейс?
Ты можешь делать в ООП-стиле, а можешь в стиле "dependency rejection". Внешние API будут сами просовывать данные в твоё чисто функциональное ядро, т.е. у ядра не будет зависимости от API.

Да, над такой архитектурой надо думать, и она не будет похожа на ООП. Но сделать так можно.

Серьёзно, послушай доклад Симана про Dependency Rejection, он полезный, правда-правда.

Ну или статьи почитай.

Nikolay
28.04.2017
11:16:45
Да забываю вечно)

Да и боюсь уровень не мой)

Friedrich
28.04.2017
11:17:27
А вот зря боишься. Раз начал задавать вопросы такого уровня — значит, уровень твой.

Nikolay
28.04.2017
11:17:39
Вот кстати в Go интересный подход, там неявные интерфейсы

И это было бы удобно

Friedrich
28.04.2017
11:17:50
Это не вопросы особенностей F#, а именно вопросы архитектурные. Любой, кто делает архитектуру приложений, может их понимать и осмысливать.

Nikolay
28.04.2017
11:19:44
В Go ты просто создаёшь интерфейс, и например указываешь его в аргументе функции, и при передаче какого-нибудь объекта в эту функцию, компилятор просто проверяет наличие методов, которые указаны в интерфейсе, у этого объекта

При этом не нужно типу явно указывать, что он наследует этот интерфейс

Я правда сначала плевался, но потом понял, что это удобно)

Friedrich
28.04.2017
11:21:35
У этого есть какое-то научное название, но я его забыл. Типа "номинальная типизация" чтоли?

В тайпскрипте такая же.

Akhmed
28.04.2017
11:23:09
Я правда сначала плевался, но потом понял, что это удобно)
это называется утинная типизация и это во многих языках есть

Alexander
28.04.2017
11:30:00
не, duck typing - это про динамические языки

в go это типа структурная типизация

Google
Vasily
28.04.2017
11:31:15
В целом в f# можно так же констрейнты написать

Nikolay
28.04.2017
11:31:38
В C# через dynamic :)

Friedrich
28.04.2017
11:31:51
Да, точно, это структурная, а в более привычных языках как раз "номинальная".

Evgeniy
28.04.2017
11:32:20
Vasily неудобно.

Friedrich
28.04.2017
11:32:30
Подтверждаю, неудобно. Но можно.

Писанины очень много выходит с этими статическими констрейнтами.

Я, вон, выше показывал пример, как я пытался достать ^t.MaxValue, и не смог :(

Evgeniy
28.04.2017
11:33:23
Я бы не стал использовать SRTP в реальном коде.

Friedrich
28.04.2017
11:33:30
А я использую!

Ну, самую малость.

Evgeniy
28.04.2017
11:33:41
Страшно и непонятно.

Friedrich
28.04.2017
11:33:47
А ты понятно используй!

https://github.com/ForNeVeR/Tesla.Csxcad/blob/d83753307f653751c986c799c60c81b7da0bb6f4/Tesla.Csxcad/Utils.fs#L11-L24

Или это уже даже не считается за SRTP?

У меня сначала был этот код написан с ^TEnum, но потом на SO подсказали, что крышечка там вовсе и не нужна :)

Evgeniy
28.04.2017
11:35:35
Считается. Но я именно про констрейнты, имитации тайпклассов и прочую хурму.

Friedrich
28.04.2017
11:36:12
Эта "хурма" на любом языке выглядит страшно. Вот в Scala посмотри на адептов scalaz или cats, и увидишь такое же мутное марево в коде :)

И при этом у них-то это куда получше выглядит, чем на F#.

Evgeniy
28.04.2017
11:36:52
Ну, я человек простой и глупый.

Friedrich
28.04.2017
11:37:19
Все люди такие.

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