2011年2月5日土曜日

VMwareでUbuntuを8.04から10.04にアップグレードしたらキーボード入力できなくなった・・・

ブログほったらかしですみません(´・ω・`) 仕事落ち着いたらデザパタ再開します。

久々にVMwareでUbuntuを起動したら「10.04にアップグレードできます」と出てたので、アップグレードしました。

アップグレード自体はすんなりはいったものの、再起動後ログインしようとしたらキーボード入力が全くできない((((;゚Д゚))))

「Ubuntu 10.04 アップグレード キーボード」でググると、どうやらバグで受け付けないらしい。
※ちなみに使っているキーボードはDELLのワイヤレスキーボードです。

対処法は
1. ログイン画面の右下にある「ユニバーサル・アクセスの設定」ボタンをクリックする。
2. 「オンスクリーン・キーボードを使う」にチェックを入れる。
3. オンスクリーン・キーボードでパスワードを入力する。ちなみに大文字は上矢印キーをクリックすればおk
4. ログイン後、端末を立ち上げる。
5. 「sudo dpkg-reconfigure console-setup」を実行して設定し直す。ただし、キーボード入力ができないので、あらかじめホスト側のマシンで上の文字列をコピーしておき、ゲスト側(Ubuntu)で右クリックして「貼り付け」する。
6. 「sudo rm /etc/X11/xorg.conf」を実行する。ただし、キーボード入力ができないので(ry
7. 再起動する。

これでようやく入力できるようになりました。

参考URL:
http://blog.livedoor.jp/moonlight_aska/archives/50479993.html
http://nicenature.air-nifty.com/kurohige/2010/05/linux-vmwareubu.html
http://gihyo.jp/admin/clip/01/ubuntu-topics/201005/07

2010年10月3日日曜日

SunのJava認定資格が

9月2日から、Oracle認定資格制度の一つになりました。OracleがSunを買収したから、まあ当たり前のことが行われたということですが。




はたして、試験の中身はSunのときと同じなのかなぁ(´・ω・`)



よく調べると、試験コードがSunとOracleで同じ(例えば、JavaプログラマならCX-310-065)だから中身も同じだ!と期待。



ちなみに、Oracle認定のMySQL資格もあるw

2010年9月5日日曜日

Observerパターン

Observerとは、観察者のことです。Observerパターンとは、作業者の状態を監視する役のクラスがあるパターンです。


先に、監視されるクラス(作業をするクラス)を説明すると、コードとしては以下の通りです。

public abstract class Subject {
    private List<Observer> observerList = new ArrayList<Obsever>();

    public void addObserver(Observer observer) {
        observerList.add(observer);
    }

    protected void notifyObservers() {
    // 参考本ではこのメソッドはpublicになっていたが、子クラスからしか呼ばれないので、protectedにした。
        Iterator itr = observerList.iterator();
        while (itr.hasNext()) {
            Observer observer = (Observer) itr.next();
            observer.update(this);
        }
    }

    public abstract void execute();

    // その他、observerから呼んで欲しいメソッドを定義
}

まず、監視する人をこの人は知っています。複数人いてもよいようにListになっています。作業をするメソッドはexecute()で実装しますが、何か状態が変わったときはexecute()内でnotifyObservers()を呼び、監視者に通知します(Observer#update()を呼びます)

監視するクラスについて説明します。監視者は誰も作業者の状態変更通知を受け取れるようにupdate()を実装します。そーいうことで、Observerインターフェースを用意しておきます。

public interface Observer {
    void update(Subject subject);
}

Observerインターフェースの実装クラスは例えばこんな感じです。

public class SampleObserver implements Observer {
    public void update(Subject subject) {
        // Subjectクラスのメソッドを呼び、例えばコンソールに出力する、ログに残すなどの処理を行う。
    }
}

この後は、Subjectクラスの子クラスを作り、mainクラスからその子クラスのインスタンスを作って、SampleObserverをaddし、execute()を呼べばいいでしょう。

監視をするパターン自体は難しくないと思います。ポイントとしては、どのクラスでも作業者、監視者になれるよう、親クラス(厳密に言うと、作業者はabstractクラスで、監視者はinterface)を定義してあげて、具体的な作業者、監視者はそれらを継承・実装することで、汎用性があがるということです。

ただし、注意しなければならないのは、SubjectからObserverへ通知をした後に、ObserverからSubjectへ何かしらの指示を行った場合です。このとき、Observerからの指示でSubjectの状態が変化すると、またそのタイミングでObserverへ通知を行ってしまうからです。フラグでも用意して、防ぐようにしましょう。

ちなみに、Observer#update()をSubjectが呼ぶ際は、Subject自身を引数に入れています。が、例えば値の更新を通知するだけならば、引数に値を入れて渡すでも良いと思います。ただし、この場合において、もし、Observerが複数のSubjectを監視しているならば、どのSubjectからの変更通知なのか分からないです。Observerにどの程度の情報を渡すかは実装する際に検討すべきでしょう。


しかし、このパターンは監視というより、通知ですよね・・・


関連パターン
「Mediatorパターン」Mediatorは、個々の作業者との調整役という位置づけであり、Observerでは、SubjectがObserverに通知をして同期を取ることに主眼を置いています。

Mediatorパターン

Mediatorとは仲介役とか相談役とかという意味です。個々人がバラバラに作業しているところをまとめてくれます。個々人同士であーだこーだ言い合ってもまとまらない場合には全体を俯瞰できて、適切に指示できる人が欲しいですよね。

Mediatorパターンは個々の担当者の状態を把握し、次になるべき状態を個々の担当者に指示する役目がいるパターンです。ここで言っている状態とは、例えば、あるログインフォームで言うと

ゲストユーザか正規ユーザか
ユーザ名が入力できる入力できない
パスワードが入力できる入力できない
OKボタンが押せる押せない
・・・

などなどです。Mediatorは例えば、「正規ユーザが選択されている状態」かつ「ユーザ名とパスワードを入力されている状態」というのを担当者から聞いたら、「OKボタンを押せるようにする」という風にOKボタン担当者に指示します。


サンプルソースは・・・考えておきます(´・ω・`)


関連パターン
「Facadeパターン」Mediatorは双方向だが、Facadeは一方向のみ。
「Observerパターン」(勉強中)