タグ

ブックマーク / shinh.hatenablog.com (33)

  • Polyglot Quine - 更新履歴兼雑記

    http://shinh.skr.jp/dat_dir/poly_quine.txt 基的には上記 4言語の Polyglot quine 。あとまぁ C と PHP でも Quine になる。あなごるだと m4 なんかもまぁ。 C++ が標準準拠してない気がするので気になるなら main に int をつけると良い。 実行は以下みたいな。 i@colinux ~/wrk/ag> diff poly_quine.txt =(gcc -xc =(php =(perl =(python =(ruby poly_quine.txt))));./a.out) i@colinux ~/wrk/ag>はてなのシンタクスハイライト (vim のなんだっけ) を試してみる。 C++ #include/* s='''*/<stdio.h> main(){char*_;/*==;sub _:lvalue{$

    Polyglot Quine - 更新履歴兼雑記
    yowa
    yowa 2007/06/18
    > 基本的には上記 4言語[Ruby, Perl, Python, C++]の Polyglot quine 。
  • qsort の callback の書き方 - 兼雑記

    http://d.hatena.ne.jp/Ozy/20070123#c1169554585 を見て、前から qsort の callback 関数は関数書くより機械語埋めた方が短くなるんじゃないかなーと思ってたのを思い出しました。 int a[] = { 1, 3, 9, 2, 7, 4, 5, 8, 6 }; int main() { int i; qsort(a,sizeof(a)/4,4,"\x8b\0+\x02\xc3"); for (i = 0; i < sizeof(a)/4; i++) { printf("%d ", a[i]); } puts(""); } これ、うちではちゃんと 1 2 3 4 5 6 7 8 9 という出力が得られました。というわけで qsort の第四引数は関数ポインタじゃなくて文字列です。 メモリ保護かかってないのが前提の上に、 x86 依存の上に

    qsort の callback の書き方 - 兼雑記
    yowa
    yowa 2007/01/23
    > というわけで qsort の第四引数は関数ポインタじゃなくて文字列です。
  • 弾幕 DJ - 更新履歴兼雑記

    弾幕に足りないのは、簡単な記法とか簡単に作れるツールじゃなくて、弾幕 DJ じゃないかとかふと思いました。いやー思ったのはだいぶ前に DJ という人が何やっているかをしげしげと眺めたからなんだけど。 弾幕それ自体を作るのは、難しくもないからそれなりにたくさんあるんだけど、やはりプログラムから遠い人には BulletML はそれなりに大変だしリアルタイムに作るとかは100%不可能、かといって Dngn みたいなアプローチ だとできる弾幕の種類に限界があるわけ。 というわけで DJ です。 DJ っていうのはどうやらレコードを雰囲気とかにあわせてコーディネートして、それをシームレスに切り替えたりエフェクトかけたりとかする人のことらしい。いや当は全く調べてないので違うかも。 つまり既にある弾幕から適当にチョイスして、なんか適当に弾幕エフェクトとかけたりしつつ、歴代怒首領蜂ボスメドレーとかやるわ

    弾幕 DJ - 更新履歴兼雑記
    yowa
    yowa 2007/01/10
  • SDL_videomalloc - 兼雑記

    failmalloc 見て、なんか思うところがありました。 http://enbug.tdiary.net/20060714.html#p01 前からメモリぶっ壊しゲーっていうのを作りたいなと思ってまして、ゲームとしては崩壊してるんですが、 VRAM の内容に実際のゲームのデータが入ってて、その部分が描画によって変化するとゲームの内容も変わってしまう、というようなものを。 なんというか昔のゲームの面白いバグ/裏技っていうのはメモリぶっこわして起きてることが多いわけで、その異様さを意識的に楽しむ、というか、そういうことがなんとなくしたいんです。 で、安易に malloc 乗っ取ったらどうだろうと思って作ったのが SDL_videomalloc 。 http://shinh.skr.jp/dat_dir/SDL_videomalloc.c SDL_GetVideoSurface が非 NULL

    SDL_videomalloc - 兼雑記
    yowa
    yowa 2007/01/07
    > メモリぶっ壊しゲー
  • 最小 Hello の比較とか - 兼雑記

    http://www.dodgson.org/omo/t/?date=20061213#p01 で "Size Is Everything" が日語訳がされていて素晴らしいです。 [SIE] http://www.hyuki.com/yukiwiki/wiki.cgi?WhirlwindTutorialOnCreatingReallyTeensyElfExecutablesForLinux まぁみんな最小だ最小だと言うので簡単に比較を。 FSIJ で他はどうだって話しなかったし。比べるべきはたぶん以下のあたりと。 [KIK] http://d.hatena.ne.jp/kikx/20061111 [TINY] http://www.muppetlabs.com/~breadbox/software/tiny/ 適当に名前を [] でふっておきました。 要は実行ファイルサイズをほぼ規定する

    最小 Hello の比較とか - 兼雑記
  • DRef 0.1.0 - 兼雑記

    D でも ReFe みたいなものが欲しくなったので作りました。つまり phobos のドキュメントをコマンドラインでひけます。 D で書くのもめんどそうだったので Ruby で書いてありますので要 Ruby 。 http://shinh.skr.jp/d/dref.zip 適当に dref_ja.db と dref.rb をいじったりパス通ったところに置いたりして使ってください。 Windows の端末は SJIS と決めうってしまってるんですが、こうした方がいいぞ、とかアドバイスがあればお願いします。

    DRef 0.1.0 - 兼雑記
    yowa
    yowa 2006/11/28
    > D でも ReFe みたいなものが欲しくなったので作りました。
  • GDB で Hello world! を書こう。 - 兼雑記

    しつこく Hello world! を作ります。 http://shinh.skr.jp/ttyplay/gdb_hello.html えーと上記はデモです。内容は、 main;だけのコードで gdb を起動して、対話環境チックに動作内容を確認しつつ main の中身を作って、うまくできたらそれを保存して実行ファイルにする、というような内容です。 デモの説明とかは今度気が向いた時に書きます。あと Hello world! の改行が出てなかったのはそもそも改行を忘れてたからでした… すぐに気が向きました。解説入ります。 一番近いのはあれです。BASIC。 ウソウソと言ってますが後述しているように、割と似てます。同じ行番号のコードを書いたら上書きできるとか、 LIST コマンドぽいのがあるとか。 ここで冒頭の main; だけのファイルを作ります。ここで重要なことは .data セクションに置

    GDB で Hello world! を書こう。 - 兼雑記
  • ホビーノウハウ - 兼雑記

    という単語はどうかなぁ、と思いました。バッドノウハウは、明らかにややこしくて、何かがおかしいんだけど、歴史的な理由でしかたがなく、 workaround としてイヤイヤ学習したものの、その知識がありがたがられて、また広がっていって、「歴史的な理由」を強固にしていく、というような主旨だと思います。 ホビーノウハウという単語は C++template meta programming はバッドノウハウだ、という主張を聞いて、少し違うんじゃないかな…と思って考えました。最近 PKU でやっている C のコード短縮なんかのコツ、例えば括弧は可能な限り除去する、とかPKUでのmainの第一引数は必ず1だ…とかもバッドノウハウと一般的に言われているものとは少し違う気がします。 以下のような点で違いを感じていて、バッドノウハウと同じ扱いにするのは抵抗があります。 趣味性の高さ。簡単な問題をわざわざ

    ホビーノウハウ - 兼雑記
    yowa
    yowa 2006/07/28
    > というか「それ何の役に立つの?」とかいう質問は割と萎えるというか。
  • ICFPC の BALANCE を説明 - 兼雑記

    BLNCE を IRC で簡単に説明しようとしてうまく説明できなかったので、これに一番萌えた以上、ちゃんと説明したい、と思い筆を取りました。ドキュメントの翻訳…でもいいかと思ったんですが、ライセンスわからないし、詳説したいわけでもないし自分ふうに。 プログラムは 1Byte に 1命令入ります。それと、 256Byte のメモリと、ソースレジスタが4つ(以下 S0 S1 S2 S3と記述)、デスティネーションレジスタが2つ(以下 D0 D1)あります。毎クロック、インストラクションポインタ(以下IP)の位置の命令を読んで実行します。ここまでは普通ですが、 IP の移動速度を示すレジスタがあるのが早くも少し不審な感じです。この速度は IS と呼ばれ、初期値は 1 なので、まぁ普通に動きます。 そんな割と普通なマシンをイカれた 4つの命令セットで記述します。命令は最初の 3bit が opco

    ICFPC の BALANCE を説明 - 兼雑記
    yowa
    yowa 2006/07/26
    > そんな割と普通なマシンをイカれた 4つの命令セットで記述します。命令は最初の 3bit が opcode で、残り 5bit が引数です。最後の PHYSICS が最もイカレてると思います。
  • 機械は人狼を見つけられるかな - 兼雑記

    http://shinh.skr.jp/expwolf/ スパムフィルタの要領で作った人狼を探すプログラムです。新四国のURLを適当に放り込んでください。 http://shinh.skr.jp/expwolf/?q=http%3A%2F%2Fmshe.skr.jp%2Flog_591_3.html んでもって、「情報」のところのページのURLを放り込むとその村全体を評価してくれます。「情報」のページに結果が出ていたらその結果を [] 内に表示します。 http://shinh.skr.jp/expwolf/?q=http%3A%2F%2Fmshe.skr.jp%2Flog_591_info.html この村は人狼吊れなくて狼勝利のようですが、この予測装置は正解を当てています。もちろん白ログしか見てません。 たぶん進行中の村でもオケです。後述しますが、データはたく国654村以前から取得した

    機械は人狼を見つけられるかな - 兼雑記
    yowa
    yowa 2006/02/15
    > スパムフィルタの要領で作った人狼を探すプログラムです。
  • 更新履歴兼雑記 - 【かなり昔に】スコアサーバの実装概要【書いた文章】

    で、そういえば昔スコアサーバの実装の説明を書こうとしたなぁ…と思い出して発掘してきました。以下昔の文章。 http://shinh.skr.jp/psyno/ http://shinh.skr.jp/psyno/scoreserv.cgi この手の機構はUIの実装が面倒なだけで、コア部分自体は極めて簡単です。業務用でもネットランキング当たり前の時代に常時接続をほぼ仮定しても問題ないフリー/同人ゲームでこういうのが無いのは寂しいことだなぁ…とか思って試しにやってみたというような感です。 id:isshikiさんが「案外実装の仕方がわからないのではないか」とおっしゃっていたこともあり、今回の手法をご紹介してみることにしました。ごくごく普通ですが。 基的にHTTPでやりとりします。全体に低速回線を考慮してやりとりするデータが小さめになるようにしています。 クライアント側は D言語です。通信部は

    更新履歴兼雑記 - 【かなり昔に】スコアサーバの実装概要【書いた文章】
    yowa
    yowa 2006/01/07
  • COPYING 多すぎ問題と libGPL - 更新履歴兼雑記

    > locate COPYING | wc 987 993 43240これは大変なことです。要するにディストリビューションがライセンスをドキュメントとしてくっつけるから、同じ GPL の COPYING が大量発生しているわけ。 http://shinh.skr.jp/binary/libgpl.tgz そこで libGPL です。 libGPL は GPL に「汚染」されるためのライブラリです。static/dynamicリンクするだけでそのソフトは GPL になります。 LGPL で無いのに -lgpl でリンクします。その恩恵として、 libGPL がリンクされたソフトウェアは自動的に --copying オプションに反応して GPL ライセンスを表示するようになります。 --copying オプションは libGPL によって解釈された後に除去される (argc がデクリメントされ

    COPYING 多すぎ問題と libGPL - 更新履歴兼雑記
    yowa
    yowa 2005/12/22
    > libGPL は GPL に「汚染」されるためのライブラリです。static/dynamicリンクするだけでそのソフトは GPL になります。
  • 超推論言語妄想 - 兼雑記

    http://www.kmonos.net/wlog/55.php#_1446051108 面白いなぁ…こういうのがメインストリームになるってのはちょっと予測しずらくもあるんですが。もう少しルールが明確でないと、この場合は推論してくれるんだっけ…とか思って結局メソッド名全部書いちゃいそう。この言語って未初期化変数は null 入れてくれるよね…とか思いながら一応 val = null とか書いちゃう感覚で。手慣れた人はスイスイ書けそうだけど。 こういう世界に進化するんだろうか。 // ← int main() { がなんとなく推論されている 2; // int x = 2; 3.2; // float y = 3.2; print(example(1 & 1.1 => 2.1)(int, float)); // ← return 0; } が推論されているprint は int を pri

    超推論言語妄想 - 兼雑記
    yowa
    yowa 2005/11/09