--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2007/10/28

jp.archive.ubuntu.com が落ちてる

どうりでこういうことになるわけだ。http://www.getautomatix.com/ も落ちてて、Automatix2 も使えない。

おちゅ~しゃ使いにくい。早く jd 使いたいよ。

2007/10/28

jd がインストールできない

日本語版セットアップヘルパ経由でのインストールでこけたから apt-get のほうも試してみたけどだめ。なんでも、ライブラリのURLにアクセスすると 500 を吐いてるためっぽい。以下エラーメッセージ。

エラー http://jp.archive.ubuntu.com feisty/main libcairomm-1.0-1 1.2.0-0ubuntu2
  500 Internal Server Error
エラー http://jp.archive.ubuntu.com feisty/main libglibmm-2.4-1c2a 2.13.3-0ubuntu1
  500 Internal Server Error
エラー http://jp.archive.ubuntu.com feisty/main libgtkmm-2.4-1c2a 1:2.10.8-0ubuntu1
  500 Internal Server Error
http://jp.archive.ubuntu.com/ubuntu/pool/main/c/cairomm/libcairomm-1.0-1_1.2.0-0ubuntu2_i386.deb の取得に失敗しました  500 Internal Server Error
http://jp.archive.ubuntu.com/ubuntu/pool/main/g/glibmm2.4/libglibmm-2.4-1c2a_2.13.3-0ubuntu1_i386.deb の取得に失敗しました  500 Internal Server Error
http://jp.archive.ubuntu.com/ubuntu/pool/main/g/gtkmm2.4/libgtkmm-2.4-1c2a_2.10.8-0ubuntu1_i386.deb の取得に失敗しました  500 Internal Server Error
E: いくつかのアーカイブが取得できません。apt-get update を実行するか --fix-missing オプションを付けて試してみてください。

当然 apt-get update も、apt-get install --fix-missing jd も試したけどダメだった。しょうがないからとりあえずおちゅ~しゃ入れた。

2007/10/28

ubuntu feisty install note

Ubuntu edgy のインストールディスクしか手元になかったため、edgy をインストールし、feisty にアップグレードした。edgy から直接 gusty にはいけないらしい。/etc/apt/sources.list いじればいける?まぁこれはさておき。とりあえず feisty のまんま。というのも gusty があんまり評判よくないため。日本語ローカライズ版はいい、って話だけどなんとなく不安なので、そのうち上げる。

feisty にアップデートするまで

edgy のインストールCDを入れて通常通りインストール。インストール終了後、ログインして

sudo apt-get update
sudo apt-get dist-upgrade

たまってるアップグレードをインストールする。その後、[システム]->[システム管理]->[アップデートマネージャ]->]新しいディストリビューション '7.04' にアップグレード] を選択し、feisty へ。

以下、feisty にアップグレードした後のセットアップのお話し。

/etc/apt/sources.list を書き換える

アップグレードした直後の状態だと、端末で日本語入力をしていると端末が落ちる症状が起きる。これを防ぐための書き換えと、universe を有効にするために /etc/apt/sources.list を書き換える。以下を追記する。

deb http://jp.archive.ubuntu.com/ubuntu/ feisty universe
deb-src http://jp.archive.ubuntu.com/ubuntu/ feisty universe
deb http://archive.ubuntulinux.jp/ubuntu-ja feisty/
deb http://archive.ubuntulinux.jp/ubuntu-ja feisty-ja/

そしていつもの。

sudo apt-get update
sudo apt-get dist-upgrade

バックスラッシュとバーを打てるようにする

我が家のキーボードは Happy Hacking Keyboard Professional 2 で英語配列なわけだが、なぜか

setxkbmap us

しただけでは \ と | が打てなかった。なのでこれを有効化する。/etc/X11/xorg.conf の Section "Keyboard" を書き換える。

XkbModel "pc101"
XkbdLayout "us"

なお、こうしておくと setxkbmap us を実行する必要もなくなる。

Automatix2 をインストールする

何かと便利なのでとりあえずインストールしておく。でも、とりあえず動くことは動いたものの、これはなんか若干怪しかった。もっといい方法が別にあるかもしれない。

まず、/etc/apt/sources.list に以下の行を追加する。

deb http://www.getautomatix.com/apt feisty main

そして以下のコマンドを入力する。

wget http://www.getautomatix.com/apt/key.gpg.asc
gpg --import key.gpg.asc
gpg --export --armor 521A9C7C | sudo apt-key add -
sudo apt-get update
sudo apt-get install automatix2

sudo apt-get update のところで警告が出る。これはおそらく 正しい gpg 公開鍵を使っていないからではないか、と思う。このやりかたを参照したのが edgy で紹介していたページで、/etc/apt/sources.list に書き加える行を、edgy から feisty に変えただけだからだ (紹介ページでは feisty ではなく edgy になっていた)。まぁとりあえず動くのでほったらかしといた。

Java 開発/実行環境をインストールする

本当は Automatix2 経由で入れる計画だったんだけど、インストールしてみたらエラーが出たから apt-get で入れた。

sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre\
sun-java6-source sun-java6-plugin sun-java6-fonts

sun-java6-demo と sun-java6-doc は外した。demo は要らないかな、という理由。doc はいつもエラーが出るから。

Automatix2 からインストール

とりあえずインストールしておくものとして、

  • Azureus
  • Flash Player
  • MPlayre and FF Plugin
  • Multimedia Codecs
  • SUN JAVA 1.6 JRE

後は気が向いたとき、必要になったときに。

Firefox をセットアップ

以下の拡張をインストールする

  • All-in-One Gestures
  • All-in-One Sidebar
  • del.isio.us Bookmark
  • Download Statusbar
  • Greasemonkey
  • NoScript
  • QuickRestart
  • Tab Mix Plus
  • Vimperator

以下のグリモンスクリプトをインストールする。

about:config で以下を設定する

  • network.dns.disableIPv6 を true
  • browser.cache.memory.enable を true
  • browser.cache.memory.capacity を定義し、16384 を設定
  • config.trim_on_minimize を定義し、true

[編集]->[設定] で以下を設定

  • ホーム -> about:blank
  • ダウンロードフォルダ
  • ダウンロード履歴を残す -> チェックを外す

Compiz Fusion をインストールする

参考URL参照。ただ1つうまくいかなかったところをメモ。

Option "AddARGBGLXVisuals" "True"

上記の行が /etc/X11/xorg.conf にないために、compiz が正しく動いてくれなかったご様子だった。/etc/X11/xorg.conf の Section "Device" に上記の行を追加すると解決した。

M+IPAG 合成フォント

参考URL参照。

参考URLまとめ

後は適当にテーマとかいじって終わり。

追記。テーマについて

2007/10/27

また再インスコ

昨晩彼女さんがぶっこわした。まぁ俺の責任もある。管理者権限出してたし。彼女さんのアカウントから管理者権限が必要な設定をいじりたい時、面倒だったからそうしてたんだけど、思いっきり裏目に出た。

症状はXが立ち上がらないってのだったんだけど、これまで出会ったエラーとは違うものだった。で、復旧作業してると急にXが立ち上がったり、当然Xは不安定な状態なのでその状態で固まったり、もう俺はポルナレフ状態だった。

なんでも、アップデートマネージャが出るのがうざいからといろいろいじってたらこうなったらしい。何をどうやったらこうなるのか、全く想像が付かないが、本人に聞いても何をやったのかわからねぇが、と彼女もまたポルナレフ状態だった。

で、結局 kernel panic になって立ち上がらなくなっちゃって、再インスコ。

嗚呼、俺のエッチ画像たち。

2007/10/24

haskell

面白そう。

2007/10/15

もっとテキストを前面に押し出したい

このブログ。いや前面に押し出すほど大したことは書いてないんだけども。いわゆるデザインからの逃げ。しかし、「テキストを前面に押し出す」というデザインでもあるのだ。物事を極めるということについて、シンプルな物事ほど極めるのは難しい。つまりそういった「テキストを前面に押し出す」という、いたってシンプルなデザインも、極めるともなれば非常に難しいものであるに違いない。いや別に極めるつもりはないんですけども。

まぁとにかくこの味っけのないブログデザインをもっと味っけなくしてみようと企んでいる。

差し当たって参考になりそうなリンク。

2007/10/12

enumerate

今日は enumerate 関数。名前かぶるからネーミングに困ったけど、クラスとしては Iterator 野郎なだけなので、とりあえず r を付けてごまかした。Pair は zip 関数の時のものと同じで、2つの値を内包するクラス。全体的にほとんど zip と似たような感じで、ただ Pair.first がインデックスになっただけって感じ。

まず python の enumerate 関数のサンプル。

python の enumerate 関数サンプル

>>> a = ['foo', 'bar', 'baz']
>>> for i, v in enumerate(a):
...     print i, v
... 
0 foo
1 bar
2 baz

次に java による enumerate 関数。

Util.java (途中とばし)

 1 package util;
 2 
 3 import java.util.List;
 4 import java.util.ArrayList;
 5 
 6 public class Util {
 7 
28     public static <T> Enumerater<T> enumerate(Iterable<T> target) {
29         return new Enumerater<T>(target);
30     }
31 
32 }

Enumerater.java

 1 package util;
 2 
 3 import java.util.Iterator;
 4 
 5 public class Enumerater<T> implements Iterable<Pair<Integer, T>>, Iterator<Pair<Integer, T>> {
 6 
 7     private int index;
 8 
 9     private Iterator<T> iter;
10 
11     Enumerater(Iterable<T> iter) {
12         this.iter = iter.iterator();
13         this.index = 0;
14     }
15 
16     public Iterator<Pair<Integer, T>> iterator() {
17         return this;
18     }
19 
20     public boolean hasNext() {
21         return iter.hasNext();
22     }
23 
24     public Pair<Integer, T> next() {
25         return new Pair<Integer, T>(index++, iter.next());
26     }
27 
28     public void remove() {
29         throw new UnsupportedOperationException();
30     }
31 
32 }

使用例

73     public void testEnumerater() {
74         List<String> target = new ArrayList<String>();
75         target.add("foo");
76         target.add("bar");
77         target.add("baz");
78 
79         for (Pair<Integer, String> pair : enumerate(target)) {
80             System.out.println("Index[" + pair.first + "]"
81                         + ", Value[" + pair.second + "]");
82         }
83     }

実行結果

Index[0], Value[foo]
Index[1], Value[bar]
Index[2], Value[baz]

拡張 for 文でインデックスを使いたい時に重宝する。予定。

2007/10/11

python の map 関数を java でやってみる

python の zip 関数を java でやってみるの続き。今日は map 関数。

python の map 関数とは、第一引数に関数オブジェクト、第二引数にリスト(iterable なもの)を受け取り、リストの各要素を関数に通 し、その戻り値のリストを返す関数。非常にわかりにくいと思うので、以下にサンプルを。

python の map 関数のサンプル

>>> func = lambda x: x + 10
>>> a = [1, 2, 3]
>>> map(func, a)
[11, 12, 13]

java には関数オブジェクトなるものがないので、これを代替する Function インタフェースを作成した。Function インタフェースは execute メソッドのみを提供し、戻り値と引数の型は指定することができる。例外は完全に未対応。RuntimeException 使いましょうってことでお茶を濁してみる。

Function.java

1 package util;
2 
3 public interface Function<T, V> {
4     public T execute(V arg);
5 }

肝心の java 版 map 関数は第一引数に Function オブジェクト、第二引数に Iterable を受け取り、Function オブジェクトの戻り値の型と同じ型のオブジェクトを格納したリストを返す。

Util.java

 1 package util;
 2 
 3 import java.util.List;
 4 import java.util.ArrayList;
 5 
 6 public class Util {
 7 
 8     public static <T, V> List<T> map(Function<T, V> function, Iterable<V> target) {
 9         List<T> ret = new ArrayList<T>();
10         for (V value : target) {
11             ret.add(function.execute(value));
16         }
12         return ret;
13     }
14 
15 }

サンプル。

MapTest.java

 1 package util;
 2 
 3 import java.util.*;
 4 
 5 import static util.Util.*;
 6 
 7 public class MapTest {
 8     public static void main(String[] args) {
 9         List<Integer> target = new ArrayList<Integer>();
10         target.add(1);
11         target.add(2);
12         target.add(3);
13 
14         Function<String, Integer> function =
15             new Function<String, Integer>() {
16                 public String execute(Integer arg) {
17                     return "ToString: " + arg;
18                 }
19             };
20 
21         for (String ret : map(function, target)) {
22             System.out.println(ret);
23         }
24     }
25 }

実行結果

:!java util.MapTest
ToString: 1
ToString: 2
ToString: 3

ジェネリクスのお勉強にはなったかな。python のビルトイン関数から適当に拾って実装して遊んでるんだけど、いくつかを除けば、意外とこれといって難しそうなのはなかった。

ちなみにそのいくつかに該当するのは、locals とか。

2007/10/10

python の zip 関数を java でやってみる

あまり日の目を見ない python の組込み関数 zip を java で。zip 関数は値が2つのタプルを返すけど、 java にはタプルがないので、代わりに Pair という2つの値を内包するクラスを作ってみた。

初の Iterable なクラス作成なだけに、これでいいのやらって感じ。

Pair.java

 1 package util;
 2 
 3 public class Pair<T, V> {
 4 
 5    public T first;
 6    public V second;
 7 
 8    public Pair(T first, V second) {
 9        this.first = first;
10        this.second = second;
11    }
12 
13 }

Zip.java

 1 package util;
 2 
 3 import java.util.Iterator;
 4 
 5 public class Zip<T, V> implements Iterable<Pair<T, V>>, Iterator<Pair<T, V>> {
 6 
 7    private Iterator<T> iter1;
 8    private Iterator<V> iter2;
 9 
10    Zip(Iterable<T> iter1, Iterable<V> iter2) {
11        this.iter1 = iter1.iterator();
12        this.iter2 = iter2.iterator();
13    }
14 
15    public static <U, E> Zip<U, E> zip(Iterable<U> iter1, Iterable<E> iter2) {
16        return new Zip<U, E>(iter1, iter2);
17    }
18 
19    public Iterator<Pair<T, V>> iterator() {
20        return this;
21    }
22 
23    public boolean hasNext() {
24        return iter1.hasNext() && iter2.hasNext();
25    }
26 
27    public Pair<T, V> next() {
28        return new Pair<T, V>(iter1.next(), iter2.next());
29    }
30 
31    public void remove() {
32        throw new UnsupportedOperationException();
33    }
34 
35 }

ZipTest.java

 1 package util;
 2 
 3 import java.util.*;
 4 
 5 import static util.Zip.zip;
 6 
 7 public class ZipTest {
 8 
 9    public static void main(String[] args) {
10        List<Integer> list1 = new ArrayList<Integer>();
11        List<Integer> list2 = new ArrayList<Integer>();
12 
13        list1.add(1);
14        list1.add(2);
15        list1.add(3);
16        list1.add(4);
17        list1.add(5);
18 
19        list2.add(6);
20        list2.add(7);
21        list2.add(8);
22 
23        for (Pair<Integer, Integer> p : zip(list1, list2)) {
24            System.out.println("first: " + p.first + ", second: " + p.second);
25        }
26        System.out.println();
27 
28        List<Integer> list3 = new ArrayList<Integer>();
29        List<String> list4  = new ArrayList<String>();
30 
31        list3.add(1);
32        list3.add(2);
33        list3.add(3);
34        list3.add(4);
35 
36        list4.add("hello");
37        list4.add("world");
38 
39        for (Pair<Integer, String> p : zip(list3, list4)) {
40            System.out.println("first: " + p.first + ", second: " + p.second);
41        }
42 
43    }
44 
45 }

実行結果

$ java -cp . util.ZipTest
first: 1, second: 6
first: 2, second: 7
first: 3, second: 8

矢野勉のはてな日記 - [Java][ドリル]日常ドリル・pythonのrange関数をJavaでやってみる: ここを見てやってみようと思ったんだけど、なかなか面白い。Iterable なクラスを書くのも面白いし、python とか他の言語の組込み関数を java で作ってみるというのもまた面白い。暇つぶしにしよう。

2007/10/04

なんかサッパリしない

なーんかこうサッパリとした気分にならない。ここ数日。一昨日飲みすぎたか?

2007/10/02

抽象化

オブジェクト指向プログラミングにおいては、クラス間のやりとりではなくインターフェース(抽象型)でのやりとりが望ましい、というプラクティスのようなものがある。知ってはいたし、なるべく実践しようとは思ってはみるものの、いまいち不便じゃんとか思ってそこで思考停止してついついクラス間のやりとりを行う処理にしてしまったり。

まぁモデルとかはある程度しょうがない部分もあるんだけどさ、出来る限り抽象化して、その型ができること、つまり外部から触られる部分なるべく少ないような設計にして、外部から触れる部分はインターフェースへ、それ以外はクラスの実装にして、外部のクラスにはそのインターフェースからのみ触りましょうというお話し。

で、これを具体化してコードにしたページを del.icio.us 経由で発見した。読んでてよかったdel.icio.us/tag/java

抽象データ型と Java/C++ そして COM/CORBA

なるほどクラスのコンストラクタをパッケージプライベートにして外部からのオブジェクト生成をコードレベルで制限すると。こうやって見ると大したことじゃないのに、全然気づかなかった。

2007/10/02

英語読めなくて辛い身近なことって

man ページ読めなかったりする時が一番だな。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。