構造体に関数を登録する & 関数の引数の個数はバラバラ

アセンブルエミュレータを作る課題が出てます。
オペコードを分析して、その命令モジュールを実行という作業をスマートに行いたいので、
構造体に関数ポインタを保持して実行するテストプログラムを作ってみました。

#include <stdio.h>
#include <stdarg.h>

struct exesample_str{
	int x;
	int (*execute)(int, ...);
};
typedef struct exesample_str exesample;

int func1(int a, int b, int c);
int func2(int a, int b);
int func3(int a);

int main(void){
	const exesample test[3] = {
		{3, func1},
		{2, func2},
		{1, func3},
	};
	
	int i;
	int tmp;
	for (i = 0; i < 3; i++){
		switch(test[i].x){
			case 3 : tmp = test[i].execute(5,4,3); break;
			case 2 : tmp = test[i].execute(5,4); break;
			case 1 : tmp = test[i].execute(5); break;
			default : tmp = -1;
		}
		printf("test[%d] -> %d\n",i,tmp);
	}
	
	return 0;
}
int func1(int a, int b, int c){
	return a * b * c;
}

int func2(int a, int b){
	return a + b;
}

int func3(int a){
	return a;
}

結果

$ gcc -Wall -o kahencho kahencho.c
kahencho.c: In function `main':
kahencho.c:19: warning: initialization from incompatible pointer type
kahencho.c:20: warning: initialization from incompatible pointer type
kahencho.c:21: warning: initialization from incompatible pointer type

$ ./kahencho
test[0] -> 60
test[1] -> 9
test[2] -> 5

おお、動いた。初めて関数ポインタ使ってみたけど簡単ですね。
関数の引数の個数はバラバラなので、可変長引数の関数ポインタを使ってみました。
warningが出てしまうので、もっといいやり方があるんでしょうけど。そこは課題としておきます。


参考リンク
第6回 構造体に「関数」を登録する | 日経 xTECH(クロステック)
http://www.ecl.sys.hiroshima-u.ac.jp/~shintaku/cpp_1-04.html

Rubyでやるお

プレ卒でRubyを使おうと思っているのでこれから少しずつ使っていこうと思います。
といってもまだ入門書を読んだレベル。全く持ってかけません。

やりたいこと

英単語調べるのが面倒なので単語帳みたいなのを手軽に作りたい。
単語だけ渡して、自動的に調べてくれるプログラムを作ってRubyに慣れる。

やったこと

  • 辞書が必要!ということで英辞郎のサイトをopen-uriでもってopen。
  • なんか文字化けしてる!
  • 文字コードUTF-8なのでtosjisしてあげる。
  • おー日本語が取り込めた・・・ん?
  • 『★JavaScriptについてご利用のブラウザはJavaScriptが無効に設定されています。お手数ですが、ブラウザのJavaScriptを有効にして再度アクセスしてください。』
  • ですよねー。やっぱ野良のやつ拾ってくるには無理があった。

ということでつまったので素直にAPI拾ってきてやります。

いまここ!

ところでopen-uriで↑のようにJavaScriptが有効じゃないと見れないページってどうやって取得するんでしょう?

メモの置き場所まとめ

自分で使っているメモの置き場所まとめです。
どこにメモをしているのか忘れないためのメモ。

web、リンク
  1. はてなブックマークはてなブックマーク - n111のブックマーク (タグで管理、たまーにコメントつける)
  2. Google Bookmark (簡単にURLを覚えておきたいとき、はてブをつけるまでもないもの、後で読むも含む)
  3. はてなスターn111のブログ - はてなスター (気に入った記事をぽちっと)
  4. tumblr (引用)(あんま使ってない)
  5. ニコニコのマイリスト
  6. Amazon欲しいものリスト
  7. ブラウザのお気に入り@local(あんま使ってない)

ブラウザはロケーションバーに直で打ち込むことが多くなった。

思考など
  1. Twitter
  2. Twitterのfav (自分で自分の発言をfav)
  3. ブログ
    1. Home - NGTV
    2. 脳内のリソースが不足しています。 - キューイチ世代
    3. このブログ
    4. 同好会のブログ
他、いろいろ
  1. Gmail (情報保管庫?)
  2. Remember the Milk (もう使ってない)
  3. 紙copi @local (ちょっとしたメモをPC上でとるときに、Webページの切り抜き)
  4. A5ノート @local (普段持ち歩く、とっさのときのメモ、アイデアの書き出しをがりがり、100円ノートの「超メモ術」)
  5. ToDoボード @local (普段持ち歩く、ノートなどに書いたToDoを付箋に書いて張っている)
  6. 授業用ノート @local


とりあえずメモ最強は何と言っても手書きに限るのですが(入力のしやすさから)、検索ができないのとコンピュータにある情報を扱うことができないのが面倒なところ。紙媒体→電子データにするしかないけどめんどくさい。
あとGmailにバックアップなどを送って情報の一括管理、データベースができないかなー?

自己紹介

とりあえずはてダでいろいろ書いていこうと決めたので自己紹介的ななにか

http://iddy.jp/profile/hush/

情報系の高専生です。昔はFlashでMotionGraphicsもどき作ってました。デザインに興味あり。アニメやゲームや漫画にはまっていた時期もありましたが熱は過ぎました。
最近は高専プロコンの課題部門に参加しました。審査員特別賞いただきました。

これからの意向

これからはRuby使ってサーバーサイドのプログラミングをやろうかなと思っています。RailsWebサービスを作ってみたいです。
また、計算機プログラムの構造と解釈(SICP)を買ってきたので関数型言語を学んでプログラミングの深いところまで学んでいこうかと思ってます。
あとは、WebAPIを使って新しいものを作りたい。→今回のプロコンはそんな感じ。javascriptもそのうち手をつけてXHTML+CSSまでしかできなかったWebデザインに動きを加えたい。
他にもASやProcessingなどでインタラクティブアートをやってみたいです。AEのエクスプレッションも面白そう。フィジカルコンピューティングとかARでアート的なことをやっても面白いかもしれない。

こんな感じです。MVCパターンのすべてを網羅したい みたいな

「○○したい。」と言って頭がいいように見せるライフハック。いや、いい加減どこかに技術の根を張りたいんですけどね!いろいろ気になって手がでちゃいます。

かなり自分向けのブログになりそうです。またエントリーごとに文体が変わると思いますがよろしくお願いしますw