らくがき

2010/09/17

FF14 は買う価値があるのか

正直に言って買う価値はない 約8000円も求めるのであれば、PS3などのゲーム機で発売されるものと同等のクオリティがなければならない。 ところがオープンβをプレイした限りではRPGのフィールドが用意されているだけで、ストーリー性は皆無である。 また基本的なシステムも欠陥だらけで、標準的な韓国産のMMORPGよりも劣っている。 現在のFF14は  ・韓国産MMORPGから便利な機能をすべて削除し、さらにクエストも削除したもの というイメージでぴったり。 サポートセンターも酷く、10年前の韓国産MMORPGのごとく、テンプレのみの回答。 突っ込んだ質問に対しても同じテンプレでの回答。 サポートセンターに人間は存在せず、機械が高速処理しているものと思ったほうが良い。 サーバーとクライアントのエラー落ちも多く、"製品" "商品" とはとても呼べないレベルである。

Labels:

2010/09/04

FF14 オープンβに参加してみた

・スクウェア・エニックス サポートセンターで働いている人間が全く仕事をしていないw  どんな質問をしても同じテンプレしか返ってこないw  -------------サポセンに聞きたいこと (これらを問い合わせしたわけではないw)------   ・日本語の文章をタイプするのがめんどくさいですか?   ・テンプレをコピペして返信してれば業務として最高の結果ですか?   ・給料泥棒ですか?   ・他部署への報告は、毎日「重要な問い合わせはありませんでした」ですか?  --------------------------  こんな"仕事"でお金もらえるならぜひやりたいwww  というか、オープンβって多くの情報が寄せられると思うんだけど  全部スルーしているかのような対応して損するのはスクエニじゃないのかなーw  まだお金もらってないからサポートできないとかだったらバカウケルw ・プレイ中に突然エラー落ちする ・・・ おーい、この時期にこれで大丈夫か-w  修正されたようなことが書いてあったけど、完全には直っていないらしい  (エラー落ちするたびにDumpファイルを取ってみると、同じ2箇所でよく落ちているみたい)  ここ3日ほどエラー落ちしていない  9/8のアップデートで修正されたみたい。だが、"主な変更内容"には書かれていない  エラー落ち修正しといて主な変更内容に入らないとかおかしいw  単純に隠蔽したかっただけかな  とりあえず、XPのSP3ではエラー落ちすることはなくなった。  ・・・と思ったら、9/12 から移動中に落ちるわけではなく、別のタイミングで落ちるようになった ・装備をマクロで変えた直後にメニューからエーテライトをクリックしたらエラー落ちすることがある ・ログアウトして「ゲーム終了」ボタンを押したらエラー落ちすることがある ・単純にメニューからエーテライトをクリックするとエラー落ちすることがある  9/13のアップデート後に発生した。今回修正されたはずなのにエラー落ちしたw  外部からの要因で落ちるならわかるけど、普通にプレイしてて落ちるとか不良品だよねw ・1000人程度のサーバーで鯖落ちする ・クエストが皆無 ・・・ 見つけられていないだけかもしれないけど、数個しかできていない (反復クエ除外) ・PC版なのに操作しにくい ・UI全般的に反応速度が遅い ・NPCは日本語名なのに、自分のキャラクター名には日本語が使えない  (いろんな国の人と混ざってプレイするから、アルファベットのみになっているのかもしれないけど微妙) ・マップのスクロールができないため、現在地からの状況把握がしにくい I,J,K,Lキーで移動可 ・画面サイズを変更すると、ミニマップが消えるw   (ミニマップが表示されていた右上あたりをD&Dすると表示される) ・クエストを受けられるキャラになんの目印もない ・クエストの次の目的地がすぐわかるように示されない ・基本的なチュートリアルがない ・音楽とキャラの見た目はいいかも ・護衛クエはちょっとニヤけた ・カメラが扉や壁を突き抜ける ・フィールドがなんだかいまいち ・フィールドは広大なものの、モンスターがまばらで積極的な狩りはできない ・戦闘のテンポが悪い ・強い敵と弱い敵の見分け方がわからない  ○青が楽に倒せる敵、○緑がきつめ(リーヴ中やPT中はアテにならない) ・パッシブモンスターなのかアクティブモンスターなのか、人懐っこいモンスターなのかよくわからない  (近くを通るとかなりしつこく追いかけてくるが、攻撃をしてこないのがいる) ・インストール時の本体ダウンロードが遅い  本体は5GB程度だと思うけど、FF専用の閉じたネットワーク(?)でBitTorrent方式にて  ダウンロードするため遅い ・↑他のBitTorrent対応ソフトでDLすればさっくり終わるらしい。  FFのバージョンアッププログラムがおかしいのだとかw  FF14 オープンベータテストスタート!& バージョンアップが進まない方へ ・テスター専用サイトにログインするたびに、表示名が変更される ・キャラを作成しているのに、テスター専用サイトの"フィードバック"などの機能が利用できない ・テスター専用サイトの[ログアウト]リンクでログアウトしたら次回からサイトにログインできなくなるw ・MPが回復しない ・↑TPを使うスキルでわずかにMPを回復させるものがある。これにより格上に挑まない限りMP切れにはならない ・PTの参加・離脱がスムーズにいかない  (リーダーが(?)戦闘中だと参加・離脱ともにどれだけ離れていてもできない) ・武器・防具には耐久があるが、なにがどれだけ減っているのか一目でわからない ・武器・防具の修理時に、どの生産職で修理可能か表示がない ・競売所がない ・バザー(露天)を開いているキャラはわかるけど、タイトル表示がないため何を売っているのかわからない ・バザーを一覧表示し、そこから売買できる機能が用意されていない ・武器を変えるたびに、スキルスロットに登録したものが初期化される ・↑ユーザーマクロを設定することにより、武器の持ち替えやスキルスロットへの登録を自動で行える ・生産職で製作するときに、現在何が作れるかの表示が一切ない ・各国間の移動が活発に行われるべきなのに、移動しにくいように制限されている ・他人のリーヴ中のモンスターが見た目ではわからない ・戦闘中、エフェクトとモーションが出る時と出ない時がある ・チャットログの表示が上下にカクカクカクカク何度も揺れることがある (修正済) ・夜空の星の移動速度が異常に速い ・サポートセンターから不具合報告は「不具合フォーム」からしてくれと言われるが、  テスター専用サイトにある「不具合報告」をクリックすると、アクセス権がないと言われる。  (オープンβで参加した人には不具合報告する場所がない!?) ・稀に選択ウィンドウの枠と背景が表示されないことがある(字はでる) エーテライトと修理NPCで発現 ・AIの問題かもしれないけど、リムサ・ロミンサの"プーク・ハッチリング"に○青で挑むと  HPが少なくなると逃げまわって超回復するため、予想以上の長期戦になることがある。(15分程w) ・自分で武器防具を修理するのに時間がかかりすぎる(修理NPCでは50%までしか直してくれないため)  修理NPCが75%まで直してくれるよう調整されたので楽になった ・修理NPCで75%まで直しても消耗アイコンが消えない ←たぶんアクセサリーが修理されていない ・修理NPCに「持ち物全部」を修理する項目がない ・修理NPCで指輪などのアクセサリーが修理されない ・アイテム欄にてマウスホイールでのスクロールが鈍い ・アクションを選択するときに、取得していないスキルの説明が表示されることがある(頻繁) ・フィールドにて、当然かもしれないけど、どこかで見た風景が繰り返される場合がある ・戦闘時に選択したスキルがきちんと表示されない(詠唱中のバーなどに表示されるスキル名) ・他人と同じタイミングで同じギルドリーヴをやっていると、出現するはずのモンスターが  なかなか現れず進行が遅くなる ・敵のHPがゼロになっても、倒れるモーションが表示されるまでに数秒の"間"があることがある ・敵がその場にいないのにグラフィックだけは表示され選択もできることがある(攻撃しようとすると消える) ・製作を始めるときにサーバーとの通信状態が必ず悪くなる(アイコンが赤になる) ・船での移動時が暇すぎる ・マクロ編集で入力するタイトル文字列がスロットに表示される四角形のアイコン中で折り返されない ・マクロ入力の行をドラッグ&ドロップなどで位置を入れ替えることができない(挿入ができない) ・3人称視点では、オートランしているときしかカメラが自分の後ろに固定されない ・スキルの説明にキャストタイムやリキャストタイムが書かれていないものがある ・フルスクリーンモードで、他のウィンドウに切り替えると強制終了する  (ウィンドウモードでは最小化しても大丈夫) ・アイテムをNPCに売ったあとカーソルが数秒かたまる ・メール機能がない ・画面サイズ変更などの設定がゲーム内ではできず、別のアプリになっている ・発言したときに吹き出しがでないため、どこにいるのかさっぱりわからない ・全体MAPにPTメンバーの位置が表示されない ・疲労度システム(?)というのがあるみたいだけど、どこにも数値やアイコンの表示はなく  現在の疲労度がわからない ・FF14のプレイヤーズサイトで、他人のキャラクターデータが簡単に見れてしまうw ・アイテムの整列機能がない ・コンフィグのログ表示設定で発言系以外をOFFにしてしばらく狩りをした後に  "最初の設定"ボタンで元に戻すと、OFFにしていたログがものすごい勢いで表示される ・チャットログのタブが増やせない ・PT募集でパスワード付きの募集ができない ・敵の強さを表すアイコンの最低が○青までで、これの下がないためPT時に勘違いして  強い敵に挑んでしまう ・バザーのログがないため、何が売れたのかわからない ・他のキャラクターのグラフィックデータ(?)を読み込むたびに画面が止まる  (これは読み込むときの処理を別スレッドに任せることで回避できると思う) ・製作のとき、材料を選んで作成し、次の材料を選ぼうとするとカーソルがさっき選んだ材料ではなく  アイテム欄の一番上に戻ってしまっている ・状態異常がキャラの頭の上ではなく、画面の上のほうに表示されるため見にくい ・製作中に現在何を製作しているかの表示がない ・リテイナーを商業区に設置すると呼び鈴で呼べなくなるため使い勝手が非常に悪い ・他人のキャラが空中を走ったり、壁をすり抜けていくことがある (実際には違うと思うがそのように表示される) ・Lvが上がると格下の敵からのシャードはもらえなくなるのに「コプラン」からは高確率でもらえる ・バザーのマークは名前のところにつくのにPT募集のマークはつかない ・歩いていけない場所に敵が出現し、溜まっていることがある (段差からの攻撃も距離が離れすぎていてできない) ・チャット機能がへぼい  tell を返信するにしてもいちいち相手の名前を入力しなければならない ・ウルダハの船着場で釣りをしていると、船が出航しても釣りが続行され、やめると突然船の中にワープすることがあるw ・装備を自分で修理するとき、修理材料が消費されないことがある

Labels:

2010/08/06

WPFのRichTextBoxはメモリを大食いする

WPFのRichTextBoxは、内部的にXAMLで表されているためなのか 525KBの文字入力だけで、使用メモリは200MBを超えた・・・ 従来の Windows Form の RichTextBox に同じものを入力したら約24MBだった・・・ これには唖然とするしかないw あれ、今って、家庭用のPCにメモリ4TBとか載ってたっけ? 本格的にWPFへの移行が始まっているのかなと思っていたらこの結果・・・ やばくない?・・・ こんなんじゃとてもじゃないけど実用として使えないよね・・・ まさかWPF全般がこんな状況ってことはないよね・・・ 心の声:『まてまて、おまえが XPのSP3 なんて旧型OS使ってるからこういうことになるんだ       Vista か 7 で試してみろ』 現実の声:『だ、だよね うちが悪いよね』 現実の声:『あ、あの・・・Vistaで試したんだけど、順調にメモリ増加していきました』 心の声:『・・・。』

2010/07/22

OneNote

OneNote いいよ! なんでもコピペできちゃうからほんとにノート感覚でサクサク使える 頭の中のイメージもスラスラでてきちゃう あれ、なんか褒め過ぎだな…いや、でも、ほら、あれ、これ、いいよ!

2010/07/21

InfoQ

技術情報サイト

2010/07/19

Visual Studio 2010

VS2010 を学ぶためのリソースが示されている それにしても VS2010 は結構よさげかもしれない

Labels:

2010/03/11

MP4コンテナとh.264動画の再生問題

★ Bフレームを使用していると、再生の最初に空フレームが最低1つは入ってしまう   (Bフレームを使わないh.264動画なんて考えられないからほぼすべての動画にいえる)  ・解決するにはMP4コンテナに edts データなるものを追加すれば良いらしい   ・http://www.esnips.com/web/VFRmaniac-Softwares   ・VFR maniacさんが、edtsを標準で追加する mp4box改造版 を公開している   ・これを利用すれば問題は解決できる   ・ただし、この問題が注目されたのは随分最近のようで、世の中のほとんどのソフトが edts データを無視している   ・そのため、正しく edts をセットしてもあまり効果はない(けど、これからのためにセットしておくべき)   ・CoreAVC2.0 では edts を考慮しているのかは不明だが、そもそも最初の空フレームが生成されない   ・edts をセットしたファイルを再生させてみると・・・    ・QuickTime(7.6.5) は、edts を見ているらしい    ・Flash(10,0,45,2) は、edts を見ているのかは不明だが、正常に再生される   ・edts をセットしない場合は、    「空フレーム分」のフレーム数だけ音声を遅らせないと映像とズレる    (Bフレーム使用で1フレーム、b-pyramid も有効にした場合は2フレーム遅れる)    情報元:http://www.204504byse.info/nico/   ・edts をセットした場合は、    OK   ・edts をセットした場合としない場合の差は、「空フレーム分」だけなので、気持ち悪さを感じる差ではない

Labels:

2010/02/14

Badaboomのフレームレート処理が甘いorz

いまさら感が強いけど、Badaboomのフレームレート処理が甘いorz MPEG2 NTSC 29.97fps にてフィルムモードをオンにしても 23.976fps にならないため、映像と音声がずれる。 どうがんばっても 24fps ・・・ これじゃまったく使い物にならないw

Labels:

2008/04/21

TrueCrypt

HDD丸ごと暗号化しちゃいます@@

2008/04/09

[F#] .NETライブラリから返される「null値」はどのように扱えばよい?

boxing 機能を用いることで、「null値」と比較できます。
box (value) <> null
パターンマッチで判断することもできます。
match x.ReadLine() with 
| null -> None 
| line -> Some(line)
.NETライブラリで最終的に null値 を返す関数を扱うときの多相的関数(ジェネリック関数)
#light

/// Usage: "SeqGivenFuncTillNull<string>(sr.ReadLine)"
let SeqGivenFuncTillNull<'a when 'a:not struct> (f:unit->'a) :seq<'a> =
  seq {
        let v = ref (f()) in
        while box (!v) <> null do
          yield !v
          do v := f()
      }
StringReader を例にすると、以下のようになります。
let str = "testeseテスト!\ndeoweiru!ewp!";;
let sr = new StringReader(str);;

let lineSeq = SeqGivenFuncTillNull<string>(sr.ReadLine);;

let main =
  for line in lineSeq do
    printfn "%s" line
  done
StringReader は TextReader を継承しているので、 TextReader を拡張し、"SeqGivenFuncTillNull"を意識しないようにもできます。
/// Extend IO.TextReader.
type System.IO.TextReader with
  member it.to_string_seq = SeqGivenFuncTillNull<string>(it.ReadLine)

// Usage:
let s = "first line\nsecond line\nthird line\n"
let sr2 = new System.IO.StringReader(s)
for line in sr2.to_string_seq do   // Life is good :)
  printfn "%s" line;;
また、F#で扱いやすいように Option で包むことも可能です。
type System.IO.TextReader with 
    member x.TryReadLine() = 
        match x.ReadLine() with 
        | null -> None 
        | line -> Some(line)

let SeqGivenFuncTillNull2 (f:unit->'a option) :seq<'a> =
  seq {
        let v = ref (f())
        while (!v) <> None do
          yield Option.get (!v)
          do v := f()
      }

Labels:

2008/04/06

[F#] F#でのSTM(Software Transactional Memory)

Software Transactional Memory for F# http://cs.hubfs.net/blogs/hell_is_other_languages/archive/2008/01/16/4565.aspx wikiによると、STMとは 「データベーストランザクションに似た並行性制御機構であり、並列計算を行う際の共有メモリへのアクセス法である。」 とある。 つまり、複数のスレッドから読み書きされるデータの整合性を保証する役目ってことかな。 従来のロックベースの代替案として注目を集めているみたい。 そんなわけで、リンク先にあるのは、「STMをF#で使えるようにしてみましたー!」的なライブラリ (コア部分はC#で書かれてるんだって) おまけとして「サンタクロース問題」のソース付  

Labels:

2008/04/02

[F#] 二分木(binary tree)専用のmap関数

Memo : Node(左の木, このノードの値, 右の木)
type 'a tree = Nil | Node of ('a tree) * 'a * ('a tree)
再帰的: (通りがけ順, 中置記法)
let rec map0 f t =
  match t with
    Nil -> Nil
  | Node(l,v,r) -> let v' = f v in Node(map0 f l, v', map0 f r)
末尾再帰的: (帰りがけ順, 逆ポーランド記法)
let map3 f tree =
   let rec map' subtree build =
       match subtree with
           | Nil -> build Nil
           | Node(l, v, r) ->
               let v' = f v in
               map' l (fun l' -> map' r (fun r' -> Node(l', v', r') |> build)) in
   map' tree (fun x -> x)
テスト用コード:
// 関数のリスト
let maps : (string * (('a->'b) -> 'a tree -> 'b tree)) list = 
   [
    "map0 (non-tail-recursive):", map0;
    "map3 (Vladimir's functional):", map3;  
   ]

// 木の表示
let rec print_tree t = match t with
  Nil -> printf ""
| Node(l,v,r) ->
    printf "(";
    print_tree l; 
    printf "%d" v;
    print_tree r;
    printf ")"
;;

// テスト用の木の用意と、関数のリストに登録されている関数の実行、そして木の表示
let _ =
  let tree = Node(Node(Node(Nil,1,Nil),2,Node(Nil,3,Nil)),5,Node(Node(Nil,6,Nil),7,Node(Nil,8,Nil))) in
  print_tree tree; printf "\n";
  List.iter (fun (s,map) -> print_tree (map (fun x -> x+1) tree); printf "\n") maps
;;
テスト用の木構造 結果:
(((1)2(3))5((6)7(8)))  -- テスト用の木
(((2)3(4))6((7)8(9)))  -- 関数適用後の木 -- map0
(((2)3(4))6((7)8(9)))  -- 関数適用後の木 -- map3
再帰的な定義は、非常に簡潔でわかりやすく、実行速度も速い。しかし、メモリ消費量が大 末尾再帰的な定義は、簡潔ではなく、実行速度も遅い。しかし、メモリ消費量が小  

Labels:

2008/03/30

[F#] seqリストで ”指定した条件の直前まで” 抜き出すにはどうするの?

コード:
let takeUntil p (s : #seq<_>) =
  seq {
        let enum = s.GetEnumerator() in
        while enum.MoveNext() && not (p enum.Current) do
            yield enum.Current 
        done
      }
使用例:
let even_choose i = Seq.choose (fun x -> if (x &&& 1) = 0 then Some(x) else None) i

{1..10} |> even_choose |> takeUntil (fun x -> x > 6) |> Seq.fold ( + ) 0;;
結果:
val it : int = 12
{1..10} -> [1;2;3;4;5;6;7;8;9;10]  // リスト作成
even_choose -> [2;4;6;8;10]        // 偶数のみ選択
takeUntil -> [2;4;6]               // "6より大きい数が現れるまで" のリストをGet
Seq.fold -> 12                     // リストを合計 シチャイマス
 

Labels:

2008/03/29

ExcelでC#やVBやF#を利用する

"ExcelDna"(http://exceldna.typepad.com/) ExcelのセルにてC#/VB/F#で書いた関数を利用できるようになる DLLの関数を利用する場合は、.NETの言語であればなんでもいいみたい ".xll"と".dna"ファイルが対になって動作するようになっているので "test1.xll" と "test1.dna" のように名前部分を同じにする ".xll"ファイルは、ZIPに同梱されている"ExcelDna.xll"ファイルをリネームして使う C#で書いた関数を利用する場合 [test1.dna]
<DnaLibrary Language="CS">
  <![CDATA[
     using ExcelDna.Integration;
   
     public class MyFunctions
     {
         [ExcelFunction(Description="Joins a string to a number", Category="Useful functions")]
         public static string JoinThem(string str, double val)
         {
             return str + val;
         }
     }
  ]]>
</DnaLibrary>
F#で書いた関数を利用する場合
<DnaLibrary Language="Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider, FSharp.Compiler.CodeDom, Version=1.9.3.14, Culture=neutral, PublicKeyToken=a19089b1c74d0809">

      let sayhello () = "Hello from F#"
      let add x y = x + y

</DnaLibrary>
"FSharp.Compiler.CodeDom.dll"のVersionとPublicKeyTokenを合わせる

2008/03/26

[F#] 開発者との距離が近い

hubFSとかでのF#開発陣との距離の近さに改めて感心・感動 いい感じだゼ  

Labels:

[Silverlight 2.0] Deep Zoom デモ

これいいねー 平面で全体をざっと眺めて、気になる箇所をズームアップ! さらに気になる箇所をズームアップ! またまたズームアップ! あれ? そこどうなってんの? ズームアップ! Webマガジンとかでこんな形式とったら、おもしろそう

2008/03/23

[F#] 約log2n回の再帰呼び出しでべき乗(累乗)を計算する

29の場合は、次のように表すことができる これを下から上へ辿ると 内側から計算すると n が偶数のときには以下が成り立つ (res : 計算結果) n が奇数のときには以下が成り立つ n=9 を2進数で表すと 1001 2進数の場合は、最下位ビットが1だと奇数なので、それを調べて処理分けしています。
let pow7 (x:bignum) n =
  let rec poww d = 
    if d = 1 then
      x
    else
      let res = poww (d >>> 1) in
      if (d &&& 1) = 0 then
        (res * res)
      else
        (res * res * x)
  in
  poww n
実行結果:
> pow7 2N 9;;
val it : bignum = 512N
 

Labels:

2008/03/22

[F#] 動的に数値型Interfaceを対応付けて関数を動かす

GetNumericAssociation なるもので動的に数値型Interfaceと対応付けられるみたい (http://cs.hubfs.net/forums/thread/3129.aspx) コード:
#light
open Math
open Math.GlobalAssociations

let Add (n1:'a) (n2:'a) =
    let tn : INumeric<'a> = GetNumericAssociation<'a>()
    tn.Add(n1, n2)
結果は次のように色々な数値型で動作させることが可能
Add 1 2
> val it : int = 3

Add 1. 2.
> val it : float = 3.0

Add 1L 2L
> val it : int64 = 3L

Add 1.f 2.f
> val it : float32 = 3.0f
デフォルトで float, int32, int64, bigint, float32, Complex, bignum が使えて、 他の型も登録することで選択肢に加えることができるんだって。 Add を他の関数で使うとこれまた同じ効果を得られる
let MyGenFunc (n1:'a) (n2:'a) (n3:'a) =
    (Add (Add (Add n1 n2) (Add n1 n3)) (Add n2 n3))
結果:
MyGenFunc 1 2 3
> val it : int = 12

MyGenFunc 1. 2. 3.
> val it : float = 12.0
パフォーマンスを気にする場合は、ひとつの関数定義の中にすべてを含めてしまい、
let MyGenFunc (n1:'a) (n2:'a) (n3:'a) =
    let tn : INumeric<'a> = GetNumericAssociation()
    let inline (+) (n1:'a) (n2:'a) = tn.Add(n1, n2)
    ((n1 + n2) + (n1 + n3) + (n2 + n3))
演算子を適切に定義することで可読性を高めることもできる らしい! 他の例としてはこんなの(http://cs.hubfs.net/forums/thread/3823.aspx
let sumList (data:'a list) =
  // get the F# 'INumeric' interface implementation for a type 'a
  let num = GetNumericAssociation<'a>()
  data |> List.fold_left (fun a b -> num.Add(a,b)) num.Zero;;

// sumList [1; 2; 3; 4; 5] ... returns 15
// sumList [1.1; 2.2; 3.3; 4.4; 5.5] ... returns 16.5
 

Labels:

2008/03/19

[F#] 重複を持たない組合せ(nCm)

こんな感じかな? 数学音痴なので基本式まんまです(^-^; コード:
let Combination n m =
  let rec CC n m =
    if m = 0 then
      1
    else 
      let i = CC (n - 1) (m - 1) in
        (n * i / m)
  in
  let i = CC n m in
    i;;
10 C 5 の場合:
Combination 10 5
  CC 10 5
    CC 9 4
      CC 8 3
        CC 7 2
          CC 6 1
            CC 5 0
            = 1 <-- i
          = 6 * 1 / 1 = 6
        = 7 * 6 / 2 = 21
      = 8 * 21 / 3 = 56
    = 9 * 56 / 4 = 126
  = 10 * 126 / 5 = 252
= 252
必ず割り切れるという性質を利用して、毎回割っています。
2008/03/19 - 末尾再帰的に書くとこうだ!
コード:
let Combination (n, m) =
  let rec CC (i, j, res) =
    if j > m then
      res
    else
      CC ((i + 1), (j + 1), (i * res / j))
  in
  CC ((n - m + 1), 1, 1);;
まちがいない!  

Labels:

2008/03/17

hubFS

F# の活発なコミュニティ たぶん、ここで質問すればほとんどの答えを得られるんじゃないかな  

Labels:

[F#] Unicode文字を関数名や引数に使用可能!

C# と同じようにUnicode文字を関数名や引数に使えるみたい コード:
let ほげほげ あふん = printfn "%s" あふん

ほげほげ "表示"
結果:
val ほげほげ : string -> unit

表示
日本語で書けると便利なときもあるよね  

Labels:

[F#] ネストしたリストをフラットにする

ネストしたリストをフラットにするコード
type 'a tree =
   | E of 'a   // Element
   | N of 'a tree list // Node

let rec flattenTree (t:'a tree) : 'a list =
   match t with
   | E e -> [e]
   | N n -> List.flatten(List.map flattenTree n)
使用例:
let t1 = N [ E 1; N [E 2; E 3]; E 4 ]
flattenTree t1
flattenTree (N [ E "a"; N [ E "b"; E "c"]; E "d" ] )
結果:
> val it : int tree = N [E 1; N [E 2; E 3]; E 4]
> val it : int list = [1; 2; 3; 4]
> val it : string list = ["a"; "b"; "c"; "d"]
ふむふむ・・・なんとなくおk!  

Labels:

2008/03/16

HTMLで半角空白や改行を含んだコピペを有効にする

HTMLで半角空白や改行を含んだコピペを有効にするには、<pre>タグを使えばOK もしくはCSSの white-space:pre でもOK ただし、<pre>タグの中の改行を<br>タグで表しているとブラウザでは改行されているように見えるけど コピペすると<br>タグは改行に変換されないので、一行に連なった状態になってしまう。
この状態が見られる有名どころは、Hotmail
Hotmail のメール本文をコピペすると、すべて一行になっちゃうので
<br>タグによる改行をしてるみたい
他のタグの場合は、コピペの時に<br>タグが改行に変換されるんだけどね <pre>タグの中で<br>タグが有効なら、改行に変換してくれてもいいのにw (FireFox は<br>タグを改行に変換してくれるみたい! 素晴らしい!) Bloggerでは、設定のフォーマットのところにある「改行の変換」機能がONになっていると 入力した改行はすべて<br>タグに変換されてしまうので<pre>タグを活かすにはOFFにする必要があります。 そうすると、面倒になるのが<pre>タグ以外のとき改行をするのに手動で<br>タグを入力しないといけなくなること。 これを回避するには、記事自体を<pre>タグで括ってしまえばOK テンプレートで次の記述を探し
<p><$BlogItemBody$></p>
次のように書き換える
<p><pre><$BlogItemBody$></pre></p>

2008/03/12

#light は要注意

いろんなサンプルに「#light」って記述されているけど、これ、かなりのクセモノかも。 「#light」ありの場合は、変数の同時束縛ができないみたい
let x = 1 and y = 2   // Syntax error
「#light」なしの場合は、普通にOK
let x = 1 and y = 2
"in" とか書かなくていいからよさげ?と思っていたのも束の間 見事にはまりました 玄人から言わせれば 「同時束縛なんぞ 使う機会ない」 ってことかな? それか、別の記述方法があるのか… ナゾナゾ
2008/03/13 - #light 慣れれば素敵かも?
別の記述方法があった!
let x = expr
and y = expr
expr
こんな感じに let と並べないとダメなんだって。
let x = 1
and y = 2
x + y
とすると、#light なしでこう書けるものは
let gg =
  let x = 2 in 
  let y = 3 in
  (let y = x and x = y + 2 in x * y) + y
#light ありだとこんな感じ?
#light

let gg = 
  let x = 2  
  let y = 3 
  (let y = x
   and x = y + 2 
   x * y) + y
同時束縛のときは”並べないとダメ!”とか決められると誰が書いてもこの書式になるわけで ソースを見るときは楽かもしれない! 他にも結構決められてるみたいだから、「書き方おかしいぜ」って言われたらマニュアル要チェックや  

Labels:

2008/03/11

F# は UTF-8 推奨だった

どうやら、F#は UTF-8 推奨みたい ソースファイルの文字コードを UTF-8 にしてコンパイルすると、Shift-jis では文字化けしていた文字列が普通に表示される。
○ let str = "表示する"
だけど、ソースファイル内での以下の表現は正しく処理されない
× let strb = "表示する"B   // この時点で正常なバイトデータが得られない
× 'あ'   // syntax error
とはいえ、次の表現は正しく処理される
○ let utf_strb = Encoding.UTF8.GetBytes(str)     // 正常なUTF-8のバイトデータが得られる
○ printf "%c" str.[1]   // 「示」が表示される
F# 内部では System.Char を使っているようなので、Unicode系は得意中の得意 そのため、上の printf ではちゃんと表示されるものと思われる(実データは3バイトもあるからね) 正しく処理されない表現は、F# のソースから System.Char に渡すまでのどこかで拒否られているっぽい 直せるものなら直してほしいけど、ダメならダメで特に困ることはないかも?w ささ、ソースファイルは UTF-8 で保存してコンパイルしよう! VS2008 の場合は、標準が Shift-jis なので注意ダ  

Labels:

2008/03/05

F# はまだ多言語対応じゃなかった

F# はまだ多言語対応じゃなかった…泣ける 日本語の文字列を表示させると、文字が化け化け…うあーん… もうそろそろ多言語対応にしてもよくない? いあ、そろそろしないとやばくない? せめてUTF-8ぐらいを標準にしてほしいよー! ----------------------- .NETのクラスを使ってファイルから読み込んで表示する分には正常 ソースファイルに直接書いたものは化ける(はて? F#標準の文字コードがASCII設定とか?) ----------------------- 正常にSHIFT-JISの文字を表示できた!! けれど、わざわざ文字コードを指定してやらないとダメらしい(当たり前?) ・SHIFT-JISの文字列を bytestring という値、つまり byte [] と定義する ・Encoding.Default.GetString(???) で string にして表示
    let strb = "表示する"B
    let shiftjis = Encoding.Default.GetString(strb)
    printf "%s" shiftjis
マニュアルによると「bytestring := stringB」らしい。確かにその通りでした(^-^ こうするものだと言われるとそうなのかもしれないけど、使う側からすればこの程度は言語側で吸収してほしい おそらく現在のF#では ・string の値が与えられる (ソース上で)   ・Encoding.Default.GetBytes(string) にて byte [] へ変換     ・Encoding.Default.GetString(byte []) にて Default文字コードの string へ変換       ・変換結果を文字列として扱う という感じになっているような気がする。(どこかの時点でね) ここで問題なのが、Encoding.Default.GetBytes() なぜか、これを通すと正常なバイトデータが歪められる(^^;; 結果として文字化けのように表示されてしまう 試すとわかりますが、 "文字列を用意してそれを表示した場合" と "文字列にGetBytes()を使用した場合" の結果は同じになります。 結局現在のところ、ソースに書かれた2バイト文字はそのままでは正常に表示できない。 うーん、どうなんだろ これw # OCamlで「表示する」という文字列は、工夫しないとうまく表示されないそうです

F# wiki

wiki wiki

OCamlがやってきた

英語のF#本も良いですが、日本語でみっちり書かれている兄弟本から得られることも大きいはずです。 F#はMLの派生ということになっているようです なので、同じML派生のOCamlは兄弟であり、親ではない よって、F#とOCamlは、基本的な部分は似ていても、拡張部分になると大きな違いが表れると思われます。 あぁ、関数型脳が降臨しますように!

2008/03/04

FSharp.it

ちぇきちぇき

2008/03/03

いげ太のブログ

hogehoge!

[F#] - u_1rohのカタチ

メモ的にいろいろ載っているのでグー

2008/03/01

F# 入門 : .NET Framework で関数型プログラミング手法を使用する

丁寧に説明されているので、さらっと入れます 最初に 「#light 」 と記述するのをお忘れなく

2008/02/29

F#

.NET に新たな言語が仲間入りするようです。 2007/07 あたりに登場したようですが、今まで知らなかったああああ F#は関数型言語のスタンダードとなるべく、爆走体勢に入っている模様。 全く違う方向性の言語を取り込めてしまう.NETの仕組みの柔軟さにあらためて脱帽してしまう。 登場した当初も「これ、すんげー!!」とは思ったものの、言語の顔ぶれは特に変わらなかったから すごさも半減みたいな感じだったけど、こうやって新たな言語が追加されると「おおーっ」と思っちゃうね F#は既存の言語が苦手としていた部分を助ける感じになるだろうね。 随分前に書かれたものだから現在とは違うかもしれないけど、良書らしい! [Foundations of F# (Expert's Voice in .Net)] http://d.hatena.ne.jp/NyaRuRu/20070718/p1

2008/01/21

[雑記] LINQ to SQL 実践編 (C# によるプログラミング入門)

とっかかりに(^-^

LINQ to SQLを使用する (パート1) - ScottGuさんのブログ翻訳

2007/12/14

CodeZine:Visual Studio 2008 日本語版の開発完了、MSDN会員は本日よりダウンロード

VS2008 日本語版キター!

2007/12/12

CodeZine:システム品質向上のワザ -VSTDの単体テスト機能を極める-

NUnit系より便利そう VS2008TeamSystemには標準装備みたい

CodeZine:Google Chart APIを手軽に扱えるJavaScriptライブラリ「GChart 0.2 alpha」リリース(Javascript)

2007/12/11

CodeZine:C#.NETによるMicrosoft Outlookの統合(メール)

CodeZine:Google、さまざまなグラフ画像をURLだけで生成できる「Google Chart API」公開