Skip to content

Instantly share code, notes, and snippets.

@jsakamoto
jsakamoto / gist:3009493
Created Jun 28, 2012
re-connect UDL to local server by F#
View gist:3009493
open System;;
open System.IO;;
open System.Text;;
open System.Text.RegularExpressions;;
let dir = @"c:\workdir";;
Directory.GetFiles(dir, "*.udl")
|> Seq.map (fun x-> (x, File.ReadAllText(x)))
|> Seq.map (fun(x,y)->(x, Regex.Replace(y,"Data Source=[^;]+",@"Data Source=.\SQLEXPRESS")))
|> Seq.iter (fun (x,y) -> File.WriteAllText(x,y,Encoding.Unicode));;
@jsakamoto
jsakamoto / Bot.cs
Created Aug 14, 2012
C# で Twitterizer を使って Twitter につぶやく
View Bot.cs
using System.Configuration;
using Newtonsoft.Json;
using Twitterizer;
public class Bot
{
public static void Tweet()
{
// Need appSettings section in .config:
// <add key="key" value="{ConsumerKey:'...', ConsumerSecret:'...', AccessToken:'...', AccessTokenSecret:'...'}" />
@jsakamoto
jsakamoto / sample1.fs
Created Aug 27, 2012
これはコンパイルが通る(.NETのFileInfoクラスはnullになりうる)
View sample1.fs
open System.IO
open System.Linq
let dir = new DirectoryInfo("c:\\")
let fileOfFoo = dir.GetFiles().FirstOrDefault(fun f -> f.Name = "foo")
printfn "%s" (if fileOfFoo = null then "null!" else "exists!")
@jsakamoto
jsakamoto / sample2.fs
Created Aug 27, 2012
しかしこれはビルドエラー(F#のレコード型(下記 MyFile)はnullになるはずがない)。でもprintfnの行を外すとビルドは通るので実行してデバッガで見るとnullになってる。
View sample2.fs
open System.IO
open System.Linq
type MyFile = {Name:string; Size:int64}
let toMyFile (f:FileInfo) = {Name=f.Name; Size=f.Length}
let dir = new DirectoryInfo("c:\\")
let fileOfFoo =
dir.GetFiles()
|> Array.map toMyFile
@jsakamoto
jsakamoto / sample.fs
Created Aug 28, 2012
C# with LINQ での FirstOrDefault と ?? 演算子みたいなことを F# で書いてみる
View sample.fs
// C# の ?? 演算子と同様の用途・目的で、|?? というユーザー定義の記号演算子をあらかじめ定義しておく。
// ただし null かどうかではなく、Option型の引数をとって Some(a) なら a を、
// None であれば第2引数に指定された既定値を返す仕組み。
let (|??) opt def =
match opt with
|Some(a) -> a
|None -> def
// LINQ の FirstOrDefault に近いのは、Seq.tryFind。
// Seq.tryFind は、集合の中から predicate で該当するものがあれば Some(a)、
@jsakamoto
jsakamoto / Bot.fs
Created Sep 5, 2012
F# で Twitterizer を使って Twitter につぶやく
View Bot.fs
module Bot
open System.Configuration
open Newtonsoft.Json
open Twitterizer
let Tweet() =
// Need appSettings section in .config:
// <add key="key" value="{ConsumerKey:'...', ConsumerSecret:'...', AccessToken:'...', AccessTokenSecret:'...'}" />
let key = ConfigurationManager.AppSettings.["twitterKey"]
let tokens = JsonConvert.DeserializeObject<OAuthTokens>(key)
@jsakamoto
jsakamoto / test.html
Created Sep 18, 2012
The example of QUnit test harness.
View test.html
<!DOCTYPE html>
<html>
<head>
<title>QUnit Test Suite</title>
<link href="Content/qunit.css" rel="stylesheet" />
<script src="Scripts/qunit.js"></script>
<!-- Your project file goes here -->
<script src="Scripts/formatAsYen.js"></script>
<!-- Your tests file goes here -->
<script src="Scripts/formatAsYen.test.js"></script>
View formatAsYen.js
function formatAsYen(num) {
///<param name="num" type="Number"></param>
return "\\" + num.toString();
}
View formatAsYen.test.js
test("prepend Yen sign.", function () {
QUnit.equal(formatAsYen(123), "\\123");
});
test("insert comma at par 3characters.", function () {
QUnit.equal(formatAsYen(1234567), "\\1,234,567");
});
@jsakamoto
jsakamoto / formatAsYen.test.js
Created Sep 18, 2012
Prepend reference xml commnet version.
View formatAsYen.test.js
/// <reference path="qunit.js" />
/// <reference path="formatAsYen.js" />
test("prepend Yen sign.", function () {
QUnit.equal(formatAsYen(123), "\\123");
});
test("insert comma at par 3characters.", function () {
QUnit.equal(formatAsYen(1234567), "\\1,234,567");
});