I have recently been experimenting with combining Reactive X, WPF, and F# and have found the combination to be very palatable. I chose drag and drop as the test case because it is both non trivial and generally deeply stateful. The resulting Rx turns out to be one fifth the code of my original C#, much easier to read and has fewer errors.
This is a proof of concept of an interactive collaborative development environment I built using F# Interactive. The aim here is to explore different ideas for further development, not so much as to present an alternative to Visual Studio :) Source code here (zip). ”Make it pink” code (txt), and Space Scene code (txt).
The video demonstrates a server and two clients collaborating on the same machine.
The way it works is that there are two different roles, the server (EchoServer) and the client (EchoClient). The role of the server is to act as repeater between the clients. When one client inputs source code the code is automatically sent to all the other clients. The server stores the code so when a new client joins it can be brought up to speed with all of the other clients.
This has the following advantages;
Everyone is on the same page with the latest version of the software
All developers work with the very latest source code
The source code is continuously integrated in real time
‘Build’ breaks are noticed (and fixed) immediately
There are also a number of disadvantages;
Cannot undo certain operations with side effects
Code from the network is being downloaded and run on your machine
The entire source code is a stored as single string
The reason I am playing with this is prepare for my next move into Domain Specific Modeling tools.
I’ve included the source code below. It is prototype code, so there are probably a few bugs in it, and as always feedback is greatly appreciated.
I encountered a ton of difficulties while porting code from C# to F#. Fortunately / unfortunately, so have many other people. Thankfully they took the time to write about these problems so my solutions were often only a quick search away. Here is a collection of some of the finds that were able to help me in my endeavors.
I have done my best to attribute sources, and as always feedback is very much appreciated. Also, I will be updating my code viewer as soon as possible to stop it from embedding html smiley faces.
*Update: Custom WPF Controls in F# is now available on Codeplex at http://wpffsharp.codeplex.com. You can still download the source from my site here. (Works best withVSTS2010 Beta1)
Screen Shot
It is a translation of SAMS WPF Control Development Unleashed: Building Advanced User Interfaces written by Pavan Podila, and Kevin Hoffman to F#. I picked this book for translation as it covers many advanced topics that other books shy away from. I have been a reader of Pavan Podila’s blog Pixel in Gene for some time, and I have also been waiting for a book dedicated advanced UIs, so when I heard that he was coming out with such a book I knew it was going to be exactly what I needed.
WPF Control Development
The aim behind this project is to serve as an extensive collection non trivial examples of WPF/F# UI. As I introduce people to F#, one thing I am constantly asked is; can it do GUI. Now I can say yes, … well sort of. So far I have only translated 3,500 lines of F# code, and I am still not finished.
I’m doing this primarily as a learning experience and as a forcing function. I have already learned a lot about WPF and F#, and I plan on continuously improving the code as I learn more. Other contributions to the project would be very welcome, and if you spot mistakes or know of any better implementations please don’t hesitate to let me know.
I hope that you find this code to be useful to your WPF and F# projects , and happy coding.
This is an experiment in interactive user generated network graph layout. The video demonstrates the ability to specify a domain meta-model (class diagram) and then specify a model in the domain. The layout engine is force directed with a modified gradient decent algorithm for convergence.
This is essentially a 3D browser for Visual Studio Team Foundation Server Work Items. Each of the cubes represents a Work Item, and each of the lines represents a Work Item Link.
Ultimately what I intend on building is a fully fledged time tracking software powered by SQL Reporting. Unfortunately that will take quite a bit of time to build, and given that some the tools I want to use for it are not out yet, I decided to build it in stages. The first stage is a simple WPF application which stores the data in a file. I’m using this to start tracking my time now so that when I do build the proper version I will have some realistic data to feed it.
Procedural modeling is an incredible technique for generating highly detailed scenes, as can be seen in the YouTube video. The screen shots below are from my little F# procedural modeling engine.
A point rotated around to make a circle and then revolved to make a sphere