methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

program

オセロのデータ構造 in C#

マイミクにサンプルを見せようと思ったけど、mixiのメッセージにファイルが添付できないのでココにはっつけておく。 どっかのサービスで、コードをはっつけると色を付けてくれて、urlで参照できるようにしてくれるのがあったんだけど、どこだったか忘れちゃ…

メモリを開放しないスタイル

デーモンのように動き続けるプログラムではなく、起動して、処理して、終了するだけのプログラムでは、メモリを開放しなくてもいい。 main()の最後や、シングルトンのデストラクタで律儀にメモリ開放するのは、引っ越したら取り壊す家を綺麗に掃除するのに似…

初期化されないメモリ空間確保が必要

stream(ファイル、socket、他にももろもろな、stream型のi/o)からinputするときの受信バッファとして、「最大でN[byte]必要ってことはわかってるんだけど、実際にはNよりずっと少ないことが多い」という場面は良くある。 で、仮想メモリ空間の広さに比べて…

音声バッファ

http://d.hatena.ne.jp/shotaro_tsuji/20070602/1180785883 出来る限りバッファのアドレスをセットするまでの時間を削ったけどもう無理だわ。操作中だけでも割り込み禁止に出来たらいいのに・・・ そんなにレイテンシ必要なしくみなんだろうか?http://d.hat…

自分のメンバ関数をtransform()とかに渡す

方法を探していたら、cppllのML過去ログから発見! http://ml.tietew.jp/cppll/cppll/article/8913 ・・・2003年、「思兼」って俺だなぁ。こんなコメントした覚えあるなぁ。 とりあえずサンプル. #include <vector> #include <algorithm> #include <functional> struct Hoge { using namespace </functional></algorithm></vector>…

メモ:boost::progress_timer

何かの時間を計るときに便利。2回時間を計って差分を表示という一連の手順を、コンストラクタとデストラクタでやってくれる。 http://www.boost.org/libs/timer/timer.htm

pImplパターンとtemplateと

pImpl作っててぶち当たった問題。ドキュメントをIteratorで渡すtemplateメソッドとしてコンストラクタを定義していたんだけど、pImpl使っちゃうとヘッダファイルにコンストラクタ置けないorz で、templateをソースファイルに書くと、templateの利用者がどん…

OOPと参照ベースの相性の良さ

今週も、「SA作ってみよー」の流れで行ってる。 今はドキュメントを元にSAをメモリ上に構築して、そこから検索しているんだけど、もうそろそろSAを保存してあとから使いたい。 で、Javaならクラスメソッドで class Sa { public static Sa fromDocument(Input…

C++のtemplate難しいよ・・・

コンパイルエラーが一行で何百文字あるんだよ・・・。 いまさらだけど、Modern C++ Design買おうかな。それとも、D言語に乗り換えたほうが幸せになれるかな・・・。

STLの設計者は偉い

5/29の、equal_range()の型縛りの件は、完全にうそでした。 comp(*it, val) と comp(val, *it) が両方通って、<と同じ性質(a

C++で誰もが嵌る罠

関数のローカルでfunctorを作って、その関数オブジェクトをアルゴリズムに渡せない罠。 #include <iostream> #include <numeric> #include <ext/numeric> #include <vector> #include <algorithm> using namespace std; int main(void) { vector<int> v(100); iota(v.begin(), v.end(), 5); struct print_v : public u</int></algorithm></vector></ext/numeric></numeric></iostream>…

ぐはぁ

気づいたらid:odzさんからTBもらってたよ! しかも、Suffix ArrayをHDD上のファイルに適用する段階でstringやめてiterator使おうと思ってたのに、id:odzさんにサクっと作られちゃったよ! 真のSTLプログラマは、まず普通のコード書いてからそれをtemplateに…

libcont???

http://d.hatena.ne.jp/higepon/20070526/1180179990 Linux はスタックを徐々に拡張することを要求するので、ダミーの再帰関数であらかじめスタックを拡張しておく仕様になりました。 contはcontinuationって意味か。 スタックを拡張しておく・・・よく判らない…

std::equal_range()の型縛り

この記事の内容は全部うそです。5/29の日記を参照してください。(5/29)さて,saが構築できたところで,検索しようと思う.各文字の出現回数を保存すれば元文書は消しても良いのだが,それは後回し. のstd::equal_range()は,順列に並んでいるリストから,指…

binder1stはとっても中途半端

引数を2つ取る関数の第一引数に実引数をbindして,引数を一つ取る関数に変換するためのクラス.ちなみに,第二引数にbindするのはbinder2nd.もひとつちなみに、binder1stがやってることをカリー化(curring)という. binder1stはoperator()を提供するクラス…

Erlangの強さ

Erlangで言うプロセスとは、実はfiber(aka. micro-thread, nano-thread, pico-thread)*1。で、fiberの実行コンテキストには、(たぶん)別スレッド、別プロセス、リモート(ネットワーク越し)、があるので、マルチコアCPUを使えば速くなるし、コンピュータを…

Scala.NET

.NETならNemerleが、JavaならScalaが、関数型言語で、かつオブジェクト指向な型システムに直接対応(直接.NETやJavaのクラスを使える)している、注目言語だった。 関数型言語といってもNemerleとScalaは全然違う言語だったんだけど、Scalaの.NET版があった…

オブジェクト指向プログラミング vs 型マッチングシステム

http://d.hatena.ne.jp/w_o/20070422#p3 を読んで思ったこと。例えば、JavaのTreeSetを例にすると、 All Implemented Interfaces: Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>, SortedSet<E> ... iterator public Iterator<E> iterator() Returns an iter</e></e></e></e></e>…

高階関数

http://d.hatena.ne.jp/cubicdaiya/20070507/1178546005 ただ、前にこんなことを書いて、そもそも、関数を引数にするということは、静的に流れが読めなくなるので、上流工程とか、形式的なプログラム検証からすると、非常に困る。というふうに、ある人からお…

何でもかんでもRDB?

Webの基本構成。Webアプリは、データをO/Rマッピングして、RDBに格納する。Webサーバーは、複数用意してロードバランサで負荷分散。DBは、信頼性のために冗長構成にするけど、同期を取る必要があるので分散するわけではない。 ・・・え、最後だけ、スケール…

fstream.get()

http://d.hatena.ne.jp/methane/20070413/1176457188 で、ifs >> c をfgetc()の代わりに使おうとしてハマった事を書いていたけど、fgetc()のiostream版はifs.get(c)でした。C++プログラマ自称してるのに、iostreamすら判ってないorz

s/stdio.h/iostream/

C++でプログラムを書いているときのこと・・・. ifstreamから1文字ずつ文字を引っ張ってくるんだけなんだけど、2つひっかかった。 一つ目. char c; while (ifs >> c) { // ... } ifs.seekg(0); while (ifs >> c) { // ... } 2回目が回らない。これは、ifsの中の…

C#3.0

って、上の問題は判りきっていた事で、対策中なんだな。この記事前読んだことあったのに忘れてた。 http://www.atmarkit.co.jp/fdotnet/special/pdc2005_02/pdc2005_02_01.html でも、C#のvarはコンパイル時に型推論…というか初期値の型で静的型付けするだけ…

動的言語

ときどき、動的型付け言語のことを動的言語と書いている文章を見ることがある。 動的言語というと、なんかプログラム自身が自分を実行しているインタプリタを書き換えて構文を変えてしまう…みたいな動的さを想像してしまう。 …Lispは動的言語??

Web系で動的型付け言語が人気なワケ

ここ数日、未経験だったWeb系がどんなもんか触れてみている。 Webプログラミングでは、DBやViewとのやりとりが大きな部分を占める。そして、DBに静的型付け言語でアクセスすると、Object形から適切な型への変換が必要になってしまう。*1 また、Viewとのやり…

Djangoの管理画面はDjango内蔵サーバー限定?

Djangoのチュートリアルを自宅でやってみたときは、まったく問題なかった。 で、会社でApache+Djangoの環境を構築してみたら…管理画面が素っ気無い。cssが404 Not Found。 Apacheの設定かApatcheとDjangoをつなぐ部分でURLの設定ミスがあるんじゃないかとい…

同値と同一とオブジェクトプール

http://d.hatena.ne.jp/crimsonwoods/20061129/1164783396 string.Emptyと文字列リテラル""について参照比較をした場合の挙動が、.NET Framework 1.1と2.0で異なることについて。MSDNを引っ掻き回してみると、string.Internに.NET Framework 1.1と2.0ではイ…

C言語でプロトタイプ宣言をヘッダに入れる訳

http://d.hatena.ne.jp/fkm/20061128/p1 今回の場合はmain.cでのみ使うという状況を想定したが、これがかなり複数のファイルからmatrix.cの中の関数が呼ばれるという状況となるとプロトタイプ宣言を各ファイルごとに記述するのは面倒。 C言語の場合、面倒さ…

ContextをInterfaceにする訳

http://d.hatena.ne.jp/fkm/20061125/p1 インターフェースにするとDoOkeyAction()の実装の部分で、インターフェースを実装してるクラスのフィールドとかメソッドとかを使って何かしたあとstate_->DoOkeyAction(this);とできる。 が正解。StateがState保持者…

Stateをクラスにする訳

http://d.hatena.ne.jp/fkm/20061126/p1 関数を値とするハッシュテーブルとか,C#ならdelegateを値とする配列orハッシュテーブル(実際にはDictionaryでジェネリクスだけど)以外でswitch退治というのは,野菜を切るのに刀を使ってるみたいで気持ちが悪い気…