図 16 検索部分のコード ( 1 ) : フィールドから窈直の取得と表示偵び )i 砡忍 private JButton getJButton() { u11 ) { if (jButton public void actionPerformed( ・ getJDia10g() ; jDia10g. setVisib1e(true) ; String sql " SELECT * FROM music INNER JOIN genre ON music ・ genre_id という手順でおこないます。ただし、 MySQLManager / / タイトルの確認 jTextFie1d. getText() ; String title if (title . equals(' false) { sql + = " WHERE title LIKE ' % " + title + " % ' / / アーティストの確認 jTextFie1d1. getText ( ) ; String artist false) { if (artist . equals("" sql + = (title . length() ! = 0 ) ? " AND" artist LIKE , % " 十 artist 十 " % , " ・ sql + = " / / ジャンルの確認 ( " すべて " の ID が 0 、 " ロック " が 1 ) jComboBox. getSe1ectedIndex() ; int genre if (genre ! = 0 ) { sql + = ((title . length() ! = 0 ) Ⅱ (artist . length() ! = 0 ) ) ? " AND" sql + = mt1SIC . 十 genre ; / / 表示する順序の確認 if (jRadi0Button. isSeIected() true) { sql + = " ORDER BY music-id ASC; } else if (jRadi0ButtonI . isSeIected() ー WHERE " true) { SELECT 本 FROM 加朝 0 INNER JOIN genre ON music. genre_id ニ genre genre_id WHERE t は LIKE SELECT 物 FROM 加引 0 INNER JOIN genre ON music_ genre_id ー genre. genre_id WHERE title LIKE ・、田眠、・ AND art ist LIKE ・、 Eye%' ORDER BY 宿 SELECT ネ FROM music INNER JO genre ON music. genre_id = genre. genre_id WHERE title LIKE SELECT ネ FROM music INNER JOIN genre ON music. genre_id ニ genre. genre_id WHERE artist LIKE MusicCataloz ( 1 ) [ J 3 Appl•catton] ん / ioca レ」 2sdkt 4 2-05 / b 旧 / va は。“ロー第 1 ーー ~ の厂 ー 0 consoie 図 17 Console ヒューに表示された SELECT 文 System. out . println(sql) ; / / SELECT 文の確認 sql + = " ORDER BY sales DESC; } else { sql + = ORDER BY release_date DESC; " ・ 、田 ue 、・ AND artist LIKE ・ %Eye 、・ AND genre_ %B 地 e 、 ' ORDER BY sal es DESC . 、 G00 600 DO 、、 ' ORDER BY release_date D 日可 genre . genre_id" ・ " WHERE " ■データの登録 登録タブで新たなデータを登録するときも、 1. 登録タブの各フィールドに入力された値から SQL IN- SERT 文を作成する 2. MySQLManager クラスの openDB() メソッドを呼 び出す 3. MySQLManager クラスの addData() び出す 4. MySQLManager クラスの cIoseDB() び出す 178 メソッドを呼 メソッドを呼 クラスの addData() メソッドは、データの登録に失敗し た場合に RuntimeException 例外を送出し、呼出し元に メッセージを渡します。このため、 [ 登録 ] ボタンのイベン トハンドラでこの例外を捕らえ、 RuntimeException ク ラスの getMessage() メソッドを呼び出してメッセージを 取得し、それをステータス・メッセージ (jLabe114) とし て表示する必要があります。 ☆ この連載では、 Eclipse と Visual Editor の使用例と UNIX MAGAZINE 2005.3
図 12 getJComboBox() に追加するコード ( 下線部 ) import 」 ava ・ sql . Resu1tSet ; import j ava. sql . SQLException ; private JComb0Box getJComboBox ( ) { = Ⅱ u11 ) { if (j Comb0Box jComb0Box. add 工 tem(" すべて ") ; MySQLManager msm = new MySQLManager ( ) ; msm ・ openDB ( ) ; Resu1tSet rs = msm. getData( "SELECT genre_name FROM genre ・ try { while ()s . next()) { jComb0Box. addltem()s . getString("genre-name") ) ; } catch (SQLException e) { e . printStackTrace() ; msm. c10seDB() ; return jComb0Box; 図 13 完成したシャンル・コンポポックス を検索条件ーー タイトル : : アーティスト・ 表示設定 ロック 、を録幗 ) 最近オルタナテイプ ヒップホップ ジャズ・フュージョン 2 行目の INNER JOIN が、 2 つのテープルを結合する ための句です。テープルを結合するための条件は、その次 の ON 句で指定します。今回の例では、 music テープル の genre-id 列と genre テープルの genre-id 列の値が一 致するか否かを結合の条件にします。たとえば、 music テ ープルの genre-id 列の値か 2 の場合は、 genre テープ ルで genre-id 列の値が、、 2 " のレコードを結合することが 名が正しく設定されているかを確認する ( 図 13 ) 。 できます ( 図 15 ) 。 登録タブのジャンル・コンポポックス (getJCombo- データベースを検索する条件は、 3 行目の WHERE 句 Box1() メソッドで生成 ) についても、同様の手順で設定 で指定します。図の例では、検索タブのタイトル、アーテ しておきます。 イスト、ジャンルの各フィールドに入力された値にもとづ いて作成することになります。これらのフィールドがデフ ■データベースの検索 ォルトのままであれば、 SELECT 文に WHERE 句を追 MusicCatalog アプリケーションの衾索タブでは、 mu- 加せずにすべてのレコードを取得します。 sic テープルの genre-id 列と genre テープルの genre-id また、 SELECT 文に ORDER BY 句を指定すると、 列にもとづく 1 対 1 の、、リレーションシップ " を利用し 検索結果の表示川印を指定することができます。 ORDER ます。 BY 句の表示順序は、、、表示設定 " セクションのオプショ リレーションシップとは、共通する列を使って 2 つのテ ンにもとづいて指定します。、、 ASC " を指定すると検索結 ープルを結びつけることです。この場合は、 music テープ 果が昇順で、、、 DESC" を指定すると降川頁で並べ替えられ ルの genre-id 列と genre テープルの genre-id 列を結び ます。 つけ、 genre テープルからジャンル番号に対応するジャン ル名を取り出し、 music テープルのその他のデータと組み 1. Outline ビューの getJButton() をクリックし、 Java 工デイタに getJButton() メソッドを表示する。 合わせて結果セットを生成します。そのための SELECT このメソッドには、前回追加したイベント処理コードが 文は図 14 のようになります。 176 UNIX MAGAZINE 2005 . 3
そして、 Music という名前で空のデータベースを作成し ます。 mysql> CREATE DATABASE Music ; Query OK, 1 row affected ( 0.17 sec) mysql> MySQL データベースの一覧を表示させて、 Music デ ータベースが追加されたことを確認します。 mysql> SHOW DATABASES ; Enter password : XXXXXXXX WeIcome tO the MySQL monitor. mysql> 3 Databases ー MusiC mys ql test rows in set ( 0 .00 mysql> exit Bye 次に、 genre テ ーカレを、、 SQL スクリプト " で作成しま す。 SQL スクリプトにしておくと、データベースがクラッ 168 トランザクション機能はサポートされていません。 あります。なお、 MySQL 3.23.6 以前のバージョンでは、 りするのを防ぐためにトランザクションを制御する必要が ーションでは、データカ陪 5 分的に更新されたり破壊された す概念です。データベースの更新処理をおこなうアプリケ すべきデータベースの更新処理 ( 挿入、更新、削除 ) を表 を指定しています。トランザクションとは、一括して実行 こではトランザクション機能に対応する、、 InnoDB 型 " ープルはデフォルトでは MyISAM 型で作成されますが、 類を指定することができます。 MySQL データベースのテ テープルを作成するときには、キーワード TYPE で種 返されるためです。 コンポポックスで選択された項目の ID が 0 からの連番で ャンル番号として 1 ~ 5 を使用しているのは、、、ジャンル " はシステムのエデイタ ()i など ) で作成します ( 図 1 ) 。ジ そのためのスクリプト genre-dump. sql を、 Eclipse また genre テープルにテスト用のレコードを 5 件追加します。 シュしたときも簡単に復元できます。ここでは、作成した 図 1 genre-dump. sql スクリプト / * genre テーブルの定義 * / DROP TABLE IF EXISTS genre ; CREATE TABLE genre ( genre—id int ( 11 ) NOT NULL AUTO—INCREMENT , genre_name text , PRIMARY KEY (genre_id) ) TYPE=InnoDB ; / * ge Ⅱ re テーブルのレコードの定義 * / LOCK TABLES genre WRITE ; INSERT INTO genre VALUES ( 1 , , ロック , ) , ( 2 , , オルタナティブ , ) , ( 3 , , ハードロック , ) , ( 4 , , ヒップホップ , ) , ( 5 , ' ジャス・フューンヨン ' ) ; UNLOCK TABLES ; UNIX MAGAZINE 2005.3 来は面倒な作業です。しかし、 Java では DBMS との連 Java アプリケーションから DBMS を扱う処理は、本 ■ JDBC ドライバの設定 様の手川頁で作成します music テーカレも、図 3 の SQL スクリプトを使って同 genre テープルのレコードを確認します ( 図 2 ー c ) 。 させ ( 図 2 ー a ) 、 genre テープルの構造 ( 図 2 - b ) 、そして そして、 Music データベースのテープルの一覧を表小 mysql> Database changed mysql> USE Music; WeIcome t0 the MySQL monitor. Enter password : XXXXXXXX $ mysql —u mysqluser —p ス Music の使用を亘言します。 みましよう。 MySQL システムにログインし、データベー genre テープルが正しく作成されたかどうかを確認して で、それを手がかりにスクリプトを修正します。 る場合は、原因と思われるコードの行番号が表示されるの トが返ってくるはすです。 SQL スクリプトにエラーがあ SQL スクリプトに問題がなければ、シェルのプロンプ Enter password : XXXXXXXX $ mysql -u mysqluser —p Music く genre—dump. sql するには、次のようにします。 MySQL データベースに対して SQL スクリプトを実行
図 2 genre テ mysql> SHOW TABLES ; ー Tab1es—in—Music ー ー genre UNLOCK TABLES ; 1 row in set ( 0 . 00 sec) mysql> DESCRIBE genre ; ーブルが正しく作成されたかをる砡忍 ← (a) Music デー タベースのテープル一覧を表示させる ← (b) genre テ ープルの構造を確認 ー Fie1d ー Type Nu11 YES ー Key ー DefauIt ー Extra ー int(ll) ー ー genre—id ー genre—name ー text 2 rows in set ( 0 . 01 sec) ー PRI ー NULL ー NULL ー auto_increment mysql> SELECT * FROM genre; ← (c) genre テープルのレコードを確認 ー genre—id 1 2 3 4 5 genre_name ロック オルタナテイプ ハードロック ヒップホップ シャズ・フューション ー十 ー十 ー十 5 rows in set ( 0 .00 sec) mysql> exit Bye 図 3 music-dump. sql スクリプト / * music テーブルの定義 * / DROP TABLE IF EXISTS music ; CREATE TABLE music ( LOCK TABLES music WRITE; / * music テープルのレコードの定義 * / ) TYPE=InnoDB ; PRIMARY KEY (music_id) sales int(ll) default NULL, release_date text , price int(ll) default NULL, genre—id int(ll) default NULL, artist text , title text, music—id int ( 11 ) NOT NULL AUTO—INCREMENT, INSERT INTO music VALUES ( 100 , 'Everyday' , 'Dave Mattews Band' , 1 , 2078 , ' 2001 / 02 ' , 200102 ) , ( 104 , 'The Beekeeper' , 'Tori Amos ' , 2 , 2078 , ) 2005 / 02 ' , 200502 ) ; ( 103 , 'Live in Buffa10' , ' G00 G00 D01es' , 2 , 2051 , ) 2004 / 11 ' , 200411 ) , (102,'B1ue','Third Eye B1i Ⅱ d ' , 2 , 1311 , ) 1999 / 11' , 199911 ) , ( 101 , 'Fi1ms About Ghost' , 'Counting crows' , 1 , 1531 , ) 2003 / 11 ' , 200311 ) , UNIX MAGAZINE 2005.3 連載⑤ゆ se を味わう 169
。。 Echpse 6 データベースに接続する ・遠藤美代子 前回は、コンポーネントのイベントの処理、ダイアログ の表示、テープルの作成について説明しました。 今回は、総仕上げとしてデータベースとの連携処理をと りあげます。また、 EcIipse を使って Java の例外を処理 する方法も紹介します。 ■データベースの作成 データベースは、大量のデータを効率よく管理するため の仕組みです。データベースを管理するメカニズムは、 般に DBMS (DataBase Management System : デー タベース管理システム ) と呼ばれます。 DBMS には、デー タの取得 ( 検索、照合 ) や挿入 ( 追加 ) 、更新、削除などの 機能があり、アプリケーションからこれらを呼び出すだけ でデータを簡単に操作できます。 代表的な DBMS アプリケーションには OracIe 、 DB2 、 MySQL 、 PostgreSQL 、 lnformix 、 SQL Server など があります。今回は、これらのなかから MySQL を使い ます。 現在作っている MusicCatalog アプリケーションでは、 Music というデータベースを使用します。このデータベー スには、 music と genre という 2 つのテープルがありま す。 music テープルは音楽 CD のデータを保持するテー プルで、表 1 のように定義されています。 music-id は、、主キー " です。主キーとは、テープル内の 1 行のデータ ( レコード ) を一意に識別するための情報で す。つまり、主キーに指定される列の値は、そのテープル 内では一意でなければなりません。また、 music-id 列は AUTO-INCREMENT 列です。したがって、新しい音 楽 CD のデータを登録するときに music-id 列の値を指定 UNIX MAGAZINE 2005 . 3 表・ 1 music フ - 歹培 music—id title art ist genre-id prlce release-date sales 表 2 genre テ 歹銘 genre -id genre—name ーブル データ型 int text text int int text int ーカレ テータ型 int text 言月 ジャンル名 ジャンル番号住キー ) 言月 売上枚数 リリース日 ジャンル番 - 号 アーティスト タイトル 情理番号住キー ) しないと、その前に登録された音楽 CD の music-id 列の 値をインクリメントした値が自動的に言定されます。 genre テープルはジャンル番号とそれに対応するジャン ル名からなるテープルで、表 2 のように定義されています。 genre-id 列は主キーなので、 genre テープル内では一意 でなければなりません。 genre-id 列も AUTO-INCRE- MENT 型です。 MusicCatalog アプリケーションを完成させるには、 の Music データベースを作成する必要があります。以下 では、分かりやすいように SQL のキーワードを大文字で 示していますが、これらは小文字で入力してもかまいませ ん。また、 SQL のコマンドを入力するときは、末尾にかな らず、、 ; " ( セミコロン ) を付けなければなりません。 それでは、 Music データベースを作成しましよう。ま ず、この連載の 1 回目 ( 2004 年 10 月号 ) で作成した my- sqluser というユーザーで MYSQL システムにログインし $ mysql —u mysqluser —p ます。 167
連載 6 Ec/Ipse を味わう 図 14 リレーションシップを作る SELECT 文窈列 SELECT * FROM music INNER JOIN genre ON music ・ genre_id = genre ・ genre_ WHERE title LIKE ' %xxx% ) AND artist LIKE ) %yyy% ' 図 15 music テープルと genre テープルの結合 ORDER BY music_id ASC; id AND music ・ genre—id=zzz mus ℃ テープ丿レ music id 103 title artist genre 2 genre 2 id id prlCe 2 , 051 オルタナティブ genre_name release date 2004 / 1 1 sales 200411 Live in Buffalo G00 G00 DOles genre テーブ丿レ 含まれています ( イベント処理コードが畳み込まれてい る場合は、左横のバーの > 印をクリックすると展開され ます ) 。 2. タイトル、アーティスト、ジャンルの 3 つのフィールド に入力された値を取得し、 SELECT 文の WHERE 句 までを作成する ( 図 16 ) 。 テキスト・フィールドの値は文字列で返されるので、 空かどうかは String クラスの equals() メソッドや length() メソッドを用いて確認できます。 3. 次の規則に従って SELECT 文の ORDER BY 句を 追加し、 SELECT 文を完成させる。 、、登録頂 " が選択された場合 ORDER BY music_id ASC; 、、最近リリースされた順 " が選択された場合 ORDER BY release_date DESC ; 、、売旧頂 " が選択された場合 ORDER BY sales DESC ; ラジオボタンが選択されているかどうかは、 JRadio- Button クラスの isSelected() メソッドで確認できま す。これらのラジオボタンはグループ化されているの で、かならずどれか 1 つだけが選択されます。 4. SELECT 文カしく生成されることを確認する。 まず、図 16 の、、 System. out ・ println(sql);" を入力しま す。そのうえで、 MusicCataIog アプリケーションを実 行します。各フィールドに値を入力して [ 検索 ] ボタン をクリックし、 Console ビューに正しい SELECT 文 カ俵示されるかを確認しましよう ( 図 17 ) 。 最後に、データベースを検索し、検索結果をダイアログ UNIX MAGAZINE 2005 . 3 上のテープルに表示する部分を作成します ( 図 18 ) 。 基本的な手川頁は、コンボボックスにジャンル名を設定し たときと同じです。データベースから取得したデータは、 1 行ぶん ( 7 列 ) ずっ取り出してテープルに追加します。追 加するデータは文字列でなければならないので、整数で保 持されているものは文字列に変換します。 1. 検出されたレコードの件数をメッセージとして表示す る。 2. Run メニューから Run As → Java Application を 選び、 MusicCatalog アプリケーションを実行する。 3. 検索タブに検索条件を設定し、 [ 検索 ] ボタンをクリック する ( 図 19 ) 。 getJButton() メソッドのデータベースの検索に関連す るコードは、プライベート・メソッドとしてリファクタリ ングすると保守しやすくなります。 まず、図 16 の、、 String sql = " で始まる行からステータ ス・メッセージを表小するコードまで選択し、 Refactor メ ニューの、、 Extract Method" を選びます。 次に、 Extract Method ダイアログの Method name フィールドにメソッド名として、、 do-search" と入力し、 Destination type コンポポックスから MusicCatalog を 選択します。ここで [Preview] ボタンをクリックすると、 リファクタリング後のコードカ認できます ( 図 20 ) 。 [ OK ] ボタンをクリックし、 こまでに入力したコード が do-search() メソッドの呼出しに置き換えられ、 do- search() という新しいプライベート・メソッドが追加さ れたことを確認します。 177
最後に、トランザクションを用いてデータベースに新し いデータを登録する addData() メソッドを実装します。 データベースに新しいデータを登録するときの手川頁は次の ようになります。 1. トランザクションを開始する。 2. 更新処理をおこなう。 3. 更新処理が正常に終了したらコミットし、エラーが発生 したらロールバックする ( 更新前の状態に戻す ) 。 4. トランザクションを終了する。 MySQL はデフォルトで自動コミットモード ( 更新処理 のたびにコミットを実行する ) になっていますが、トラン ザクションを開始するには、このモードを解除します。そ れには、 Connection オプジェクトの setAut0Commit() メソッドを呼び出し、引数として、、 false" を渡します。 データベースの更新処理をおこなうには Statement オ プジェクトの executeUpdate() メソッドを、更新処理を コミットするには Connection オプジェクトの commit() メソッドを、ロールバックするには Connection オプジェ クトの rollback() メソッドをそれぞれ呼び出します。 public VOid addData(String sql) { if (stmt ! = null) { try { co Ⅱ . setAut0Commit (false) ; stmt . executeUpdate(sq1) ; con . commit ( ) ; } catch (SQLException e) { con. rollback() ; rollback() メソッドの呼出しでも SQLException 例外 が送出される可能性があるため、 rollback() メソッドの呼 出しを別の try/catch 文で囲みます。また、データの登録 に失敗したら、 RuntimeException 例外を送出して、呼 UN 工 X MAGAZINE 2005.3 ( " テータの登録に失敗しました。 throw new RuntimeException=> con. rollback() ; try { } catch (SQLException e) { 出し元にエラーを知らせることにします。 連載 6 ゆ se を味わう } catch (SQLException (l) { el . printStackTrace ( ) ; こでツールバーの、、 save " アイコンをクリックすれば、 MySQLManager クラスが完成します。 0 コンボボックスの完成 検索タブと登録タブには、また完成していないコンポー ネントが 1 つあります。それはジャンル・コンボボックス です。このコンポポックスには、 genre テープルに登録さ れているジャンル名 (genre-name 列 ) を設疋します。そ の手順は次のとおりです。 1. MySQLManager クラスの openDB() メソッドを呼 び出す。 2. MySQLManager クラスの getData() メソッドを呼 び出して、ジャンル名を取得する。 3. コンポポックスにジャンル名を設疋する。 4. MySQLManager クラスの closeDB() メソッドを呼 び出す。 ResultSet オプジェクトからデータを取得する場合に は、データの種類に応じて ResuItSet オプジェクトの getXXX() メソッドを呼び出し、列の名前を指定します。 genre-name 列はテキストとして定義されているので、 こでは ResultSet オプジェクトの getString() メソッド を呼び出します。 作成した MySQLManager クラスを試してみましよ 1. Package Explorer ヒューで MusicCatalog. java を ダブルクリックし、 Java 工デイタに MusicCatalog ク ラスのコードを表示する。 2. Outline ビューで getJComboBox() をクリックし、 Java 工デイタに getJComboBox() メソッドのコード を表示する。 3. getJComboBox() メソッドに図 12 のコードを追加す る。 4. Run メニューから Run As → Java Application を 選択し、 MusicCatalog アプリケーションを実行する。 ジャンル・コンポポックスに genre テープルのジャンル 175
連載 6 ゆ se を味わう 図 18 オ部分のコード ( 2 ) / / SELECT 文の確認 System. out . println(sql) ; / / データベースの検索 / / レコード件数のリセット int rows int C01s ; / / テーブルの行テータのリセット tablemodel . setRowCount ( 0 ) ; Object ロ data = new Object [ 7 ] ; MySQLManager msm = new MySQLManager ( ) ; msm ・ openDB ( ) ; Resu1tSet rs = msm. getData(sq1) ; try { while ()s . next() ) { / / レコードの件数をカウント ro S 十十 ; / / 列数をリセット cols / / 列テータの取得 data[cols + + ] lnteger. t0String()s ・ getlnt("music—id")) ; data[cols + + ] rs . getString("tit1e"); data[cols + + ] rs . getString("artist") ; data[cols + + ] rs . getString("genre-name") ; data[cols + + ] lnteger. t0String()s ・ getlnt('lprice'l) ) ; data[cols + + ] rs . getString("re1ease—date") ; data[cols] lnteger. toString()s . getlnt ("sales") ) ; / / 1 行分のデータの追加 tablemodel . addRow (data) ; } / / end of while } catch (SQLException (l) { el . printStackTrace() ; msm. c10seDB() ; / / メッセーンの故疋 if (rows jLabe13. setText ( " 該当するデータは見つかりませんでした。 } else { jLabe13. setText(" 該当するテータが ー + rows + " 件見つかりました 図 20 リファクタリング後の do-search() メソッド 図 19 データベースの検素結果 物幸検索条件 アーティスト : 表示設定 ・ををら最近リリースされた物い査上 談当するデータが 3 件見つかりました . 。了ー名イ上ルー炉三当嘉ド島みを召を一価を挈こス iL 第 ) レ : マナディ : ー 0 ! ー ~ 004 ー : ) 4 ー ー 01 いを第 20 こ ( 0000 地ー ルタナテフ 078 ~ 005 盟 ~ 285 俿 ー 04 洋′層日を ~ を物 p を一 10 れ 00 、 Extract Method : 当 Music Catalog く 2 》 Chan 要” pe 浦。 , 0 ・ d ワ、れ旧叔 ) 。 n ・ A 。 ! め心駅 02 心ロ つ区・“ ! や・補第”・ d ( A は、で ) 区を気上靆血を靆試・を・破 ( を ) 物 0 調い dO ・第 0 ト も•dd 物れ地む '0d ”第 ch RefEtored 。・ 阯い明 5 ″タイトルの健綫 は ( いい 0 0 製引、につ は朝パを . ・引ー ( ・つ を印破 ( いい 0 ! en を日 ・一 h 1 : 第 0 : h 朝い ( ・いーを一」 p きを一 4 0 ⅱ v ・まを物ー tetJPane ー 4 ( ) ー OK める人が増えればと願っています。 して、簡単なデータベース・アプリケーションを作成して こでとりあげたのは Eclipse や きました。もちろん、 VisuaI Editor の膨大な機能のごく一部にすぎません。 の連載を契機として、 EcIipse や VisuaI Editor を使い始 ( えんどう・みよこ ) 179 UN 工 X MAGAZINE 2005.3
、 , い義工第工い義い J い」い工い工い j; いユ新エい工いい : 〕 J 、工い J い工新エいユ 3 ユい工い、いい工新エいこい工新い」ユ℃い〕〕」コユ工い工いユ工新」い . 第ユ工新い、第 は蓋を閉じてデスクトップ的に使うこともできる、そのほ かにも FireWire や内蔵 Ethernet の規格な田かな相違 点は多い、 PowerBook G5 はあと半年は出ないのではな いか、半年のうちに PowerBook に収まるほど低消費電力 の PowerPC G5 が出るのか、研究開発はおこなっている のではないか、 PowerBook G5 は水冷式になるのではな いかという噂もある、 1 月に開催される Macworld Expo で新しい PowerBook が発表されるかもしれないという噂 もある、その種の噂はつねにある、といったフォローがき ました。 けっきよく MacworId Expo では新型 PowerBook で はなく Mac mini が発表されましたが、新型 PowerBook を待ち望んでいる人も多いのでしようね。 Newsgroups: . net. phones Subject: にカード型公衆電話廃止 IC カード型公衆電話が廃止されるという話を聞きまし た。すでに設置しているものも順次撤去するか、従来型へ 置き換えていくそうです。登場したときはモバイル機器の 利用者の期待を集めていたと思いますが、当時すでに携帯 電話や定額制 PHS が急速に普及しつつあったので、時代を 読み誤ったということでしようか。いずれにせよ、携帯電 話を持たない私はますます暮らしにくくなりそうです、と いう感想記事です。 これに対して、機能的には ISDN 公衆電話とそれほと がないと思う、孑第將電話とは比較にならないが、 IC カード 式の電話番号記億機能はけっこう便利である、ほかにも赤 外線 (IrDA) ポートを備えていたのは大きい、物理的に接 続しなくてよいうえ、モデムや TA カ材く要なのは PDA な どの利用者には都合がよかった、自分が拷電話を買った のは、よくかける相手への通話料が一一・番安かったからであ る、最近は携帯電話の通言辞トがさらに安くなっているので 固定電話を解約しようかと思っている、ひと昔前は固定電 話がないとクレジットカードを作れなかったと思うが、い まはそういうこともないだろう、現在でも銀行で新規口座 を作るときなどに固定電話をもっている必要があるらしく、 IP 電話の番号では駄目なようだ、そのためだけに固定電話 を残すのも変な話である、固定電話は金を払って固有識別 番号を買うためのものだと思っている、そのわりには番号 をあっさり変えられてしまう、売り手に ID を売っている という意識がないのだろう、といったフォローがきました。 ・今月の . archives. * ダイジェスト Newsgroups: fJ.news 」 ists . news. group, 月 . archives. documents Subject: News Group Genre Table ( 2005 / 1 / 20 ) 巧ニュースグループ管理委員会の分野分けと、現在のニ ュースグループおよび管理グループの対応リストの最新版 です。 現在の巧ニュースグループは、 comp ( コンピュータ関 連 ) 、 net ( ネットワーク ) 、 rec ( 題未 / 娯楽 ) 、 soc ( 社会 ) 、 misc ( その他 ) の各分野ごとに作成 / 削除に関する侖、お よびそれらの作業が管理されています。 Newsgroups: . news 」 ists,fJ. news. group, . archives. documents Subject: Active Newsgroups List of ( 2005 / 1 / 20 ) で利用できる全ニュースグループの一覧です。 スグループ名やおもな投稿内容のほかに、内容に関する簡 単な解説、他のニュースグループとの使い分けの説明など カ附いています。この時点で 411 のニュースグループがあ り、前回のリスト ( 2004 / 10 / 4 ) から 2 つ増えています。 このリストを使って NetNews システムのニュースグル ープ・チェック機能を実行すれば、 NetNews サーバー上 の巧ニュースグループの作成 / 削除の管理が簡単におこな えます。 Newsgroups. . news.lists,fj. news. adm 」 . archives. documents Subject: List of M0derators for fj-Netnews ( 2005 / 1 / 20 ) 巧ニュースグループの moderated な ( 司会イ寸きの ) ュースグループと moderator ( 司会者 ) の一覧の最新版で す。現時点での moderated なニュースグループは、 . lst-readme 、 . mail-lists. arukikata 、巧 . mail-lists. elec- tion 、巧 . mail-lists. fj-committee 、巧 . news. announce 、 . announce です。記事の投稿先は、 NetNews サーノヾーで ニュースグループ名@moderators.fj-news.org ' を言て疋 すればよいようになっています。 ・今月の . sources* Subject: Cafe Version 2.3 Message-lD: <m2k6qm5ysz.fsf@owlin.tksa.gr.jp 〉 いいい」工いユ工い 3 工いい、一い J 、工い」 3 工い J 、工、工い。新 j い . い工い工い 3 ユ工い、い」 J 、工い工いい = - いい J 、ユいい義いい」い工い 3 い」、 3 い工い J 、工い、いい UN 工 X MAGAZ 工 NE 2005.3 149