F#

F# Interactiveでunmanagedコードをデバッグ

F#

F# Interactiveでデバッグをする際は、Interactiveウィンドウ上で右クリックメニュー"Start Debugging"を利用するか、fsxファイル上で右クリックメニュー"Debug In Interactive"を利用すると思います。しかしこの方法ではデバッガがマネージドコードのみを対…

メインスレッド以外でWPFを利用する

WPFのWindowをmain関数内で表示する場合は、下記のような書き方になる。 [<STAThread>] [<EntryPoint>] let main argv = Application().Run(Window()) |> ignore 別スレッドでWindowを表示したい場合は下記のようになる。 let startApp() = Application().Run(Window()) |> ignore l</entrypoint></stathread>…

F#でコマンドライン引数

F#

コマンドライン引数をパースするライブラリはすでにいくつも存在しますが、今回は簡単なものを実装してみました。簡単のため、ロング名のみ、値は=での指定のみに対応します。 some.exe --enable --value=10 今回実装したものの利用例 コマンドライン引数用…

F# Result型 便利関数

F#

F#4.1で導入されたResult型ですが、導入しやすくするよう幾つか便利関数を定義してみました。随時更新予定です。 Optionから変換 let ofOption (errorValue : 'error) (option : 'a option) : Result<'a, 'error> = if option.IsSome then Ok option.Value e…

レコード型のフィールド隠蔽(F#)

F#

例えば下記のようなCounterクラスを考えます。 type Counter() = let mutable count = 0 member this.CountUp() = count <- count + 1 member this.CountDown() = count <- count - 1 member this.Count = count これをレコード型を用いて実装すると下記のよ…

F#のMailboxProcessorで選択的受信

F#

F#にはアクターモデルを実現できるMailboxProcessorクラスが用意されています。基本的にはキューに積まれたメッセージを順に処理していくものですが、たまに特定のメッセージを先に処理したいときがあります。今回はMailboxProcessorで選択的に受信するよう…

F#でSQLite

今回はF#でSQLiteを利用してみたいと思います。 System.Data.SQLite入手 NuGetで下記のパッケージを取得します。 データベース準備 sample.sqliteファイルに、下記のテーブルを定義しています。作成は「DB Browser for SQLite」や、IDEに付属のツール、上記…

F#で逆誤差伝播法(ミニバッチ対応版)

下記記事にて逆誤差伝播法をF#で実装してみました。 F#で逆誤差伝播法 - 何でもプログラミング1データ/教師データ毎にネットワークを更新していましたが、今回はある程度の数学習してその変位の平均でネットワークを更新する、ミニバッチ法に対応してみたい…

F#で逆誤差伝播法

今回はニューラルネットワークで利用される、逆誤差伝播法をF#で実装してみたいと思います。実装をするに際し、Math.NETライブラリを利用しています。 レイヤーの定義 今回は、全結合のAffine層、ReLU活性化層、Softmax最終活性化層を定義しました。その他の…

MNISTの読み込み(F#)

F#

機械学習のデータとして、手書き数字の画像がまとめられた下記のサイトを利用することがあります。 MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges訓練データとして60000画像、テストデータとして10000画像用意されていま…

F#でメモ化(ConditionalWeakTable)

F#

プログラムの高速化のため、一度計算した値を再利用することはしばしばあります。しかし結果を状態として保存する必要があるため、F#では少し扱いにくいです。そこで、ある関数を結果を再利用する関数に変換する、memoize関数を定義してみたいと思います。 m…

ネストしたレコードの更新(Functional lenses)

F#

下記記事にて、リフレクションを用いてネストしたレコードの更新を実装してみました。 ネストしたレコードの更新 (F#) - 何でもプログラミング今回はFunctional lensesを利用して同様の内容を実装してみたいと思います。 Lens型定義 Lens型は対象オブジェク…

F#でWPF --- Elm Architectureで実装されたUserControl

あるアプリケーションを作成した後に、それをコントロール化して更に大きなアプリケーションを作成したい時があります。今回は、下記記事で作成したカウンタアプリケーションをコントロール化してみたいと思います。 F#でWPF --- Elm Architectureを利用した…

DependencyProperty定義の記述量削減(F#)

下記記事にてC#でDependencyPropertyの記述量を削減してみました。 DependencyProperty定義の記述量削減 - 何でもプログラミング今回はF#でDependencyPropertyの記述量を削減してみたいと思います。内容はほぼAttachedPropertyの時と同じですので、下記記事…

F#でWPF --- ItemsControlのItemのCommand

作成するアプリケーション 複数の、クリック回数を表示するボタンからなるアプリケーションを作成します。追加ボタンにより、クリックできるボタンを動的に増やすことができます。 本記事ではElm Architectureを利用しますので、下記記事を参照してください…

Visual Studio 2017でプロジェクトテンプレート作成

F#でWPFプログラミングをする際、プロジェクトテンプレートにコンソールアプリケーションしか存在しないため、毎回参照設定などを追加する必要があります。今回はWPF用のプロジェクトテンプレートを作成してみたいと思います。 テンプレートの準備 まずは普…

AttachedProperty定義の記述量削減(F#)

下記記事にて、C#でAttachedPropertyの記述を削減してみました。 AttachedProperty定義の記述量削減 - 何でもプログラミング今回はF#でAttachedPropertyの記述を減らしてみたいと思います。C#版同様、プリプロセスやポストプロセスは利用しないで実装してみ…

F#でWPF --- CatmullRom曲線の描画

図形を描画する際に、指定した点を通る滑らかな曲線を描きたいことがあります。今回はCatmullRom曲線でこれを実現したいと思います。 CatmullRom曲線 2点間の補間は、更にその前後の点を利用して求められます。2点(p1、p2)と、その前後の点(p0、p3)の…

OpenCVで動画読み込み&書き込み --- C++/CLIでラップ

下記記事にてOpenCVで動画を読み書きする方法を調べました。 OpenCVで動画読み込み&書き込み - 何でもプログラミング今回は.Netで利用できるよう、C++/CLIでラップしてみたいと思います。尚、Matクラス(Mat8UC1クラス)は下記記事のものを利用しています。 O…

F#でWPF --- BitmapImageで画像ロード

下記記事にてOpenCVと連携して画像を表示しました。画像を読み込むだけであればWPFの標準セットで可能であるため、今回はWPFで画像をロードして表示してみます。ついでにグレースケール化も行ってみます。 作成するアプリケーション ファイルダイアログで画…

F#でWPF --- OpenCV連携

下記記事にてOpenCVを.netから利用できるようC++/CLIでラップする方法を紹介しました。 OpenCVをC++/CLIでラップ - 何でもプログラミング今回はWPFと連携させて画像を表示してみたいと思います。 作成するアプリケーション ファイルダイアログで画像を選び、…

OpenCVをC++/CLIでラップ

今回はOpenCVをF#から扱えるようにしてみたいと思います。OpenCVはC++のライブラリであるため、C++/CLIを用いてF#から扱えるようにします。 OpenCV取得 下記サイトから、バイナリとソースがセットになったファイルをダウンロードします。解凍(exe実行)して…

リフレクション 逆引き (F#)

F#

F#でリフレクションを利用するときに、やり方を忘れていることがよくあるため、ここを備忘録にしたいと思います。今後適宜追加していこうと思います。 Type取得 let t = typeof<int> TypeDefinition取得 let t = typedefof<List<_>> TypeDefinitionからType作成 let t = t</list<_></int>…

F#でWPF --- Resource、Content、EmbeddedResource

F#でWPFプログラミングをする際に、XamlファイルのBuild Actionをいくつか選ぶことができます。今回はResource、Content、EmbeddedResource各々でのXamlの読み込み方を記述していきます。 Resource WPFにのみ提供されるBuild Actionです。対象のリソースを実…

Visual Studioと通信(F#)

通常、VisualStudioに機能を追加する際は、VSIXを作成してインストールします。今回は外部からVisualStudioと通信してみます。 VisualStudioを見つける(DTEの取得) RunningObjectTableからDTEのオブジェクトを取得しています。DTEはIDE以外のも取れること…

F# --- TypeProvider --- DependencyProperty自動実装

下記記事にてTypeProviderを作成する方法を記述しました。 F# --- TypeProvider --- クイックスタート - 何でもプログラミング今回は応用としてDependencyPropertyを自動実装するTypeProviderを作成してみます。結果としてあまり実用的ではないものであるた…

F# --- TypeProvider --- クイックスタート

F#

F#にはコンパイル時に型を生成するTypeProviderという仕組みがあります。 (実際にはインテリセンスを働かせるため、コンパイル時以外に逐次生成されています。)今回は独自のTypeProviderを作成していきます。 作成するTypeProvider 指定した次数のベクトル…

F#でWPF --- 可変個のコントロール --- 独自の条件で生成するコントロールを変更

下記記事にて、型でコントロールを分岐する実装をしました。 F#でWPF --- 可変個のコントロール --- 型で生成するコントロールを変更 - 何でもプログラミング今回はユーザーが独自に定義した条件で分岐するよう実装します。 作成するアプリケーション F#の判…

F#でWPF --- 好きな図形のコントロール作成 --- Geometry利用

下記記事にて好きな図形のコントロールを作成しました。 F#でWPF --- 好きな図形のコントロール作成 - 何でもプログラミングその際、独自のヒットテストを実装しようとすると、ロジックを一から実装しなければなりませんでした。今回はGeometryクラスを用い…

F#でWPF --- 好きな図形のコントロール作成

下記記事ではXAML上でPathを使って好きな図形を描きました。 XAMLで好きな形を描く - 何でもプログラミング今回はコード側でコントロールを作成してみます。 作成する図形 Pathの時と同様の図形のコントロールを作成します。 DrawingVisual Frameworkを継承…