пятница, 15 мая 2015 г.

Обработка данных на F#

В нынешнее время годные программисты неустанно изучают новые технологии. Вот хорошая лекция по потоковой обработке данных на языке F#:


Если кто-то будет пробовать код, который приводится в лекции, то стоит иметь ввиду — если вы сидите за корпоративным прокси с авторизацией, то будут следующие проблемы:
  • Компилятор F#, как и все остальные .NET приложения, не умеет по умолчанию проходить авторизацию на прокси-сервере. В результате при компиляции выдаются такие ошибки:
    C:\Users\user853423\Documents\Visual Studio 2013\Projects\ConsoleApplication3\Program.fs(15,21,15,129): typecheck error FS3033: The type provider 'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders' reported an error: Error reading schema. The remote server returned an error: (407) Proxy Authentication Required.
    Чтобы это исправить, нужно найти рядом с компилятором (Fsc.exe) файл Fsc.exe.config и внести в <configuration> следующий раздел:
    <system.net>
        <defaultProxy useDefaultCredentials="true" />    
    </system.net>
    В файл App.config для вашего F# приложения нужно добавить тоже самое, т.к. это тоже .NET приложение.
  • Такая же ошибка выдается в интерактивном режиме. Исправить можно указав в коде какой прокси использовать:
    let proxy = new WebProxy("http://192.168.151.1:3128") :> IWebProxy
    proxy.Credentials <- NetworkCredential("proxy_user", "proxy_password")
    
    type dataType = ODataService<"https://api.datamarket.azure.com/bigml/CarCrashUSA2011/v1/">
    let data = dataType.GetDataContext()
    
    Также можно использовать прокси и авторизацию, которые уже указаны и использовались в IE, добавив следующий код вместо явного указания адреса прокси:
    WebRequest.DefaultWebProxy <- WebRequest.GetSystemWebProxy()
    WebRequest.DefaultWebProxy.Credentials <- CredentialCache.DefaultNetworkCredentials
    

По теме можно почитать:
  1. fsharpforfunandprofit.com
  2. Real-World Functional Programming: With Examples in F# and C# (автор небезызвестный Jon Skeet)

Комментировать в ВКонтакте