サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
nobuhisa.hatenablog.jp
Tomas Petricekさんが開発されている、F# Formatting を試してみました。 GitHub : https://github.com/tpetricek/FSharp.Formatting Documents : http://tpetricek.github.com/FSharp.Formatting/index.html このツールはF# Snippetsでも使われていますので、F#erにはお馴染みですね。 シンタックス・ハイライトのみならず、マウスオーバーでメンバの情報まで表示される優れものです。 またこのツールは、文芸的プログラミング(Literate programming)にも対応しています。 http://tpetricek.github.com/FSharp.Formatting/demo.html 使ってみた感想ですが、とても良い感じです。 OSSの開
F# Advent Calendar 2012の最終日、24日のエントリです。 今年のFsAdventJPはテーマが『実用』ということもあって、面白い記事が多かったですね。 皆さんがハードルを上げまくって下さいましたので、胸焼けが治まりません。 今日はクリスマス・イブということで、 『クリスマス・スペシャル』でお送りしたいと思います。 なお、本エントリを読むにあたっての注意事項があります。 F# Interactive (fsi) をご用意下さい disらないでください それでは本題に入ります。 みなさんはビープ音をご存知でしょうか。 あの「ピッ」とか「プッ」とか鳴るあれです。 その昔、僕がプログラミングを始めたばかりの頃、HSPという言語(!)で遊んでいた時に 「周波数を指定すればビープ音の高さを変えられる」 ということを知りました。 実は.NET FrameworkのAPIにも用意され
One ASP.NET Advent Calendar 2012の16日目のエントリです。(ちょっと過ぎちゃった・・・) ASP.NET MVCを勉強しようと思っていた矢先、Advent Calendarの募集が始まったので勢いで参加登録しました。 今は反省しています。 3日前に初めてASP.NET MVCを触りました。 僕が今、鬼気迫る表情で画面に向かっていることは容易にご想像頂けるかと思います。 さて、今日はNDjangoというオープンソースのViewエンジンを取り上げたいと思います。 DjangoというPythonのMVCフレームワークがございまして、そのViewエンジンを移植してきたものがこのNDjangoです。 ソースコードはGitHubでご覧になれます。 https://github.com/Hill30/NDjango ご覧頂くと分かる通り、F#で実装されています。アツい!*
先日Visual Studio Express 2012がリリースされましたが、F#のための無償アドインも公開されています。 Announcing F# Tools for Visual Studio Express 2012 for Web! | Visual Studio F# Team Blog このアドインをインストールすると、Visual Studio Express 2012でF#が使えるようになります。 インストール手順 0. VS Express 2012 は、Windows 7以降のOSで利用可能です。Vistaちゃん・・・。 1. Express for Webをインストールします。*1 2. F# Tools for Visual Studio 2012 Express for Webをインストールします。 あわせて読みたい CodePlex Archive : F#
OSC2011 Hokkaidoで『これからの「言語」の話をしよう ―― 未来を生きるためのツール』という講演をしてきました。 事前登録は83名でしたが、当日は椅子を追加していたようなので、100人ほどいたかもしれません。 女性も何名かいらっしゃいました。F#がよく似合いそうなお綺麗な方々でした! 発表資料はSkyDriveとSlideShareにアップしました。 Silverlightをお使いの方はSkyDriveのWebAppで閲覧すると、より一層美味しく召し上がれます。 SkyDriveはこちら。 SlideShareはこちら。 半数以上の方が「関数型言語に興味がある」とのことで、中には隠れF#ユーザもいました。「F#の街札幌」ならではの光景です。 手続き型というのは、言ってみればコンピュータ寄りのパラダイムで、人間のことはそれほど考えられていません。だから我々はバグに苦しみました。
遅刻しましたごめんなさい。(>_<) そのため、勉強会の最後にトリを務める形でLTをしてきました。 会場のリアクションはいい具合に冷たくて、心地良い死にたさでした。 プログラムを公開して欲しいとのお声を頂きましたので、主要部分をこのエントリで解説し、プロジェクトもダウンロードできる形にしました。 >> CLRH57.zip << 今回のLTのテーマは、3つの言語の相互運用でした。 特にCLRとDLRの連携が目玉になります。 サンプルとして用意したプロジェクトは、 GUI を C# で作り 機能を F# で実装し このアプリケーション用のShellを、IronPythonで作る といった感じです。 C#とF#で作られたテキストエディタを、IronPythonで外部からインタラクティブに操作できるようになっています。具体的には、このアプリケーションのインスタンスをIronPythonに渡してや
F# Advent Calendar jp 2010 第1回目! F#の弱点(?)のひとつに、C#でいう try-catch-finally の仕組みが無いという点が挙げられます。 F#ではどのようにするかというと、try-with と try-finally をネストすることによって解決します。 「この、ねすとねすとした感じ、どうにかなりませんか!」 この問題を解決するヒントが、ScalaとHaskellにあります。 ご存知(?)Either型! 最も単純なEitherの定義 のちにもっと便利な関数群を定義するとして、今は基本形だけを定義してみます。 type Either<'T, 'U> = | Left of 'T | Right of 'U たったこれだけでエラー(例外)処理に変化が生まれます。 open System let fac' n = List.fold ( * ) 1
2012/10/27 追記 Visual Studio Express 2012では無償でF#が使えます! http://d.hatena.ne.jp/Nobuhisa/20121027/p1 おそらく、「F# Express」で検索する方が多いと思うので、その人たちを釣る誘導するためのタイトルです。 喜んでください!F#は無償で利用することができます! ただし、「Express Edition」というものは用意されていません。 以下のものをインストールしてください。 Visual Studio (2008|2010) Shell Microsoft F# CTP Visual Studio Shell というIDEを用意し、その中にF#を組み込む形になります。 F# CTPだけでも利用可能ですが、この場合コマンドラインで実行することになります。 マシンパワー的にVS2010は厳しい!とい
MailboxProcessorというクラスを使ってやると、スレッド間で簡単にメッセージのやり取りをすることができます。 でもこれがプロセス間となると一工夫が必要。F#側には用意されていないので、BCLの力を借りることになります。 しかし.NETに用意されたプロセス間通信のためのクラスは、F#のMailboxProcessorとはかなり毛色が異なりますし、使い方も少々面倒。というわけで、これらの仕組みをラップしてF#色に染め直してみました。 MailboxProcessorに比べると機能は少ないですが、ほとんど同じようにして利用することができます。 ちなみに、.NET(CLR)にはアプリケーションドメインという概念があるため、「プロセス間通信」というよりは、「アプリケーション間通信」と言ってやった方が適切かもしれません。 結構長いのでソースは一番最後に載せます。まずはこのクラスの利用方法か
F#にはコンパイル時にシグネチャをチェックする仕組みがあるので、 静的型付け言語であるにもかかわらずDuck Typingができてしまいます。C++のような感じ。 type Taro() = member self.Speak () = "こんにちは!太郎です!" member inline self.Calc (x, y) = x + y type Hanako() = member self.Speak () = "わたしは花子だ。" // Type Extention ※1 type Hanako with member inline self.Calc (x, y) = x - y // 静的に解決される型パラメータ(Statically Resolved Type Parameters) // を使って制約を加えてみる let inline Check (x : ^a when
つい先日(Apr.12 2010)IronPythonの新しいバージョンがリリースされました。 言語仕様自体は変わっていませんが(2.6.1)、.NET 4.0向け機能が完成したようです。 β版の頃から注目していましたが、C#4.0(dynamic)と非常に相性がいい! 早速プログラムを見ていただきましょう。 Script.py def hello( x ) : print "hello, " + x class Foo() : def __init__( self ) : print "init !" def __call__( self ) : print "call !" def method( self ) : return self.x * self.y def getMetaClass() : return type( 'Bar', (), {'expt' : lambda s
04月17日(土)にCLR/Hの第47回勉強会が開催されました。 僕は『F#入門 〜関数プログラミングとは何か〜』というセッションを担当しました。 その際の発表資料を公開します。 『F#入門』 SkyDriveにアップロードしてみました(ダウンロードしなくてもpptを表示できるという噂を聞いたので*1)。 アニメーションが色々盛り込まれているので、ぜひダウンロードしてから全画面表示でご覧になってください! 一応SlideShareにもアップしてみました。またフォントが残念なことになっているのでオススメしません*2。アニメーションは全滅しています。流し見したい方向け。 F#入門 〜関数プログラミングとは何か〜 以下はデモプログラムです。 デモもSkyDriveにアップロードしてみました。(Download) Async Workflow Twitterに並列にアクセスするデモを行いました。(
Pythonの非標準ライブラリにBeautifulSoupというHTML/XMLを解析してくれるものがあります(http://www.crummy.com/software/BeautifulSoup/)。俗に言うスクレイピング、に用います。 以前それをIronPythonで利用しようとした時、当時のIronPythonが仕様的に不完全だったために使うことが出来ませんでした。 しかしIronPythonも着々と進歩してます。 リリースされて間もないIronPython 2.6では無事インポートすることができました。 今日の実験は、IronPythonを仲介者として、PythonのBeautifulSoupをC#で使おうというものです。 C#はXMLは簡単に扱えるのだけど、HTMLはそうはいかないのです。 IronPythonはPython標準のモジュールが付いてこないので、CPythonの
Visual Studio 2010では残念ながらF#のフォームデザイナが提供されません。 F#でWindowsフォームを扱う場合にはゼロからコードを書かなくてはなりません。 ということで、せめてフォームデザイナが自動生成するC#のコードをF#に変換するツールを作りました。 最初はASP.NETで提供する予定だったのですが色々あって、クライアントアプリのみの提供となります。。 VS2008/2010のデザイナが生成するコードなら多分対応できるはず。(テストがバッチリとは言い難い) How to use 上のほうのテキストボックスに直接ソースをペーストするか、ファイル(*.Designer.cs)をロードします。 あとはRunボタンを押すだけ。すると下のテキストボックスにF#の濃厚なソースが出てきます。 このコードを.fsファイルなどにコピペしていただければそのまま使えます。 注意点がひとつ
ねた元はこちら: なんぞこれ。コンストラクタパラメータが異常に大杉る・・・。バカなの?死ぬの?そういう場合はBuilderパターンを検討してみよう。 - Bug Catharsis C#3.0とC#4.0の2つを考えてみました。 まず、ネタ元の本文に このEffective JavaでJoshua Bloch氏が提案しているBuilderパターンは、 Pythonに見られる名前付きオプションパラメータを模倣してJavaで実装したたもので、 http://d.hatena.ne.jp/zecl/20091117/p1 「実装したたもので、」という部分がJavaのソースコードの冗長さをも表現しているのだと信じて止みませんが、脱線しましたが、話を戻しますが、えーっと、ということですので、1つめはC#4.0で加わったオプショナル引数をそのまま使っています。*1 2つめは、オプショナル引数が加わる前
id:sumimさんが投稿された、 居眠り床屋問題 http://ja.doukaku.org/285/ 丁度F#の並列計算を(ちまちまですが、)勉強していたところだったので、標準クラスのMailboxProcessorを使って解いてみました。ここでこれを使うべきじゃないかもしれませんが、まあ男とはそういう生き物です。 MailboxProcessorとは、Erlangのプロセス間通信(メッセージ・パッシング)みたいなもので、スレッド間でメッセージをやり取りするための仕組み(を提供してくれるクラス)です。ライブラリレベルでの提供なので、Erlangほどしっかりしたものではないようです。(Erlangは良く分かってません) 名前から分かるように、相手のメールボックスにPostしておいて、それを好きなタイミングでReceiveするというのが基本的な流れです。ベイジアンフィルタは実装されていませ
練習中のF#(OCaml)でHaskellのArrow, ArrowChoice, ArrowApply, ArrowLoop を書いてみました。 突っ込みやアドバイス歓迎です。 ちなみにOCamlは空き時間などに携帯でWebサイトを見て勉強した(?)だけなので実はあまり自信が無い。。。(多少はPCでも書いたことあるけど VS2010β入れてないので、F# CTPでプログラムを書きました。もしかしたら仕様変更の影響を受けてる部分とかあるかも・・・。 Arrow (* F#特有の"light"の意味を良く分かってない。。。重くなさそうだ! *) #light let first f (x, y) = f x, y let second f (x, y) = x, f y let ( *** ) f g = first f >> second g let (&&&) f g = (fun x
C#-IronPython間での値の受け渡しが上手くいったのでメモしておこう。 本当はPythonの標準モジュールをIronPythonで読み込んで*1、それをC#で使おう!へいへい!という作戦だったのだけど、時間が無いのでそれはまた次回。 IronPythonの中の作りはコロコロ変わるため、もしかしたら今後以下のものは使えなくなる恐れがあります(以前の資料はあまり参考にならなかった・・・)。遠い未来にGoogleからここにたどり着いて、今まさにこれを読んで参考にしようとしているそこのあなたは充分注意。 C#3.0 と IronPython2.0.1 を使用しました。 mypython.py class Foo() : def bar( self, a, b ) : return a + b f = Foo() # Csharpという変数はC#側から渡ってくる python_result
コンビネータとは自由変数を含まないλ項のことをいいますが、Yコンビネータ以外あまり取り上げられていない気がするのですが、これも100年に1度の金融危機の影響かとか、WBC楽しみですねだとか、そういえば今年雪祭り行けなかったんですよとか、最近携帯変えましたとか色々あるのですが、自分の練習もかねて、そんなコンビネータ達と戯れたいと思います。 沢山ある! Y以外にも広く知られている(?)コンビネータはいっぱいあるようですが、その中からいくつか。 I ≡ λx.x K ≡ (λx.(λy.x)) //以下、簡単に λx y.x と書きます F ≡ λx y.y M ≡ λx.xx S ≡ λx y z.xz(yz) B ≡ λx y z.x(yz) C ≡ λx y z.xzy L ≡ λx y.x(yy) Y ≡ (λx.xx)(λx.xx) (SLL) (当てるアルファベットが違うのはたまに見
labelsは主に関数定義を入れ子にしたい場合に用いますが、fletというものもあるみたい。 外側(defun)と内側(labels,flet)の関数名が同一であった場合、内側の関数で再帰呼び出しをすると果たして誰にお呼びがかかるのか。labelsとfletはその時の振る舞いが異なるらしい。 labelsはあくまで自分自身。fletは外側の関数を呼び起こす。 ;; labels CL-USER> (defun foo (x) (format t "YesWeCan") (if (> x 0) (labels ((foo (x) (format t "!") (if (> x 0) (foo (1- x))) )) (foo x) ))) FOO CL-USER> (foo 5) YesWeCan!!!!!! NIL ;; flet CL-USER> (defun bar (x) (form
10/11に第4回北海道関数型言語勉強会が開かれました。 ちなみに前日の10/10で21歳になりました!目尻のシワが気になる年頃。 さて、勉強会の終盤。 ずっとSmalltalkをやってきたのにお墓にはHaskellのプログラムを刻むことになったsumimさんが、お墓に刻むプログラムを紹介してくれました。 fib = 1 : 1 : zipWith (+) fib (tail fib) main = print $ take 15 fib -- print (fib !! 3) で4番目の数だけ取れる 会場にいた時何となく分かった気になっていたけど実際分かってなくて(汗)、帰宅後復習して理解しました。(後述) ちなみにzipとzipWithを再定義してみると zip' :: [a] -> [b] -> [(a,b)] zip' (x:xs) (y:ys) = (x,y) : zip' xs
AppDomain.UnloadによるスレッドのAbortと、抹殺されるスレッドの最後の抵抗(finally)によってCannotUnloadAppDomainExceptionが発生するまで。 親アプリケーション public void Test1() { string childPath = "(子アプリのパス)"; AppDomain domain = AppDomain.CreateDomain( "UserDomain1" ); Action thread = () => domain.ExecuteAssembly( childPath ); thread.BeginInvoke( null, null ); try { for ( int i = 0 ; i < 6 ; i++ ) { Console.WriteLine( "parent" ); System.Threadi
F#には静的Duck Typingを行うための(非常にマイナーな)(そして難解な)仕組みがありますが、 プロパティ(setter)にアクセスする方法は少し特殊です。 マイナーすぎて多分ググってもほとんどヒットしないと思うので、一応サンプルを載せておきます。 結論から言うと、setterのシグネチャを指定する際には when ^a : (member set_MyProperty : int -> unit) のようにします。 これを応用して、色んな型の"Value"にアクセスするサンプルコードを書いてみました。 // 普通のプロパティを持つ普通のクラス type MyClass(value) = member val Value : int = value with get, set // 変更可能なラベルを持つレコード型 type MyRecord = { mutable Value :
自分用 4章あたり リストは効率が悪いからか,Lispではパフォーマンスもある程度意識してプログラミングされていくみたい。 ただ,とりあえず最初は単純なものを作れと書かれている。 リストの長さを比較する関数。 length関数で長さを取ると無駄な計算が生じるとのことで。 andとorの使い方がかっこいい。 CL-USER 3 > (defun longer (x y) (labels ((compare (x y) (and (consp x) (or (null y) (compare (cdr x) (cdr y)) )))) (if (and (listp x) (listp y)) (compare x y) (> (length x) (length y)) ))) LONGER CL-USER 4 > (longer '(1 2 3 4) '(1 2 3)) T filterの
SHA1とかSHA256とかSHA384とかSHA512のスピードの差を計ってみました。 正確には、CSPラッパークラスではなくマネージ実装のハッシュアルゴリズムのスピードを測定しました。 SHA512 : 1087 ms. SHA384 : 1072 ms. SHA256 : 522 ms. SHA1 : 316 ms. 数千回の計算をワンセットとして、それらを複数回実行し、平均を採りました。 # ハッシュを求める巨大な元データを用意するのが面倒だったのでw ## 数十文字じゃ一瞬すぎて計測できなかった 案外早かったなぁ。 わたくしのおじいちゃんPCでこれだけの早さだから、他のPCだともっと早いことでしょう。 まあSHA1は脆弱性があるのでもう使わないとして(笑)、 どれが無難でしょうかね。 SHA256さんで十分かなぁ。
このページを最初にブックマークしてみませんか?
『Nobuhisa's diary』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く