crossframe » F# http://crossframe.iiv.jp Windows Dev. Site Tue, 07 Nov 2023 06:31:52 +0000 ja hourly 1 https://wordpress.org/?v=3.8.41 FCell / Excel ../../../201601091162/ ../../../201601091162/#comments Sat, 09 Jan 2016 14:46:40 +0000 ../../../?p=1162 .Net in Excel

http://fcell.io/

ExcelでC#やF#を使うとき、このブログでも紹介したことがありますが、VSTOなどの技術を使います。これにはVisual Studioが必要となりますが、このツールはExelだけで、プログラミングができます。まさにこんなプロダクトが欲しかった、と思っていたものです。

環境: Excel 2016 / Windows 10
インストールは、サイトよりダウンロードした、インストーラ
FCell31_32bit.msi
FCell31_64bit.msi
のどちらかを実行するだけです。

fcell01
(起動時読み込まれているところ・・)

上記サイトにとてもわかりやすいデモムービがあります。これをそのまま実行してみました。
fcell02
ユーザ定義関数を実行しているところですが、プログラムを変更すると(Buildボタン押下)セルに結果が反映されます。(リアクティブになっていること確認)
scaleArr関数は、配列数式になっているので、範囲指定した後CTRL+SHIFT+ENTERで決定する。
fcell03

とても素晴らしいです。
ライセンスが、Enterprise Licenceと、Site Licenceというものがありますが、Enterpriseは$1000とちょっと高めなのが残念です。

マイクロソフトのプロダクトで、Excel, PowerShell, F#が好きな私としては、このあたりもっと意欲的なものが出てきてほしいと思っています。こういったツールが純正品ででてくれるとうれしいのですが・・

]]>
../../../201601091162/feed/ 0
F# WPF Application ../../../201509191109/ ../../../201509191109/#comments Sat, 19 Sep 2015 13:44:49 +0000 ../../../?p=1109 F#のみで、WPFアプリケーションが開発できるということを知り、久しぶりにF#を使ってみました。

参考 : Pure F# WPF GUIアプリ開発に向けて

http://qiita.com/nida_001/items/6ea321aff7f664a0e7f3

環境 : VisualStudio 2013 / Windows 10

オンラインで検索して、F# Empty Windows App (WPF)を選択します。

F#wpf_01

ツールボックスから部品を選択します。
F#wpf_02

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ViewModels;assembly=FsEmptyWindowsApp1"
    xmlns:fsxaml="http://github.com/fsprojects/FsXaml"
    Title="MVVM and XAML Type provider" Height="264.706" Width="472.059">
    <Window.DataContext>
        <local:MainViewModel/>
    </Window.DataContext>
    <Grid Margin="0,0,2,16">
        <Button Content="Button"  Command="{Binding Path=ButtonPress}" HorizontalAlignment="Left" Margin="164,132,0,0" VerticalAlignment="Top" Width="75"/>
        <TextBox Text="{Binding Text01}" HorizontalAlignment="Left" Height="23" Margin="69,60,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <TextBox Text="{Binding Text02}" HorizontalAlignment="Left" Height="23" Margin="262,60,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
    </Grid>
</Window>

テキストボックスとボタンを関連づけます。

namespace ViewModels

open System
open System.Windows
open FSharp.ViewModule
open FSharp.ViewModule.Validation
open FsXaml

type MainView = XAML<"MainWindow.xaml", true>

type MainViewModel() as self = 
    inherit ViewModelBase() 
 
    let text01 = self.Factory.Backing(<@ self.Text01 @>, "")
    let text02 = self.Factory.Backing(<@ self.Text02 @>, "")
    member this.Text01 with get() = text01.Value and set(value) = text01.Value <- value
    member this.Text02 with get() = text02.Value and set(value) = text02.Value <- value
    member this.ButtonPress = self.Factory.CommandSync(fun () ->
        let str = text01.Value
        let len = String.length(str)
        if len = 0 then
            MessageBox.Show("Empty Value") |> ignore
        else if String.forall Char.IsDigit str then
            let x = str |> Double.Parse
            text02.Value <- (sqrt x) |> string
        else
            MessageBox.Show("Invalid Value") |> ignore
    )

関連づける部分が、馴染みがない方法なので、参考サイトがないとできませんでした。(ありがとうございます)

実行結果です。平方根を計算します。

F#wpf_03

簡単な入力チェックもしました。
F#wpf_04

なかなか使う機会がない言語は、とりかかりに時間がかかったりします。簡単な入力、出力を抑えておけば、次に必要になったとき、続きから作りやすくなるので、メモしておきたいと思います。

]]>
../../../201509191109/feed/ 0
F# Interactive / Mono ../../../20140506742/ ../../../20140506742/#comments Tue, 06 May 2014 09:44:28 +0000 http://xfra.me/?p=742 これまで.NET環境はWindowsだけでしか使ったことがありませんでしたが、はじめてMono(Linuxの.NET環境)をUbuntu上でインストールしてみました。自宅の環境の都合で、F#をLinuxで使うと、いろいろと便利に思ったからです。

もともとLinux上でPowerShellが完全に動作してくれればそれでもよかったのですが、その実装のPash (http://pash.sourceforge.net/) がちょっと古めなので、追いかけるをやめて、F# Intaractive (fsharpi, fsi.exe)環境でやりたいことを実現することにしました。
ここでは、環境についてメモっておきたいと思います。
(PowerShellはオブジェクトのパイプライン処理、Linuxのシェルはテキストのパイプライン処理ですが、JSONファイルをオブジェクトと見立たててみると面白いかも・・ということで、FSharp.Dataを利用)

環境 : Ubuntu 14.04 LST(64bit) / VirtualBox 4.3.10 / Windows 7
[Mono,FSharpのインストール]

sudo apt-get update
sudo apt-get install mono-complete
sudo apt-get install fsharp

[FSharp.Dataのインストール]

https://github.com/fsharp/FSharp.Data

ここにあるソースでビルドを試みましたが、build.sh実行時に失敗。
fsharpi build.fsx のfsharpiを違うバージョンで試すとビルドを始めましたが、途中でエラー。
NuGetでインストールする方法に変更。

参考) http://monomvc.wordpress.com/2012/03/06/nuget-on-mono/

http://nuget.codeplex.com から NuGet.exeをダウンロード(なんと単一ファイル)
/optに配置して実行

mozroots –import –sync
mono NuGet.exe install FSharp.Data

以下サンプルプログラム

Ubuntu_fsx
参考)http://fsharp.github.io/FSharp.Data/library/JsonProvider.html

コンパイルなしに利用できます。このあたりダイナミック言語ライクに使えるところがいいです。
ちょっと処理速度は遅いですが。。

]]>
../../../20140506742/feed/ 0
Haskell / Windows ../../../20130830402/ ../../../20130830402/#comments Fri, 30 Aug 2013 14:44:42 +0000 http://xfra.me/?p=402 Haskellは以前勉強しましたが、使うことがないこともあってまったく身に付きませんでした。関数型言語はF#を学習中ですが、いろいろと勉強しているとHaskellに関するサンプルや情報が多いことを感じ、すぐテストできる環境を用意しておいた方がいいと思い、セットアップしてみました。

http://neue.cc/2010/01/04_233.html

このサイトをみると、IDEにはLeksahがよさそうだ、ということでインストールしてみました。
Leksahの前に、Haskell Platformをインストールする必要があります。
HaskellコンパイラGHCのバージョンは、7.6.3ですが、leksah-0.12.0.3-ghc-7.4.1.exe(これが最新なので)を使いました。

Leksahを起動後、Package->Newから、Create Folderでフォルダを作りますが、これがイコールプロジェクト名となります。フォルダを作成してOpenすると、Package設定がでてくるので、Executablesを選択して、ExecutableNameをクリックしてSaveします。
Lekp

デフォルトで以下のような、”Hello World”を表示するだけのサンプルコードが生成されるので、これを
- Configures the package
- Builds the package
- Runs the package
と順に、ツールバーから実行します。するとLog Windowに”Hello World”が表示されます。
hcode

これでとりあえず動作確認をしておいて、目的のプログラムを動かしてみます。
ファイルコンバータ的なものをつくることが多くなりそうなので、大文字変換するものを試してみました。
Lek0s
あとエディタの面白い機能として、カスタム文字への変換があります。
Configuration->To Candyチェックボックスで、以下の表示切替をできます。

Lek1s

Lek2s

こういうのマニア心をくすぐりますね。ソースは、O’REILLYの”Real World Haskell”から引用しました。
欲を言えば、neueccさんのサイトにあるVisual Haskellのようなものが使えれば、とも期待もしたのですが(VisualStudioで他の言語とリンクできたりできるなどなど)、無理っほいのでここまでとなりました。

]]>
../../../20130830402/feed/ 0
.NET Webフレームワーク Nancy をC#とF#で ../../../20130621304/ ../../../20130621304/#comments Thu, 20 Jun 2013 15:04:51 +0000 http://xfra.me/?p=304 .NET 用の軽量Webフレームワーク Nancy をC#とF#でテストしてみました。

以下記事参照
http://shiba-yan.hatenablog.jp/entry/20130509/1368107112「Sinatra ライクな .NET 用軽量 Web フレームワーク「Nancy」を使ってみた 」

SinatraはJRuby/GoogleAppEngineで遊んだことがありますが、とてもシンプルで気にいっていました。.NETフレームワークにもこのようなものが欲しいと思っていたので、この記事をみつけてすぐにいろいろと試そうと思ったのですが、F#でASP.NETを使って何かをつくろうとしていたので、後回しにしていました。しかしASP.NETとF#って、VS2012の環境でまだ環境が十分でないためか、なかなか思った形のものができませんでした。(セルフホストのものはいろいろあるのですが・・)
そのときタイミングよくNancyでF#を使える以下の記事も見つけたので、C#とF#両方あわせて動くものを作ってみました。

http://qiita.com/yohfee/items/1e5908cd720706805c94「F#でNancyをASP.NETでホストする 」

環境 : VisualStudio 2012 / Windows 8
プロジェクト : C# ASP.NET 空のWebアプリケーション に 追加Webフォーム
追加プロジェクト : F#ライブラリ
Library1.fs

namespace Library1
open Nancy
type FsTest() =
    inherit NancyModule()
    do
        base.Get.["/fs"] <- fun _ -> box "Hello Nancy F#"

Nugetで、Nancy追加

WebForm1.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace csAspEmptyWebFsNancy
{
    public class CsTest : Nancy.NancyModule
    {
        public CsTest()
        {
            Get["/cs"] = _ => "Hello Nancy C#";
        }
    }
}

NuGetでNancy,Nancy.Hosting.Aspnet追加

ブラウザで、/cs, /fs とアクセスするとそれぞれの文字列が表示されます。
F#でパラメータを渡すことを試したのですが、いろいろと難しくまたトライしてみたいと思います。(C#は記事にあります)
結構いろいろとテストしたのですが、結局これだけしか公開できないとは・・
まだまだです。

]]>
../../../20130621304/feed/ 0
WindowsストアアプリでF# ../../../20130608279/ ../../../20130608279/#comments Fri, 07 Jun 2013 15:56:27 +0000 http://xfra.me/?p=279 最近のLINQネタの勢いで、F#に手をだしてしまいました。これまでLisp, Haskell, Clojure, Scalaなどなど関数型言語の勉強はしつつも、なかなか使う機会がないので、まったく身につきませんでした。本ばかりがたまる一方です。そして今度はF#。また同じ運命をたどるかも。
しかし今回は、Windowsストアアプリでも使えるということで、具体的な形になる可能性が高いという期待があります。(最近の流れからして動機としては十分です。)F#だけですべてを作るのではなく、C#から呼び出す形でデータ操作を専門にする使い方なら、かなり実用性があるのではと感じました。
オブジェクト指向言語は、WindowsなどのGUIの出現とともに必要とされ生まれ、そして関数型言語はインターネット時代、CPUマルチコア時代に必要とされ生まれてきたのでは、と思っています。最近の他の言語の傾向を見ていても、その必要性が今まで以上に感じられるようになってきました。
xamlListbox1
サンプルは、C#+XAMLのWindowsストアアプリから、正規表現の部分を記述したF#の関数を読んでいます。
結果は、ListBoxに書き出します。
正規表現の部分は、「実践F#関数型プログラミング入門」(技術評論社)を参考にしました。

環境 : VisualStudio 2012 / Windows 8

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace csfsStoreXaml02
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }
        private void Button_Click_3(object sender, RoutedEventArgs e)
        {
            var t = Module1.test3("ABC123-456,789");

            foreach (var v in t)
            {
                listBox1.Items.Add(v);
            }
        }
    }
}
module Module1
open System.Text.RegularExpressions

let re = Regex("[0-9]+")
let test3 x = 
    re.Matches(x) 
    |> Seq.cast<Match> 
    |> Seq.map(fun m -> m.Value) 
    |> Seq.toList

これが積極的に業務でも使えればいいのですが、まだ難しい状況が続くことと思います。それはあまり使われない言語を使うと保守性が悪くなるため、これを嫌う傾向は強いからです。これは十分理解できます。
最近Rubyですら使えないことがありました。データコンバートのツールを作るとき、開発時間でJavaの1/4くらい、コード量では約半分でしたが、Javaで作ることになりました。実際はプロトタイプはRubyでつくり、それをJavaに移植した後作りこみ、という形でやりましたが、基本仕様がすでに動いているということは、とても心強かったです。
F#もこのような使い方ができれば意義あることかもしれません。

ちなみに現在開発中のWindowsストアアプリとは、F#はまだまだということで、JavaScript+SVGのものと、C#+XAMLです。
しかし最近のMicrosoftの言語環境は、本当にマニアックすぎる!?

]]>
../../../20130608279/feed/ 0