2014-12-30

【備忘録】XMind と Fedora 21

XMindは、マインドマップを作成できるソフトウェアです。

マインドマップを用いることで、物事を視覚的・構造的に整理しやすくなります。普段の業務の中に出てくるアイデアや発想、打ち合わせの内容などをマインドマップに書きとめておくことで、それぞれの物事の関係が非常に分かりやすくなります。こういった PC 上のツールがなければ、紙に書き出せば良いのですが、一度でも PC で利用できるツールを使ってしまうと、もう紙には戻れません。

マインドマップを扱うソフトウェアには、FreeMind という GPL の下で配布されるツールがあり、Fedora で利用できるのですが、個人的にはクローズドソースである XMind の方が機能的に使い易いと思っているので、こちらを使っています。XMind には無料版の XMind と、有料版の XMind Plus、XMind Pro が提供されています。ぞれぞれの機能の違いは下記にまとめられています。

alien による deb ⇒ RPM 変換

ここでは、無料版を Fedora で利用する場合について紹介します。Linux 用パッケージは以下のサイトから入手します。

Linux 版は残念ながら Debian/Ubuntu の deb パッケージのみ提供されていますが、これを alien で RPM へ変換することにします。以前、本ブログの過去記事「【備忘録】マインドマップツール XMind と alien --- rpm, deb などの変換ツール」で、alien を使った変換方法を紹介していますので、これと同じことをします。

# alien --to-rpm --scripts xmind-jp-linux-3.5.1.201411201906_amd64.deb
xmind-3.5.1-2.x86_64.rpm generated

これを、yum localinstall でインストールしようとしたところ、エラーになってしまいました。

# yum localinstall xmind-3.5.1-2.x86_64.rpm
読み込んだプラグイン:langpacks
xmind-3.5.1-2.x86_64.rpm を調べています: xmind-3.5.1-2.x86_64
xmind-3.5.1-2.x86_64.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ xmind.x86_64 0:3.5.1-2 を インストール
--> 依存性解決を終了しました。
adobe-linux-x86_64                                          |  951 B  00:00     
...
(省略)
...
updates/21/x86_64/pkgtags                                   | 1.3 MB  00:01     

依存性を解決しました

================================================================================
 Package      アーキテクチャー
                            バージョン       リポジトリー                  容量
================================================================================
インストール中:
 xmind        x86_64        3.5.1-2          /xmind-3.5.1-2.x86_64        109 M

トランザクションの要約
================================================================================
インストール  1 パッケージ

合計容量: 109 M
インストール容量: 109 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test


Transaction check error:
  ファイル /usr/bin (パッケージ xmind-3.5.1-2.x86_64 から) は、パッケージ filesystem-3.2-28.fc21.x86_64 からのファイルと競合しています。
  ファイル /usr/lib (パッケージ xmind-3.5.1-2.x86_64 から) は、パッケージ filesystem-3.2-28.fc21.x86_64 からのファイルと競合しています。

エラーの要約
-------------

#

自動変換した XMind のSPEC ファイルで /usr/bin/usr/lib の両ディレクトリを定義しているが故の競合であると予想されます。あまり害が無いので rpm コマンドで強制的にインストールするのもアリですが、ここでは SPEC ファイルを編集して yum でエラーが出ないパッケージを作ることにしました。

無料でダウンロードできる XMind は、「デュアルライセンスについて XMind」を読む限り、RPM パッケージでの再配布ができそうですが、確認が不十分ですので、現在のところ、RPM パッケージの作成方法を以下に紹介するに留めます。

SPEC ファイルの編集

alien には、パッケージ変換に使用するファイルを一時ディレクトリに保存してくれる --generate というオプションがあります。このオプションを使って、以下のようにして SPEC ファイルを含むビルドに必要なファイルを取得します。

$ alien --to-rpm --scripts --generate xmind-jp-linux-3.5.1.201411201906_amd64.deb
Warning: alien is not running as root!
Warning: Ownerships of files in the generated packages will probably be wrong.
Directory xmind-3.5.1 prepared.
$ ls xmind-3.5.1
etc  usr  xmind-3.5.1-2.spec
$ 

ディレクトリ xmind-3.5.1 の中にある xmind-3.5.1-2.spec を編集します。と言っても下記の %file セクションの数箇所(緑の行)をコメントアウトするだけです。

Buildroot: /home/bitwalk/ダウンロード/xmind-3.5.1
Name: xmind
Version: 3.5.1
Release: 2
Summary: Professional & Powerful Mind Mapping Software
License: see /usr/share/doc/xmind/copyright
Distribution: Debian
Group: Converted/non-free/editors
...
(省略)
...
(Converted from a deb package by alien version 8.90.)

%files
%dir "/etc/"
%config "/etc/XMind.ini"
#dir "/usr/"
#dir "/usr/bin/"
"/usr/bin/XMind"
#dir "/usr/lib/"
%dir "/usr/lib/xmind/"
"/usr/lib/xmind/.eclipseproduct"
"/usr/lib/xmind/about.html"
%dir "/usr/lib/xmind/about_files/"
"/usr/lib/xmind/about_files/about_cairo.html"
"/usr/lib/xmind/about_files/mpl-v11.txt"
"/usr/lib/xmind/about_files/pixman-licenses.txt"
"/usr/lib/xmind/artifacts.xml"

RPM パッケージのビルド

編集した xmind-3.5.1-2.spec$HOME/rpmbuild/SPECS へ保存し、ディレクトリ xmind-3.5.1 を、xmind-3.5.1-2.x86_64 に名前を変えて $HOME/rpmbuild/BUILDROOT へコピーします。$HOME/rpmbuild/SPECS へカレントディレクトリを移し、下記のようにして RPM パッケージをビルドします。

$ rpmbuild -ba xmind-3.5.1-2.spec
ファイルの処理中: xmind-3.5.1-2.x86_64
...
(省略)
...
パッケージに含まれないファイルの検査中: /usr/lib/rpm/check-files /home/bitwalk/rpmbuild/BUILDROOT/xmind-3.5.1-2.x86_64
警告: インストール済み(ただしパッケージに含まれない)ファイルが見つかりました:
   /xmind-3.5.1-2.spec
書き込み完了: /home/bitwalk/rpmbuild/SRPMS/xmind-3.5.1-2.src.rpm
書き込み完了: ../xmind-3.5.1-2.x86_64.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.noBYpc
+ umask 022
+ cd /home/bitwalk/rpmbuild/BUILD
+ /usr/bin/rm -rf /home/bitwalk/rpmbuild/BUILDROOT/xmind-3.5.1-2.x86_64
+ exit 0
$ 

この場合、xmind-3.5.1-2.x86_64.rpm は、$HOME/rpmbuild/ に出力されます。インストールでは下記のように警告のようなものが出ますが、他パッケージと競合せずにインストールができます。

# yum localinstall xmind-3.5.1-2.x86_64.rpm
読み込んだプラグイン:langpacks
xmind-3.5.1-2.x86_64.rpm を調べています: xmind-3.5.1-2.x86_64
xmind-3.5.1-2.x86_64.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ xmind.x86_64 0:3.5.1-2 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package      アーキテクチャー
                            バージョン       リポジトリー                  容量
================================================================================
インストール中:
 xmind        x86_64        3.5.1-2          /xmind-3.5.1-2.x86_64        109 M

トランザクションの要約
================================================================================
インストール  1 パッケージ

合計容量: 109 M
インストール容量: 109 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction (shutdown inhibited)
  インストール中          : xmind-3.5.1-2.x86_64                            1/1 
Unknown media type in type 'all/all'
Unknown media type in type 'all/allfiles'
Unknown media type in type 'uri/mms'
Unknown media type in type 'uri/mmst'
Unknown media type in type 'uri/mmsu'
Unknown media type in type 'uri/pnm'
Unknown media type in type 'uri/rtspt'
Unknown media type in type 'uri/rtspu'
  検証中                  : xmind-3.5.1-2.x86_64                            1/1 

インストール:
  xmind.x86_64 0:3.5.1-2                                                        

完了しました!
# 

デスクトップ環境が MATE の場合は、メニューには「アプリケーション」→「オフィス」→「XMind」と登録されています。GNOME 3 の場合は、下記のようにアイコンが加えられます。

起動中の画面です。

以下のように無事起動しました。なお、デスクトップ環境は MATE を使っています。

ちょっとしたアイデアを整理したり、ブレインストーミングに使ったり、なかなか重宝するツールです。ロジックツリーなどマインドマップ以外のレイアウトも利用できるので、仕事の整理にも活用しています。下記は自分の強みをまとめているものです。使用例として紹介しておきます。

 

2014-12-21

【備忘録】USB Webcam と Cheese

Cheese は GNOME の Web カメラ用 (Webcam) アプリケーションで、2007 年に開催された Google Summer of Code に参加した Daniel G. Siegel 氏のプロジェクトで開発されました。Fedora では、以前からデスクトップのメニューの「サウンドとビデオ」に収録されていることは知っていましたが、使う機会がなく、何に使うアプリケーションかも知りませんでした。

たまたま Cheese を開いてみる機会があり、これが Webcam アプリであることを初めて知りました。試しに手許にあった ELECOM の UCAM-DLL300TRD を接続してみたら、普通に使えてビックリしました。PC は Fedora 21 x86_64 です。

なぜ、自宅の Linux で使いもしない Webcam を持っているかというと、数ヶ月前に Webcom を使う Skype の会議があり、時間もなかったのでやむなく会社の Windows の ノート PC 用に購入していました。上記 Webcam は販売終了の製品ですが、UVC, USB Video device Class に対応している Webcam であれば Linux で使えるようなので備忘録として残しておきます。

  1. Apps/Cheese - GNOME Wiki!
  2. Cheese (software) - Wikipedia, the free encyclopedia
  3. 第147回 UbuntuでUSBウェブカメラを使う:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

2014-12-18

人工知能が急に進化し始めた! | TheWave

Deep Learning とは、機械学習アルゴリズムの1つで、人間の脳を模した構造をもつニューラルネットワークを多層に重ねた構造を持っています。日本語では「深層学習」と訳されます。Deep Learning の大きな特徴は、多段に重ねることによって抽象的なデータの表現を獲得することができることで、このことから真の人工知能への第一歩であると考えられています。

進化というものは、ひとたびブレークスルーが起きれば、どんどん先へ進んでいくもののように感じています。人工知能の進化をは異なりますが、100m 走における 10 秒の壁を思い浮かべます。

ソフトバンクの Pepper も、普及と共にどんどん進化していって凄い人工知能を持ったロボットになるのかもしれません。

調べてみると、既にオープンソースでも Deep Leaning に関するものがいくつか存在するようです。とりあえず、Deeplearning4j 4. を試してみようかと考えています。PC を買い換える動機になるような…。

関連サイト

  1. ニューラルネットの逆襲 | Preferred Research
  2. Pepper(ペッパー)登場 | 特集 | ロボット | ソフトバンク
  3. 「鉄腕アトム」も夢じゃない。AIの飛躍的進歩 | ガジェット通信
  4. Deeplearning4j - Open-source, distributed deep learning for the JVM

2014-12-15

魅惑の Qyoto (7) - Fedora 21 での動作確認

Qyoto は Qt の .NET バインディングです。Fedora 20 の時に、新しい Qyoto を入手して「魅惑の Qyoto」と題して、Mono 環境でサンプルを紹介していましたが、一時期 CentOS 7 へ乗り換えてから中断していました。Fedora 21 では、Fedora 標準のレポジトリから Qyoto のパッケージが利用できますので、まずは動作確認をしてみます。

Fedora 21 における Mono の開発環境

Fedora 21 における Mono / Qyoto の開発環境の主要なパッケージは、下記の通りです。

  • mono-core-2.10.8-8.fc21.x86_64
  • qt-4.8.6-18.fc21.x86_64
  • qyoto-4.14.3-1.fc21.x86_64
  • qyoto-devel-4.14.3-1.fc21.x86_64

Fedora 21 で Mono のバージョンが 2.10 から 3.4 へ移行するものと思っていましたが、あらためて Changes/Mono 3.4 - FedoraProject を確認すると、ターゲットリリースは Fedora 22 になっていました。なお、Mono の最新バージョンは 3.8 です。

Mono の今後

Microsoft は 11 月 12 日、.NET Framework のサーバーサイド向け技術 .NET Core をオープンソース化することを発表して関係者を驚かせました 1.。"Microsoft" という言葉と "オープンソース" という言葉が、今や同一の文章の中で使われる時代になったのです。Mono Project はこの動きに呼応して、今後統合に向けて動いていくことを表明しています 2.

  1. 「.NET Core」がオープンソース化、MacやLinuxもサポート | SourceForge.JP Magazine (2014年11月13日)
  2. .NET Source Code Integration | Mono(2014年11月18日)

そういうわけで、.NET にまつわる技術動向が注目されますが、まずは現状でできることを整理しておきましょう。

Hello World 再び

mono のバージョンは 2.10 ですが、ひとまず Hello World のプログラムの動作を確認してみます。「魅惑の Qyoto (1) - Hello Wold!」で紹介したサンプルで確認しますので、ソースを再掲します。

List: hello-qyoto.cs
using System;
using Qyoto;

/**
 * ZetCode Qyoto C# tutorial
 *
 * This program creates a quit
 * button. When we press the button,
 * the application terminates. 
 *
 * @author Jan Bodnar
 * website zetcode.com
 * last modified October 2012
 *
 * modified by Fuhito Suguri
 * last modified 13-May-2014
 */


public class QyotoApp : QWidget
{
    public QyotoApp ()
    {
        WindowTitle = "mono/qyoto";

        InitUI ();

        Resize (180, 60);
        Move (300, 300);
        Show ();
    }

    public void InitUI ()
    {    
        QPushButton but = new QPushButton ("こんにちは、世界!", this);

        Connect (but, SIGNAL ("clicked()"), qApp, SLOT ("quit()"));
        but.SetGeometry (10, 10, 160, 40);
    }

    [STAThread]
    public static int Main (String[] args)
    {
        new QApplication (args);
        new QyotoApp ();
        return QApplication.Exec ();
    }
}

コンパイルおよび実行例を以下に示します。

$ mcs hello-qyoto.cs -pkg:qyoto
$ mono hello-qyoto.exe

Mono の最近のバージョンについては、下記からパッケージをダウンロードして試してみる予定です。

  1. software.opensuse.org: パッケージのインストール: home:tpokorra:mono / mono-opt

2014-12-14

【備忘録】RPM Fusion

RPM Fusion は、Fedora プロジェクトに収録されていないパッケージを提供するレポジトリです。参考サイト [1] にあるように、いわゆる Fedora 非公式パッケージ用リポジトリです。

リポジトリは、オープンソースの free と、それ以外の nonfree の二種類が設けられ、free では Fedora に収録できないパッケージ、nonfree には、ビデオカードのドライバなどソースコード非公開のソフト、あるいは MP3 関連アプリや DVD 復号化ソフトといった、ライセンスの問題で Linux ディストリビューションに収録することが難しいパッケージが割り当てられています。

本ブログでは既に RPM Fusion については 2009 年に紹介していますが、ずいぶんと時間が経ったので、あらため紹介します。ただ、Fedora 21 がリリースされたことによって、RPM Fusion の方で何か変わったというわけではありません。

下記からのサイトから Fedora 21 用の、レポジトリへアクセスする RPM パッケージをダウンロードします。

ダウンロードしたパッケージを yum でインストールします。

# yum localinstall rpmfusion*.rpm
読み込んだプラグイン:langpacks
rpmfusion-free-release-21.noarch.rpm を調べています: rpmfusion-free-release-21-1.noarch
rpmfusion-free-release-21.noarch.rpm をインストール済みとして設定しています
rpmfusion-nonfree-release-21.noarch.rpm を調べています: rpmfusion-nonfree-release-21-1.noarch
rpmfusion-nonfree-release-21.noarch.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ rpmfusion-free-release.noarch 0:21-1 を インストール
---> パッケージ rpmfusion-nonfree-release.noarch 0:21-1 を インストール
--> 依存性解決を終了しました。
adobe-linux-x86_64                                          |  951 B  00:00     
google-chrome                                               |  951 B  00:00     
updates/21/x86_64/metalink                                  | 7.5 kB  00:00     

依存性を解決しました

================================================================================
 Package                 アーキテクチャー
                                バージョン
                                     リポジトリー                          容量
================================================================================
インストール中:
 rpmfusion-free-release  noarch 21-1 /rpmfusion-free-release-21.noarch    9.7 k
 rpmfusion-nonfree-release
                         noarch 21-1 /rpmfusion-nonfree-release-21.noarch 9.9 k

トランザクションの要約
================================================================================
インストール  2 パッケージ

合計容量: 20 k
インストール容量: 20 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction (shutdown inhibited)
  インストール中          : rpmfusion-free-release-21-1.noarch              1/2 
  インストール中          : rpmfusion-nonfree-release-21-1.noarch           2/2 
警告: rpmfusion-nonfree-release-21-1.noarch: ヘッダー V3 RSA/SHA256 Signature、鍵 ID a668b376: NOKEY
  検証中                  : rpmfusion-nonfree-release-21-1.noarch           1/2 
  検証中                  : rpmfusion-free-release-21-1.noarch              2/2 

インストール:
  rpmfusion-free-release.noarch 0:21-1  rpmfusion-nonfree-release.noarch 0:21-1 

完了しました!
#

参考サイト

  1. Fedora非公式パッケージ用リポジトリ「RPM Fusion」正式オープン | マイナビニュース

2014-12-13

【備忘録】OpenSSH

SSH, Secure Shell は、暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコルです。一般に普及しているのはオープンソースで開発されている OpenSSH で、Linux でも標準的に利用されているので、単に SSH と言った場合、OpenSSH の実装系を指すことが多いそうです。

さて、Fedora 21 Workstation の PC へ、枕元のノート PC から ssh で接続しようとしたところ繋がりません。調べてみると sshd が有効になっていなかったので、systemctl コマンドで有効にしました。

# systemctl enable sshd.service

あとで状態を確認すると以下の通り。

# systemctl status sshd.service
 sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since 土 2014-12-13 14:13:35 JST; 6h ago
 Main PID: 894 (sshd)
   CGroup: /system.slice/sshd.service
           └─894 /usr/sbin/sshd -D

12月 13 14:13:35 localhost.localdomain sshd[894]: Server listening on 0.0.0....
12月 13 14:13:35 localhost.localdomain sshd[894]: Server listening on :: por...
12月 13 14:44:45 localhost.localdomain sshd[1526]: Accepted password for bit...
Hint: Some lines were ellipsized, use -l to show in full.

これだけで、なにも追加で設定をすることなく他の PC から ssh で接続できてメデタシですが、設定等が詳しく紹介されているサイトがあるので、備忘録としてまとめました。

関連サイト

2014-12-10

祝 Fedora 21 リリース

Fedora 21 がようやくリリースされたようです。

Fedora 21 は下記のサイトから、Base パッケージの元に、Workstation、Server そして Cloud の 3 種類のパッケージで配布されています。

関連サイト


2014-12-06

『第二の地球を探せ! 「太陽系外惑星天文学」入門』を読んで

1995 年、ペガスス座51番星 (51 Pegasi) という恒星に、木星クラスの質量を持った惑星の存在が確認されました。これがはじめて発見された太陽系外惑星でした。それ以来、数多くの太陽系外惑星が発見されています。

本書は、天文学の現在までの歩みと、系外惑星の発見に情熱を注ぐ「プラネット・ハンター」たちの熱いドラマを交えて、数々の観測法が分かりやすく紹介されています。

地球に似た惑星は、銀河系、あるいは宇宙全体でどれくらいあるのか、地球以外にも生命は存在するのか―。21世紀を牽引する科学分野のひとつ、太陽系外惑星研究の第一人者が伝える、天文学・惑星科学の最先端の書です。

本書の「おわりに」の章が 2014 年 9 月で結んであり、初版 1 刷が 2014 年 10 月 20 日と、まさに最新の内容になっています。

私は、本書の内容に驚きと感動を覚えながら、一気に読みきってしまいました。

今から 10 年以上も前になりますが、2000 年 6 月に有限会社ビットウォークを設立して間も無いその年の暮れ、SETI@home にハマっていた私は、偶然にも O'Reilly の刊行予定に Beyond Contact: A Guide to SETI and Communicating with Alien Civilizations が載っているのを見つけました。迷わず O'Reilly Japan に連絡を入れて翻訳権と邦訳出版の交渉を始めました。

この手の科学読み物の翻訳業務は、会社の中核となるビジネスに育てられるかもしれないと、せっせと翻訳に励んだのですが…、結局、諸事情により出版までには至りませんでした。しかし、それこそ嘗めるようにして精読していたため、今も当時の太陽系外惑星の観測方法や発見状況がしっかり記憶に残っていたのです。そのため、この「第二の地球を探せ!…」を読んだ時、10 年ちょっとの間の技術の進歩に目を見張ったのでした。

すばる望遠鏡ケプラー衛星などによる最新の成果が平易な解説と共に散りばめられており、天文学ファンでなくとも読み進められる内容だと思います。

何光年も離れた恒星へ探査機を向かわせるためには、まだまだ人類の科学は未熟なのかもしれません。しかし、地球に届く光(赤外線などを含む)を観測することはできます。経済的な理由で、望遠鏡を衛星に載せて観測する次世代の地球型系外惑星撮像ミッションは、当初のスケジュールよりかなり遅れているそうですが、それでも近い将来、地球型系外惑星の撮像を目にする日がやってくることでしょう。

天文学ファンにはもちろんのこと、科学技術の進歩にご興味のある方へ、オススメの一冊です。

2014-12-03

週刊「マイ3Dプリンター」1月5日創刊へ--関連企業との連携で“一般普及”後押し

3D プリンターもいよいよ普及期にさしかかっているのでしょうか。いや、工業的には既に実用化していますが、低価格の 3D プリンターはこれからが普及期と言えるのかもしれません。そんな中でディアゴスティー二から「マイ3Dプリンター」が創刊されるそうです。マイ〜の響きに思わず買ってしまいたくなります。

ブックマークをしておきながら記事にするのを忘れてしまっていましたが、遅ればせながら備忘録としてブログに残しておきます。


2014-11-30

プログラミング用フォント Ricty Diminished

Linux の環境に限ったことではありませんが、同じ文字数で画面右側の文字列末尾が揃って、かつ、ゼロとオーなど似たような文字を判別しやすい、プログラミングやソースコードの表示に適した等幅フォント、しかもフリーなものを継続的に探しています。

いろいろ調べてみると、Ricty というフォントが日本語を使う環境では高い評価を受けているようです。このフォントはに種類のフォント、InconsolataMigu 1M を合成したものです。ライセンスの関係でフォントの合成を自分で行う必要があり、合成したフォントの再配布ができません。

自分で合成するのは面倒なので、私は姉妹フォントである Ricty Diminished を使用しています。Inconsolata と Circle M+ 1m を Ricty 生成スクリプトで合成したフォントです。 IPA ゴシックのグリフを含まないため、使用可能な漢字グリフの数が少ない代わり、SIL Open Font License の下で配布が可能です。

ダウンロードしたフォントを展開して、Linux のデスクトップ環境ではフォントビューアを使ってインストールします。左は Fedora 21 β版の MATE での例です。Fedora の Eclipse では Monospace という等幅合成フォントがデフォルトで、いまひとつ使いにくいところがあったのですが、Ricty Diminished を使うことで快適感が増しました。

最適なフォントというものは主観的な要因が大きいので人それぞれなのですが、ご興味があれば試して見る価値があると思います。

ちなみに、フォントビューアでインストールしたフォントは、$HOME/.local/share/fonts に格納されます。

参考サイト

  1. 最高に見やすいプログラミング用フォントRictyの生成と使い方 - ウェブソク
  2. プログラミング用フォントをまとめてみました(Source Code Pro/Ricty/Consolasなどなど) | memobits
  3. コーディングに役立つ? 画面上できれいに揃う等幅フォントまとめ - NAVER まとめ

2014-11-29

東芝ブランドの野菜が販売開始へ--都内の百貨店など12店舗で

11 月 28 日に、東芝ブランドの野菜の発売が開始されたそうです。野菜生産をしている工場、「東芝クリーンルームファーム横須賀」は、以前にフロッピーディスク工場の入っていた建屋の 4 階を改装して造られており、ISO クラス 8(米国連邦規格ではクラス 10 万に相当)のクリーンルームの栽培室の中で発芽から育苗、栽培、収穫までを行い、無農薬・低生菌の野菜を供給できることが特徴なのだそうです。

既に富士通も始めている「クリーンルームの特性を活かした無農薬生産」は、地味なようですが、Google が地図情報と自動運転の技術を引っさげてで自動車業界へ参入しようとしていることに匹敵するほどのインパクトを社会に与えるかもしれません。いつの間にか「無農薬の野菜」とは、大自然の中で栽培された野菜ではなく、環境が管理されたクリーンルーム内で栽培された、自然界に存在しない植物、なんてことが当たり前の感覚になるかもしれません。それでも、遺伝子操作をした害虫に強い野菜と比べると、抵抗感は段違いに低いです。

富士通や東芝の IT 産業から、設備の有効活用とはいえ、野菜生産の事業に展開した決断力とその精力的な取組みには拍手喝采を贈りたいです。日本の半導体産業は「産業のコメ」と呼ばれ国の基幹産業でしたが、今後は、半導体産業の施設やインフラを活用して、価値を持たせた野菜生産を始めとした農業のビジネスモデルの改革に貢献することになるかもしれません。半導体産業はかつての「産業のコメ」ではなく、そう遠くない将来に本物の米作りに応用される日がやってくるような気がします。

東芝ブランドの野菜が首都圏で販売が開始されたということで、どのような反響があったのか気になるところですが、今のところ、反響が判るような記事を探し出せませんでした。継続的に情報をアップデートして行く予定です。

関連サイト

  1. 東芝:プレスリリース (2014-05-15):野菜生産の事業化について
  2. 東芝:プレスリリース (2014-09-30):植物工場「東芝クリーンルームファーム横須賀」での生産開始について
  3. 東芝もクリーンルームで野菜生産 富士通に続き - ITmedia ニュース
  4. 【CEATEC 2014 Vol.37】東芝は野菜も作る!11月から購入可能 | RBB TODAY
  5. “ITと野菜”の意外な関係--東芝、富士通が野菜を展示したCEATEC JAPAN 2014 - CNET Japan
  6. 富士通がレタスを販売。半導体用クリーンルームを野菜工場化して無農薬・低カリウム実現 - Engadget Japanese
  7. 富士通と東芝が野菜作り?「ITと野菜」の意外な関係 - NAVER まとめ
  8. Googleは自動車を支配するか 共存か、対立か 進化する自動運転(前篇) (1/2)

追記

その後の追加情報です。


2014-11-23

Fedora 21 と JavaFX

JavaFX は Java 仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Java SE 7 Update 2 以降に標準搭載 1. されているのですが、Fedora で利用できる OepnJDK のパッケージには JavaFX (OpenJFX) のライブラリは含まれていませんでした。

約一年ぶりに Fedora 21 がリリースされますが、Java の 開発環境が OpenJDK が 7 から 8 へ移行するということで、JavaFX のライブラリも含まれているかもしれない…、と理由の無い期待を抱いていたのですが、Fedora 21 の β版を試した限りでは残念ながら OpenJDK のパッケージに JavaFX は含まれていませんでした。

Fedora 20 や CentOS 7 を使っていた時には JavaFX のプログラミングをするために、Oracle が公開している JDK の rpm パッケージ 2. をインストールし、JavaFX に対応している NetBeans IDE 3. もインストールしていました。

今回の Fedora 21 の環境(β版)では、JDK 早期ビルド版が公開されているサイト 4. から、JDK 8u40 Build b15 をインストールして、NetBeans IDE 8.0.1 上で使用してみました。NetBeans IDE 上の Java プラットフォームマネージャに、下記のようにダウンロードした Java 8 を追加します。ここでは「Java 8」がダウンロードした JDK、「Java 8(デフォルト)」が、Fedora のパッケージである OpenJDK になっています。

いつものバージョン確認のサンプルの実行結果です。

なお、環境を整えさえすれば OpenJFX を自分でビルドすることができそうですので、折りを見て挑戦してみます 5.

参考サイト

  1. Java 7 に JavaFX が追加される (2011/12/30)
  2. Java SE Development Kit 8 - Downloads
  3. Welcome to NetBeans
  4. JDK 8u40 Early Access Releases — Project Kenai
  5. Building OpenJFX - OpenJFX - OpenJDK Wiki

2014-11-22

やっぱり Fedora

Fedora の次のバージョン 21 がおよそ一年ぶりにリリースされるまであと僅か。私は 7 月に CentOS 7 がリリースされたのに合わせて Fedora から CentOS に乗り換えたばかりだったのですが、ひさしぶりの Fedora のリリースを前に我慢ができず、結局 Fedora に戻してしまいました。Fedora 21 Workstation の β版を使い始めて、正式リリースを待っています。

デスクトップは MATE を使いたかったのですが、下記のようになってインストールができませんでした。

$ su
パスワード:
# yum groupinstall "MATE デスクトップ"
読み込んだプラグイン:langpacks
パッケージ ibus-gtk3-1.5.9-5.fc21.x86_64 はインストール済みか最新バージョンです
パッケージ ibus-gtk2-1.5.9-5.fc21.x86_64 はインストール済みか最新バージョンです
パッケージ chrony-1.31-1.fc21.x86_64 はインストール済みか最新バージョンです
依存性の解決をしています
--> トランザクションの確認を実行しています。
...
(省略)
...
--> 衝突を処理しています: fedora-release-workstation-21-1.noarch は fedora-release-nonproduct と衝突しています
--> 衝突を処理しています: fedora-release-nonproduct-21-0.16.noarch は fedora-release-workstation と衝突しています
--> 依存性解決を終了しました。
エラー: パッケージ: fedora-release-nonproduct-21-0.16.noarch (fedora)
             要求: fedora-release = 21-0.16
            インストール: fedora-release-21-1.noarch (@updates-testing)
                fedora-release = 21-1
            利用可能: fedora-release-21-0.16.noarch (fedora)
                fedora-release = 21-0.16
エラー: fedora-release-workstation conflicts with fedora-release-nonproduct-21-0.16.noarch
エラー: fedora-release-nonproduct conflicts with fedora-release-workstation-21-1.noarch
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest
# 

パッケージ fedora-release-workstationfedora-release-nonproduct が衝突しています。どうやら、Fedora 21 からグループパッケージの管理が少し変わったようで、そのまま同時にはインストールできないようです。そこで、yum groupinfo で構成を確認しました。

# yum groupinfo "MATE デスクトップ"
読み込んだプラグイン:langpacks

Environment Group: MATE デスクトップ
 Environment-Id: mate-desktop-environment
 説明: MADE デスクトップは GNOME 2 ベースのパワフルなグラフィカルユーザーインタフェースを提供します。シンプルさを求める人や従来型のデスクトップインタフェースで使いたい人にお勧めします。
 Mandatory Groups:
   +admin-tools
    base-x
    core
   +dial-up
   +fedora-release-nonproduct
    fonts
    guest-desktop-agents
    hardware-support
   +input-methods
   +mate-desktop
    multimedia
    networkmanager-submodules
    printing
   +standard
 Optional Groups:
   +3d-printing
    libreoffice
   +mate-applications
   +mate-compiz
# 

これによると mate-desktop というサブグループをインストールすれば出来そうでしたので、早速試しました。

# yum groupinstall "mate-desktop"
読み込んだプラグイン:langpacks
google-chrome                                               |  951 B  00:00     
updates/21/x86_64/metalink                                  | 7.5 kB  00:00     
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ NetworkManager-l2tp.x86_64 0:0.9.8.7-3.fc21 を インストール
--> 依存性の処理をしています: xl2tpd のパッケージ: NetworkManager-l2tp-0.9.8.7-3.fc21.x86_64
...
(省略)
...
---> パッケージ libwmf-lite.x86_64 0:0.2.8.4-40.fc21 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package                     アーキテクチャー
                                    バージョン                     リポジトリー
                                                                           容量
================================================================================
Installing for group install "MATE":
 NetworkManager-l2tp         x86_64 0.9.8.7-3.fc21                 fedora  95 k
...
(省略)
...
 xl2tpd                      x86_64 1.3.6-6.fc21                   fedora 141 k

トランザクションの要約
================================================================================
インストール  54 パッケージ (+58 個の依存関係のパッケージ)

総ダウンロード容量: 129 M
インストール容量: 431 M
Is this ok [y/d/N]: y

パッケージ群をインストール後、ログアウトしてデスクトップを MATE に変更してログインし直しました。


2014-11-09

ブログサービス『Blogger』(blogspot)にアクセス障害発生中! それでもブログを見る方法を解説 - Buzz+ バズプラス

Blogger (blogspot) が、どうやらダウンしたらしいと確信したのは、自分のブログだけでなく、他の知っている Blogger のサイトへのアクセスを何度も試してからでした。それぐらい、このサイトのネットワーク障害を経験したことがありません。

もともと、www.blogger.com で登録していたのに、ふと www.blogger.jp に転送されていることに気付いたのは、使い始めて何年も経ってからでした。そういう訳なのか何なのかは判りませんが、Blogger がカバーしている他のドメインでも閲覧することができるようですので、障害が日本だけで発生しているのであれば、下記のようにしてブログを閲覧することもも可能です。

そもそも Google のサービスにおいて、障害状況を知りたい時はどうすればよいのでしょうか。Google 検索で探してみた結果、以下のサイトを見つけました。

Blogger だけでなく、Google の全てのサービスの状況が確認できます。

RSS Feed を利用すると以下のような情報をゲットできます。


Date: Sat, 08 Nov 2014 12:17:00 GMT
From: Apps Status Dashboard
Subject: Blogger

 November 8, 2014 4:17:00 AM PST

Blogger service has already been restored for some users, and we expect a resolution for all users within the next 12 hours. Please note this time frame is an estimate and may change.

 November 8, 2014 1:02:00 AM PST

We're investigating reports of an issue with Blogger. We will provide more information shortly.

We have received reports users in Japan are not being able to access blogspot. We are investigating the issue.


障害が滅多に無いからこそ、こういう情報が必要なのかもしれません。

 

2014-11-08

【備忘録】入力ストリームにおける文字セットの指定 (Java)

Java でプログラミングをする時、私の場合 Linux 上で Eclipse か NetBeans IDE を使っています。作ったプログラムを Windows 上で使用する場合もあるのですが、時々、読み込んだファイルの文字が、いわゆる「文字化け」を起こしていて慌てることがあります。

例えば、テキストファイル filename.txt を読みこむ場合、入力ストリームを以下のようにします。

BufferedReader br = new BufferedReader(new FileReader("filename.txt"))

(日本語版の)Windows 上で読み込むテキストファイルの文字セットが Shift_JIS (cp932) であれば問題は起こりませんが、例えば UTF-8 だったりすると「文字化け」が発生します。入力ストリームの文字セットに UTF-8 を指定する場合は、次のようにします。

FileInputStream in = new FileInputStream("filename.txt");
InputStreamReader sr = new InputStreamReader(in, "UTF-8");
BufferedReader br = new BufferedReader(sr);

Linux (CentOS 7) 上では文字セットを UTF-8 にしているので、Windows 上で同じ形式のファイルを読み込む場合、うっかり配慮を忘れてしまったりするので、備忘録として書き留めておきました。

参考サイト

 

2014-11-06

Eclipse で Commons Math を試す (2)

Cmmons Math を利用した、前回の記事で紹介したサンプルをベースに、データや重回帰分析でフィッティングした多項式をプロットできるようにしました。使用したライブラリは Nebula Visualization Widgets の XY Graph です。

GUI の部分を無理矢理くっつけた、やっつけ感が満載のサンプルではありますが、期待どおりのプロットを表示してくれます。読み込む 100,000 組の xy が対になっているデータは、前回と同様、fdata01.zip (fdata01.txt) を使います。

List: MulRegGuiTest.java
package commonsmathtest;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression;
import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.nebula.visualization.xygraph.dataprovider.CircularBufferDataProvider;
import org.eclipse.nebula.visualization.xygraph.figures.Trace;
import org.eclipse.nebula.visualization.xygraph.figures.Trace.TraceType;
import org.eclipse.nebula.visualization.xygraph.figures.XYGraph;
import org.eclipse.nebula.visualization.xygraph.figures.Trace.PointStyle;
import org.eclipse.nebula.visualization.xygraph.util.XYGraphMediaFactory;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class MulRegGuiTest {
    Shell shell;

    private File file;
    private int m = 100000, n = 5;
    private double[][] X;
    private double[] y;
    private double[] c;
    
    public MulRegGuiTest(Display display, File file) {
        this.file = file;

        // multiple regression analysis
        calcMulReg();

        // GUI
        shell = new Shell(display);
        shell.setText("MulRegGuiTest");
        shell.setSize(800, 400);

        shell.setLayout(new FillLayout());

        initUI();

        shell.setLocation(100, 100);
        shell.open();

        // event loop
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    private void calcMulReg() {
        X = new double[m][n];
        y = new double[m];

        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String str;
            int i = 0;

            while ((str = br.readLine()) != null) {
                double xValue = Double.parseDouble(str.substring(0, 6));
                y[i] = Double.parseDouble(str.substring(6, 20));
                for (int j = 0; j < n; j++) {
                    X[i][j] = Math.pow(xValue, (double) j);
                }
                i++;
            }
            br.close();
        } catch (FileNotFoundException e) {
            System.out.println(e);
        } catch (IOException e) {
            System.out.println(e);
        }

        OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
        regression.setNoIntercept(true);
        regression.newSampleData(y, X);

        c = regression.estimateRegressionParameters();
        // double[] residuals = regression.estimateResiduals();
        // double[][] parametersVariance = regression.estimateRegressionParametersVariance();
        // double regressandVariance = regression.estimateRegressandVariance();
        double rSquared = regression.calculateRSquared();
        // double sigma = regression.estimateRegressionStandardError();

        // Result
        System.out.println("# of DATA\t" + m);
        System.out.println("Coefficients");
        for (int j = 0; j < n; j++) {
            System.out.println("C(" + j + ") =  " + c[j]);
        }
        System.out.println("R-squared = " + rSquared);
    }

    private void initUI() {
        // use LightweightSystem to create the bridge between SWT and draw2D
        LightweightSystem lws = new LightweightSystem(shell);

        // create a new XY Graph.
        XYGraph xyGraph = new XYGraph();
        xyGraph.setTitle("Mulreg Example");

        xyGraph.primaryXAxis.setTitle("x axis");
        xyGraph.primaryYAxis.setTitle("y axis");

        xyGraph.primaryXAxis.setShowMajorGrid(true);
        xyGraph.primaryYAxis.setShowMajorGrid(true);

        // set it as the content of LightwightSystem
        lws.setContents(xyGraph);

        xyGraph.primaryXAxis.setAutoScale(true);
        xyGraph.primaryYAxis.setAutoScale(true);

        // create a trace data provider, which will provide the data to the trace.
        CircularBufferDataProvider traceDataProvider1 = new CircularBufferDataProvider(false);
        CircularBufferDataProvider traceDataProvider2 = new CircularBufferDataProvider(false);
        traceDataProvider1.setBufferSize(m);
        traceDataProvider2.setBufferSize(m);

        for (int i = 0; i < m; i++) {
            traceDataProvider1.setCurrentXData(X[i][1]);
            traceDataProvider1.setCurrentYData(y[i]);

            traceDataProvider2.setCurrentXData(X[i][1]);
            traceDataProvider2.setCurrentYData(linearCoupling(i));
        }

        // create the trace for raw data
        Trace trace1 = new Trace("data", xyGraph.primaryXAxis, xyGraph.primaryYAxis, traceDataProvider1);

        // set trace property for raw data
        trace1.setTraceType(TraceType.POINT);
        trace1.setPointStyle(PointStyle.CIRCLE);
        trace1.setPointSize(1);

        // add the trace to xyGraph
        xyGraph.addTrace(trace1);

        // create the trace for regression
        Trace trace2 = new Trace("fitting", xyGraph.primaryXAxis, xyGraph.primaryYAxis, traceDataProvider2);

        // set trace property for regression
        trace2.setPointStyle(PointStyle.NONE);
        trace2.setTraceColor(XYGraphMediaFactory.getInstance().getColor(XYGraphMediaFactory.COLOR_RED));;
        trace2.setLineWidth(2);

        // add the trace to xyGraph
        xyGraph.addTrace(trace2);
    }

    private double linearCoupling(int i) {
        double y = 0;
        for (int j = 0; j < n; j++) {
            y = y + c[j] * X[i][j];
        }
        return y;
    }

    public static void main(String[] args) {
        File readFile = new File("/home/bitwalk/ドキュメント/fdata01.txt");

        Display display = new Display();
        new MulRegGuiTest(display, readFile);
        display.dispose();
    }
}

実行例

重回帰分析をするために用意したサンプルは人為的に作ったものですので、プロットしても面白味がありません。しかし、100,000 程度のデータ数でも簡単にプロットできることが確認できたので、もっと応用範囲を広げてみようと思います。

 

2014-11-04

Eclipse で Commons Math を試す (1)

Cmmons Math a. は 、Apache のトッププロジェクトである Apache Commons にある Apache Commons#Commons Proper に属する、数学と統計学の軽量コンポーネントです b.Apache License Version 2.0 に従って配布されています。いろいろなコンポーネントを利用できますが、ここでは、多項式係数を最小二乗法で求めてみます。

なお、最初に扱うサンプルは、以前 NetBeans IDE で試したもの c. と同じものを Eclipse 上でも試し、その上で SWT と組み合わせて視覚化したいと考えています。ただ、大量のデータをそのままプロットできるかどうか…。まずは、NetBeans IDE で試した時のおさらいをします。当時使用したデータファイルのリンク先に不具合があるので、今回、新たにデータの格納先を 4shared に確保しました。

使用環境

  • OS : CentOS 7 (Linux)
  • JDK : java-1.7.0-openjdk-1.7.0.71-2.5.3.1.el7_0.x86_64
  • IDE : Eclipse Luna Service Release 1 (4.4.1)

サンプル

100,000 組の xy が対になっているデータ fdata01.zip (fdata01.txt) を使って、c.、次の 4 次の多項式でフィッティングするために、その係数 c0,  c1,  c2,  c3,  c4 を最小二乗法で求めます。

y = c0 + c1x + c2x2 + c3x3 + c4x4

以下が Commons Math を利用したサンプルプログラムです。なお、使用した Commons Math は Version 3.3 です。なお、Java 1.5 以上が必要です。

package commonsmathtest;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression;

public class CommonsMathTest {

    public static void main(String[] args) {
        int m = 100000, n = 5;
        double X[][], y[];
        X = new double[m][n];
        y = new double[m];

        File file = new File("/home/bitwalk/ドキュメント/fdata01.txt");

        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String str;
            int i = 0;
            while ((str = br.readLine()) != null) {
                double xValue = Double.parseDouble(str.substring(0, 6));
                y[i] = Double.parseDouble(str.substring(6, 20));
                for (int j = 0; j < n; j++) {
                    X[i][j] = Math.pow(xValue, (double) j);
                }
                i++;
            }
            br.close();
        } catch (FileNotFoundException e) {
            System.out.println(e);
        } catch (IOException e) {
            System.out.println(e);
        }

        OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
        regression.setNoIntercept(true);
        regression.newSampleData(y, X);

        double[] c = regression.estimateRegressionParameters();
//        double[] residuals = regression.estimateResiduals();
//        double[][] parametersVariance = regression.estimateRegressionParametersVariance();
//        double regressandVariance = regression.estimateRegressandVariance();
        double rSquared = regression.calculateRSquared();
//        double sigma = regression.estimateRegressionStandardError();

        // Result
        System.out.println("# of DATA\t" + m);
        System.out.println("Coefficients");
        for (int j = 0; j < n; j++) {
            System.out.println("C(" + j + ") =  " + c[j]);
        }
        System.out.println("R-squared = " + rSquared);
    }
}

実行例を以下に示しました。ここでは R2 (決定係数)も計算しています。

run:
# of DATA 100000
Coefficients
C(0) =  37.76585776133077
C(1) =  0.049683847037500665
C(2) =  6.988983959854228E-6
C(3) =  -4.217424916004811E-7
C(4) =  2.686562674530102E-10
R-squared = 0.7654053656031088

小数点以下が全て前回と全く同じになっているというわけではなく、ほんの僅かな違いが確認できますが、無視して良いでしょう。さて、これをプロットできるか、次回試してみます。

参考サイト

  1. Commons Math: The Apache Commons Mathematics Library
  2. Apache Commons Math
  3. bitWalk's: NetBeans IDE で Commons Math を試す
  4. The Commons Math User Guide - Statistics 1.5 Multiple linear regression
  5. bitWalk's workshop - CommonsMath

 

2014-11-03

Appleの新言語「Swift」をオープンソースで実装するプロジェクトがスタート

Swift は、従来の Objective-C に代わる言語として、iOS や OS X 向けのアプリケーション開発で使用できる、2014 年 6 月に Apple から発表された新しいプログラミング言語です。

Swift は Apple 以外のプラットフォームには対応していないため、Swift 言語のオープンな実装を作成するプロジェクトとして Phoenix が立ち上げられました。開発は Cocoa のフリー実装と言える GNUStep の開発者である Greg Casamento 氏が率いるそうです。

今後、大きなプロジェクトになるかもしれない、一つのオープンソースプロジェクトの誕生を暖く見守りたいです。

  1. Appleの新言語「Swift」をオープンソースで実装するプロジェクトがスタート、GNUStepの開発者も参加 | SourceForge.JP Magazine
  2. Ind.ie Projects / phoenix | GitLab
  3. Ind.ie — Designing Hope
  4. Swift - Overview - Apple Developer

 

2014-11-01

複数行の文字列表示と StyledText

SWT の Text を、複数行にわたる文字列を表示するだけの用途に使おうとして、サンプルを作って確認をしました。以下のように Text の編集機能を無効にすればなんとかなると簡単に考えていたのすが…、ひとつ問題がありました。

List: SWTAppText.java
package text;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class SWTAppText {
    Shell shell;

    public SWTAppText(Display display) {
        shell = new Shell(display);
        shell.setText("メッセージ");

        initUI();

        shell.setSize(200, 100);
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }

    }

    public void initUI() {
        shell.setLayout(new GridLayout(1, true));

        Text text = new Text(shell, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY);
        text.setText("複数行の文字列を Text に表示するためだけのサンプルです。");
        text.setEditable(false); // READ_ONLY だけで十分かもしれないが、念の為
        
        GridData gd = new GridData();
        gd.horizontalAlignment = GridData.FILL;
        gd.verticalAlignment = GridData.FILL;
        gd.grabExcessHorizontalSpace = true;
        gd.grabExcessVerticalSpace = true;
        text.setLayoutData(gd);

    }

    public static void main(String[] args) {
        Display display = new Display();
        new SWTAppText(display);
        display.dispose();
    }
}

実行例

上の実行例のように、複数行にわたる文字列を表示する用途には使えるのですが、文字列の先頭に必ず「入力カーソル (Input Cursor)」が表示されていて、これを消すことができません。解決方法をインターネットで探しているうちに気が付きました。そもそも、文字れの先頭に表示されている入力用のカーソルを「入力カーソル (Input Cursor)」であると信じ込んでいたことが、解決に時間がかかってしまったことをです。「キャレット (Caret)」をキーワードにして探せば簡単に StyledText を使えば良いことに気付いたことでしょう。

「入力カーソル (Input Cursor)」は Tcl/Tk で使われている用語です(例えば [2])。昔、Tcl/Tk を IME などの日本語入力へ対応させることに取り組んでいて、Caret = 「漢字キーなどを押して(Caret の位置に)かな変換用ウィンドウを出すこと」にイメージが固まってしまっていて Caret というキーワードが出てきませんでした。

Text の代わりに StyledText を利用して Caret を非表示にしたサンプルを示します。

List: SWTAppStyledText.java
package styledtext;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class SWTAppStyledText {
    Shell shell;

    public SWTAppStyledText(Display display) {
        shell = new Shell(display);
        shell.setText("メッセージ");

        initUI();

        shell.setSize(200, 100);
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }

    }

    public void initUI() {
        shell.setLayout(new GridLayout(1, true));

        StyledText text = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY);
        text.setText("複数行の文字列を StyledText に表示するためだけのサンプルです。");
        text.setEditable(false);
        text.setCaret(null); 
        
        GridData gd = new GridData();
        gd.horizontalAlignment = GridData.FILL;
        gd.verticalAlignment = GridData.FILL;
        gd.grabExcessHorizontalSpace = true;
        gd.grabExcessVerticalSpace = true;
        text.setLayoutData(gd);

    }

    public static void main(String[] args) {
        Display display = new Display();
        new SWTAppStyledText(display);
        display.dispose();
    }
}

実行例

複数行にわたる文字列を表示するだけのことですが、Caret というキーワードを使わなかったために意外に解決に手こずってしまったので、自戒を込めて備忘録的に書留ました。

参考サイト

  1. Eclipse Community Forums: Standard Widget Toolkit (SWT) » how to remove blinking cursor in StyledText widget
  2. The Tk Text Widget | Linux Journal

2014-10-27

Fedora 21 がやってくる!

Fedora は、Red Hat が支援するコミュニティー Fedora Projectによって開発されている RPM 系 Linux ディストリビューションです。Fedora は、最新の技術を積極的に取り込むディストリビューションで、その成果が RHEL に取り込まれるといった検証目的としての位置づけがなされています。最新の技術を取り込むことを標榜しているだけあって、新しいバージョンのリリース頻度は(スケジュールは遅れるのが常ですが)半年に一回と、結構更新が忙しいディストリビューションでもあります。

ところが 10 周年の記念すべき現リリースの Fedora 20 が 2013 年 12 月 17 日公開されたあと、2014 年には一度しか Fedora がリリースされないことが発表されました [1], [2]。しかも毎回付けられていた、イカした開発コードネームは付かないということも。それが Fedora 21 です。スケジュールが遅れるのは常ですが、なんとか年内にはリリースされそうです [3]

Fedora 21 の配布は、クラウド、サーバー、ワークステーションの用の 3 製品になるようです [4]。正確には Base パッケージの元に、Cloud、Server そして Workstation のパッケージが配布されることになるようです。アルファリリースの段階では i686 と x86_64 に対応したパッケージが公開されています。リリースのタイミングは判りませんが ARM 版も公開されるでしょう。

Fedora 21 に取り込まれるソフトウェアは [5] によると以下のようになります。日本語には翻訳していません。

Fedora 21 Accepted System Wide Changes Proposals

Application Installer Continued
Fully integrate the new application installer with Fedora, and complete its feature set
Cockpit Management Console
The Fedora Server Product will ship the Cockpit Project as available by default, providing an approachable tool for system management.
System-wide crypto policy
Unify the crypto policies used by different applications and libraries. That is allow setting a consistent security level for crypto on all applications in a Fedora system. The implementation approach will be to initially modify SSL libraries to respect the policy and gradually adding more libraries and applications.
Domain Controller Server Role
The Fedora Server Product will provide a standard deployment mechanism for a Linux Domain Controller (powered by the FreeIPA project).
Fedora 21 Boost 1.56 Uplift
This change brings Boost 1.55.0 (as, Boost 1.56.0 was not ready in time) to Fedora 21.
Fedora 21 Make 4.0 Update
This change brings Make 4.0 to Fedora 21.
Format Security
Enable "-Werror=format-security" compilation flag for all packages in Fedora. Once this flag is enabled, GCC will refuse to compile code that could be vulnerable to a string format security flaw.
Framework for Server Role Deployment
A new D-Bus service, and associated command-line tools, to deploy and manage Server Roles.
GCC49
Switch GCC in Fedora 21 to 4.9.x, rebuild all packages with it.
GNOME 3.14
Update GNOME to the latest upstream release, 3.14
Headless Java
Server installations of Fedora should usually not pull in packages related to X system or sound subsystem. For this reason part of OpenJDK package has been split into headless subpackage which has smaller dependency chain. Fedora packages should be migrated to require java-headless instead of full java package when appropriate.
Java 8
Make Java 8 (provided by OpenJDK 8 which is java-1.8.0-openjdk) the default Java runtime. The current default Java runtime (Java 7, provided by OpenJDK 7, java-1.7.0-openjdk) will be obsoleted and removed.
Lohit Odia and Gurmukhi font naming
This is a change to make Lohit Oriya fonts name as per the guidelines by Odisha governement and improve Lohit Punjabi font name to avoid confusion between Arabic and Gurmukhi script fonts. It will change Lohit Oriya fonts to Lohit Odia and Lohit Punjabi to Lohit Gurmukhi.
Modular Kernel Packaging for Cloud
Kernel modules that are not necessary in virtualized environments become optionally (un)installable.
Optional Javadocs
Make javadoc subpackages of Java packages optional in guidelines and communicate this change to users.
Access control in PCSC
Add access control to PC/SC smart cards available in the system. Adding access control would (a) prevent unauthorized processes/users from reading data on a smart card, (b) prevent unauthorized processes/users from erasing a smart card, (c) prevent unauthorized processes/users from talking to the smart card firmware
PHP 5.6
Update the PHP stack to new version 5.6.
Python 3.4
Update the Python 3 stack in Fedora from Python 3.3 to Python 3.4.
RPM-4.12
Update RPM to the upcoming 4.12 release.
Remove python-setuptools-devel
The python-setuptools package has carried a virtual Provide for python-setuptools-devel since 2009 for backwards compatibility. We're going to remove this virtual Provide. Packages which still BuildRequire python-setuptools-devel will need to be updated to Require: python-setuptools instead.
Ruby 2.1
Ruby 2.1 is the latest stable version of Ruby, with major increases in speed, memory efficiency and reliability. With this major update from Ruby 2.0.0 in Fedora 20 to Ruby 2.1 in Fedora 21, alongside JRuby, Fedora becomes the superior Ruby development platform.
Ruby on Rails 4.1
Ruby on Rails 4.1 is the latest version of well know web framework written in Ruby.
Smaller Cloud Image Footprint
Shrink the footprint of our cloud images as far as reasonably, and within the given timeframe, possible.
Use license macro in RPMs for packages in Cloud Image
Use new %license macro to separate license files from documentation, so the latter can be excluded from container images without stripping license information which must be included.
Wayland
Support GNOME Wayland sessions
Web Assets
Traditionally, Fedora has been pushing bits from its various servers to people's browsers in an ad-hoc fashion, and issues surrounding JavaScript have been swept under the rug. This change proposal provides a simple framework for shipping static web content and a way forward to treat JavaScript more closely to other code in the distribution.
TCL/TK 8.6
Update tcl/tk from 8.5 to 8.6 in Fedora 21.
u-boot syslinux by default
Add syslinux support to u-boot enabling both pxelinux and extlinux support. simplifying booting arm machines, making anaconda installs easy and overall providing for a better user experience. Default u-boot to using syslinux config files for booting. pxelinux for network and extlinux for local booting. u-boot is the bootloader used on ARM systems in Fedora so the scope of this change is limited to ARM hardware only.

Fedora 21 Accepted Self Contained Changes Proposals

Add amd map parser to autofs
The am-utils package provides automount services for automount maps that use an amd format. However, the am-utils project has not been actively maintained for quite a while now.
Allwinner sunxi (A10 / A13 / A20) ARM SoC support
Allwinner A10 / A13 / A20 SoCs are used in a number of popular low cost arm development boards and arm mini computers. Currently Fedora ARM is supported on these devices through a Remix. Allwinner kernel support is progressing rapidly upstream, and with this upstream kernel support it should be possible to support Allwinner SoCs in the official Fedora ARM images, without the need for a remix.
Amplab Tachyon
Amplab-Tachyon is a fault tolerant distributed file system enabling reliable file sharing at memory-speed across cluster frameworks.
Apache Accumulo
The Apache Accumulo is a scalable sorted, distributed, key/value store.
Apache Ambari
Apache Ambari is a cluster management framework and UI for Apache Hadoop.
Apache HBase
Apache HBase is a distributed database built on top of Apache Hadoop.
Apache Hive
Apache Hive is a data warehouse built on top of Apache Hadoop.
Apache Mesos
Apache Mesos is a cluster manager for sharing distributed application frameworks. This change brings Mesos to Fedora, which many have called a micro-kernel for the data center.
Apache Oozie
Apache Oozie is a workflow scheduler system to manage Apache Hadoop jobs.
Apache Pig
Apache Pig is a data analysis tool built on top of Apache Hadoop.
Apache Spark
Apache Spark is a fast and general engine for large-scale data processing. This change brings Spark to Fedora, allowing easy deployment and development of Spark applications on Fedora.
Atomic Cloud Image
New Fedora product: Fedora Atomic (Cloud Image) - Docker host ready to go in the cloud. This is the "host" component of the Project Atomic pattern.
Better Erlang Support
Update Erlang/OTP to R17, and improve Erlang integration with the rest of Fedora.
Convert Fedora Cloud Image to Fedora Server ("Adopt Your Cattle")
We provide a smooth path so a Cloud Base Image can be turned into Fedora Server. Fedora Cloud images are designed to be run and managed as scale-out undifferentiated "cattle", while Fedora Server is intended for more "pet-like" individually-managed servers.
CUPS Journal Logging
By default, CUPS will send log output to the system journal rather than /var/log/cups/error_log.
Docker Container Image
This is Fedora running inside Docker. Currently, there are non-official images in the docker index, but we'd like them to really come out of release engineering.
DNSSEC support for FreeIPA
FreeIPA with integrated DNS server will support serving of DNSSEC secured zones and automatic DNSSEC key maintenance.
Improved Ivy Packaging
This change aims at improving the way of packaging Java software, which uses Apache Ivy to manage build dependencies.
Improved Scala Ecosystem Support
Fedora now supports several essential parts of the Scala language ecosystem as well as building packages with sbt, the de facto build tool for the Scala community.
Jenkins
Jenkins is an open source continuous integration tool written in Java.
KDE Frameworks 5
KDE Frameworks 5 is a set of libraries and technologies developed in the KDE project over the past 18 years. Most of the frameworks come from the kdelibs module, which has been split, cleaned up, dependencies were strightened and packed into individual libraries. This allows developers and projects outside the KDE ecosystem to make use of these technologies and benefit from work of the KDE Community.
MATE Desktop 1.8
Update MATE Desktop to version 1.8
MariaDB 10.0
Update MariaDB to version 10.0
Move to ImageFactory For Cloud Image Creation
Create images using Anaconda in Koji rather than appliance-creator. Allows non-scratch builds with fedmsg integration for upload service, and also could produce official Docker images.
NFS Ganesha File Server
NFS Ganesha is a user mode file server that supports NFSv3, NFSv4, and NFSv4.1 including pNFS for distributed filesystems. It uses loadable filesystem driver modules to support its backend filesystems. It also integrates 9P.2000L file service
OpenCL
This change will bring basic OpenCL support to Fedora to support the development of OpenCL enabled software and the development of OpenCL implementations itself. The change includes enabling Mesa's OpenCL state-tracker (in 10.0 with ICD support), packaging pocl - an CPU only OpenCL implementation - and the introduction of several other OpenCL related packages.
Remote Journal Logging
Systemd journal can be configured to forward events to a remote server. Entries are forwarded including full metadata, and are stored in normal journal files, identically to locally generated logs. This can be used as an alternative or in addition to existing log forwarding solutions.
Review Board 2.0
Review Board is a powerful tool for managing patch reviews.
SDDM as the default KDE display manager instead of KDM
Retire KDM as the default display manager of the KDE Fedora Spin in favor of SDDM.
SSSD GPO-Based Access Control
This change will enhance SSSD, by adding support for centrally managed host-based access control in an Active Directory (AD) environment, using Group Policy Objects (GPOs).
64bit ARM emulation on x86
Allow running 64bit ARM (AArch64) VMs on x86 hosts using standard the standard qemu and libvirt stack, as well as end user tools like virt-manager and virt-install.
Web Application Authentication
On operating system level, there are numerous authentication and identity lookup mechanisms, some of them using sssd. With new Apache modules and new sssd, some of those mechanisms become more easily consumable by web applications. Various web application environments and frameworks can then consume results of the authentication and information retrieval using environment variables similar to REMOTE_USER.
libzhuyin
An new intelligent input method for Traditional Chinese (Taiwan) provided by libzhuyin using n-gram to give better conversion than ibus-chewing with libchewing.
The Shogun Machine Learning Toolbox
SHOGUN is a large Scale Machine Learning Toolbox, being implemented in C++ and offering interfaces to C#, Java, Lua, Octave, Perl, Python, R and Ruby.

 

Linux を主にワークステーションとして使っているため、自分にとって上記情報で興味を惹かれるのは、それほど多くはありません。Java 環境が Fedora 21 から 8 へ切り替わること。あと(マイナーな話題かもしれませんが)、Tcl/Tk 8.6 がようやく採用されるようです。

現在、自分が使っている環境は、Fedora から CentOS 7 に切り替えて、ようやく馴染んできたところです。約一年ぶりの Fedora のリリースには大いに心惹かれるのですが、Fedora に戻すのには躊躇いがあります。暫く様子見をします。

参考サイト

  1. 2014年、Fedora は名前を持たないリリースを1度だけ公開する ― だが、心配には及ばない - インターネットコム
  2. Nameless Fedora 21 Linux Is an Opportunity for Growth (2014-01-13)
  3. Releases/21/Schedule - FedoraProject
  4. Fedora Project - 次の Fedora を入手する
  5. Releases/21/ChangeSet - FedoraProject

2014-10-25

ProgressIndicator と Thread

JFace の ProgressIndicator を利用して、ファイルの読み込みなど時間が掛かる処理について、単に処理中であることを表示しようとしましたが、最初、なかなかうまくいきませんでした。試行錯誤して、当初予定していたサンプルが出来たので、備忘録として書留ます。

このサンプルは、ダミーの処理をしているスレッドから、UI スレッドにある ProgressIndicator のインスタンス indicator に非同期でアクセスして操作をしています。なお、このサンプルでは [2] のように別スレッドの処理中に「処理開始」ボタンがクリックされることを考慮していません。

List: ProgressIndicatorTest.java
package jfacesample;

import org.eclipse.jface.dialogs.ProgressIndicator;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class ProgressIndicatorTest extends ApplicationWindow {
    Display display;
    ProgressIndicator indicator;

    public ProgressIndicatorTest() {
        super(null);
    }

    @Override
    protected Control createContents(Composite parent) {
        Shell shell = parent.getShell();
        display = shell.getDisplay();
        shell.setText("ProgressIndicatorTest");

        GridLayout layout = new GridLayout();
        parent.setLayout(layout);

        GridData gd;

        // start button
        Button start = new Button(parent, SWT.PUSH);
        start.setText("処理開始");
        gd = new GridData(GridData.FILL_HORIZONTAL);
        start.setLayoutData(gd);
        start.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                startWork();
            }
        });

        // progress indicator
        indicator = new ProgressIndicator(parent);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        indicator.setLayoutData(gd);

        return parent;
    }

    private void startWork() {
        DummyTask task = new DummyTask(display, indicator);
        Thread th = new Thread(task);
        th.start();
    }

    public static void main(String[] args) {
        ProgressIndicatorTest w = new ProgressIndicatorTest();
        w.setBlockOnOpen(true);
        w.open();
        Display.getCurrent().dispose();
    }
}

class DummyTask implements Runnable {
    Display display;
    ProgressIndicator indicator;

    DummyTask(Display display, ProgressIndicator indicator) {
        this.display = display;
        this.indicator = indicator;        
    }

    public void run() {
        // start progress indicator
        display.asyncExec(new Runnable() {
            public void run() {
                indicator.beginAnimatedTask();
                indicator.showNormal();
            }
        });

        // dummy task
        long sleepTime = 3000; // milliseconds
        long endTime = System.currentTimeMillis() + sleepTime;
        while (System.currentTimeMillis() < endTime) {
        }

        // stop progress indicator
        display.asyncExec(new Runnable() {
            public void run() {
                indicator.done();
            }
        });

        System.out.println("completed!");
    }
}

実行例

参考サイト

  1. IBM Knowledge Center
  2. 基礎編 - スレッド

2014-10-16

Oracle、「Java SE 7 Update 71」「Java SE 8 Update 25」を公開。25件の脆弱性を修正 - 窓の杜

10 月 14 日(米国時間)に Java など Oracle 製品に関する定例の Critical Patch Update が公開されました。Java 関連では、最新版となる Java SE 7 Update 71 および Java SE 8 Update 25 が公開されています。なお、Java SE 7 については、セキュリティ以外の修正も含まれる Java SE 7 Update 72 も公開されていますが、特別な問題がない場合には Java SE 7 Update 71 を使用することが推奨されています。

今回のアップデートから、java.com のページで配布される Java ランタイムが、Java 7 から Java 8 となりました。

次回の定例セキュリティアップデートは、米国時間 2015 年 1 月 20 日に予定されています。

2014-10-10

XYGraph

Nebula Visualization Widgets の XYGraph を試してみました。

XYGraph を利用するには、まず Eclipse のマーケットプレイスから、Nebula をインストールします。

プロジェクトのビルドパスに org.eclipse.draw2d_XXXX.....jarorg.eclipse.nebula.visualization.xygraph_XXXX....jar を加ます

参考サイトで紹介されていた Snippet をベースにした簡単なサンプルを以下に示しました。

List: XYGraphSample.java
package nebula;

/*******************************************************************************
 * Copyright (c) 2010 Oak Ridge National Laboratory.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 ******************************************************************************/
import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.nebula.visualization.xygraph.dataprovider.CircularBufferDataProvider;
import org.eclipse.nebula.visualization.xygraph.figures.ToolbarArmedXYGraph;
import org.eclipse.nebula.visualization.xygraph.figures.Trace;
import org.eclipse.nebula.visualization.xygraph.figures.XYGraph;
import org.eclipse.nebula.visualization.xygraph.figures.Trace.PointStyle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * A simple XYGraph with toolbar.
 * 
 * Original name of the class was 'SimpleToolbarArmedXYGraphExample' and
 * modified by Fuhito Suguri, 10-Oct-2014
 * 
 * @author Xihui Chen
 *
 */
public class XYGraohSample {
    Shell shell;

    public XYGraohSample(Display display) {
        shell = new Shell(display);
        shell.setText("XYGraphSample");
        shell.setSize(600, 400);

        shell.setLayout(new FillLayout());

        initUI();

        shell.setLocation(200, 200);
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    public void initUI() {
        // use LightweightSystem to create the bridge between SWT and draw2D
        final LightweightSystem lws = new LightweightSystem(shell);

        // create a new XYGraph
        XYGraph xyGraph = new XYGraph();
        xyGraph.setTitle("XYgraph の簡単な例");

        xyGraph.primaryXAxis.setTitle("X軸");
        xyGraph.primaryYAxis.setTitle("Y軸");

        xyGraph.primaryXAxis.setShowMajorGrid(true);
        xyGraph.primaryYAxis.setShowMajorGrid(true);

        // add ToolbarArmedXYGraph
        ToolbarArmedXYGraph toolbarArmedXYGraph = new ToolbarArmedXYGraph(xyGraph);

        // set it as the content of LightwightSystem
        lws.setContents(toolbarArmedXYGraph);

        xyGraph.primaryXAxis.setShowMajorGrid(true);
        xyGraph.primaryYAxis.setShowMajorGrid(true);

        // create a trace data provider, which will provide the data to the trace
        CircularBufferDataProvider traceDataProvider = new CircularBufferDataProvider(false);
        traceDataProvider.setBufferSize(100);
        traceDataProvider.setCurrentXDataArray(new double[] { 10, 23, 34, 45, 56, 78, 88, 99 });
        traceDataProvider.setCurrentYDataArray(new double[] { 11, 44, 55, 45, 88, 98, 52, 23 });

        // create the trace
        Trace trace = new Trace("データ", xyGraph.primaryXAxis, xyGraph.primaryYAxis, traceDataProvider);

        // set trace property
        trace.setPointStyle(PointStyle.CIRCLE);
        trace.setPointSize(10);

        // add the trace to xyGraph
        xyGraph.addTrace(trace);
    }

    public static void main(String[] args) {
        Display display = new Display();
        new XYGraohSample(display);
        display.dispose();
    }
}

実行例

参考サイト

  1. Nebula Visualization Widgets
  2. Overview (SWT XYGraph API)