2018:
最新

blog/2007-03-31

假屋崎 省吾の何かの招待券を親がもらっていたので,行ってみた.
マスコミの力は偉大だと思った.


blog/2007-03-30

socketstream初版公開

プログラミング/C_C++/socketstream
それっぽく動いてるので公開します.
iostreamっぽくsocketが扱えます.

#include "socketstream.h"
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char**argv)
{
    cout << "byte_order:"<<BYTE_ORDER<<endl;
    socketlistener ltn(10000);
    socketstream socks(ltn.accept());

    if(socks.fail())
    {
        cerr << "accept error" << endl;
        return 1; // error
    }

    string buf;
    int d=0;
    while(!socks.fail())
    {
        socks >> d >> buf;
        if(socks.fail())
            break;
        cout << d << ":" << buf << endl;
        cin >> buf;
        d++;
        socks << d << buf;
    }
    socks.close();
    return 0;
}

こんな感じに使えます.整数型はバイトオーダをネットワークバイトオーダに変換して送ります.

1日位で終わらせて,これを作るはずだったのに,4日もかかってしまった.
3月は残り1日.

いくつか勉強になった気がするので良い事にする.

作ってて思ったこと

filebufに手を出したせいで,えらく苦労した.
filebufを捨てたら,半日で完成・・・.アンダーバーから始まる関数とかが少し嫌いになった.
VCのlibc++のソースは難読化を計ってるに違いない.
gccは素晴らしい.

ios_base

gccってclass ios_baseどこで定義してるんだ・・・?

bits/の中にあった.なんだこれは.


お名前:

blog/2007-03-29

うはぁ

バッファリングしないように,

setvbuf(fp, NULL, _IONBF, 0);

を追加したら,まともに動かないようになった...
色々試してみたけれど駄目だったので,バッファリングする仕様に戻さないと...

間に合わなかった...


blog/2007-03-28

socketstream続き 2007-03-29 03:02:26 (木)

バイトオーダ(BE,LEのみですが)を気にせずiostreamを使ってソケット通信できます.
いい加減なエラー処理を少しいじらないと...
明日には公開できそう.眠いので今日は寝ます.

#ifndef   CLIENT
#  define SERVER
#endif

#include "socketstream.h"
#include <iostream>
#include <string>

using namespace std;

#ifdef SERVER

int main(int argc, char**argv)
{
    cout << "byte_order:"<<BYTE_ORDER<<endl;
    socketlistener ltn(10000);
    socketstream socks(ltn.accept());
    __int32 num;
    string buf;
    socks >> num;
    socks >> buf;
    cout<< hex << num << endl
        << buf << endl;
    socks.close();
    return 0;
}

#else

int main(int argc, char**argv)
{
    cout << "byte_order:"<<BYTE_ORDER<<endl;

    socketconnecter con("localhost", 10000);

    socketstream socks(con.connect());
    __int32 num=0xF1F2F3F4;
    socks << num;
    socks << "sakana";
    socks.flush();
    socks.close();
    return 0;
}
#endif

こんなコードが通って動きます.

とりあえず,VC++8, cygwin+gcc3.4.4, FreeBSD+gcc3.4.4, MacOS X+gcc4.0.0
で動く事は確認.

socketstream

それっぽく動く.
Mac上で遊んだら,公開します.


お名前:

blog/2007-03-27

バイトオーダー

リトルエンディアンとビックエンディアンの交換ができる.

template<typename T>
class toNBClass
{
    template<typename U, int I>
    class imp
    {
        imp<U, I-1>next;
        U ret_;
    public:
        imp(const U&v)
            :next(v)
        {
            int andD=8*((sizeof(U)-I-1));
            U tmp=v&((U)0xFF<<andD);
            int d=sizeof(U)-I-1 -I;
            if((sizeof(U)-I-1) > I)
                ret_=(tmp>> d*8) | next;
            else
                ret_=(tmp<<-d*8) | next;
        }
        operator U(){return ret_;}
    };

    template<typename U>
    class imp<U,0>
    {
        U ret_;
    public:
        imp(const U&v)
        {
            int andD=sizeof(U)-1;
            unsigned __int8 tmp=(unsigned __int8)(v>>(8*andD));
            ret_=tmp;
        }
        operator U(){return ret_;}
    };
public:
    imp<T, sizeof(T)-1> ret_;
    toNBClass(const T&v)
        :ret_(v){}
    operator T(){ return ret_;}
};

template<typename T>
T toNB(const T&v)
{
    return toNBClass<T>(v); //型推論させる
}
  • 使う
    short     s = 0xF1F2;
    int       d = 0xF1F2F3F4;
    long long l = 0xF1F2F3F4F5F6F7F8;
    cout << hex << toNB(s) << endl
         << hex << toNB(d) << endl
         << hex << toNB(l) << endl;
    
  • 結果
    f2f1
    f4f3f2f1
    f8f7f6f5f4f3f2f1
    

ネットワークプログラム用に作ったので,toNetworkByteOrder(toNB)です^^;
色んなサイズの変数に対応できて良い感じ.

cygwin g++ -O2 3.4.4
00410950 <__Z4toNBIsET_RKS0_>:
  410950:       55                      push   %ebp
  410951:       89 e5                   mov    %esp,%ebp
  410953:       83 ec 04                sub    $0x4,%esp
  410956:       8b 45 08                mov    0x8(%ebp),%eax
  410959:       66 0f b6 50 01          movzbw 0x1(%eax),%dx
  41095e:       0f b6 00                movzbl (%eax),%eax
  410961:       c9                      leave
  410962:       c1 e0 08                shl    $0x8,%eax
  410965:       09 d0                   or     %edx,%eax
  410967:       98                      cwtl
  410968:       c3                      ret

VC++ 8.0
  401080:       0f b7 00                movzwl (%eax),%eax
  401083:       66 0f b6 cc             movzbw %ah,%cx
  401087:       8a e8                   mov    %al,%ch
  401089:       66 8b c1                mov    %cx,%ax
  40108c:       c3                      ret

なコードを吐いてくれます.(shortの時)
自分でシフト使って書いても,多分同じようなコードしか吐いてくれないはず...
インラインアセンブラ使えば,もっといけそうですがやりません.

socketstreambuf

socketをstreambufとして使えるように.
適当な実装はすぐにできた.

#include "socketstream.h"

#include <iostream>

using namespace std;

int main(int argc, char**argv)
{
    socketconnecter con("localhost", 1000);
    socketstreambuf ssb=con.connect();
    ostream os(&ssb, ios::binary);

    os.setf(ios::fixed);
    os << "sakana" << endl;
    os << (double)11.0 << endl;
    os << 11.6f << endl;
    os << 11 << endl;
    os << "hoge" << endl;

    cout << "finish" << endl;
}

こんな風に使える.

[TOTORO ~] > nc -l -p 1000
sakana
11.000000
11.600000
11
hoge

バイナリで送ったほうが,帯域が節約出来て幸せだと思う.

追記02:58:01

読み書きできるようになった.
まだかなり怪しいけれど...^^;
まだバイトオーダーは無視.


お名前:

blog/2007-03-26

tcsh6.15が出てた

6.14.00ではコンソール上で日本語入力をすると,dspmを指定していても
挙動が色々怪しくて

[kiki ~] > echo \244\333\244\262
ほげ

のように,入力する時だけ,2バイト文字がエスケープされる感じでした.
(6.13は普通に動いた)
これが6.15だと直っています.
とりあえず使っているFreeBSDとcygwinのtcshはバージョンアップ.

cygwinは最新版を落としてきてコンパイル.
FreeBSDはconfing_f.hの54行目付近の
# define WIDE_STRINGS

# undef WIDE_STRINGS
に変えてmake.

  • 2007-03-28修正
    変えると問題がありました.そのままでOKです.

インストール前に

./tcsh
echo $version

として,
tcsh 6.15.00 (Astron) 2007-03-03 (i386-intel-FreeBSD) options 8b,nls,dl,al,kan,rh,color,dspm,filec
kanとdspmがある事を確認してmake install.

  • 2007-03-28修正
    kanのみで大丈夫のようです.
    version tcsh 6.15.00 (Astron) 2007-03-03 (i386-intel-FreeBSD) options wide,nls,dl,al,kan,rh,color,filec
    .cshrcに
    set dspmbyte=euc
    と書いて終わり.
    そのままでOK! 修正2007-03-28
    [kiki ~] > echo ほげ
    ほげ

まとめ

  • 2007-03-28 追記
    6.15は,標準の設定でコンパイルしても日本語があつかえるみたいです(?)
    環境変数LANGの指定は必要のようです.
    日本語でメッセージが表示されるのが気に入らなくても
    [kiki ~] > grep catalog ~/.cshrc
    set    catalog=ja.ayanami.cat
    で解決です^^;

お名前:

blog/2007-03-25

昼からコース

起きたら昼.
昼食は近くで,フランス料理のコース.
最初の数品はあくびしながら^^;

sevilwmもどき

キーボードでWindowsの移動をするツールを作った.
もう少し使いやすくなったら公開するかも.


blog/2007-03-24

窓からマウスを投げ捨てろ

Windowsソフトが手放せない.ただ,トラックポイントなんて使っていると
どうしても作業のやりにくい所がたくさんあって...

なるべくキーボードから手を離さずに,何でもできる環境を作るのが春休みの目標(?)
ほんとうは色々作るつもりだったけれど,意外と良い物が沢山なるっぽいので
ぐぐってみた.今日はfirefoxで遊んだ.

emacs-w3mは最高に便利だけれど,firefoxと比較して遅い遅い...
Meadow上じゃなければそうでもないんだけど...

http://www.pqrs.org/~tekezo/firefox/firefox.html
を参考にしていじってみた.

あと,mozexという,textareaの編集に好きなエディタを使えるアドオン
が便利だった.


blog/2007-03-23

帰省

両親は埼玉に移ったので,(岡山と比べて)近くて助かる.
学割が使えなくて困った

日記1週間分

1週間前の事なんて覚えていないので大変だった.
適当に書いて終わり・・・

IRCのログは薄くて役にたたなかった...


blog/2007-03-22

卒業式

遅くまで遊んでいたので,眠い.ネクタイを結ぶのに苦労した.
スーツをやめる選択肢が一瞬現れたけれど,色々言われるのがめんどうなのでやめる.
kskショッカーが私服だった.先輩にはもう何人かいた.


blog/2007-03-21

卒論終わり

OKが出た.

何か

卒論シーズンは,好きな事やってると嫌な目で見られる,嫌な雰囲気が漂っていたので
蚤の心臓な私は,毎日ボーっとするのが日課になってました.

たまっていたストレスを発散する為に,小さいコード片をC++でいっぱい書いた.
ちょっと楽しかった.


blog/2007-03-20

生協追いコンパ

呼ばれないと思っていたけど呼ばれたので参加.
私ががんばっていた頃のメンバーはやっぱりほとんどいなかった.まぁそれでも楽しかった.

情報工の後輩とかがいたので,コード書くのは楽しいからがんばれー とか言っておいた.
こんな事言われて人生変わる人はいないと思う.


blog/2007-03-19

長野に帰る

帰った

卒論直し

W崎先生から,色々指摘されたので直す.
30分位手を入れて再提出.内容はOKだそうです.


blog/2007-03-18

弓道部飲み会

高校の頃の弓道部の飲み会に参加してきました.
岡山まで往復2万3千円.わぉ.

色々と楽しかった.皆変わってない様で変わってる.
ほとんどの人が学生やめて就職みたいで,来年からは集まりにくくなりそう.

夜は,S木の家に泊まった.


blog/2007-03-17

野沢温泉

meshiとkoumakskと私の4人で野沢温泉に行きました.
動く歩道に乗ってたらスキー場に着きました.びっくり.
温泉卵が軽く塩味が効いてて美味しかった.


blog/2007-03-16

cygwin良い

emacs+cygwinの環境だと.何かテキストを編集している時に~ 範囲選択,切り取り,shellで

cat -n < /dev/clipboard >/dev/clipboard

やって貼り付けると,選択してた部分に行番号を挿入とかできる.
ちょっと楽しい.

/dev/clipboardが結構便利で嬉しい.

何かちゃんとした物もありそうだけど^^;


blog/2007-03-15

卒論続き

終わった気がする.


blog/2007-03-14

動かないコード

23:38:31
卒論に載せる為のコード(3つ目)を書くことにする.
これ書いたら更正して提出かな.

02:33:44
書いたー.もう少し集中してやればよかった^^;

emacs-w3m + smv-mode

smvのファイルを開いた後にemacs-w3mを起動すると
w3mのfont-lock-modeがおかしくなって,色が付かなくなる.
あれー.smv-modeが悪いんだろうけど...


blog/2007-03-13

Access Connections

Thinkpadの無線LANコントロール用ユーティリティー
「Access Connections」使ってないので消してみたのですが
Windows標準の無線LAN管理ツールまで使えなくなった... なぜ?

このツール,入ってるだけで激重なので消したいのですが,,,

再インストールしてもWindows付属のツールは使えないままだし...困る.

胴体着陸

http://www.youtube.com/watch?v=Y_CnDit862k
こんな事あったんですねぇ.知らなかった.

後輪だけで走るのかっこいい.パイロットすごいなぁ.

プログラム書きたい

僕はプログラムを書くのが好きです.
大学の課題のプログラムを書くのも楽しいです.(変な工夫して遊んだり...)
周りの評判では,めんどくさい課題No1はプログラミングだそうです.
つまり,僕は大学4年間楽に楽しく過ごしてきたわけですね.

ところがここにきて,卒論を書くのがつまらないし退屈で困っています.


お名前:

せめて刺激をください.うぐぅ

コーディング

卒論に載せる為だけに書くコードの何とつまらない事か...
使う予定の無い,書くのがめんどくさいコードはやばいと思う.

という事で

しょうもないpukiwikiのプラグインを書いたとかそういう話.
たまに使おう.

ふぅ

01:49:48
今日の目標は達成かな.


blog/2007-03-12

研究室の変な話し合い

めんどくさい.私に足りないのは研究室への愛...

Firefox2のタブ

タブを閉じるボタンがそれぞれのタブに付いてて使いにくい.
共通の閉じるボタンが一つあれば十分.

色々試していたら見つかった.

about:configを開いて,browser.tabs.closeButtonsを3にする.
(1だとそれぞれのタブにボタンが付く)

他の設定とorが取れるかと思ったら,そうでもなかった.


blog/2007-03-11

OpenGL,半透明

gl***Maskなんて便利なものがあった.

成果はいつ出せるのかな... 卒論シーズンだからかペースが遅い.


お名前:

blog/2007-03-10

だるい

体がだるい...


blog/2007-03-09

XIMの勉強

IMEの方が素敵だと思った.

どっちもめんどくさいけど・・・.2バイト文字はその他扱い


blog/2007-03-08

SDL-IM

クラスでほげほげしようと思った.

特に良い方法は思いついてない.


blog/2007-03-07

motd

bannerコマンドはmotd専用ですか? みたいな話を後輩とした.
motdって何の略だろう,と思ってmanしてみたら

NAME
     motd -- file containing message(s) of the day

よく見かける「今日の一言」ってこの辺が元なのかな.

院の入学に必要な書類

出した.


お名前:

blog/2007-03-06

卒論発表

声震える.頭ほげほげ.
質問に答える時も,えらい周りくどい表現に...

飲み会

4年生おつかれさまパーティを生協でやった.
「ビールは冷蔵庫から出して」とか言われたので,飲み放題かと思ったら,そういうわけでもなかった.

僕にお疲れさまと言う教諭たちは,なぜか全員近くにいる3年生に
「こいつら(私,Meshi)にはかかわらないほうがいいよ」とか言ってくる.
理由は分からない.


blog/2007-03-05

卒論発表会1日目

自分の発表の準備が全然できていない.

準備

明日の発表のために,準備.Meshikskを誘ってがんばる.
26時位に帰る.


blog/2007-03-04

花粉がひどい

鼻と目がすごい事になってた.
なぜか研究室にいると悪化するので,5分くらいで帰った.


blog/2007-03-03

環境構築

部屋にいても寒いので,昼頃に研究室に行ってみたら既に何人かいた.

卒論発表は私は火曜日のようです.グループその他に入ってました^^;

卒論は大体書けているので,やる気がなかなかでない.
遊んでると周りの視線が痛いので,Windowsの環境を変える事にした.

  • 入れた物
    • VirtuaWin
      仮想デスクトップ.春休みに適当に作るつもりでしたが,使いやすい物が見つかった.
    • emacs-w3m
      入れてみたら意外と使いやすい.

あと適当に設定をいじってみたり...
windows.elのprefixをずっとC-cで使っていたのですが,他のモードと衝突して困るので
C-qに変えてみた.

プレゼンの資料作らないと...めんどくさい

TODO

  • bookmarkのまじめな移行
    リンク集をブックマークにするのはめんどくさい.アンテナ+@を用意するかなぁ
  • 院の入学関係の書類
    締め切り迫る.忘れちゃいけない
  • 卒論
    忘れちゃいけない2

お名前:

blog/2007-03-02

午前中のミーティング

が,先生の会議でつぶれた.色々相談したかったけれど,午後はゼミがあるので無理.

VirtualBox

昨日の夜,T辺君のマシンにXenを入れる手伝いをした.
FreeBSD上に入れようとして挫折した経験があれば,FedoraCoreなんて楽勝です(?)

で,とりあえず動いたので自分のマシンにも入れたくなる.
環境構築済みのWindowsを今捨てると卒業できなくなりますが,バックアップもめんどくさいので,今あるWindowsを使う方法を考える.
phyとかで指定すれば動く気もしますが,変な事になると,卒業が...なのでやめておく.

代わりに,Windows上で動作するVirtualBoxを使って見る事にした.
で,やってみたのですが,FreeBSDのインストーラがpanicを吐きます.
dump先も無いのでさらに苦しんでる.とても見ていられないのでLinuxに浮気.

  • ゲストOSとして動作する物一覧
    http://www.virtualbox.org/wiki/Guest_OSes
    FreeBSDの項にworks yesって書いてあるのにNo Guest Additions available yet.ってどういうこと? まぁ動かないらしいって事で.

色々試した

VirtualBox, VirtualPCと
Ubuntu, SuSE, FreeBSDの組み合わせで試す. VirtualBoxはVirtualPCに比べて,かなり早いです.
あとは,VMwareを試してみたい.


お名前:

blog/2007-03-01

卒論書いてます

気がついたら沢山かけてた.眠たかったので内容はやばそう.