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-17

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. 基礎編 - スレッド