2009/11/12


Gyazoアプリがgithubにあがってるのを知った。
gyazo's Profile - GitHub

Gyazo is Open Source!

http://github.com/gyazo
GyazoWinならびにGyazoのLinux版にもお世話になっているので結構嬉しい。今日見たらESCキーで中断出来る様になってた。嬉しい。
よし!私もGyazoアプリ作るぞ!と思って、考えたけど結局思いついたのがこれしか無かった。

コマンドプロンプトから実行すると、コマンドプロンプトをキャプチャしてgyazoするアプリ、GyazoCmd!

mattn's GyazoCmd at master - GitHub

gyazo interface to windows command prompt

http://github.com/mattn/GyazoCmd
実行するとこんな風になります!
gyazocmd
だっ....誰得!汗
Posted at by



2009/10/30


最近、kazuhoさんが作った「C」で遊んでいるのですが(いまごろかい!)、これWindowsでも使いたいなーなんて思ったのでポーティングしてみた。
C - a pseudo-interpreter of the C programming language

Perl や Ruby では、ワンライナーで処理が書けて便利です。でも、なぜか C では書くことができません。仕事上の都合で、小さな処理を C 言語で書く必要があったので、ワンライナーも書くことのできる C 言語のインタプリタ(?)を作ってみました。

http://labs.cybozu.co.jp/blog/kazuho/archives/2006/01/large_c.php

目指せバイナリアン (C-0.06)

C-0.06 をリリースします。

http://labs.cybozu.co.jp/blog/kazuho/archives/2006/05/c-0_06.php
これがあるとコマンドプロンプトから C:¥>C
puts("kazuho");
^D
kazuho

C:¥>
こんな事が出来たり、 C:¥>C -e "printf("""hello world¥n""");
hello world

C:¥>
こんな事が出来たりします。コマンドプロンプトなのでクォートのエスケープ2重打ちがめんどくさいですが(実際にはクオートの中のクォートなので3重になります)、なれれば簡単ですし昔なつかしnyacusなんかを使えばシングルクォートでも行けるはずです。(cygwin?何それ)
コンパイルや実行にはmingw32が必要です。
コンパイルは以下の様に簡単。
C:¥C-0.06¥>gcc -o C.exe C.c
mingw32が出力するa.exeに対応しています。ちょっと弄ればMSVCにも対応出来るんじゃないかな。

kazuhoさんに感謝しつつ、Version画面に「Win32 Porting」として名前を入れさせて頂いています。
mattn's C-win32 at master - GitHub

win32 port of C(a pseudo-interpreter of the C programming language)

http://github.com/mattn/C-win32
Windowsユーザでコマンドプロンプト使いで、mingw32が入っててC言語をこよなく愛する皆さんにどうぞ...。

対象範囲せま!
Posted at by



2009/10/29


C言語ってlambdaが書けないのでGUIのコールバックなんかを作る場合には関数を用意しなければならないのですが...
Lambda abstractions in C++ vs. Scheme

1. Simple lambda-expressions

#define Lambda(args,ret_type,body) \
class MakeName(__Lambda___) { \
public: ret_type operator() args { body; } }
http://okmij.org/ftp/c++-digest/Lambda-CPP-more.html
なるほどねー。これなら Lambda((int a, int b), int, return a+b) foo;

std::cout << foo(1, 2) << std::endl; // 3
こんな書き方も出来る訳か。ただGUIなんかのコールバックだと関数ポインタが必要だし、operator()のアドレスなんて取る必要もないからstaticで宣言した関数ポインタで十分かな。

fltkだとこんな感じにmainの外に関数宣言しなくても良くなるね。
/* g++ -I Develop/fltk c.cxx -L Develop/fltk/lib -lXi -lfltk2 -lXft -lXinerama -lXcursor */
#include <fltk/Window.h>
#include <fltk/Button.h>
#include <fltk/ask.h>
#include <fltk/run.h>
#include <stdlib.h>

int main(void) {
#define lambda(args,ret_type,block) \
    class { public: static ret_type func args {block;} }

    lambda((fltk::Widget* wid, void* data), void, fltk::alert("don't click!")) button_clicked;

    fltk::Window w(0, 0, 300, 100, "lambda window");
    w.begin();
    fltk::Button b(10, 10, 280, 80, "click me!");
    b.callback(&button_clicked.func, 0);
    w.end();
    w.show();

    return fltk::run();
}

fltk-lambda-callback

mainしか宣言したく無い人にはいいかも。
先日知ったんだけど、最近のVisual Studioに付いてるコンパイラだと auto func [&](int a, int b) -> int { return a+b; };

std::cout << func(1, 2) << std::endl;
こんな書き方が出来るらしい
Posted at by