我が過ち

模試受けてきました。 北大オープンです。 が、これはタイトルに関係ありません。
ちょっと前まで、僕はJavaScriptAjaxにはまっていました。 で、すべての通信を裏でXMLHttpRequestを使って行うというライブラリを作ったのですが、これは大きな間違いだったと気付きました。
ユーザーは”戻る”をつかいますし、それを制限することは出来ません。 それにクリックがあってからデータを読みに行って完了時に画面を書き換えるくらいなら、
Ajaxじゃなくても対して変わりません。
やっぱり役割分担が大切ですよね。 今度はもうちょっと別のアプローチからライブラリ、またはフレームワークを作ってみたいと思っています。
Pajaはああああああああああ痛恨のおおおおおおおおおお失敗作だああああああああああああ。
のですが、やっぱりやめて次はWEB以外のところに挑戦してみようかという気持ちもあります。
RubyC++もやってみたい。 Catalystも一回触ってみたい。
いろいろとやってみたいことがあるのに能力と時間が追いつかないというのは悲しい物であります。 勉強しないで大学受かる方法はないだろうか。


しかし、まったく、ところで、Jemplateは間違いなく流行る!!!

Cのお勉強 Cでオブジェクト指向っぽく

Cを久しぶりにちょっと勉強してみようと思い立って(これはおそらく受験勉強からの逃避行動)、どうせ勉強するならCでオブジェクト指向っぽくクラスみたいなものを作るにはどうしたらいいかとか考えながらやってみました。

$main.c$
#include <stdio.h>
#include "animal.h"
#include "dog.h"
int main(){
    struct animal* dog;
    struct animal* animal;
    dog = dog_new( "Pochi" );
    dog->bark(dog);
    dog->destroy(dog);
    animal = animal_new( "Unknown animal" );
    animal->bark(animal);
    animal->destroy( animal );
    return 0;
};

$animal.h$
#ifndef ANIMAL_H
#define ANIMAL_H
struct animal{
    // methods
    void (*destroy)( struct animal* );
    void (*bark)   ( struct animal* );
    // properties
    char* name;
};
struct animal *animal_new( char* );
void animal_destroy( struct animal* );
void animal_bark   ( struct animal* );
#endif

$animal.c$
#include <stdio.h>
#include <stdlib.h>
#include "animal.h"
struct animal *animal_new( char* name ){
    struct animal *this;
    this = ( struct animal* )malloc(sizeof(struct animal));
    // method
    this->destroy = animal_destroy;
    this->bark    = animal_bark;
    // properties
    this->name = name;
    return this;
};
void animal_destroy( struct animal* this ){
    printf("%s died.\n", this->name);
    free( this );
};
void animal_bark( struct animal* this ){
    printf("%s barks '%s'.\n", this->name, "Buhi! Buhi!");
};

$dog.h$
#ifndef DOG_H
#define DOG_H
#include "animal.h"
struct animal *dog_new( char* name );
void dog_bark( struct animal* );
#endif

$dog.c$
#include <stdio.h>
#include <stdlib.h>
#include "animal.h"
#include "dog.h"
struct animal *dog_new( char* name ){
    struct animal *this;
    this = animal_new( name );
    // method
    this->bark    = dog_bark;
    return this;
};
void dog_bark( struct animal* this ){
    printf("%s barks '%s'.\n", this->name, "Wan! Wan!");
};

と、こんな感じに書いてみました。 実行結果は下のような感じです。

Pochi barks 'Wan! Wan!'.
Pochi died.
Unknown animal barks 'Buhi! Buhi!'.
Unknown animal died.

これはこれでいいんですが、継承してる意味がいまいちないんですよね。
構造体は動的に拡張はできないみたい(当然?)なので、継承してプロパティーやメソッドを新たに定義できません。
barkを置き換えることはできるのですが。
それなら、struct dogを作ればよいじゃないかということになるのですが、それだと親クラスのメソッドは引数にstruct animal*を要求しているので、うまくいかなくなるんです。
どうしたものか……。 これを考えるのはけっこう勉強になるんじゃないか>自分。 C++使えよlol

正直飽きたGUIライブラリ

JavaScriptに別にGUIライブラリはいらないよなぁと気付いてしまいました。
必要なのはあんな猿まねみたいなものではなく、WEBページであることを最大限に生かせるようなライブラリだと思います。
そしてそれを作るにはいまいちアイデアがわかないのです。
と、いうことで、受験勉強に戻ろうかなぁ、と。 作りたいと思う物がいまいち思い浮かばず、覚えたいと思うような事もないので、そろそろ、ね。
うーん。 なんかおもしろいことないかなぁ。 受験勉強したくないなぁ。

JavascriptのGUIライブラリの妄想

一回目:超適当に作って
二回目:
それなりに考えながら作ってみて、ウボアー
http://xxperlxx.org/~jjx/jsWidgets/test.html
三回目はばっちし設計考えてから作ろうかと思います。
書き直さすに二回目を修正するという形にしますけど。
そこで大まかな設計を考えているんですが、GUIを使うアプリケーションをほとんど作ろうとしたことがないのでいまいち勝手がわかりません。
それで、多少使ったことがあるPerl/Tk風の使い方にしていこうかなー、と思っています。

$top = MainWindow->new();
$button = $top->Button( -text => 'Perl/Tk button 1' );
$button->pack();

Perl/Tkのこういう書き方だと、メインウィンドウとボタンを別々に作ってから、メインウィンドウの中にボタンを入れる、という方法よりもいろいろと楽そうです。
こうすると、ボタンが常に親(メインウィンドウ)のオブジェクトを持っている状態にできるからです。
これは、重ね合わせなどをはじめとしていろいろなところで楽な気がします。

こうやって考えているときが一番楽しいのかもしれない。

MovableObject, EditableBox

今日はAjaxに関係ないJavaScriptを触ってます。
いろいろ参考にして、2つのクラスを作ってみました。
ドラッグ可能なオブジェクトを作るのと、編集可能なテキストを作るものです。
http://xxperlxx.org/~jjx/pkit/test.html
ドラッグ可能なオブジェクトの中に編集可能なテキストが入ってます。
こういうのを使えば、付箋系のアプリケーションが作れるんでしょうか。
作りませんが。 2番煎じどころか10番煎じくらいって感じなので。

http://xxperlxx.org/~jjx/pkit/MovableObject.js
http://xxperlxx.org/~jjx/pkit/EditableBox.js

JavaScriptを用いてWEB上にローカルと同じようなGUIなアプリケーションを構築する

ローカルと同じようにブラウザ上にGUIを組み立てられたらおもしろいと思います。
WEB上にJavaScriptなら環境の差異を気にしなくて済みますし、いろいろと利点があります。
ということで、JavaScriptGUIライブラリを作成開始しました。 なかなかうまくいきませんが。
挫折しないようにがんばります。
途中経過:http://xxperlxx.org/~jjx/jsWidgets/test.html
10/16... 一回書き直しました。 こういうのは最初に設計をバチッと決めてから書き始めた方が良いと実感しました。
なんかまた書き直すことになりそうです。 とりあえず、IEでも動くように。 メニューのプルダウンが出る場所が変ですけど。