トップ «前10日分 最新 次10日分» 追記

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ToDo:


2006-07-02

_ alias template

class C {
    void func() {}
}
template mem_fun(alias T) {}
alias mem_fun!(C.func) hoge;

が通ることを使ってなんかできないか。 できない。

(22:24)

_ その答えに意味があると思ったのかい

math.gif

via http://d.hatena.ne.jp/Ozy/20060701#p2

(23:00)


2006-07-01

_ なるほど!

beginInvoke ってこれのことか!

http://d.hatena.ne.jp/shinichiro_h/20060421#p1

自分で覚えてないし。

(03:00)

_ 多相とか

specialization的なのはできるんだっけ

Printf.printf の実装

http://d.hatena.ne.jp/yoriyuki/ あとで

(10:11)

_ 関数型とか言ってる場合じゃありませんよ

というほどでもないけど。 coredump 面白いな。

(13:27)

_ type inference

これを inference って言うのかなぁ。

class C {}
class D : C {}
int main() {
   auto add = (int x, float y) { if (true) return new C(); else return new D(); };
   writefln(typeid(typeof(add(1,2))));

の返り値の部分を適当にかえてあそぶ。結局、 int & float, C & D, C & null あたり全滅。実に D らしい。 null は void* なんだね。

あー。

(13:47)

_ C++

今では速いの代名詞の座を手にしたらしい。

http://alohakun.blog7.fc2.com/blog-entry-353.html

(14:47)

_ 全体的に面白い

http://mixi.jp/view_bbs.pl?id=17497&comm_id=5707&page=all

心が汚なくなったら寝ると良い。

(15:09)

_ enumerable.d

http://d.hatena.ne.jp/kurimura/20060702/1151748114

これはよい

(19:33)

_ メモ

  • thread ごとにレジスタを ptrace で取得
  • prpsinfo を埋める。
    • 簡単な項目を埋める
    • /proc/self/exe からコマンド名を取得して prpsinfo に
    • /proc/self/cmdline からコマンドライン引数を取得、'\0' を ' ' に
  • prstatus を埋める
    • /proc/self/stat
  • Unix ドメインソケットを作って
  • シグナル止めて
  • fork する
    • シグナル復活
    • 親プロセスに ptrace でアタッチ
      • PTRACE_PEEKUSER でユーザ領域の情報ゲットらしい(なんのため?)
      • またしても ptrace でレジスタゲット
    • デタッチ
    • フレーム情報をいじる。たぶん関数から出てる
    • 親と会話するパイプを作る
    • ソケットで親にパイプを渡してる、かな(最初からソケットだけで会話したら良くねー?)
    • パイプと情報渡して次の関数へ
    • exit
  • 一方親側プロセス
    • ソケットからパイプをゲット
    • 止めたスレッドを復活させる
    • 子プロセスがデタッチするのを待つ
    • パイプ返して終了

(20:53)

_ 次の関数

  • いきなり loopback とかいうパイプ作ってる
  • /proc/self/maps
    • 適当に内容読み込み
    • ものすごいアルゴリズムだがメモリマップドデバイスを読み飛ばしだと思う
    • 調べたメモリの先頭 0 になってる部分のサイズを求める
    • わざわざループバックに書き込んでるのはなぜかな EFAULT を落とすため?
    • 読めない maps は飛ばす
  • ELFヘッダ書き込み
  • プログラムヘッダ書き込み
  • note セクションってなんじゃってとこ書き込み
  • ここでアライン
  • メモリ書き込み

なんか色々感心した。

(21:09)


2006-06-30

_ アホコンパイラ

(let (x (getchar))
  (while x
    (putchar x)
    (putchar (+= x 3))
    (putchar x)
    (putchar 10)
    (= x (getchar))
    ))

くらいは動いた。

(08:54)

_ ということで次は

CUL です。 Clean で Unlambda VM 向けコンパイラを書く。 ということは文法は C 。

(11:05)


2006-06-29

_ そこでまぁCleanじゃないかと思うんですが

http://d.hatena.ne.jp/ytqwerty/20060628#p2

  • 流行ってないし
  • ぶっちゃけモナドはイヤだ
  • 一意性とかもなんかめんどそうだけどマシそう
  • パーサコンビネータあるらしいし
  • 部屋が綺麗になりそう

(00:13)

_ 隆盛

  • やさしいClean入門
  • Clean is the programming tool of choice for discriminating hackers. @ICFP
  • Cleanが優秀なんじゃなくてClean使えるヤツが優秀なんだ!
  • クリディウス
  • ふつくり
  • Clean使ったら負け
  • 部屋がきたなくなる

(00:26)

_ キレート水

http://www.e-net.or.jp/user/kasagi/mizu/index.htm

via http://d.hatena.ne.jp/studiokingyo/20060626#p1

効くメカニズムが全然不明。 まぁニセ科学ぽい。

まぁせいぜい漢方じゃないかな…

あと高い。

http://tinyurl.com/pot6t

(00:41)

_ ORBITの方は

明らかに面白いじゃないか…

お昼はなんかイヤなことあったんかというくらいヒネたこと 思っていた気がする。

とりあえずクリア。

(04:48)

_ 予定

  • 即値変数の内容は基本的に毎度消す
  • 勝手に足していくモデルだと微妙だから文字列も返す
  • レジスタの方は

(06:48)

_ ここの検索

なんか検索できんかったので squeeze しなおした

(18:06)

_ ポンド換金

イギリスはユーロじゃないらしい。

んじゃユーロ使う機会はしばらくなさげなので、 持ってるユーロを直接換金する方向で。

http://tinyurl.com/rojjg

54ポンドくらいらしい。 まぁ1週間だしどうせクレジットカードあるから足りるんじゃね…

(18:08)

_ プラグ買え

イギリス用のヤツを。

(18:20)

_ ブリストルの地図

http://rko.jp/sherlock_holmes-hakushaku_reijou_yuukai_jiken/town-6.html

合言葉はアメノマチ

(19:22)

本日のツッコミ(全3件) [ツッコミを入れる]

_ niha [イギリスは自分が一番じゃないのイヤなので、一番じゃないEU関係はまだアレみたいですね。ユーロも国民投票一度あったけど..]

_ YT [部屋が綺麗になりそうなのがいいですね!(Clean調べてたらFFIが要望のほうにありました……つまり無いのか)]

_ shinh [へーなるほど。とりあえず適当にぐぐるに国民投票があったのはデンマークかものようです。まぁイギリスも世論調査で反対多数..]


2006-06-28

_ ジョセフソン

http://www.amazon.co.jp/exec/obidos/ASIN/4198607028/503-4855349-7085504

科学だけが本当に唯一、真理にアクセスできる方法なのだろうか…知性の本質を求めて
「プラトン的世界」=「精神の空間」へ決然として踏み入った天才ジョセフソンの封印さ
れた科学的研究の足跡を辿る―。サイコキネス・テレパシー・遠隔透視から音楽の起源
に至るまで、未解明現象の謎に量子で迫る“禁断の研究”30年間の成果―。

すげーーー

(06:49)

_ bit Generation

なんか重力調節のゲームと六角形のヤツ。

見た目に重力の方が面白そうだったのでそっちをやる。 まぁ面白い。 ABボタンだけで2次元空間を移動する ゲームにちゃんとなってるのはたいしたもんかなぁ。 まぁ実際面白いんだけど、わりと退屈で、 カタルシスとかあんま無い。 まぁなるほどちゃんとできてるねぇ、という感じで、 あーそれ以上でもそれ以下でもなくて、 企画通り、試みとしては面白いっていうのはわかるし、 こういうことできる任天堂すげーとは思うんだけど、 ゲームの本質はココにアリ、みたいなのはまぁ違うだろうと。

そんで六角形の方は面白くないパズルだった。 まぁこれはまぁ微妙とかを越えて普通に面白くない。 パズルゲームってまぁルールは無数に考えられて、 深みにはそれほどの差は無いんだろうけど、 こう、だからこそ、わかりやすいカタルシスが 必要なんだろうなぁと。 テトリスは何を目指すかが十分わかりやすいし、 ぷよぷよは連鎖で爽快☆みたいな感じだし、 パネポンはまぁアクション連鎖とか見るからに楽しいし、 あとメテオスとかもなんかこう気持ち良さみたいなのは あるんだろうたぶんみたいな。 そういうのが無い以上、六角形のはパズルゲームとして ルールが妥当かどうかとか判断する次元にすら達せないというか。

ケータイとかのゲームとしてなら いい気がするんだけれども、 ゲーム機のゲームとしてはやはりこう物足りない系な。

あーでもなんか、今時のゲームの演出に慣れたウチらは 昔の薄味ではほげほげできんのですよ、みたいな、 ええと聖学では逆だった気もするけど、 どうでもいいや。 つまりそういう状態になってるとすれば 僕の方に問題があるとも考えられるし、 まぁ実際昔熱中したゲームウォッチとか 今じゃ絶対できんし、 結論はまぁよくある話だけど、 まぁ眠いなぁと。

あとなぜかアゴが痛い。なぜ?

(13:40)

_ S式パーサ

i@u ~/wrk/bf> ghci sbf.hs
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.4.1, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base-1.0 ... linking ... done.
Compiling Main             ( sbf.hs, interpreted )
Ok, modules loaded: Main.
*Main> test sexpr "(a b (c (d) e) f)"
Loading package parsec-1.0 ... linking ... done.
[a,b,[c,[d],e],f]

動いたわー

import Text.ParserCombinators.Parsec
import qualified Text.ParserCombinators.Parsec.Token as P
import Text.ParserCombinators.Parsec.Language
import Text.ParserCombinators.Parsec.Expr

sbfStyle =  emptyDef
            { commentStart = ""
            , commentEnd = ""
            , commentLine = ";"
            , nestedComments = False
            , identStart = identLetter sbfStyle
            , identLetter = alphaNum <|> oneOf "_':!#$%&*+./<=>?@\\^|-~"
            , opStart = oneOf ""
            , opLetter = oneOf ""
            , reservedOpNames = []
            , reservedNames = []
            , caseSensitive = True
            }

lexer = P.makeTokenParser(sbfStyle)

whiteSpace = P.whiteSpace lexer
lexeme     = P.lexeme lexer
symbol     = P.symbol lexer
natural    = P.natural lexer
parens     = P.parens lexer
semi       = P.semi lexer
identifier = P.identifier lexer
reserved   = P.reserved lexer
reservedOp = P.reservedOp lexer

data Sexpr = IntConst Integer
           | Ident String
           | Expr [Sexpr]

instance Show Sexpr where
    show (IntConst i) = show i
    show (Ident i) = i
    show (Expr e) = show e

expr = many sexpr >>= return . Expr

sexpr = parens (expr >>= return) <|>
        (identifier >>= return . Ident)

test p s = case parse p "" s of
             Left err -> print err
             Right n -> print n

(19:17)


2006-06-27

_ 1日1Ruby

がホントかどうかチェックしよう。

昨日は gopku.rb

s = ''
`cpp #{ARGV[0]}`.split(/\n/).each do |l|
  next if l =~ /^#/
  s += l.sub(/^ */, '').chomp
end

File.open('out', 'w') do |o|
  o.print s
end

p s.size
system("xclip < out")

PKU に Submit するために C のコードをコメント除去・空白削除して コピーバッファにつっこむ。

今日は prod.rb

|000>+|001>+|010>+|100>+|111> が 4項で書けないことを 証明したいらしいんで反例探しで 簡単なケースだけチェック。 まぁ結果見つからんかった。

def get(s, i)
  s & (1 << i) != 0 ? 1 : 0
end

def st(s, t)
  if (t == 0)
    s.to_s
  else
    ['0+1','0-1'][s]
  end
end

def state_str(s, t)
  r = ''
  for i in 0...12
    r += '(' + st(get(s, i), get(t, i % 3)) + ')'
  end
  r
end

def addterms(as, *ts)
  r = []
  ts.each do |t|
    as.each do |a|
      b = t.dup
      e = a.dup
      if e =~ /^-/
        e.sub!(/^-/, '')
        if b =~ /^-/
          b.sub!(/^-/, '')
        else
          b = '-' + b
        end
      end
      r.push(b+e)
    end
  end
  r
end

def addminus(t, m)
  if m == 1
    if t =~ /^-/
      t.sub(/^-/, '')
    else
      '-' + t
    end
  else
    t
  end
end

for m in 0...16
  p m

  for t in 0...8
    for s in 0...4096
      st = Hash.new(0)
      for i in 0...4
        a = []
        minus = get(m, i)

        if get(t, 0) == 0
          a.push(addminus(get(s, i*3).to_s, minus))
        else
          if get(s, i*3) == 0
            a.push(addminus('0', minus))
            a.push(addminus('1', minus))
          else
            a.push(addminus('0', minus))
            a.push(addminus('-1', minus))
          end
        end

        if get(t, 1) == 0
          a = addterms(a, get(s, i*3+1).to_s)
        else
          if get(s, i*3+1) == 0
            a = addterms(a, '0', '1')
          else
            a = addterms(a, '0', '-1')
          end
        end

        if get(t, 2) == 0
          a = addterms(a, get(s, i*3+2).to_s)
        else
          if get(s, i*3+2) == 0
            a = addterms(a, '0', '1')
          else
            a = addterms(a, '0', '-1')
          end
        end

        a.each do |at|
          e = at.dup
          if e =~ /^-/
            e.sub!(/^-/, '')
            st[e] -= 1
          else
            st[e] += 1
          end
        end

      end

      if st.key?('000') && st.key?('111') && st.key?('001') && st.key?('010') && st.key?('100') && st.size == 5
        p state_str(s, t)
        p st
      end
    end
  end
end

(21:35)


2006-06-26

_ PKU1981

http://acm.pku.cn/JudgeOnline/problem?id=1981

なんとなく誕生年問題見てみたけど割に楽しげ。

(00:58)

_ PKU1521

b,l,s[99];main(m,n,i,w,x,y,z){
    for(;;){
    for(;n=getchar(n)-10;l+=8)s[n]++;
    if(l==24&&s['E']==s['N']==s['D']==1)break;
    z=85;
    x=55;
    for(;;){
        s[m=n=99]=9999;
        w = 0;
        for(y=i=x;i<=z;i++){
            if(s[i]) {
                if(!w)w=i;
                y = i;
                if(s[i]<s[m]){
                    if(s[i]<s[n]){m=n;n=i;}
                    else m=i;
                }
            }
        }
        x=w;
        z=y;
        if(m==99)break;
        b+=(s[m]+=s[n]);
        s[n]=0;
    }
    printf("%d %d %.1f\n",l,b,1.*l/b);
    b=l=0;
    }
}

適当にCで書いてその場しのぎの高速化しても通らなかった。 なんかCで通ってる人いるんだけどなぁ。 まぁC++の方が短くなりそうな気すらする。

(02:53)

_ PKU1521

#include<cstdio>
#include<set>
int m,n,b,l,i,k[99];main(){
    std::multiset<int>s;
    for(;;){
        for(;n=getchar()-10;l+=8)k[n]++;
        if(l==24&&k['E']==k['N']==k['D']==1)break;
        for(i=55;i<=85;i++){if(k[i])s.insert(k[i]);}
        for(;s.size()>1;){
            std::multiset<int>::iterator i=s.begin();
            m = *i;
            s.erase(i++);
            n = *i;
            s.erase(i);
            b+=(m+=n);
            s.insert(m);
        }
        printf("%d %d %.1f\n",l,b,1.*l/b);
        b=l=0;
    }
}

おやこれでもTLE。ダメじゃん!

(03:09)

_ ウケるな

配列の初期化忘れてます。

(03:24)

_ 1521

*m,*n,*i,s[99];main(b,l){
for(;m=n=memset(s,0,396);printf("%d %d %.1f\n",l,b,1.*l/b)){
    for(l=0;b=getchar()-10;l+=8){
        s[b]++;
        if(b-l==60)return;
    }
    for(b=0;m-s-1;){
        b+=*m+=*n;
        *n=0;
        m=n=s+1;
        *m=99;
        for(i=s+86;*i-99;)
            *--i&&*i<*m?*i<*n?m=n,n=i:(m=i):0;
    }
    b=b?b:l/8;
}
}

250Byte。さっさとアルゴリズムいじれと

(04:53)

_ 外人が

wwrrrrrrrryyyyyy !!!11'

と言っていた。本当に言うんだな。

(18:21)

_ 日経新聞

web2.0がどうとか

(18:35)


2006-06-25

_ MML敵パターン

http://www.liarsoft.org/diary/20060620.html#20060620p1

なるほどそのまんま使えって話だなぁ…

(02:23)

_ C++ の template はバッドノウハウ

と言われて少し違う気がしたんだけど。

なんというかじゃすとふぉーふぁんのうはうというか。 グッドでもバッドでもなくて、 ホビーノウハウというか。

コード短縮もホビーノウハウ。

(23:19)

_ リプレイについて

聞くの忘れてたな。

(23:23)


2006-06-24

_ うにまがが終わったらしい

別に残念でもないような…?

(02:41)

_ template

がどうとか言ってる子はキモい子です! って話があったんだけど、 みんなどういう理由でそんな子になってしまったんだろうか… あと妙に同世代が多い気がするんだよな。 少し上の人は I hate C++! がデファクトに なりきっているというか。

世界で2番目に誤解された言語 C++ 。とかどうだろう。

いや、別に誤解はされてないな…

まぁそんなこんなで最近見てる人の経歴を適当に見てみる。

http://d.hatena.ne.jp/Cryolite/

同世代の模様。

http://d.hatena.ne.jp/rinset/

奥さんがいらっしゃるってことは少し上かしら。 しかし最近はそういう判断は外れる歳になっている。

http://d.hatena.ne.jp/syd_syd/

大学院生さんらしい。 いかにも言語好きーな人なのでわかりやすいかな。

http://d.hatena.ne.jp/y-hamigaki/

今気付いたけど cppll でよく見る人だったよ!

http://d.hatena.ne.jp/mb2sync/

あーそういや Boost.Typeof 見てみないとなーと思ったんだった。 http://d.hatena.ne.jp/mb2sync/20050422#p1 はあとで見る系。

結局世代とかよくわからんかったけど なんでもいいや。

(03:07)

_ Boost.typeof

http://www.accu-usa.org/2000-05-Main.html

あれーユーザ定義型はーと思ったら REGISTER_TYPEOF とかあるな…

しんどいけどマジメに追ってみよう…

#include <iostream>
#include <list>
#include <boost/typeof/typeof.hpp>

using namespace std;
using namespace boost;

struct C {
    C() { cout << "hello world!" << endl; }
};

int ifunc() { return 0; }
list<int>::iterator itefunc() { static list<int> l; return l.begin(); }
C cfunc() { return C(); }

int main() {
    BOOST_AUTO(i, ifunc());
    BOOST_AUTO(ite, itefunc());
    BOOST_AUTO(c, cfunc());
}

ああうん。すごいな。

(03:36)

int main() {
    BOOST_TYPEOF(cfunc()) c = cfunc();
    c = *(new BOOST_TYPEOF(cfunc()));
}

_ が、 cl.exe だと、

int main() {
    boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(cfunc()))>::type c = cfunc();
    c = *(new boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(cfunc()))>::type);
}

_ こうなる。 GCC だと __typeof__ になる。

_ インスタンス化するたびにカウントアップする template とか作れば、 まぁこれで作れるかなぁ。

_ で、インスタンス化するたびにカウントアップねえ…

#include <iostream>
#include <list>
#include <boost/typeof/typeof.hpp>

using namespace std;
using namespace boost;

struct C {
    C() { cout << "hello world!" << endl; }
};
struct D {};

C cfunc() { return C(); }
C cfunc2() { return C(); }
D dfunc() { return D(); }

int main() {
    BOOST_TYPEOF(cfunc()) c = cfunc();
    c = *(new BOOST_TYPEOF(cfunc()));
    cout << sizeof(*boost::type_of::encode_start(cfunc())) << endl;
    cout << sizeof(*boost::type_of::encode_start(cfunc2())) << endl;
    cout << sizeof(*boost::type_of::encode_start(dfunc())) << endl;
}

_ が、 5 5 6 と出力する。明らかにカウンタがある。

_ http://boost-sandbox.cvs.sourceforge.net/*checkout*/boost-sandbox/boost-sandbox/boost/typeof/msvc/typeof_impl.hpp?revision=1.5

_ どう見てもカウンタみたいです。 実装がよくわからんがな。

_ あとまぁ msvc/ 以外の実装は不明チックな。 compliant implementation もよくわからんけど、 要するに BOOST_PP マンセーってことですか。

_ んー。なんか昔見たことある気が超するんだよなぁ。

_ (04:26)

_ あれ

むっちゃカンタンじゃん。

TypeList に放り込んでその Length 返すだけ。 以上。

(04:35)

_ いや違うだろと思ったりしつつ

なんかだいたいわかった気もした。

気が向いたらちゃんと追う。

(05:24)

_ server side JavaScript

最初聞いた時は冗談レベルに思ったけど、 もっと評価されていいよなぁという気がした。

このへんとかも面白げである。

http://www.tohoho-web.com/html/server.htm

(05:32)

_ 宇多田とテトリス

http://club.nintendo.jp/tetris_campaign/index.html?C

(19:40)


2006-06-23

_ しんどい

(01:01)

_ DS ブラウザ

かー。

何に使うんやろ。

(02:33)


2024年
11月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
1.shinh(2014-05-24 03:56) 2.YT(2014-05-24 03:56) 3.niha(2014-05-24 03:56)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h