2012-09-09

トレンドチャートのサンプル

JavaFX でグラフのサンプルを作成しました。いろいろを試行錯誤しましたが、悔しいことに、まだ満足にチャートを駆使出来るまでには至っていません。とりあえず途中経過ということで、報告しておきます。使用環境は NetBeans IDE 7.2 on Fedora 17 (Linux) + Java SDK 7u7 です。
Sample_TrendGraph.java を以下に示します。
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sample_trendgraph;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
import javafx.scene.effect.DropShadow;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/**
 *
 * @author bitwalk
 */
public class Sample_TrendGraph extends Application {

    @Override
    public void start(Stage primaryStage) {
        final NumberAxis xAxis = new NumberAxis(0, 100, 10);
        final NumberAxis yAxis = new NumberAxis(-1, 1, 0.1);
        final LineChart grp = new LineChart<>(xAxis, yAxis);

        grp.setCreateSymbols(true);     
        grp.setAlternativeRowFillVisible(false);
        grp.setPrefSize(600, 400);
        grp.setTitle("トレンドチャート");      

        xAxis.setLabel("時間軸");
        yAxis.setLabel("データ値");

        DropShadow shadow = new DropShadow();
        shadow.setOffsetX(2);
        shadow.setColor(Color.GREY);
        grp.setEffect(shadow);

        final XYChart.Series series1 = new XYChart.Series();
        series1.setName("系列1");
        for (int i = 0; i <= 100; i++) {
            series1.getData().add(
                    new ScatterChart.Data(i, (Math.random() - 0.5) * 1.6));
        }
        grp.getData().addAll(series1);

        StackPane root = new StackPane();
        root.getChildren().add(grp);
        Scene scene = new Scene(root);
        scene.getStylesheets().add(Sample_TrendGraph.class.getResource("Chart.css").toExternalForm());

        primaryStage.setTitle("トレンドチャート");
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    /**
     * The main() method is ignored in correctly deployed JavaFX application.
     * main() serves only as fallback in case the application can not be
     * launched through deployment artifacts, e.g., in IDEs with limited FX
     * support. NetBeans ignores main().
     *
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
}
Chart.css を以下に示します。
.chart-series-line {
    -fx-stroke-width: 1px;
    -fx-effect: null;
}

.chart-plot-background {
    -fx-background-color: #E0FFFF;
}
.chart-vertical-grid-lines {
    -fx-stroke: #0000C0;
}
.chart-horizontal-grid-lines {
    -fx-stroke: #0000C0;
}

.default-color0.chart-series-line {
    -fx-stroke: #800000;
}

.default-color0.chart-line-symbol {
    -fx-background-color: #800000, #C04000;
    -fx-background-radius: 0;
    -fx-background-insets: 1px;
    -fx-shape: "M2,2 L2,-2 -2,-2 -2,2 Z";
}

実行例を以下に示しました。

2012-08-14

JavaFX のサンプル

JavaFX を、まとめて時間が取れるこの夏期休暇に、ある程度使えるようになりたいと、楽しみにしていたのですが…、いざ休みに入ると、土日は、昼間はひたすら睡眠、夜間はオリンピックを見入ったりで、なかなか手をつけられません。

あっという間に月曜日になってしまい、慌てて理解の為のサンプルを作り始めました。まずはコントロールを一通り、浅くでもいいから理解してしまおうとしています。FXML の方は、JavaFX Scene Builder が Linux でも利用できるようになるまで待つことにしました。Linux にも対応してくれるものと勝手に期待していますが…。

さて(日が変わってしまいましたが)月曜日の成果です。微々たる数ですが、ハードコピーを紹介します。


   


下記のサイトにサンプルについてまとめはじめました。 夏期休暇が終わるころには、もっとサンプルが充実しているはずです。サンプルを作ることが目的ではありませんが、作りたいアプリケーションを本格的に作り始める前に、簡単なサンプルを作ってみてある程度使えるようにしておかないと、つまらないところで躓いてしまいます。ようやく使い甲斐がある GUI 系ライブラリに巡り逢えたので、確実に取り組んでいきたいと思っています。それにしても普段は週末ですら満足に時間を取れないのが悩みの種です。

2012-08-05

RadioButton サンプル

RadioButton のサンプルを紹介します。サンプルは下記からの引用なので、オリジナリティはありません。Fedora での動作確認結果の紹介が目的です。 実行環境は下記の通りです。
  • OS : Fedora 17 (x86_64) / LXDE(デスクトップ環境)
  • JDK : jdk-1.7.0_05-fcs.x86_64
  • JavaFX : javafx-sdk2.2.0-beta (build 19)
  • IDE : NetBeans IDE 7.2
実行結果を下記に示しました。

サンプルソースを下記に示しました。なお、(Calendar.png)、(Contact.png) および (Home.png) の三種類の画像を、ソースと同じディレクトリに保存しておく必要があります。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uiradiobuttonsample;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.RadioButton;
import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleGroup;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 *
 * @author bitwalk
 */
public class UIRadioButtonSample extends Application {

    final ImageView icon = new ImageView();

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setTitle("Radio Button Sample");
        stage.setWidth(250);
        stage.setHeight(150);

        final ToggleGroup group = new ToggleGroup();

        RadioButton rb1 = new RadioButton("Home");
        rb1.setToggleGroup(group);
        rb1.setUserData("Home");

        RadioButton rb2 = new RadioButton("Calendar");
        rb2.setToggleGroup(group);
        rb2.setUserData("Calendar");

        RadioButton rb3 = new RadioButton("Contacts");
        rb3.setToggleGroup(group);
        rb3.setUserData("Contacts");

        group.selectedToggleProperty().addListener(new ChangeListener() {
            @Override
            public void changed(ObservableValue ov,
                    Toggle old_toggle, Toggle new_toggle) {
                if (group.getSelectedToggle() != null) {
                    final Image image = new Image(
                            getClass().getResourceAsStream(
                            group.getSelectedToggle().getUserData().toString()
                            + ".jpg"));
                    icon.setImage(image);
                }
            }
        });

        HBox hbox = new HBox();
        VBox vbox = new VBox();

        vbox.getChildren().add(rb1);
        vbox.getChildren().add(rb2);
        vbox.getChildren().add(rb3);
        vbox.setSpacing(10);

        hbox.getChildren().add(vbox);
        hbox.getChildren().add(icon);
        hbox.setSpacing(50);
        hbox.setPadding(new Insets(20, 10, 10, 20));

        ((Group) scene.getRoot()).getChildren().add(hbox);
        stage.setScene(scene);
        stage.show();
    }
}

2012-07-29

Button サンプル

Fedora 17 で NetBeans IDE 7.2 RC1 の動作報告を昨日したばかりだというのに、いつの間にか正式版が出ていました。情報についていけていなくて、ちょっと悔しいです。
さて、Button のサンプルを紹介します。サンプルは下記からの引用なので、オリジナリティはありません。Fedora での動作確認結果の紹介が目的です。 実行環境は下記の通りです。
  • OS : Fedora 17 (x86_64) / LXDE(デスクトップ環境)
  • JDK : jdk-1.7.0_05-fcs.x86_64
  • JavaFX : javafx-sdk2.2.0-beta (build 18)
  • IDE : NetBeans IDE 7.2
実行結果を下記に示しました。

サンプルソースを下記に示しました。なお、(not.png) と、(ok.png) の二種類の画像を、ソースと同じディレクトリに保存しておく必要があります。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uibuttonsample;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.effect.DropShadow;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;

/**
 *
 * @author bitwalk
 */
public class UIButtonSample extends Application {

    private static final Color color = Color.web("#464646");
    Button button3 = new Button("Decline");
    DropShadow shadow = new DropShadow();
    Label label = new Label();

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setTitle("Button Sample");
        stage.setWidth(300);
        stage.setHeight(190);

        label.setFont(Font.font("Times New Roman", 22));
        label.setTextFill(color);

        Image imageDecline = new Image(getClass().getResourceAsStream("not.png"));
        Image imageAccept = new Image(getClass().getResourceAsStream("ok.png"));

        VBox vbox = new VBox();
        vbox.setLayoutX(20);
        vbox.setLayoutY(20);
        HBox hbox1 = new HBox();
        HBox hbox2 = new HBox();

        Button button1 = new Button("Accept", new ImageView(imageAccept));
        button1.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;");
        button1.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent e) {
                label.setText("Accepted");
            }
        });


        Button button2 = new Button("Accept");
        button2.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent e) {
                label.setText("Accepted");
            }
        });

        button3.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent e) {
                label.setText("Declined");
            }
        });

        button3.addEventHandler(MouseEvent.MOUSE_ENTERED,
                new EventHandler() {
                    @Override
                    public void handle(MouseEvent e) {
                        button3.setEffect(shadow);
                    }
                });

        button3.addEventHandler(MouseEvent.MOUSE_EXITED,
                new EventHandler() {
                    @Override
                    public void handle(MouseEvent e) {
                        button3.setEffect(null);
                    }
                });


        hbox1.getChildren().add(button2);
        hbox1.getChildren().add(button3);
        hbox1.getChildren().add(label);
        hbox1.setSpacing(10);
        hbox1.setAlignment(Pos.BOTTOM_CENTER);

        Button button4 = new Button();
        button4.setGraphic(new ImageView(imageAccept));
        button4.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent e) {
                label.setText("Accepted");
            }
        });


        Button button5 = new Button();
        button5.setGraphic(new ImageView(imageDecline));
        button5.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent e) {
                label.setText("Declined");
            }
        });

        hbox2.getChildren().add(button4);
        hbox2.getChildren().add(button5);
        hbox2.setSpacing(25);

        vbox.getChildren().add(button1);
        vbox.getChildren().add(hbox1);
        vbox.getChildren().add(hbox2);
        vbox.setSpacing(10);
        ((Group) scene.getRoot()).getChildren().add(vbox);

        stage.setScene(scene);
        stage.show();
    }
}

参考サイト

[1] NetBeans IDE 7.2公開 - FindbugやJavaFX Scene Builderを統合 | エンタープライズ | マイナビニュース

2012-07-16

【備忘録】gvfs (補足)

gvfs のマウントポイントについて、下記の備忘録に書きましたが、情報が古くなっているので補足します。 少なくとも、最近使っている Fedora では、gvfs でネットワークドライブをマウントしても、マウントポイントが ~/.gvfs に生成されていません。mount コマンドで確認できます。以下に例を示しました。
$ mount
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
...
gvfs-fuse-daemon on /run/user/bitwalk/gvfs type fuse.gvfs-fuse-daemon (rw,nosuid
,nodev,relatime,user_id=1000,group_id=1000)
$ ls /run/user/bitwalk/gvfs
192.168.11.3 上の bitwalk
$ ls /run/user/bitwalk/gvfs/"192.168.11.3 上の bitwalk"
... 
もちろん、gvfs-mount コマンドも利用できます。
$ gvfs-mount -l
Drive(0): 320 GB Hard Disk
  Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
  Volume(0): 105 GB ボリューム
    Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
Drive(1): CD/DVD Drive
  Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
Mount(0): 192.168.11.3 上の bitwalk -> smb://Workgroup;bitwalk@192.168.11.3/bitwalk/
  Type: GDaemonMount

2012-06-17

Fedora 17 で JavaFX プログラミング

Fedora では、Java 7 を標準で利用できるようになったので、これで JavaFX のプログラミングができると楽しみにしていましたが、javafx のような RPM パッケージは、RPM Fusion からも出ている様子がありません。
Oracle JavaFX のサイトを見てみると JavaFX 2.2 のベータ版が、(いつの間にか)Linux x86_64 向けにも公開されていましたので、思い切って RPM のパッケージに頼らず、JavaFX に対応している最新の NetBeans IDE 上で、Linux 上でも JavaFX が使えるかどうか試してみることにしました。

以下は、試行錯誤した結果を整理したものです。

使用した環境

Fedora 17(x86_64 版)
Java および Eclipse による開発環境はインストール済み
デスクトップ環境は LXDE を使用

用意しておくパッケージ

NetBeans IDE 7.1.2
NetBeans IDE 7.1.2 ダウンロード
IDE の言語:日本語、プラットフォーム:Linux (x86/x64)で、サポートテクノロジー「すべて」のパッケージをダウンロードしてインストールしました。
JavaFX 2.2 build b13, Linux 64-bit (zip)
JavaFX Developer Preview
jdk-7u5-linux-x64.rpm
Java SE Development Kit 7 Downloads
試行錯誤の中で、Oracle の JDK が、Fedora から配布されている OpenJDK とは、少なくともインストールレベルでは衝突しなかったので、JavaFX を使う Java のプラットフォームバージョン用の Java に使ってみました。OpenJDK をそのまま使うこともできます。

NetBeans IDEのインストール

ルート権限で、ダウンロードしたインストーラを実行します。このインストーラを実行するには、Java の実行環境 (JVM) が必要です。
$ su
パスワード:
# sh netbeans-7.1.2-ml-linux.sh
インストーラを構成しています...
システムで JVM を検索しています...
インストールデータを抽出しています...
インストーラウィザードを実行中...

NetBeans IDE と JUnit について、ライセンス契約条件の同意が求められます。

インストール先は /opt 以下にしました。

インストールが開始されます。

無事インストールが終了したら、メニューから「プログラミング」>「NetBeans IDE 7.1.2」を選択して起動してみます。

JavaFX2.2 の展開と NetBeans IDE の設定

あらかじめダウンロードしておいた JavaFX の zip ファイルを展開します。ここでは /opt 以下に展開しています。
なお、必須ではありませんが、前述したように、Oracle のサイトで入手できる JDK の RPM パッケージもインストールしています。
# yum localinstall jdk-7u5-linux-x64.rpm
...
# cd /opt
# unzip /home/bitwalk/ダウンロード/javafx_sdk-2_2_0-beta-b13-linux-x64-13_jun_2012.zip
...
NetBeans IDE を起動して、メニューの「ツール(T)」から「Javaプラットフォーム(I)」を選んで、JavaFX が利用できるプラットフォームを追加します。これはデフォルトのプロットフォームでは JavaFX が利用可能になっていないためです。なお、ここで追加するプラットフォームには、前述の Oracle のサイトから入手した JDK を選択しています。

追加したプラットフォームには、JavaFX のタブが追加されていますので、このタブで、先ほど展開した JavaFX のフォルダーを指定します。

以上で、JavaFX を利用する環境が整いました。

Hello World

NetBeans IDE のメニューの「ファイル(F)」から「新規プロジェクト(W)」を選び、JavaFX のプロジェクトを作ると、(スケルトンとして)HelloWorld を表示するプログラムが自動に生成されます。


実行結果を以下に示しました。

また、FXML のサンプルも試してみました[2]。これを活用すれば、GUI のレイアウトが簡単にできそうです。

欲を言えば Eclipse で JavaFX のプログラミングができれば良いのですが、こういうことが無ければ NetBeans IDE を使うことがないので、この機会に NetBeans IDE の使い方を覚えて、JavaFX のプログラミングを楽しむことにします。


参考サイト

[1] NetBeans 7.1.2 on Fedora 17/16, CentOS/RHEL 6.2/5.7
[2] Getting Started with JavaFX: Using FXML to Create a User Interface

2012-05-06

【備忘録】Google Chrome と Flash Plugin

Chrome で Flash のファイルが見れなくなってしまいました。見れなくなってしまったのは、メインで使っているデスクトップ PC の 64bit の Fedora(以下、64bit 機)で、ノート PC の 32bit の Fedora(以下、32bit 機)では問題がありませんでした。よくよく考えてみると、64bit 機の方では Adobe の flash-plugin をインストールしてあり、32bit 機の方はまだ Fedora 17 Beta のインストールを必要最小限しかしてしておらず、何もケアしていませんでした。

ということは、Chrome では余計なことをしなくとも Flash のファイルを扱えるということです。64bit 機上の Chrome において URL を入力する欄に about:plugins と入力してプラグインを確認すると、Adobe の flash-plugin の他に、libtotem-vegas-plugin.so というライブラリも有効になっていました(Chrome のハードコピーを取っておきませんでした。m(_ _)m)。
このライブラリは、totem-mozplugin という Totem(GNOMEデスクトップ環境標準のメディアプレーヤー)のブラウザ用プラグイン・パッケージの一部で、そう言えば、先日 yum update をした時にインストールされたような…。正式リリース前の Fedora を使っていると毎日パッケージの更新をする必要があるので、細かいところにこだわっていませんでした。
FireFox は(万が一の時以外は)使わないので、(プラグインの有効/無効をうまく使えば良いのですが)とりあえず、余計なものは取り除いてしまうことにしました。
# rpm -qf /usr/lib64/mozilla/plugins/libtotem-vegas-plugin.so
totem-mozplugin-3.4.1-2.fc17.x86_64
# yum remove totem-mozplugin
(snip)
削除しました:
  totem-mozplugin.x86_64 1:3.4.1-2.fc17                                         

完了しました!
# yum remove flash-plugin
(snip)
削除しました:
  flash-plugin.x86_64 0:11.2.202.233-release                                    

完了しました!
# yum remove adobe-release-x86_64-1.0-1.noarch
削除しました:
  adobe-release-x86_64.noarch 0:1.0-1                                           

完了しました!

さらに Chrome を再インストールしました。
# yum remove google-chrome
(snip)
削除しました:
  google-chrome-stable.x86_64 0:18.0.1025.168-134367                            

完了しました!
# yum install google-chrome
読み込んだプラグイン:langpacks, presto, refresh-packagekit
(snip)
パッケージをダウンロードしています:
google-chrome-unstable-20.0.1123.4-135092.x86_64.rpm     |  40 MB     00:20     
トランザクションのチェックを実行してします。
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストール中          : google-chrome-unstable-20.0.1123.4-135092.x86   1/1 
  検証中                  : google-chrome-unstable-20.0.1123.4-135092.x86   1/1 

インストール:
  google-chrome-unstable.x86_64 0:20.0.1123.4-135092                            

完了しました!
#

Chrome の URL を入力する欄に about:plugins と入力してプラグインを確認すると、以下のようになりました。


念のため、Adobe のサイトで確認した結果です。


2012-05-04

Amazon でわかる日米の違い ~ 電子書籍 ~

Linux 関係の雑誌について、日米の違いを調べようと(日本の)Amazon.jp と(米国の)Amazon.com のサイトを調べていたら、双方のサイトのあまりの違いに驚いてしまいました。

そういえば最近は(日本の)Amazon.jp では書籍ばかりでなく、パソコン周辺のものまで簡単に入手できてなにかと便利なので、すっかり(日本の)Amazon.jp の方ばかり利用するようになりました。さらに、全然小遣い稼ぎにもならない Amazon アソシエイト(アフィリエイト)プログラムに参加したりしている関係で、(米国の)Amazon.com のサイトの方はすっかり利用しなくなってしまっていました。

さて、日本で定期的に刊行されている Linux 関係の雑誌(月刊誌)といえば、日経 Linux だけになってしまいましたが、(日本の)Amazon.jp で検索すると、例えば以下のように表示されます。


一方、米国の Linux 関連雑誌といえば Linux Journal 誌が有名ですが、(米国の)Amazon.com でこの雑誌を検索すると以下のようになります。


$2.99 とはずいぶんと廉価だと思ってよく見てみると Kindle Edition ということで、Kindle で購読することを前提にして販売されています。それでは紙媒体のものはどこかと探してみましたが、探し方は悪いのか、どうやっても紙媒体の雑誌が買える画面には辿り着けませんでした。まさか紙媒体で販売していない、なんてことはないだろうと訝しんで出版社のサイトを見てみると…


はたして Digital ということで電子媒体(PDF フォーマット)での販売のみでした。軽いカルチャーショックを覚えましたが、気を取り直して(米国の)Amazon.com のサイトに戻り、Kendle Store で試しに Perl をキーワードに検索をかけてみますと、見慣れた表紙のものがズラッと表示されました。品揃えを重視する Amazon のことですから、これは当然なのですが、すっかり Kindle への対応は整っているようです。


これは、iPhone も Android 端末も持っていない自分が、世間の潮流に乗り遅れてしまったのだと思い、とりあえず Kindle を購入することを検討しようかと(日本の)Amazon.jp で Kindle をキーワードに検索をかけましたが、サードパーティによる Kindle のアクセサリーがリストに出てくるだけで肝心の Kindle が出てきません。同じ Amazon でも米国と日本では事情が随分と異なるようです。さらに(日本の)Amazon.jp で扱っている電子書籍は何かと思い、いろいろ検索してみましたが、どこかの電子書籍リーダーは販売していても、電子書籍そのものは扱っていないようです。

それでは、日本の大手の書店の電子書籍対応はどのようになっているかと思い、少し調べてみました。
【紀伊國屋書店】
紀伊國屋書店 BookWeb
リーダー専用アプリ (Kinoppy) が iPhone iPad Android Sony Reader タブレット対応
詳細は紀伊國屋書店 BookWeb Plus
【丸善&ジュンク堂、文教堂】
電子書籍販売サイト honto
親会社の大日本印刷(DNP)とドコモ、CHIの共同事業会社である株式会社トゥ・ディファクトが運営するサイト
リーダー専用アプリが Windows iPhone iPad Android などに対応
【三省堂書店】
電子書籍ストア BookLive(三省堂書店と協業関係にあるが資本関係はない様子)
リーダー専用アプリが Windows iPhone iPad Android などに対応
【八重洲ブックセンター】
八重洲ブックセンター・書籍のダウンロード販売
主に PDF, XMDF 形式のファイルで、コンテンツによって対応形式が異なっている。
電子書店パピレス
MEDUSA bookend XMDF など対応フォーマット多数。EPUB にも全てではないが対応している。
少し調べただけですが、出版業界の事情もいろいろあるようで、リーダー専用アプリを提供しているところが多く、足並みはバラバラのようです。日本の出版業界では再販制度のような障壁も立ちはだかっていますが、電子書籍は情報として扱われるため対象外だと聞いています。そもそも再販制度は売る側の立場の制度で、お客様の視点には立っていないので、時代遅れな気がします。売る側が目先の安心を維持することにこだわり過ぎると、国際競争力に晒されて衰退を余儀なくされることにもなりかねません。一方、電子書籍のフォーマットについては統一された規格の方が望ましいのはもちろんなのですが、あまり慎重になりすぎているとグローバルな流れから取り残されてしまうことを恐れます。また、低炭素化社会を実現するためにも、紙媒体から電子媒体への移行は必要でしょう。(良くも悪くも)四の五の言う業界を黙らせて力強く牽引できるような強いリーダーが現れて欲しいものです。
…と偉そうなことをいろいろ言っていますが、かくいう自分はスマートフォンやタブレット端末を使っていないので、電子書籍を利用する必要条件すら満たしていないのかもしれません。

そういうわけで Kindle あたりを試してみようかと考え始めていますが、Kindle を(米国の)Amazon.com から購入するとなれば、余分な送料と届くまでの時間がかかってしまうのでなかなか踏ん切りがつきません。それでもよく考えてみると、Kindle があれば、これからは洋書を読むときには(たぶん)すぐに書籍データを読み込めるようになり、配達時間も送料もかからなくなるのですから、やはり購入する方向で要検討です。

参考サイト

[1] Amazon、ついに「Kindle」を日本発売!しかもドコモ回線が無料で使い放題の神プラン! – すまほん!! (2012/2/11)
[2] アマゾンCEO「年内にKindleを日本市場へ投入する」 – すまほん!! (2012/4/13)
[3] 黒船来航!アマゾン、Kindleについてなんと国内40社と契約合意済み! – すまほん!! (2012/4/28)
[4] アマゾン「キンドル」上陸前夜、攻防戦の内幕 :日本経済新聞 (2012/4/10)

Amazon.jp だとなぜか Amazon.com のライバル Banes & Noble の電子書籍リーダー NOOK が購入できてしまう不思議!

Kindle 関係の書籍を探してみましたが、意外と新しい書籍がありませんでした。