プログラミング

Contract使ってみた

以下、ネガティブな記事です。 public void compute(List<List<double>> A, List<double> b) { Contract.Requires(A != null); Contract.Requires(b != null); Contract.Requires(A.Count >= 3); Contract.Requires(A[0] != null); Contract.Requires(A[0].Count == A.Count); Con</double></list<double>…

haskell:レコード構文

代入しているように見える。 レコード構文のシンタックス 定義 data Person = Person { firstName :: String , lastName :: String , age :: Int , height :: Float , phoneNumber :: String , flavor :: String } deriving (Show) 構築 1つ目 let guy = Pe…

ABC008:D 高速累乗アルゴリズム

累乗を高速に計算する問題に感動したのでメモ。問題:http://abc009.contest.atcoder.jp/tasks/abc009_4 解説:http://www.slideshare.net/chokudai/abc009 (pp.56-106) (1)ナイーブな解き方 ghci> main 5 100 2345678901 1001001001 3333333333 3141592653 …

c++の関数テンプレートと参照

関数テンプレートでは、型がバインドされるようなので、 こんな書き方ができるみたいです。 template <size_t N> unsigned int foo(const char (&str)[N]) { return N; } int main(void) { std::cout << foo("foo") << std::endl; return 0; } これはstrを参照で渡して</size_t>…

オブジェクト指向のこころ・10章・練習問題

基礎 切り出すという言葉と抽象的側面という言葉を定義してください 切り出す(decouple)という言葉は、ものごとが互いに独立して振る舞えるようにする、または少なくとも、それらの関係を明確に述べることを意味している 抽象的側面(abstraction)という言葉…

オブジェクト指向のこころ・9章・練習問題

Strategyパターンについて書かれた章です。 基礎 新たな要求を取り扱う方法として、どのような方法があるでしょうか? 変更のことを考慮して設計するアプローチを行う。 時とともにシステムがどのように変化していくのかを考える。 変更は将来必ず起こるもの…

c++0x decltype

#include <iostream> #include <limits> #include <typeinfo> using std::cout; using std::endl; using std::numeric_limits; using std::type_info; //using std::decltype; // 不要 int main() { cout << numeric_limits<int>::max() << endl; int foo; cout << numeric_limits<decltype(foo)>::max() << e</decltype(foo)></int></typeinfo></limits></iostream>…

メンバへのポインタのtypeid

#include <iostream> #include <typeinfo> struct tmp { int i; int j; }; int main() { int tmp::*ptr; // the pointer to a member of class tmp ptr = &tmp::j; // Note that tmp instance is not spawned std::cout << typeid(ptr).name() << std::endl; tmp foo; std::cout <</typeinfo></iostream>…

enumの使い方

今日こんなコードを見た。 enum FOO { INVALID = -1, CHERRY, BANANA, GRAPE, MELON, ORANGE, CAT, FRUIT_NUM }; 一番最後に置かれたFRUIT_NUMを使って、 int basket[FRUIT_NUM]という配列を宣言することができる。 面白いenumの使い方だと感じました。

C言語のソース中の宣言場所を表示・メモ

:help usr_29.txt [i RELATED COMMANDS [i only lists the first match ]I only lists items below the cursor ]i only lists the first item below the cursor [D [d only lists the first match ]D only lists items below the cursor ]d only lists the f…

同じ名前を持つヘッダファイルを開く.2

同じ名前を持つヘッダファイルを開く - bugfix そもそも間違っていたようです。 let l:hname = fnamemodify(expand("%"), ":t:r") の部分。 ヘッダファイルはカレントディレクトリ(:pwd)に開かれてしまうので、 編集している .c ファイルがカレントディレ…

同じ名前を持つヘッダファイルを開く

Cで、 他のソースファイルに公開する関数をヘッダファイルに書くときには .cと同じ名前を持つ.hに(わたしは)命名しています。 function! Open_header_file() let l:hname = fnamemodify(expand("%"), ":t:r") execute "edit " l:hname . ".h" unlet l:hnam…

PC別の設定を読み込む

あるマシン(windows)だけに 特殊なkey-mappingを定義させたかったので、 以下を.vimrcに追記しました。 http://github.com/pneu/vimrc/blob/06bd7bbc2c30352d3ac92855de78f099ff6c6514/.vimrc#L27 elseif has('win32') runtime custom/mainpc.vim endif cust…

WEB+DBvol.52のVimの記事を読みました

g:vim:id:ka-nachtさんが書かれた記事を読みました。vimの基礎からスクリプトを公開するところまで一貫して書かれており、 vimを使うのに必要な知識はもちろん、 vimスクリプトを作っていくために踏んでいくプロセスが理解できました。 また基礎を押さえた設…

yastに使われてるncursesのソースが見たいだけなのに

$ zypper search -t srcpackage yast2 $ zypper source-install -D yast2すると*.ycpっていうファイルばかりが見つかる。 この中にncursesの描画部分もあるのかしら。 うーむ URL YaST/開発/資料 - openSUSE Wiki

ソケットプログラミング.3

今回は,メッセージのやり取りができるようにしてみます. d:id:pneumaster:20090523:1243088465で, accept()の返り値について勘違いしていたみたいです. man -S 3p socketによると,accept()の返り値は RETURN VALUE Upon successful completion, accept(…

ソケットプログラミング.2

d:id:pneumaster:20090523:1243088465の続き. 前回は待ち受けるIPにINADDR_LOOPBACKを使って, ローカルホストからのみ接続可能になるようにしました. 今回は,ルータの外を回って接続できるようにしてみます. 外部を通ってコネクションを確立するために…

ソケットプログラミング

最近読んでるTCP/IPの本asin:4274065847の内容を試してみたいのと,windowsでソフト作ってみたいのと,二つの欲求からまずは簡単なものを作った. サーバが5001/tcpで待ちうけて,クライアントとコネクション張れたら切断する,というシンプルなもの. 文字…

FreeBSDのソースのダウンロード

http://techblog.yahoo.co.jp/web/yahoo_1/ls/ 読んでみようと思い,ダウンロードしようとするも 1ファイル毎しかダウンロードできないような気がして使い勝手が悪いように感じました. # ディレクトリ毎(コマンド毎)ダウンロードできるのだろうか. ftp…

wgetの-npオプションの実装

ふとしたことから,友人とある課題に取り組んでいるわけで. とあるURLにあるhtmlから,その階層以下のファイルのみを対象にしたパターンを考えている. 相対URLで`..'が出てくるのと, 外部ドメインのURLが`http://......'ではじまるだろうということで fil…

-std=c99と-std=gnu99は同じ?

四捨五入を計算するround()関数を使う機会があって, 次のようなコードをコンパイルしたところ, #include <stdio.h> #include <math.h> int main() { int i; double r = 0; for (i=0; i<11; i++, r+=0.1) { printf("\t%.1f\t%f\t%f\n", r, rint(r), round(r)); } return 0; }</math.h></stdio.h>…

コールグラフ

用意するものはgprof, graphviz(dotコマンド), cgprof. gprofのヘルプやマニュアルにある通り,コンパイル時とリンク時に gccに-pgオプションをつける. $ ./a.out $ gprof ./a.out | cgprof -Tps > callgpraph.psとすればよい. 既にgprof ./a.outを実行し…

static関数を別ファイルの関数からコールする???

まず最初に言っておくと,わたしの勘違いです. http://www23.atwiki.jp/selflearn/pages/20.html こちらの方の「static関数を別ファイルの関数からコールする」という記事で, static関数が外部ソースからコールできると書いてあったので,例えば /* main.c…

選択領域用レジスタを使ってvimからGTKのクリップボードへコピー.2

前回(id:pneumaster:20081202)では, geditやブラウザで使われるクリップボードをvimへペーストするために, xterm_clipboardという機能が必要なことがわかりました. この機能はvimコンパイル時に機能ありとされていなければならないものであり, つまり,v…

選択領域用レジスタを使ってvimからGTKのクリップボードへコピー.1

ある端末のvimから,別の端末のvimにコピーしたいときは :wv!と:rv!を使えばよいのですが, ブラウザのフォームなどのGUIアプリケーションに渡したいときには, viminfoを参照するはずないので,もちろんこれではうまくいきません. vimで:h registersを読む…

メモ.autocmdでのノーマルコマンド

vimグループに入ってからというものvimスクリプトというものを知って, それについての記事を見ることが多くなりました. 今まで.vimrcでの設定や,プラグインのためにs:foo=0とかやっていたのが, 実はvimスクリプトであったというのを知ってびっくり. 理…

C++の本売ってなかった

ニコニコ見るのに動画枠外の白い部分が邪魔なので, 何かソフトが無いか探してみたのだけれど,適当なものが見つからなかった. それなら自炊しようと軽くC++を眺め始めたら, 結構面白くて読み進めてしまった,今日,昨日...いや一昨日くらいから? Cを…

ビット演算メモ

AND get 立てたビットを取り出す OR set 立てたビットを立てる XOR スイッチ 立てたビットを反転させる

syntax, filetype plugin

syntax gtkのプログラムを作っていると,gucharなどのgtk特有の型がハイライトされておらず気になる. syntaxファイル自体は/usr/share/vim/vim71/syntax/c.vimにあるのですが, 自分用の設定なので,~/.vim/syntax/c.vimにコピーし,それを編集することにし…

ftrace

http://dsas.blog.klab.org/archives/51025093.html http://lab.klab.org/wiki/Software#ftrace こちらで作られたftraceが気になったので使ってみました. ftrace-0.93.tar.gzをopenSuSE 11.0で動かします. $ yast --install libelf-devel $ yast --install…