リラックス! Linux! (3) UnixBench

UnixBenchを走らせてみる

とにかく、ベンチマークを走らせるのが好き!という方に。
UnixBenchは、80年代に作られたUNIXベンチマークテストツールです。

複数のテストが実行され、ベースラインシステムのスコアと比較され、計測値が記録されます。また、全テストの実行結果を踏まえた総合的な計測も行います。
現在のPCはマルチCPUシステムが普及していますが、デフォルトではベンチマークテストを1CPUでの計測とマルチCPUでの計測の合計2回実行されます。またグラフィックスのテストも含まれています。

UnixBenchの取得と実行方法

Ubuntu20.04での実行方法です。

sudo apt-get install build-essential
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/byte-unixbench/UnixBench5.1.3.tgz
tar xf UnixBench5.1.3.tgz
cd UnixBench/
./Run

リラックス! Linux! (2) いや〜なテトリス

このテトリスはむつかしい!
bastetというテトリスのクローンを紹介します。
bastetとは、”Bastard Tetris”の略だそうで、「いや~なテトリス」という意味です。このテトリスはブロックをランダムに落とすのではなく、状況に応じて最悪のブロックを選んで落としてきます。ちょっとイラっとするテトリスです。

Ubuntuにインストールする

sudo apt install bastet

CentOSにインストールする

sudo yum install epel-release
sudo yum install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install bastet

MacOSにインストールする

brew install bastet

Windowsにインストールする

すなおに、WSLのLinuxから実行すればよいでしょう。

リラックス! Linux (1) 本物のUnix使い

本物のUnix使いはIDEを使わない

エディタは当然、viを使う。IDEは子供のおもちゃと笑い飛ばして本気で使わない。GUIを使わないでCUIですべての仕事を成し遂げる。たとえGUI画面であっても、マウスを使わず、キーボードのみでショートカットを駆使して、ものすごいスピードでキーボードを叩いているのはUnix使いの可能性が高い。

本物のUnix使いは基本、小文字だけを使う。会話にも小文字だけを使うのはUnix使いだ。Unix使いの日常会話には頻繁に、「grepする」「diffをとる」という言葉が使用される。
道に迷ったとき、「ここはどこ?」と言わずに、小さい声で「pwd」とささやくのはUnix使いだ。
本物のUnix使いは、お酒を飲みすぎて気持ちが悪くなっている人を見て「core dumped」とつぶやく。
本物のUnix使いは、気になる女性の手に触れようとして睨まれたら、おもわず「Permission denied」と言ってしまう。
Unixに夢中になってしまい、人が話しかけても何も聞かないで、”/dev/null”にリダイレクトしているのは末期的なUnix使いだ。

本物のUnix使いは、100万ライン規模の巨大プロジェクトを、小さなツールを組み合わせて実現しようとする。ふつうプログラマは一つの関数で一つのことをやらせるが、Unix使いは一つのコマンドで一つのことをやらせようとする。

ドキュメントを書く前に、プログラムを書いて、散々プログラムを改良した後に覚書として申し訳程度のドキュメントを書くのがUnix使いだ。プログラムの仕様をユーザに承認を得るのは、ドキュメントで承認を得るのではなく、動くプログラムで承認を得る。最初にユーザが動くプログラムを見るのはたいてい、要件定義の途中のころで、すでにプログラムの骨格は出来上がっていることが多い。

Unix使いはたいてい、WindowsやLinux上で、無償でMacOS Ⅹを走らせる方法を何通りか知っている。なのに、MacBook Proを使っている。

本物のUnix使いは密かに、bashで書いたOSを走らせたいと思っている。

Flask+SQLite3でWeb-DBアプリ開発!をちょっとだけ試してみる

日経ソフトウェア誌2019年3月号に掲載された、清水美樹氏による記事、『Python向けフレームワーク Flask+SQLite3でWeb-DBアプリ開発! ~「蔵書管理データベース」で基本をマスターしよう~』は良い記事でした。本稿では、さわりの部分を紹介します。詳しい説明と最後までやってみたい方は、雑誌を入手してみてください。

開発環境の準備

Flask(フラスク)は、プログラミング言語Python用の、軽量なウェブアプリケーションフレームワークです。Anacondaに同梱されています。
まず、Anacondaのサイトからインストーラをダウンロードします。サイトの上部左の”Products”から”Individual Edition”をクリック、「Download」ボタンをクリックして下にスクロール、Windows、MacOS、Linuxから選択します。Python3.X系を選択して下さい。

Linuxの場合

ダウンロードしたシェルを実行します。

$ ls
Anaconda3-2020.02-Linux-x86_64.sh
$ bash ./Anaconda3-2020.02-Linux-x86_64.sh

途中、インストーラが確認してくるので、yes/no/Enterなどを押して対話的にインストールを進めます。途中で以下のように初期化するかを聞いてくる箇所があり、筆者は”yes”を選択しました。

Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>> yes

インストールが完了したら、動作確認をします。なお、上記初期化の選択で”no”を選択した場合は、別途パスを通す必要があります。

$ source ~/.bashrc
$ conda -V
conda 4.8.2

Jupyter notebookを起動してみます。

$ jupyter notebook

MacOS、Windowsの場合

GUIベースでインストールできます。

Flaskで初めてのWebアプリ開発

適当な場所に作業フォルダを作成します。

mkdir flask-test

エディタを起動し、上記のフォルダに移動して、”hello.py”ファイルを作成、以下のコードを入力します。

from flask import Flask
myapp = Flask(__name__)

@myapp.route('/')
def index():
    return 'こんにちは'

Webサーバを起動してコードを実行

ターミナルから次の環境変数を設定します。

MacOS,Linux

export FLASK_APP="hello.py"
export FLASK_ENV="development"

Windows(PowerShell)

$env:FLASK_APP="hello.py"
$env:FLASK_ENV="development"

Webサーバを立ち上げます。

flask run

ブラウザからWebサーバにアクセスします。

http://localhost:5000/

ブラウザに「こんにちは」と表示されます。

PythonでSQLite3を操作してみる

エディタで”sqltest.py”を作成。以下のコードを入力。これは、SQLite3によってDBの作成、レコードの追加、レコードの選択を実施するコードです。

import sqlite3

CREATE_TABLE = '''create table books
(id integer primary key autoincrement,
author text,
title text)'''

TEST_INSERT = '''insert into books (title, author)
VALUES ('プリンキピア','ニュートン')
'''
TEST_SELECT = "select * from books"

conn = sqlite3.connect('testdb.sqlite3')
c = conn.cursor()
c.execute(CREATE_TABLE)
c.execute(TEST_INSERT)
conn.commit()
c.execute(TEST_SELECT)
result = c.fetchone()
print(result)
conn.close()

次のコマンドを実行します。

python sqltest.py

次のように表示されます。

(1, 'ニュートン', 'プリンキピア')

データベースのファイル(testdb.sqlite3)が作成されていることを確認します。

MacOS,Linux

$ ls -l
total 32
-rw-r--r-- 1 apple staff 453 5 22 16:48 sqltest.py
-rw-r--r-- 1 apple staff 12288 5 22 16:48 testdb.sqlite3

Windows(PowerShell)

> ls


    ディレクトリ: C:\works\flask\flask-test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2020/05/21     18:08            472 sqltest.py
-a----       2020/05/21     18:08          12288 testdb.sqlite3

WSL2はどれくらい高速になったか?

ベンチマーク測定ツール UnixBenchでWSL1とWSL2を比較測定する

Windows Subsystem for Linux (WSL) とは、Linuxのバイナリ実行ファイルをWindows 10およびWindows Server上で実行できるようにしたものです。
従来のWSL1との違いは、本物のLinuxカーネルを使用し、Linuxカーネルを仮想マシン上で動作させていることとされています。メリットとしては、本物のLinuxカーネルを使用することで互換性が向上し、仮想マシンを使用することでディスクI/O性能が向上したとのことです。
本当でしょうか?
そこで、本稿ではUbuntu20.04上で、UnixBenchを測定してみました。

UnixBenchのインストールと走らせ方はこちらを参照ください。
UnixBenchは、80年代に作られたUNIXベンチマークテストツールです。

複数のテストが実行され、ベースラインシステムのスコアと比較され、計測値が記録されます。また、全テストの実行結果を踏まえた総合的な計測も行います。
現在のPCはマルチCPUシステムが普及していますが、デフォルトではベンチマークテストを1CPUでの計測とマルチCPUでの計測の合計2回実行されます。またグラフィックスのテストも含まれています。

測定環境

H/W:VAIO VPCCB39FJ
CPU:インテル Core i5-2430M プロセッサー
メモリ:PC3-10600 8GB(4GB ×2)
OS:Ubuntu18.04 ストレート(外付けHDDからブート)
  WSL2(Windows10上にUbuntu18.04をインストール)
  WSL1(Windows10上にUbuntu18.04をインストール)
  WSL2は、Windows 10 Insider Previewで実施。正式リリース版では計測値が変動する可能性がある。あくまでも参考値とされたい。
計測日:2020年5月14日

計測結果

single CPU

※ スコアが大きいほど早い。

TestストレートWSL2WSL1
Dhrystone 2 using register variables2804.92721.52810.8
Double-Precision Whetstone887.6868.4898.6
Execl Throughput826.9576.219.8
File Copy 1024 bufsize 2000 maxblocks1226.51055.4170
File Copy 256 bufsize 500 maxblocks821.2688.7109.7
File Copy 4096 bufsize 8000 maxblocks2601.72320.3354.9
Pipe Throughput568.3553.9179
Pipe-based Context Switching353.336.2105.7
Process Creation285.62498.5
Shell Scripts (1 concurrent)1189.41482.956.8
Shell Scripts (8 concurrent)3182.62333.984.8
System Call Overhead301.7271.1173.2
System Benchmarks Index Score:916.9685.4137.1

multi CPU

TestストレートWSL2WSL1
Dhrystone 2 using register variables6320.16039.35526
Double-Precision Whetstone2889.727662655.3
Execl Throughput2004.11204.441.2
File Copy 1024 bufsize 2000 maxblocks1968.61443.4296.3
File Copy 256 bufsize 500 maxblocks1268.2919.8177.9
File Copy 4096 bufsize 8000 maxblocks4136.33071.3416.8
Pipe Throughput1426.21317.1396.6
Pipe-based Context Switching777.6751.4406.8
Process Creation1671.5883.516.3
Shell Scripts (1 concurrent)3653.12618.596.4
Shell Scripts (8 concurrent)3587.12966.195.6
System Call Overhead748.8639.8340.4
System Benchmarks Index Score:2088.21631.8263

ミニ考察

ストレートUbuntu、WSL2、WSL1の順で早い。
index score(各測定値の平均値)がWSL2でストレートの78%、WSL1で13%程度の性能(マルチCPU)。
DhrystoneとWhetstoneではWSL2、WSL1共に健闘しており、ストレートと遜色ない性能。これはMicrosoftのチューニングアップの成果なのか、差の出にくいテスト特性なのかは不明。
DhrystoneとWhetstone以外では、WSL1を大きく引き離して6倍以上、WSL2が早くなっている。
今後、積極的にWSL1を使用するメリットはあまり感じられない。
Hyper-V上にインストールされたUbuntuとWSL2の比較によって、どの程度WSL2が最適化されているかがわかると思われる。興味があるが、本稿では環境が用意できなかった。

LinuxとWindowsの欲張りな環境を手にする

WSL2とWSL1をインストールする方法

Windows Subsystem for Linux (WSL) とは、Linuxのバイナリ実行ファイルをWindows 10およびWindows Server上で実行できるようにしたものです。
WSL2はWSLの進化系です。従来のWSL1との違いは、本物のLinuxカーネルを使用し、Linuxカーネルを仮想マシン上で動作させていることとされています。メリットとしては、本物のLinuxカーネルを使用することで互換性が向上し、仮想マシンを使用することでディスクI/O性能が向上したとのことです。

WSLに必要な要件

WSL 1とWSL 2は、Windows 10 64ビット版とWindows Server 2019の両方でのみサポートされています。
WSL 1をインストールするには、Windowsビルド16215以降である必要があります。
WSL 2は、Winodows 10の大型アップデート「May 2020 Update」から利用できます。こちらからアップデートできます。
ちなみに、Windowsビルド18917以降でのみ使用可能です。systeminfoコマンドなどでOSやビルド番号を確認できます。

WSL1を有効化する方法

管理者としてPowerShellを開き、次のように入力します。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

次に、コンピューターを再起動する必要があります。
なお、WSL1のみを有効化する方法として、本方法を記載していますが、次に述べる「WSL2を有効化する方法」から実施すれば、(上記のコマンドを実行することなく)WSL1は有効化されるようです。

WSL2を有効化する方法

まず、UEFI/BIOSセットアップ画面で「仮想化支援機能」が有効になっていることを確かめます。
次に、Windowsが提供する仮想マシンプラットフォームのオプションコンポーネントを有効化します。管理者としてPowerShellコンソールを開き、次のように入力します。

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

次はその実行例です。

PS> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1

イメージのバージョン: 10.0.19041.208

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。

次に、以下のコマンドでWSLを有効化します。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

その実行例です。

PS> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1

イメージのバージョン: 10.0.19041.208

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。

ここでPCを再起動します。
再起動後、このリンクから入手できるWSL 2 Linuxカーネル更新パッケージをダウンロードしてインストールする必要があります(2020年5月10日時点)。

以下は、WSL 2 Linuxカーネル更新パッケージをダウンロードして起動した画面です。

WSLへのLinux(Ubuntu 20.04)のインストール

ここまでで、WSLに好きなLinuxディストリビューションをインストールする準備が整いました。
Microsoft Storeを開き、お気に入りのLinuxディストリビューションを選択します。ここではUbuntu20.04LTSを選択して、インストーラーを起動します。

完了したら、[起動]ボタンをクリックし、セットアップを開始します。
数分後、ユーザー名とパスワードの入力が促されます。入力後にセットアップが完了します。

ここで、UbuntuをインストールしたWSLのバージョンを確認してみます。管理者としてPowerShellコンソールを開き、次のように入力します。

wsl -l -v

次は実行例です。なんと、バージョン1なのです。

PS> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         1

というわけで、バージョン2のWSLを利用するためには、次のコマンドでUbuntuのWSL環境を、バージョン2にアップグレードする必要があります。

wsl --set-version Ubuntu-20.04 2

実行例です。

PS> wsl --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。

ここで再度、WSLのバージョンを確認してみます。

wsl -l -v

実行例を示します。

PS> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2

これでめでたく、WSL2になりました。
WSL起動時のデフォルトのディストリビューションをUbuntu20.04にするには、以下のコマンドを実行します。

wsl -s Ubuntu-20.04

これで、”wsl”と実行するだけで、Ubuntu20.04のシェルが立ち上がります。

WSLインストールバージョンのデフォルト変更

次のようにWSLのインストールバージョンを”2″と指定することにより、それ以降のWSLのインストールでは、デフォルトでWSL2がインストールされるようになります。

wsl --set-default-version 2

プロジェクトマネージャ 2019年春季 午後Ⅰ

次世代型コンタクトセンタサービスへの移行プロジェクトを題材に、移行計画の立案、新機能導入時のリスクへの対応について答える問題。

IPAの平成31年度 春季試験 午後Ⅰ問題リンク

残念な私の解答

設問解答
設問1時間を要する作業であり、経営層の意向を確認するため
設問2(1)検証すること移行の作業手順と移行時間の見積もりの元となるデータ取得のため
設定した目的1回目の移行リハーサルで取得jした見積もりデータの確からしさを検証するため
(2)現在提供している応対のサービスレベルを維持できること
設問3(1)自動対応機能の不具合の影響が標準サービスの訓練環境に及ばないようにするため
(2)スケジュールに関する対応策準備作業の進捗状況を踏まえて導入時期を遅らせること
品質に関する対応策自動回答率の計測結果により目標値を見直すこと

IPAの解答例

設問解答
設問1リスクを特定し、今後の対応を計画するため
設問2(1)検証すること作業手順及び移行時間の見積りが適切であること
設定した目的 1 回目の移行リハーサルで検出された不備の修正結果を確認するため
(2) 全てのオペレータが担当業務の全てについて操作できること
設問3(1)検証作業が,オペレータの標準サービスの訓練に影響を与えないようにするため
(2)スケジュールに関する対応策自動対応機能の導入時期を遅らせる。
品質に関する対応策サービス開始時の自動回答率の目標値を見直す。

解答の検討

設問1

F課長は、M社プロジェクトの移行計画の作成に当たり、N氏にヒアリングした。「特に、自動対応機能のサービス開始時期を設定した背景やサービス開始時の自動回答率の目標値の決め方について詳しく確認」した。それはなぜか、と問う問題。N氏から得た回答には、経営層からの指示があるので、「経営層の意向を確認」と回答したくなる。しかし、「移行計画の作成に当たり」とあるので、計画に影響する何かを確認したかったのだろう。計画の阻害要因だろうか。すると、IPAの回答の「リスクを特定し,今後の対応を計画するため」が解答になる。出題者の意図がどこにあるのか、迷う問題。

設問2 (1)

「移行リハーサルを2回実施する」に当たって、過去のシステム移行時の状況を踏まえて、1回目の意向リハーサルで検証することを答える問題。[M社のプロジェクトの移行条件]の(1)に、「作業手順移行時間の見積りに不備があった」とある。これらの不備がなく、適切であることを検証しなければならない。「作業手順及び移行時間の見積が適切であること」が正解。
次に、以降リハーサルの2回目を設定した目的を解答する。M社における過去のシステム移行で、以降リハーサルを実施した際、「その後の修正確認と再見積りも不十分で、本番の移行作業が混乱した」と記述されている。そのため、2回目のリハーサルの目的は、1回目のリハーサル後の修正確認と再見積りを確実にすることと考えられる。「1 回目の移行リハーサルで検出された不備の修正結果を確認するため」が正解。

設問2 (2)

[M社のプロジェクトの移行条件への対応]の(2)に「すべてのオペレータの訓練を完了させるため」とある。ここで「M社専用」とか「終日利用可能」といったレベルの要件が回答スペックとして求められているわけではないことに注意したい。[M社のプロジェクトの移行条件]の(2)には、「現在提供している応対のサービスレベルを維持し…」とある。訓練が完了したときに、すべてのオペレータに求められる要件とは、オペレータの担当業務がすべて操作できること、となる。「全てのオペレータが担当業務の全てについて操作できること」が正解。

設問3 (1)

「自動対応機能専用の検証環境を標準サービス用の訓練環境とは別に用意した」狙いとは何か。[M社プロジェクトの移行条件]には、「標準サービスへの移行が最優先であり、これを確実に実施することが前提である。」と記述されている。そして、設問2(2)の通り、「全てのオペレータが担当業務の全てについて操作できること」という要件を達成するためには、外乱によるリスクを排除する必要がある。最初から標準サービス用の訓練環境と自動対応機能の訓練環境を統合してしまうと、自動対応機能の環境の不具合等が標準サービス用の訓練環境に悪影響を及ぼすリスクがある。「検証作業が,オペレータの標準サービスの訓練に影響を与えないようにするため」が正解。

設問3 (2)

[E社サービスとM社の状況]に、「自動回答率の目標値の達成に向けて、登録する問い合わせ解答シナリオや設定するパラメタを変更し、過去の応対データを用いて自動回答率を計測する作業を繰り返すという、実証実験的な進め方になる。」とある。実験的な進め方であるため、作業の進捗状況を踏まえて、自動対応機能の導入時期や自動回答率の目標値を見直す判断が必要になる。したがって、スケジュールに関する対応策は「自動対応機能の導入時期を遅らせる。」が正解。品質に関する対応策は、「サービス開始時の自動回答率の目標値を見直す。」が正解。

プログラマーのためのUbuntu

Ubuntu 20.04LTSをVirtualBox上に構築し、C言語やC#を各種エディタで書いてみる

Linuxは、狭義にはLinuxカーネル、広義にはそれをカーネルとして用いたオペレーティングシステムを指します。LinuxはUnix系オペレーティングシステム (OS) の1つと言えます。
UbuntuはLinuxディストリビューションの1つです。初心者からベテランまで、幅広く利用されています。
Oracle VM VirtualBox は仮想化ソフトウェアです。既存のオペレーティング・システム(ホストOS)上にアプリケーションの一つとしてインストールされ、この中でもう一つのオペレーティング・システム(ゲストOS)を実行することができます。

本稿では、VirtualBox上にUbuntu 20.04をインストールし、C言語やC#のプログラムを各種エディタで作成します。

UbuntuのISOイメージダウンロードとVirtualBoxのインストール

予め、UbuntuのダウンロードサイトからISOイメージをダウンロードしておきます。
次に、VirtualBoxをダウンロードし、インストールします。
ここでは、上記の詳細の手順については説明を省略します。

VirtualBoxの設定

VirtualBoxから新規ボタンをクリックします。

エキスパートモードをクリック。

名前欄に「ubuntu」を含む名称を入力すると、タイプとバージョンが適切に変更されます。
メモリーサイズは2GB以上に設定します。
作成をクリック。

仮想ハードディスクの最大サイズを指定します。20GB以上に設定。
作成をクリック。

予めダウンロードしておいた、UbuntuのISOイメージを指定し、インストールできるようにします。図のように「IDEセカンダリマスター:[光学ドライブ]空」を右クリックし、「ディスクファイルを選択」をクリック。

UbuntuのISOファイルを選択。

Ubuntuのインストール

Ubuntuをインストールする準備が整ったので、インストールを開始します。
VirtualBoxの左ペインで作成した仮想マシン名をクリックした状態で、画面上にある「起動」ボタン(右矢印)をクリック。以下の画面が表示されます。

下の画面が日本語でない場合は、左の「日本語」をクリック。


Ubuntuをインストールをクリック。

Japaneseを指定して「続ける」をクリック。
以降、VirtualBoxの画面から少しボタン等が見切れることがあります。

以下のようにチェックマークをつけて「続ける」をクリック。

「インストール」をクリック。

以下の画面で「続ける」をクリック。

住んでいる場所をクリックして「続ける」をクリック。

あなたの名前、コンピュータ名、ユーザー名、パスワードを入力。「続ける」をクリック。

インストールの完了を待ちます。

インストールが完了したら、再起動します。

次の画面でEnterキーを押します。

ユーザー名をクリックし、設定済みのパスワードを入力します。

以下の通り、ログイン後の画面で任意の設定をしていきます。

こちらの画面が表示されたら、「今すぐインストール」をすることをオススメします。

その際には管理者の認証が求められるので、パスワードを入力します。

ここまでで、Ubuntuのインストールは完了です。

Guest Additions をインストールしよう

このままではVirtualBoxの画面が小さいため、使い勝手がよくありません。そこで、全画面モードで使用できるようにします。
「デバイス」メニューから「Gust Additions CDイメージの挿入」をクリック。

自動起動メニューが表示された場合

次の画面で「実行」をクリック。

次のように端末が表示されるので、Enterキーを押します。

自動起動メニューが表示されない場合

左にCDがマウントされるのでクリックし、CDに「autorun.sh」があることを確認します。

この「autorun.sh」を実行します。autorun.shをダブルクリックしてもエディタが立ち上がってしまうので、「端末」から起動します。画面左上の「アクティビティ」をクリック。表示された入力部分に「ter」と入力してEnterを押します。すると端末が立ち上がるでしょう。

端末に「sudo bash」と入力します。次にファイルマネージャから、autorun.shを端末にドラッグアンドドロップします。

上記の操作により、autorun.shが実行できるようになりました。Enterを入力して、パスワードを入力します。

autorun.shの実行完了後、Ubuntuを再起動します。「表示」メニューの「ゲストOSの画面を自動リサイズ」が選択可能になっていれば成功です。フルスクリーンモードが可能になりました。

gccによるコンパイル環境の構築

端末を起動し、以下を実行します。

sudo apt update
sudo apt install build-essential

geditでC言語を編集してみる

geditはUbuntu標準のエディタで、初心者向けと言えます。ディスクトップ最上段の「アクティビティ」をクリックし、「ged」と入力してgeditを起動します。

まず、geditの下の「なし」をクリックし、メニューから「C」を選択します。そして次のコードを入力します。

#include <stdlib.h>

int main()
{
  system("/bin/cat /etc/lsb-release");
}

すると、エディタ上のコードはシンタックスハイライトされて表示されます。

次に、gedit上部の保存ボタンをクリックし、「sample01.c」として保存します。そして次のコマンドでコンパイルし、実行してみます。

gcc -o sample01 sample01.c
./sample01

下記のように、Ubuntuのバージョン情報が表示されれば成功です。

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION=”Ubuntu 20.04 LTS”

C#の編集と実行に挑戦してみる

まず、C#をインストールします。

sudo apt install mono-devel

今度はnanoというエディタを使ってみます。nanoはGUIを持たない、CUIベースのエディタです。リモートログインして作業するなど、GUIが使用できない環境でも使用できる利点があります。

nano sample02.cs

以下のコードを入力します。

using System;
using System.IO;
using System.Text;

class FileRead1 {
  static void Main() {

    StreamReader sr = new StreamReader(
                            "/etc/lsb-release");
    string text = sr.ReadToEnd();
    sr.Close();

    Console.Write(text);
  }
}

Ctrl+Oで”sample02.cs”という名称でファイルに書き込みます。次にCtrl+Xで終了します。nanoを終了したら、コンパイルします。

mcs sample02.cs

コンパイルが完了すると、”sample02.exe”というファイルが生成されています。”sample02.exe”を実行してみてください。

./sample02.exe

先ほどのC言語のプログラムと同じ、Ubuntuのバージョン情報が出力されます。

Visual Studio Codeのインストール

最後に、人気のVisual Studio Codeのインストール方法を紹介します。Ubuntu20.04ではsnapを用いてインストールできます。

sudo snap install --classic code
code

Windows PC上のVMwareにmacOS 10.15 Catalinaをインストールする方法

最新記事の紹介

MacOS11 Big Surを試してみたい方は、次のリンクを参照ください。より簡単に導入できる方法を紹介しています。よければどうぞ。

Big Surの仮想化については、動画もあります。よければどうぞ。

はじめに

Macを買ってみたいが、その前にMacOSを使ってみたい!と思われる方もいると思います。パフォーマンスはともかくとして、とにかくMacOSを体験してみたいのなら、仮想環境を構築することは一つの選択肢といえます。

大まかに、以下の手順でCatalinaの仮想環境を構築します。
①Sierraをインストールする
②Catalinaにアップデートする
ここでは特にSierraのインストールを中心に、詳しく説明します。

SierraのISOをダウンロードする

こちらからダウンロードしてください。

VMwareをインストールする

VMware(R) Workstation 15 Playerのバージョン15.5をインストールします。ここでは手順を省略します。

パッチツールをインストールする

パッチツールとは、VMware PlayerがMac OSの仮想マシンを実行できるようにするツールです。
ここからダウンロードしてください。
ダウンロードしたファイルを解凍します。解凍されたファイルのうち、「win-install」ファイルと[gettools.exe]ファイルを実行します。 「win-install」 を右クリックして、[管理者として実行]を選択します。同様に、 [gettools.exe] ファイルも [管理者として実行]を選択して実行します。

新しい仮想マシンを構築する

VMware Workstation 15 Playerを起動し、以下の流れを実行します。

ここでUSB2.0を指定しておかないと、キーボードやマウスの入力ができなくなるようでした。

ここで一旦、終了します。まだMacOSを起動しないでください。

VMXファイルを編集する

Documents\Virtual Machines\macOS 10.12に移動し、エディタでmacOS 10.12.vmxを編集します。
以下の行を追加。

smc.version = "0"
keyboard.vusb.enable = "TRUE"
keyboard.vusb.idVendor = "0x0000"
keyboard.vusb.idProduct = "0x0000"

ここで、各行の意味は以下の通りです。

VMwareで実行可能とする。
smc.version = “0”

キーボードの設定を有効化し、JISキーボードを使えるようにする。USキーボードを使用する場合は不要と思われる。
keyboard.vusb.enable = “TRUE”
keyboard.vusb.idVendor = “0x0000”
keyboard.vusb.idProduct = “0x0000”

(その他覚書)

ビデオメモリの容量変更
以下の数値を調整する。
svga.vramSize = 134217728

Raizenで仮想環境を構築する場合のメモ

vmxファイルに以下を追記する。
cpuid.0.eax = “0000:0000:0000:0000:0000:0000:0000:1011”
cpuid.0.ebx = “0111:0101:0110:1110:0110:0101:0100:0111”
cpuid.0.ecx = “0110:1100:0110:0101:0111:0100:0110:1110”
cpuid.0.edx = “0100:1001:0110:0101:0110:1110:0110:1001”
cpuid.1.eax = “0000:0000:0000:0001:0000:0110:0111:0001”
cpuid.1.ebx = “0000:0010:0000:0001:0000:1000:0000:0000”
cpuid.1.ecx = “1000:0010:1001:1000:0010:0010:0000:0011”
cpuid.1.edx = “0000:1111:1010:1011:1111:1011:1111:1111”
featureCompat.enable = “FALSE”

virtualHW.versionの値を変更
virtualHW.version = “10”

Ryzen上に仮想環境を構築する場合の留意点。
①VMware Playerのバージョン
 私の環境では、15.5では動作しませんでした。15.1を使用することにより、動作が確認できました。
②MacOSのバージョン
 上記①の場合でも、Catalinaは立ち上がりませんでした。Sierraで動作を確認できました。

MacOSのインストールと設定

画像のみですが、参考まで。

Sierraのインストールが完了したら、Catalinaにアップデートします。その手順は省略します。

最後に

VirtualBoxの上でmacOS Big Surを試してみたい方は以下の記事を参考にしてみてください。

システム監査技術者:2017年 午後Ⅰ 問2

金融機関のシステム開発及び運用を担う子会社を題材に,システム開発における品質管理の適切性の監査について問う問題。

IPAの平成29年度 春季試験 午後Ⅰ問題リンク

残念な私の解答

設問解答
設問1単純ミスや指標に合致しない記述の修正指摘などは、レビュー指摘件数のカウントから場外するルールかどうか
設問2設計書を流用した場合の指摘密度に関する指標値が、新規作成の半分以下であること
設問3 (1)レビューアのレビューの観点や指摘区分に偏りがなく網羅的に行われているかの確認
設問3 (2)サンプリング件数が3件と少なく、私的密度が指摘値の範囲外のものを含めてもっと多く分析するべき
設問4障害の根本原因分析及び対策立案実施し、各開発部に横展開を行ったうえで完了を承認しているか

IPAの解答例

設問解答
設問1レビュー指摘件数としてカウントする指摘内容の判断基準が明文化され,各開発部に周知されているか。
設問2実績値が指標値を下回った理由について,品質管理部が審査して承認していること
設問3 (1)レビューアによってレビュー観点が異なり,指摘区分に偏りが発生していないか。
設問3 (2)表計算ソフトを使用して傾向を分析するなら,サンプリングではなく全件調査すべきである。
設問4テスト標準で定められたテスト密度などの実績値が工程完了の判定基に含まれているかどうか。

解答の検討

設問1

レビュー指摘件数のカウント方法について、監査部が品質管理部に確認した内容を答える問題。
[詳細設計工程の完了判定に関する確認]の(1)に、「新人の教育を兼ねて、すべての指摘を書かせたが、重要性が低いものを除外した」という旨のことが書かれている。ここで、カウントする指摘と除外する指摘の判断基準が、ガイドラインされているかどうかがポイントになる。表1のレビュー標準の記載には、指標値の記述のみで、上記判断基準の記載があるかが不明である。
「 レビュー指摘件数としてカウントする指摘内容の判断基準が明文化され,各開発部に周知されているか。 」が正解。

設問2

工程完了の基準を満たさないプロジェクトに関する判定の妥当性を確認する監査ポイントを問う問題。
[詳細設計工程の完了判定に関する確認]の(2)に、「指摘密度が指標値の半分以下」と記述され、その理由が設計書の流用にあるという。ここで、品質管理部が統計的に、設計書を流用した場合の指摘密度に関する指標値を押さえているかが気にはなる。しかし、ここは一歩考えを進めて、品質管理部が、実績値が指標値を下回ったことについて、工程完了判定で審査しており、そのうえで承認しているかを確認する必要がある。
「 実績値が指標値を下回った理由について,品質管理部が審査して承認していること 」が正解。IPAの講評には以下の記述がある。「 流用元のシステムの品質評価結果についての解答が多く見られた。レビューの指摘密度が指標値を満たさなかった理由について,品質管理部が,“過去に開発したシステムの設計書を流用できたこと”などの理由の妥当性を審査して承認していることをシステム監査人は確認すべきである,という点を理解してほしい。 」。

設問3(1)

表計算ソフトを使用してレビュー記録表を一覧化して確認しようとした監査手続の目的を答える問題。 [詳細設計工程の完了判定に関する確認]の(3)に、「レビュー記録表には、… レビュー観点、指摘区分、発生原因が記述されている」とある。一覧表で見える化したいものは、やはり指摘区分からレビュー観点に偏りがないかどうかだろう。
「 レビューアによってレビュー観点が異なり,指摘区分に偏りが発生していないか。 」が正解。

設問3(2)

中規模以上の21件のうち、詳細設計工程の指摘密度が標準値の上下20%の範囲内のものが19件、その中の3件を一覧表にして比較・検討すると書かれている。この3件で妥当かどうかであるが、比較するには件数として少ないし、20%の範囲外のものを含めるべきである、と考えると「全件」となる。正解は「 表計算ソフトを使用して傾向を分析するなら,サンプリングではなく全件調査すべきである。 」。

設問4

システムテスト工程の完了判定基準について,不足している可能性がある項目を答える問題。テスト標準の内容として表 1 に示されている項目が工程完了の判定基準に含まれているかを解答した場合、「 テスト標準で定められたテスト密度などの実績値が工程完了の判定基に含まれているかどうか。 」が正解。一方、 [システムテスト工程の完了判定に関する確認] の「不具合が解決すればシステムテスト工程が完了したとみなし」の記述から、障害の根本原因分析プロセス不十分の可能性もある。従い、「 障害の根本原因分析及び対策立案実施し、各開発部に横展開を行ったうえで完了を承認しているか 」等の回答も考えられるが、IPAの回答例に上記別解はない。