Computer Science Experimentation

Monday, December 31, 2012

MongoDB tests with F#

 
 This post reports several results related to testing MondoDB for Windows with F# and more specifically with F# interactive 
 
MongoDB for Windows is available for download from 10gen Inc. at  http://www.mongodb.org/downloads.   
 
The MongoDB server was started using mongod.exe at a command prompt window.  
 
The tests were performed using F# interactive inside Visual Studio Express 2012 for Web 
 
The documents uses MongoDB .NET driver supported by 10gen Inc. and documented at  http://www.mongodb.org/display/DOCS/CSharp+Language+Center. 
 
The tests were based on the C# examples at http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial. 

Friday, November 23, 2012

Using NoSQL/Redis in Windows with F#


Celso Axelrud 
11/23/2012 
 

(Also available as Skydrive MSWord at https://skydrive.live.com/#!/edit.aspx?cid=BDC87EF39B001785&resid=BDC87EF39B001785%211518&app=Word&nd=1)

 
This document reports results related to testing Redis in Windows with F#.  
 
Redis for Windows is available for download from Microsoft Open Technologies Inc. at  https://github.com/MSOpenTech.  
 
The Redis server was started using redis-server.exe at a command prompt window. 
 
The tests were performed using F# interactive inside Visual Studio Express 2012 for Web. 
 
The Redis .NET driver used was from ServiceStack (https://github.com/ServiceStack/ServiceStack.Redis ) and downloaded from https://github.com/ServiceStack/ServiceStack.Redis/downloads . 
 
The following script shows the tests:
 
// Redis - example from 
//C:\opentech\ServiceStack.Redis-master\ServiceStack.Redis-master\tests\ServiceStack.Redis.Tests\Examples\TodoApp.cs 
// System 
open System 
open System.Collections.Generic 
#r "C:\opentech\ServiceStack.Redis-v3.9.28\ServiceStack.Common.dll" 
#r "C:\opentech\ServiceStack.Redis-v3.9.28\ServiceStack.Interfaces.dll" 
#r "C:\opentech\ServiceStack.Redis-v3.9.28\ServiceStack.Text.dll" 
#r "C:\opentech\ServiceStack.Redis-v3.9.28\ServiceStack.Redis.dll" 
open ServiceStack.Common.Extensions 
open ServiceStack.Text 
open ServiceStack.Redis 
  
type Todo= {mutable Id:int64; mutable Content:string;mutable Order:int;mutable Done:bool} 
let redisClient = new RedisClient("localhost") //6379 
redisClient.FlushAll();; 
let redisTodos = redisClient.As<Todo>();; 
(*> val redisTodos : Generic.IRedisTypedClient<Todo> *) 
let todo= {Id=redisTodos.GetNextSequence();Content = "Learn Redis";Order = 1;Done=false};; 
(*> val todo : Todo = {Id = 1L; 
Content = "Learn Redis"; 
Order = 1; 
Done = false;} *) 
redisTodos.Store(todo);; 
let savedTodo = redisTodos.GetById(todo.Id);; 
(*> val savedTodo : Todo = {Id = 1L; 
Content = "Learn Redis"; 
Order = 1; 
Done = false;} *) 
let allTodos = redisTodos.GetAll();; 
assert(allTodos.Count=1);; 
[for i in allTodos -> i.Content];; 
(*> val it : string list = ["Learn Redis"] *) 
savedTodo.Done <- span="span">true;; 
redisTodos.Store(savedTodo);; 
let savedTodo2 = redisTodos.GetById(todo.Id);; 
(*> val savedTodo2 : Todo = {Id = 1L; 
Content = "Learn Redis"; 
Order = 1; 
Done = true;} *) 
redisTodos.DeleteById(savedTodo.Id);; 
let allTodos2 = redisTodos.GetAll() 
assert(allTodos2.Count=0) 
 
 
 

Monday, September 3, 2012

Three-tier web application with F# and javascript

In the previous posts, I described several examples of services using F# with WCF.
 In this post, and in a series of future ones, I will describe a high efficient web application technology using three-tier architecture: host server, database server and web browser interface.

The software resources used in these posts are:

·        Host server:

o   F# language

o   Windows Communication Foundation (WCF) – services oriented application framework

·        Database server:

o   SQL Server Compact – database engine

o   Entity Framework – object relational mapper

o   F# type providers – information rich application component

·        Web client:

o   HTML5 – web markup language

o   javascript – web scripting language

o   jquery – javascript library

o   jqWidgets – web user interface library

o   knockoutjs –model-view-view-model javascript library

In my opinion, these set of software technologies represent the state-of-art available for web applications. The advantages are:

·        All software, except the jqWidgets and knockoutjs, are supplied by Microsoft

·        Microsoft Visual Studio is the only development tool required

·        All software, except jqWidgets, are free if you own the Window Operation System

·        Host server has high performance due to compiled code and the use of REST and Json

·        Application can be self-hosted or part of a server application as IIS

·        No SQL commands are needed to access the database

·        Client is available in all devices that support HTML5

·        Several components are used to hide complexity resulting in application with few lines of code


A user authentication web application is presented as an example.
Check the full article including source code at: