Google Chrome のバージョンのリリースが 50 に。このバージョンのマイルストーンはなんだったのだろう?とりあえず備忘録として残します。
にほんブログ村
すぐりふひとのプログラミングメモ
UnixBench は Linux など Unix 系 OS 向けのベンチマークツールです。参考サイト [1] に詳しい使用方法が紹介されてましたので、それを参考に Fedora でベンチマークをしてみました。ベンチマークのターゲットにした環境は下記のとおりです。
参考サイト [2] から UnixBench の zip ファイルをダウンロードして、次のように解凍して実行しました。コンパイル後に '3dinfo: command not found' のメッセージが出ますが解決方法がわからないので、結局、Graphics のベンチマークなしに実施しました。その他のエラーについては、参考サイト [3] を参考にしています。
$ unzip byte-unixbench-master.zip Archive: byte-unixbench-master.zip e80d3f373999e75dda3c9c9474fb54ecd4a0ea1e creating: byte-unixbench-master/ inflating: byte-unixbench-master/LICENSE.txt inflating: byte-unixbench-master/README.md creating: byte-unixbench-master/UnixBench/ ... ... inflating: byte-unixbench-master/UnixBench/testdir/large.txt inflating: byte-unixbench-master/UnixBench/testdir/sort.src $ cd byte-unixbench-master/UnixBench $ ls Makefile README Run USAGE WRITING_TESTS pgms src testdir $ ./Run gcc -o ./pgms/arithoh -DTIME -Wall -pedantic -ansi -O2 -fomit-frame-pointer -fforce-addr -ffast-math -Wall -Darithoh ./src/arith.c gcc -o ./pgms/register -DTIME -Wall -pedantic -ansi -O2 -fomit-frame-pointer -fforce-addr -ffast-math -Wall -Ddatum='register int' ./src/arith.c ... ... gcc -o ./pgms/fstime -DTIME -Wall -pedantic -ansi -O2 -fomit-frame-pointer -fforce-addr -ffast-math -Wall ./src/fstime.c gcc -o ./pgms/whetstone-double -DTIME -Wall -pedantic -ansi -O2 -fomit-frame-pointer -fforce-addr -ffast-math -Wall -DDP -DUNIX -DUNIXBENCH ./src/whets.c -lm make all make[1]: Entering directory '/home/bitwalk/ダウンロード/byte-unixbench-master/UnixBench' Checking distribution of files ./pgms exists ./src exists ./testdir exists make[1]: Leaving directory '/home/bitwalk/ダウンロード/byte-unixbench-master/UnixBench' sh: 3dinfo: command not found # # # # # # # ##### ###### # # #### # # # # ## # # # # # # # ## # # # # # # # # # # # ## ##### ##### # # # # ###### # # # # # # ## # # # # # # # # # # # # ## # # # # # # # ## # # # # #### # # # # # ##### ###### # # #### # # Version 5.1.3 Based on the Byte Magazine Unix Benchmark Multi-CPU version Version 5 revisions by Ian Smith, Sunnyvale, CA, USA January 13, 2011 johantheghost at yahoo period com Wide character in print at ./Run line 1511. Wide character in printf at ./Run line 1542. 1 x Dhrystone 2 using register variables
1 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10 ... ... 2 x Shell Scripts (8 concurrent) 1 2 3 Wide character in printf at ./Run line 1484. ======================================================================== BYTE UNIX Benchmarks (Version 5.1.3) System: stream11: GNU/Linux OS: GNU/Linux -- 4.5.2-300.fc24.x86_64 -- #1 SMP Wed Apr 20 16:46:11 UTC 2016 Machine: x86_64 (x86_64) Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8") CPU 0: Intel(R) Celeron(R) CPU N2840 @ 2.16GHz (4326.4 bogomips) Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization CPU 1: Intel(R) Celeron(R) CPU N2840 @ 2.16GHz (4326.4 bogomips) Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization 08:18:08 up 1:07, 2 users, load average: 0.19, 0.19, 0.62; runlevel 5 ------------------------------------------------------------------------ Benchmark Run: 土 4月 23 2016 08:18:08 - 08:46:47 2 CPUs in system; running 1 parallel copy of tests Dhrystone 2 using register variables 12904499.1 lps (10.0 s, 7 samples) Double-Precision Whetstone 2209.9 MWIPS (9.9 s, 7 samples) Execl Throughput 525.4 lps (29.7 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 270798.8 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 74378.5 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 673829.4 KBps (30.0 s, 2 samples) Pipe Throughput 881314.7 lps (10.0 s, 7 samples) Pipe-based Context Switching 62505.2 lps (10.0 s, 7 samples) Process Creation 4217.6 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 2704.1 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 523.7 lpm (60.1 s, 2 samples) System Call Overhead 1829738.5 lps (10.0 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 12904499.1 1105.8 Double-Precision Whetstone 55.0 2209.9 401.8 Execl Throughput 43.0 525.4 122.2 File Copy 1024 bufsize 2000 maxblocks 3960.0 270798.8 683.8 File Copy 256 bufsize 500 maxblocks 1655.0 74378.5 449.4 File Copy 4096 bufsize 8000 maxblocks 5800.0 673829.4 1161.8 Pipe Throughput 12440.0 881314.7 708.5 Pipe-based Context Switching 4000.0 62505.2 156.3 Process Creation 126.0 4217.6 334.7 Shell Scripts (1 concurrent) 42.4 2704.1 637.8 Shell Scripts (8 concurrent) 6.0 523.7 872.9 System Call Overhead 15000.0 1829738.5 1219.8 ======== System Benchmarks Index Score 529.7 ------------------------------------------------------------------------ Benchmark Run: 土 4月 23 2016 08:46:47 - 09:15:43 2 CPUs in system; running 2 parallel copies of tests Dhrystone 2 using register variables 25357204.1 lps (10.0 s, 7 samples) Double-Precision Whetstone 4397.7 MWIPS (10.0 s, 7 samples) Execl Throughput 3286.2 lps (29.8 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 385791.0 KBps (30.1 s, 2 samples) File Copy 256 bufsize 500 maxblocks 116330.5 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 941896.0 KBps (30.0 s, 2 samples) Pipe Throughput 1754722.5 lps (10.0 s, 7 samples) Pipe-based Context Switching 178692.5 lps (10.0 s, 7 samples) Process Creation 11098.5 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 3914.7 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 525.5 lpm (60.1 s, 2 samples) System Call Overhead 2759217.9 lps (10.0 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 25357204.1 2172.9 Double-Precision Whetstone 55.0 4397.7 799.6 Execl Throughput 43.0 3286.2 764.2 File Copy 1024 bufsize 2000 maxblocks 3960.0 385791.0 974.2 File Copy 256 bufsize 500 maxblocks 1655.0 116330.5 702.9 File Copy 4096 bufsize 8000 maxblocks 5800.0 941896.0 1624.0 Pipe Throughput 12440.0 1754722.5 1410.5 Pipe-based Context Switching 4000.0 178692.5 446.7 Process Creation 126.0 11098.5 880.8 Shell Scripts (1 concurrent) 42.4 3914.7 923.3 Shell Scripts (8 concurrent) 6.0 525.5 875.8 System Call Overhead 15000.0 2759217.9 1839.5 ======== System Benchmarks Index Score 1016.6 $
UnixBench の結果の各項目については、参考サイト [1] に詳しく説明されています。
新しく登場した CPU のベンチマークを取ることについては理解できるのですが、昔、オーバークロックした自作 PC に対する(Windows の)ベンチマークの記事を目にする度に、そもそも PC を何に使いたいのかという疑問がふつふつと湧いてきてしまって、そういったスピード狂が書いたベンチマークの記事には少々嫌気を覚えていました。
しかし、現在の格安 PC に搭載されている非力な CPU に焦点をあてて、同一のソフトウェアを使ってベンチマークのデータを蓄積することは、それなりに意味があるかもしれないと考えるようになりました。格安 PC と言えど、そう何台も購入できるわけではありませんので、地道にやっていこうと思います。
BSD は、Berkeley Software Distribution の略語で、1977 年から 1995 年までカリフォルニア大学バークレー校 (University of California, Berkeley, UCB) の Computer Systems Research Group (CSRG) が開発・配布したソフトウェア群および UNIX オペレーティングシステム (OS) のことです。
元となったコードベースと設計は AT&T (正確には 1980 年ぐらいまで AT&T 傘下にあったベル研究所)の UNIX と共通であるため、歴史的には BSD は UNIX の支流 "BSD UNIX" とみなされてきました。1980 年代、ワークステーションクラスのシステムベンダーがプロプライエタリな UNIX として BSD を広く採用していました。例えば、DEC のUltrix、サン・マイクロシステムズの SunOS などです。これは配布するライセンス条件が容易だったためと、当時の多くの技術系企業の創業者が BSD を熟知していたことに因ります。
それらプロプライエタリな BSD 派生 OS は、1990 年代には UNIX System V Release 4 と OSF/1 に取って代わられ、どちらも BSD のコードを取り入れており、他の現代の Unix システムの基盤になりました。一方、後期の BSD リリースは、いくつかのオープンソース開発プロジェクトの基盤になりました。
以上、Wikipedia から引用しました [1]。なお、補足および言葉遣いなどを一部変えてあります。
Windows 95 が登場する少し前、米国シリコンバレーにある会社に勤務していた私は、データ解析用のソフトウェアの関係でサン・マイクロシステムの SunOS を使う機会が多く、当時の PC にインストールされていた Windows 3.11 とは天と地ほどもある高い安定性と洗練されたデスクトップ (OpenWindows) に心を奪われたのでした。当地では Red Hat や Slackware Linux のメディアが廉価で入手できたので、Windows 用に買った自宅の PC に Linux をインストールすることに成功すると、嬉々としてプログラミングに励んでいたのでした。
Linux は、UNIX 的な世界をぐっと身近に、誰でもが使えるようにしてくれましたが、一方で、Linux は正統な UNIX ではない、というコンプレックスみたいな感情をずっと抱いていました。そのコンプレックスを抱いたまま Linux をずっと使い続けてきたのは、コンプレックスを上回る使いやすさがあったからだと考えています。
一方、当時日本に住んでいたら、当時日本で流行っていたため間違いなく試したであろう FreeBSD や、あるいは NetBSD こそが、BSD の血を引く正統な UNIX であると、ずいぶん長い間思い込んでいました。それは歴史的には正しいのですが、UNIX という商標を使う、という意味では正しくありません。現在 UNIX を名乗るためには Single UNIX Specification (SUS) に準拠しているか認証を受けて登録される必要があります。
現在、身近な OS で正式に UNIX と呼べるものは BSD を基盤とする Apple Macintosh の OS X ぐらいでしょう。Linux をはじめ FreeBSD や NetBSD などは、Unix ライクな OS あるいは Unix 系 OS と呼ばれます。これらのオープンソース系システムベンダーでは、OS の仕様変更が頻繁に行われるため、その度に認証を受ける必要が生じ、コストに見合わないため認証を受けないのだそうです。
BSD 自体の開発は 4.4BSD Lite Release 2 で終了していますが、現在あるオープンソースの BSD 系 OS は、AT&T のライセンスに抵触する部分を除いた BSD である 4.3BSD Net/2 より 386BSD を経て派生しています。386BSD の直系の子孫としては FreeBSD、NetBSDがあり、今でも精力的に開発されていいます。OpenBSD や DragonFly BSD は開発方針の違いや開発グループの諍いによってそれぞれ NetBSD、FreeBSD から派生した OS です。これら 4 つの BSD 系 OS の特徴を Wikipedia などで調べて以下にまとめてみました。
OS | FreeBSD | NetBSD | OpenBSD | DragonFly BSD |
---|---|---|---|---|
ロゴ | ||||
最初のリリース | 1993/11/1 | 1993/4/20 | 1996/10/1 | 2004/7/12 |
開発団体 | The FreeBSD Project | The NetBSD Foundation | The OpenBSD Project | - |
創始者 | Nate Williams Rod Grimes Jordan K. Hubbard |
Chris Demetriou Theo de Raadt Adam Glass Charles Hannum |
Theo de Raadt | Matthew Dillon |
由来 | 4.3BSD Networking/2, 4.4BSD-Lite | 4.3BSD Networking/2, 386BSD | NetBSD 1.0 | FreeBSD 4.8 |
ライセンス | Simplified BSD, FreeBSD Documentation License | 2-clause BSD license | BSD, ISC, ATU, その他 | Modified BSD |
カーネルタイプ | モノリシック+モジュール | モノリシック | モノリシック | ハイブリッド |
プラットフォーム | IA-32, x86-64, SPARC64, IA-64, PowerPC, ARM, MIPS | Alpha, ARM, PA-RISC, 68k, MIPS, PowerPC, SH3, SPARC, RISC-V, VAX and x86 | Alpha, x86-64, i386, MIPS64, PowerPC, SPARC 32/64, Zaurus, その他 | x86-64 |
パッケージ管理 | pkg | pkgsrc | OpenBSD package tools, ports tree | DPorts, pkgng |
特徴 | 元々はインテルの x86 プロセッサーでのサポートの充実を念頭に置いて開発されており、x86環境でサポートしているハードウェアの数は多い。 | 多くのコンピュータ・アーキテクチャで BSD 系 Unix を動かすというのを念頭に置いて開発されているプロジェクトで、30種類以上のアーキテクチャで動作する。 | NetBSD から分岐してセキュリティーに注意して開発が進められている。 | FreeBSD とは異なった SMP 対応をするために FreeBSD 4.8R から分岐した。 |
その他 | Linux と異なり、カーネルとユーザランドを含めて一つの OS であり、そして OS 側に GPL のものを含まないようにしている。 | 機種独立性が組み込みシステムでの開発に大きく寄与。 コンパイラ、アセンブラ、リンカその他の、クロスコンパイルに完全対応したツールチェーン一式を持つ。 |
BSD ライセンスの Portable C Compiler (PCC) を導入。 OpenBSD にはセキュリティ強化のための設計変更がいくつも加えられている。 他に比べてプロジェクトの規模が小さいにも関わらずスピンオフした OpenBSD コンポーネントのためのプロジェクトは、多彩でしかも成功している(例:OpenSSH)。 |
カーネルの設計:CPU 毎の局所性を保つようにするアルゴリズムでスレッドを分ける実装。 HAMMER という DragonFly BSD 向けに開発されたファイルシステムを使用。 |
採用例 | PlayStation 4 (Orbis OS) | QNX | Microsoft, Services for UNIX | |
2ちゃんねる | Dell Force10 | Core Force | ||
NASA's SAMS-II Project |
Linux を長年使っていると、表面的には Linux と BSD 系 OS との間には大きな違いはないのかもと、知ったかぶりをして思おうとしてしまいますが、実はそうではないのです。エンドユーザとして Linux を表面的にしか使っていない自分がエラそうに言うのは気が引けますので、ご興味があれば、参考文献の [6] [7] に目を通してみてください。
3 万円を切る格安 PC、HP Stream 11 に Fedora をインストールして 3 週間近くが経ちました。細かい設定も済みましたので今日は外へ持ちだしてバッテリーの持ち具合や使い心地を評価しました (2016-04-16)。
桜(ソメイヨシノ)の時期が終わり、次なる季節の風景を求めて横浜方面へ出かけました。
カメラは Canon の PowerShot SX500IS です。すっかり古い型になってしまいましたが、自分の撮影技術を考えると、撮影対象が風景中心で、機能的にもそれほどの不満がないので、ずっと愛用しています。
PC は、出先でカメラの画像を取り出して整理をして、画像を Facebook へアップロードしたり、下書き中の本記事を更新することに使う予定です。インターネットへのアクセスには、手持ちの Y!mobile Pocket WiFi 305ZT を使いますが、公衆無線 LAN を利用できる場合はつなげてみます。
画面上は以下のようにフル充電状態なっています。
JR 川崎駅から京浜東北線磯子行きに乗り、関内で下車。横浜公園でパチクリとチューリップの撮影開始です。もう 11 時を過ぎています。
横浜公園ではさまざまな種類のチューリップが咲き乱れています。ゆっくり周ってチューリップを観賞、撮影したあと、山下公園へ向かいました。天候は時々日が差す程度でそれほど良くありませんでしたが、程よい風もあり、少し汗ばむ程度の散策するにはぴったりの天候でした。今度はチューリップ以外の花にフォーカスし撮影を続けます。さらに港の見える丘公園まで足をのばしました。
携行した PC の出番はまだありません。
午後 2 時を過ぎ、歩き疲れてどこかで遅いランチにしようと元町の通りに入ると、店頭でやっていたワインの試飲コーナーに吸い寄せられました。
ドイツの白ワインを試飲しながら店の人の話を聞いていると、そのうち、店で出すグラスワインの話に。なんとあのワインがグラスで飲めるというので、頭の中はそのワインで一杯に。ここでランチを摂ることに決定です(ワールドワインバーbyピーロート 横浜元町店)。
つれはランチメニューから、さっさとミートソースのパスタを頼みましたが、私はそのワインの誘惑に負けて(グラスで飲んでも)結構な値段になるにもかかわらず、グラス (120ml) でそのワイン(とチーズの盛り合わせ)を注文しました。
素晴らしいワインとの出会いに、横浜公園などで撮った写真の整理は後回しに。
30 分程かけて一杯のワインとの至福の時を過ごした後、ようやく本日の課題を思い出します。
おもむろに PC を取り出して今日撮った写真のデータのコピーを開始。朝のフル充電後初めての起動ですが、電池に残量は「残り 9:16 (100%)」で満タンの状態です。この日の撮影枚数は 233 枚。0.9GB あまりのデータをカメラの SD カードからコピーすること数分。
しかし、画像整理の作業はここまででした。
ソムリエ志望の自分の娘ほどの若い店員とワイン談義をしているうちに、グラスで飲んだそのワイン、一本買うことを決心。Google Chrome を起動して、Amazon.jp などで売られている価格をベースに価格交渉に使うことに。
ワインを値切ることは適わなかったものの、この店のワインの管理状態に納得して気分よく会計を済ませ、PC はシャットダウンせずにしまいました。近年買ったワインの価格としては最高額になるワインを抱え、高揚した気分で石川町駅から川崎駅へ戻りました。
結局、元町ではカメラで撮った画像の整理ができなかったので、川崎駅近辺で所要を済ませた後、午後 6 時過ぎに近所のデニーズで作業を再開しました。しかし、テーブルが狭く、二人の料理でいっぱいになってしまいましたので、とりあえず食べてしまうことに。
デニーズ内では WiFi を利用でき、スマホは接続されていましたので、食後に PC の方もつなげてみましたがパスワードを忘れてしまっていてログインできませんでした。そこで不謹慎ですが、災害時の接続サービスにつなげてみると…、つなげました。
元町のワインのお店では PC の電源を切らずに持ってきましたが、バッテリーは「残り 6:41 (68%)」とまだまだ大丈夫です。
ネットワークが常時必要な作業ではないので、手持ちの WiFi ルーターに接続を切り替えてから作業開始。横浜公園で撮ったチューリップの写真から厳選した 11 枚を Facebook へアップしました。
数ある画像をひとつひとつチェックし、気に入った写真画像をアップロード用のディレクトリへコピーするという作業は単調なのですが、トラックパッドでは操作が面倒なので、堪らずマウスを取り出して使いました。トラックパッドだけでもさっさと選別作業ができるように、専用のソフトウェアを JavaFX などで作ってしまう方が良いかもしれないと思いました。
デザートも食べ終えていたので、帰途につきました。
帰宅して、引き続き残りの「山下公園」と「港の見える丘公園」の分の写真を整理して Faceboox へアップし終えたのは午後 9:30 過ぎ。バッテリーは「残り 4:04 (43%)」とまだまだ大丈夫です。こんな軟弱な使い方だと余裕で一日中使えるようです。
今回は、バッテリーのスタミナを軽く評価してみただけに終わってしまいましたが、このぐらいの使い方だと日中の使用程度であればバッテリーは十分に持つということが判りました。
屋外のベンチで作業をした時の使いやすさなど、試してみたいことがまだありますので、ひきつづき PC を携行した外出を続けて、気がついたことがあれば本ブログで紹介していきたいと思います。
Visual Studio Code (VS Code) は、オープンソースのソースコードエディタです。マイクロソフトにより開発され、Windows, Linux, OS X 上で動作します。下記の記事には Microsoft が昨年の Build デベロッパー・カンファレンスで、VS Codeを発表したとありますが、たしかにそのような発表があったことを記事を読んで思い出しました。その VS Code のバージョンが 1.0 になって正式にリリースされました。
偶然 TechCrunch で記事を見つけたので早速ブログに載せようとしたら、すでに同日付の日本語翻訳記事も存在していることに気づき [1]、大変驚いたのですが、なんのことはなくて、Microsoft から日本語でも同じタイミングで発表されたようです [3]。Microsoft って、Google のようにブログでそういうことを発表してしまう会社だったんですね、そういうイメージを持っていませんでした。
仕事で使うアプリケーション・スイーツに Office という名前を付け、ワープロソフトにも Word という固有名詞を付けるなんて、なんて不遜な会社なんだと憤慨したのは遠い昔、今ではほとんど抵抗がなくなってしましました。人間は慣れることができるのです。
すると、信じたくはありませんが、Visual Studio Code もそのうち単に Code と抵抗なく呼ぶ日が来るかもしれません。しかも、今度はマルチプラットフォーム対応です。Satya Nadella 氏が率いる Microsoft は、確かに変わろうとしているのかもしれません。
早速、VS Code の Linux 版 (vscode-x86_64.rpm) をダウンロードしました [4]。
以下のようにインストールしました。なお、使用している Linux は Fedora 23 (x86_64) でデスクトップ環境は GNOME 3.18 です。
$ su パスワード: # dnf install vscode-x86_64.rpm Last metadata expiration check: 0:14:53 ago on Fri Apr 15 19:54:17 2016. 依存性が解決されました。 ================================================================================ Package アーキテクチャ バージョン リポジトリ 容量 ================================================================================ インストール: code x86_64 1.0.0-1460557031 @commandline 40 M トランザクションの要約 ================================================================================ インストール 1 パッケージ 合計容量: 40 M インストール済み容量: 116 M これでいいですか? [y/N]: y パッケージをダウンロードしています: トランザクションの確認を実行中... トランザクションの確認に成功しました。 トランザクションのテストを実行中... トランザクションのテストに成功しました。 トランザクションを実行中... インストール : code-1.0.0-1460557031.x86_64 1/1 検証中 : code-1.0.0-1460557031.x86_64 1/1 インストール: code.x86_64 1.0.0-1460557031 完了しました! #
アクティビティ画面にして、左のアイコンから「アプリケーションを表示する」アイコンをクリックすると、以下のように(V で始まるため、下の方に) Visual Studio Code のアイコンが表示されていますので、クリックして起動します。
するとすぐに VS Code が起動しました。
試しに Java のソースを読み込んでみました。配色は好みの問題ですが、私は黒地より白地を好みます。メニューの「ファイル」→「基本設定」→「配色テーマ」で、Light+ (default light) を選びました。それ以外、特に設定をしていませんが、デフォルトのフォントでなかなか見やすいです。
Microsoft ブランドのソフトウェアがそのまま Linux にインストールできて利用できてしまう、なんだか変な気分です。時代が変わったのでしょう、きっと。しばらく使ってみて、具合が良ければ、あらためて機能紹介したいと思います。
JavaFX の TreeView にポップアップ・メニュー (ContextMenu) を表示するサンプルを以前紹介しましたが [1]、さらにチェックボックスをつける用途が出てきたので、まずは前述のサンプルをベースにテストをしました。まだ無駄が残っていますが、当初予定していた機能を実装できましたので紹介します。更に検討を加えた結果、補足・修正を加えるかもしれませんが、あらかじめご了承ください。
今回のサンプルは少々ソースが長くなるため、最初に実行例を示します。
にんじんのチェックボックスが 'false' から 'true' に変更されました。 なすのチェックボックスが 'false' から 'true' に変更されました。 とまとのチェックボックスが 'false' から 'true' に変更されました。 「とまと」が選択されました。
動作環境は次の通りです。
package sample_treeview3; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import javafx.beans.value.ObservableValue; import javafx.scene.control.CheckBoxTreeItem; import javafx.scene.control.cell.CheckBoxTreeCell; import static javafx.application.Application.launch; public class Sample_TreeView3 extends Application { Image CAROT = new Image(getClass().getResource("carot.png").toString()); Image EGGPLANT = new Image(getClass().getResource("eggplant.png").toString()); Image TOMATO = new Image(getClass().getResource("tomato.png").toString()); Image APPLE = new Image(getClass().getResource("apple.png").toString()); Image GRAPE = new Image(getClass().getResource("grape.png").toString()); Image BANANA = new Image(getClass().getResource("banana.png").toString()); TreeView<String> tree; @Override public void start(Stage primaryStage) { TreeItem<String> top = new TreeItem<>("root"); TreeItem<String> nodeItemA = new TreeItem<>("野菜"); addNode(top, nodeItemA); nodeItemA.setExpanded(true); TreeItem<String> nodeItemB = new TreeItem<>("果物"); addNode(top, nodeItemB); nodeItemB.setExpanded(true); TreeLeaf<String> nodeItemA1 = new TreeLeaf<>("にんじん", new ImageView(CAROT)); TreeLeafListener(nodeItemA1); addNode(nodeItemA, nodeItemA1); TreeLeaf<String> nodeItemA2 = new TreeLeaf<>("なす", new ImageView(EGGPLANT)); TreeLeafListener(nodeItemA2); addNode(nodeItemA, nodeItemA2); TreeLeaf<String> nodeItemA3 = new TreeLeaf<>("とまと", new ImageView(TOMATO)); TreeLeafListener(nodeItemA3); addNode(nodeItemA, nodeItemA3); TreeLeaf<String> nodeItemB1 = new TreeLeaf<>("りんご", new ImageView(APPLE)); TreeLeafListener(nodeItemB1); addNode(nodeItemB, nodeItemB1); TreeLeaf<String> nodeItemB2 = new TreeLeaf<>("ぶどう", new ImageView(GRAPE)); TreeLeafListener(nodeItemB2); addNode(nodeItemB, nodeItemB2); TreeLeaf<String> nodeItemB3 = new TreeLeaf<>("ばなな", new ImageView(BANANA)); TreeLeafListener(nodeItemB3); addNode(nodeItemB, nodeItemB3); tree = new TreeView<>(top); tree.setShowRoot(false); tree.setCellFactory((TreeView<String> p) -> new TreeCellImpl()); StackPane root = new StackPane(); root.getChildren().add(tree); Scene scene = new Scene(root, 200, 300); primaryStage.setTitle(getClass().getSimpleName()); primaryStage.setScene(scene); primaryStage.show(); } void TreeLeafListener(TreeLeaf<String> item) { item.selectedProperty().addListener((ObservableValue<? extends Boolean> obs, Boolean oldVal, Boolean newVal) -> { System.out.println(item.getValue() + "のチェックボックスが '" + oldVal + "' から '" + newVal + "' に変更されました。"); }); } void addNode(TreeItem<String> parent, TreeItem<String> child) { parent.getChildren().add(child); } class TreeLeaf<T> extends CheckBoxTreeItem<T> { public TreeLeaf(final T value) { super(value); } public TreeLeaf(final T value, final Node graphic) { super(value, graphic); } public ContextMenu getMenu() { ContextMenu popup = new ContextMenu(); MenuItem menuItem = new MenuItem("処理"); menuItem.setOnAction((ActionEvent event) -> { TreeItem selItem = tree.getSelectionModel().getSelectedItem(); System.out.println("「" + selItem.getValue() + "」が選択されました。"); }); popup.getItems().add(menuItem); return popup; } } public final class TreeCellImpl extends CheckBoxTreeCell<String> { @Override public void updateItem(String item, boolean empty) { super.updateItem(item, empty); if (empty) { setText(null); setGraphic(null); } else if (getTreeItem().getClass().toString().endsWith("TreeLeaf")) { setContextMenu(((TreeLeaf) getTreeItem()).getMenu()); } else { setText(getItem() == null ? "" : getItem()); setGraphic(getTreeItem().getGraphic()); } } } public static void main(String[] args) { launch(args); } }
Chromium(クロミウム)はオープンソースのウェブブラウザのプロジェクト名で、Google Chrome はこのソースコードを引き抜いて開発されたものです [1]。
以前の記事で紹介したように [2]、JavaScript を補完してウェブを高速化する WebAssembly が、開発者向けブラウザ Google Chrome Canary のバージョン 51.0.2677.0 以降で試験的に実装されることになりました。しかし、Google Chrome Canary では Linux 用のパッケージが公開されておらず、早期の開発バージョンを試すことが出来ません。もしかすると、Chromium なら、Google Chrome の安定バージョンよりは開発バージョンに近いものを試せる可能性があるかもしれないと考えました。仮にそうでなくとも、Chromium のビルドの方法を知っておいた方が、なにかと都合が良いとも考えました。
まず Red Hat 系 Linux で Chromium を扱うことについて触れているサイトを探したところ、[3] のサイトで RPM が公開されているサイトが紹介されていましたので、参考にさせて頂きました。
残念ながら現在使っている Google Chrome より新しいビルド番号ではありませんでしたので、それでは Chromium を自分でリビルドしてみようと Fedora 23 用の SRPM をダウンロードしました [4]。
rpm-build および Chromium をビルドするのに必要な依存ライブラリをインストールしてから下記のようにリビルドしました。
[bitwalk@notepc SRPMS]$ rpmbuild --rebuild chromium-49.0.2623.112-1.fc23.src.rpm
...
...
...
パッケージに含まれないファイルの検査中: /usr/lib/rpm/check-files /home/bitwalk/rpmbuild/BUILDROOT/chromium-49.0.2623.112-1.fc23.x86_64
書き込み完了: /home/bitwalk/rpmbuild/RPMS/x86_64/chromium-49.0.2623.112-1.fc23.x86_64.rpm
書き込み完了: /home/bitwalk/rpmbuild/RPMS/x86_64/chromium-debuginfo-49.0.2623.112-1.fc23.x86_64.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.1N4V28
+ umask 022
+ cd /home/bitwalk/rpmbuild/BUILD
+ cd chromium-49.0.2623.112
+ rm -rf /home/bitwalk/rpmbuild/BUILDROOT/chromium-49.0.2623.112-1.fc23.x86_64
+ exit 0
実行中(--clean): /bin/sh -e /var/tmp/rpm-tmp.wmXehB
+ umask 022
+ cd /home/bitwalk/rpmbuild/BUILD
+ rm -rf chromium-49.0.2623.112
+ exit 0
数時間でビルドできるだろうと甘く考えていました。非力な CPU (Celeron® N2830)を積んだ環境だったためか、なんとビルドに 10 時間以上を費やしてしまいました。
とりあえずインストールしてみると、無事インストールが完了しました。
[bitwalk@notepc SRPMS]$ su パスワード: [root@notepc SRPMS]# dnf install /home/bitwalk/rpmbuild/RPMS/x86_64/chromium-49.0.2623.112-1.fc23.x86_64.rpm Last metadata expiration check: 2:27:16 ago on Sun Apr 10 11:54:43 2016. 依存性が解決されました。 ================================================================================ Package アーキテクチャ バージョン リポジトリ 容量 ================================================================================ インストール: chromium x86_64 49.0.2623.112-1.fc23 @commandline 60 M トランザクションの要約 ================================================================================ インストール 1 パッケージ 合計容量: 60 M インストール済み容量: 187 M これでいいですか? [y/N]: y パッケージをダウンロードしています: トランザクションの確認を実行中... トランザクションの確認に成功しました。 トランザクションのテストを実行中... トランザクションのテストに成功しました。 トランザクションを実行中... インストール : chromium-49.0.2623.112-1.fc23.x86_64 1/1 検証中 : chromium-49.0.2623.112-1.fc23.x86_64 1/1 インストール: chromium.x86_64 49.0.2623.112-1.fc23 完了しました! [root@notepc SRPMS]#
通常使っているブラウザである google-chrome-stable は /opt/google/chrome 以下、今回ビルドした Chromium は /opt/chromium 以下にインストールされています。また、実行ファイルはそれぞれ /usr/bin/google-chrome、/usr/bin/chromium-browser と名前が違いますので、同時にインストールしても問題はなさそうです。
自分で Chromium をビルドするには、環境が貧弱でコンパイルに時間がかかりすぎるのが玉にキズですが、参考資料 [5] をよく読んで、時間を見つけて最新のソースをビルドできるかトライしてみたいと思います。Fedora で WebAssembly を試すまでの道程は遠いです。
JavaFX のラインチャートをズームするサンプルを以前紹介しましたが、ズームの具合がよくありませんでした。確かにズームはできますが、マウスで指定した矩形の領域が正確に拡大されていません。どうやら座標計算が正確では無いようです。手軽にチャートのズームができる方法で気に入っていたので、じっくり調べて修正しました。いや、どうしてもズーム機能を使う目的があったため、なんとか実用に耐えうるレベルまで修正する必要があった、というのが現実です。
動作環境は次の通りです。
まず最初に実行例を示します。
ソースは、もともと参考にした GitHub Gist のサイト [1] を fork して、修正を加えましたので、それを埋め込みました [2]。最初の LineChartZoomable.java が、LineChart クラスを継承して、ズーム機能を加えたクラス、その下の LineChartZoomableTest.java は、LineChartZoomable クラスを利用したサンプルです。なお、このクラスは、StackPane で最初の配置を行う必要があります。
Red Hat 社が支援するコミュニティー Fedora Project によって開発されている Fedora は、最新の技術を積極的に取り込むディストリビューションで、半年のサイクルで新しいリリースを重ねてききました。ただし Fedora 20 と 21 の間だけ一年の期間が空いています。次のリリースは 24 になります。半年ごとのリリースですから 24 ということは、最初の Fedora Core 1 から数えて 12 年(と半年)が過ぎたことになります。12 という数は、東洋では、十二支に代表されるように 10 と並んで一区切りになる数です。Fedora Project の人たちは意識していないでしょうが、区切りを象徴するような大きな変化があるかもしれないと、つい勝手に期待してしまいます。
Fedora 24 は、現在のところ 2016-06-07 にリリースされる予定ですが [1]、すでにアルファ版がリリースされています。現在予定されている変更を以下にまとめました [2]。個人的に興味がある変更項目は下地の色を変えてあります。日本語訳を、とも考えましたが、どうせ全ての単語に正しい訳語を持ってくることができずに中途半端になってしまうと思ったので、原文のママにしました。
Fedora 24 Accepted System Wide Changes Proposals | |
---|---|
LiveUSBCreator as Primary Downloadable | The new Fedora Live USB Creator that is being finished has an overhauled, more user friendly interface. Because USB sticks are the most common way to install Fedora, it should be the primary download option. It cover the whole installation media creation, it lets the user pick the right flavor of Fedora, downloads its image, and copies it to a USB drive. |
The GNU C Library version 2.23 | Switch glibc in Fedora 24 to glibc version 2.23. |
Removal of librtkaio from glibc | Remove librtkaio support from glibc in Fedora 24. |
GNOME 3.20 | Update GNOME to the latest upstream release, 3.20 |
Langpacks Installation With RPM Weak Dependencies | Langpacks installations is re-designed using language metapackages langpacks-<langcode> and RPM weak dependencies (Supplements tag). |
Mono 4.2 | Update the Mono stack in Fedora to 4.2 aca Cyle 6 |
Suds Jurko Fork | Change the python-suds package to use the fork maintained by Jurko Gospodnetić. |
Golang 1.6 | Rebase of Golang package to upcoming version 1.6 in Fedora 24, including rebuild of all dependent packages. |
GCC6 | Switch GCC in Fedora 24 to 6.x.y, rebuild all packages with it, or optionally rebuild just some packages with it and rebuild all packages only in Fedora 25. |
Glibc locale subpackaging | This change should make it possible to install or uninstall locales individually. |
Layered Docker Image Build Service | Fedora currently ships a Docker base image, but Docker supports a layering concept. There are some applications like Cockpit which we would like to ship as layered applications. |
Pungi Refactor | Changing how pungi works to make composes more distributed and transparent. |
Ruby 2.3 | Ruby 2.3 is the latest stable version of Ruby. Many new features and improvements are included for the increasingly diverse and expanding demands for Ruby. With this major update from Ruby 2.2 in Fedora 22 to Ruby 2.3 in Fedora 24, alongside JRuby, Fedora becomes the superior Ruby development platform. |
Node.js 4.2 | Fedora 24 will be updated to Node.js 4.2, the latest LTS release of the platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. |
Python 3.5 | Update the Python 3 stack in Fedora from Python 3.4 to Python 3.5. |
TeXLive 2015 | Update Fedora TeXLive packaging to 2015. |
NetworkManager 1.2 | Update to NetworkManager to version 1.2. |
Fedora 24 Boost 1.60 uplift | This change brings Boost 1.60.0 to Fedora 24. This will mean F24 ships with the latest upstream Boost release. |
Livemedia Creator | livemedia-creator is a tool that is part of lorax, it has the ability to make livecd's, raw disk images, and to do pxe2live. We plan to use it to make pxe2live for Atomic, the LiveCD's and ARM disk images in fedora. |
Systemd file triggers | systemd daemon-reload is invoked once or twice per rpm transaction. |
Systemd package split | Two new subpackages will be split out from the main systemd package. systemd-container will contain stuff for launching and managing VMs and containers. system-udev will contain udevd and other hardware-related bits. |
Fedora 24 Accepted Self Contained Changes Proposals | |
System Python | Separate several subpackages form the python3 packages - a system-python(-libs) that can be required by various tools that consider themselves "system tools". |
Drop php-pear dependency for pecl modules | All PECL packaged modules (php-pecl-*) have a unneeded runtime dependency on php-pear, for module registration in package scriptlets. |
Atomic Developer Mode | Add a "Developer Mode" boot menu entry in the Atomic image to allow users to boot without setting up cloud-init. |
Graphical System Upgrades | Add support for performing system upgrades to a newer Fedora release through GNOME Software. |
Shenandoah 1.0 | This change aims at adding a very low pause time Garbage Collection(GC) algorithm named Shenandoah to OpenJDK. |
Atomic Storage Clients | Kubernetes provides a mechanism for providing storage to Pods via volumes. Volumes support several underlying storage protocols, but clients are needed to support each type. Native GlusterFS and Ceph clients will be added to the Atomic host base to support these Volume types. |
Erlang 18 | Update Erlang/OTP to version 18.2.x, and improve Erlang support in Fedora. |
Ping IPv6 | ping should be able to work with IPv6 and IPv4 addresses, eliminating the need for multiple tools. |
QGnomePlatform | QGnomePlatform is a Qt Platform Theme aimed to accomodate as much of GNOME settings as possible and utilize them in Qt applications without modifying them - making them fit into the environment as well as possible. |
QtWebEngine | QtWebEngine will be packaged for Fedora, initially at version 5.6. In addition, the QupZilla browser will be upgraded to the QtWebEngine-based QupZilla 2. |
ibus-fbterm enhancement for ibus 1.5 | Update of ibus-fbterm to work with IBus 1.5. ibus-fbterm enables major features of ibus 1.5 |
Astronomy Spin | A Fedora Spin providing a complete toolchain for both amateur and professional astronomers. |
Cloud MOTD | After logging in the running Cloud instance, the user should get the pending updates (including security) details as MOTD (message of the day). |
Micro Bit | Enable the use of BBC Micro Bit on Fedora systems. Users will be able develop, and put in new code to their micro:bit devices using Fedora. |
Sugar 0.108 | Update Sugar to the new upstream 0.108 stable feature release. |
Crypto policy support for Kerberos | Fedora supports a system wide crypto policy and Kerberos (libkrb5) should respect that policy and adjust its crypto-related configuration based on it. |
Darktable 2.0 | Update Darktable to new 2.0 major release |
Deprecation of ipcalculator | Fedora provides two tools for IP address calculations. That is the ipcalculator and ipcalc. Ipcalculator was geared towards being used by administrators and ipcalc for use with scripts. This changed with Fedora 23 which provided an updated ipcalc tool which can be used both interactively and from scripts. That, and the fact that ipcalculator is not IPv6-ready suggests we should deprecate ipcalculator and keep a single tool for the job, ipcalc. |
OpenShift Origin | OpenShift Origin is an Open Source Platform as a Service Cloud offering from Red Hat. The goal of this Change is to bring OpenShift Origin Architecture v3 into the Fedora proper to allow users to easily deploy OpenShift on Fedora. |
sen: terminal user interface for docker engine | sen enables you to manage your containers and images interactively directly from command line. Interface is similar to htop, alot or tig. |
Koji Generates Repositories of Signed RPMs | Extend Koji with a new feature that allows users to generate yum repositories of signed RPMs. |
Anaconda Using LVM DBus API | A new DBus API for LVM is being created so let's make the installation process use it for setting up LVM storage. |
Product Definition Center | The Product Definition Center (PDC) is a webapp and API designed for storing and querying product metadata. We want to stand up an instance in Fedora Infrastructure and automatically populate it with data from our existing releng tools/processes. It will enable us to develop more sane tooling down the road for future releases. |
3 万円を切る格安ノート PC、HP Stream 11-r016TU に Fedora 23 をインストール[1]、さらに Fedora 24(アルファ版)へアップグレード[2]して数日が経ちました。特別な設定をしていませんが、今のところ、これといった不具合は見つかっていません。今までで確認できた機能をまとめておきます。
Bluetooth 4.0 が利用できるということで、安い Bluetooth ワイヤレスマウスを買ってつなげてみました。PC を起動後、ログイン前にはマウスは接続されておらず、ログインしてからも自動接続されたりされなかったりで、USB のワイヤレスマウスの使い心地に較べると、やや不便さを感じます。
内蔵スピーカーおよびヘッドフォン出力/マイク入力コンボポートにヘッドフォンを繋いで確認しましたが、オーディオ出力は問題なさそうです。内蔵マイクは使っていませんが、入力レベルを見る限り、普通に反応しているようなので使用可能でしょう。
ネットワーク・プリンタは、ドライバファイルをインストールして接続できました。
無線のネットワークは、部屋の中の無線ルータと Y!mobile の Pocket WiFi (305ZT) どちらも問題なく接続できました。
Google ドライブを含めたネットワークドライブにも接続できています。
約 92 万画素と言えど、チャットなどで使うには十分な解像度でしょう。Cheese で使えることを確認しました。
充電が 100% の状態で、いつも、残りの予想使用可能時間が 9 時間台に留まっているのが気になりますが、当然、使い方によってバッテリーの消費が変わります。バッテリーのスタミナに満足できるかどうかは、もう少し使い込んで判断することにします。