MCSA: Office 365 認定を取得した

MCSA: Office 365 認定を取得した。勉強期間は半年ほど、そのうち実際に集中して勉強した期間は MCP 70-346 が約2週間、MCP 70-347 が約1週間である。mstep 公式トレーニング教材のビデオをひと通り聴講した後、想定問題である「ここがポイント」をひたすら解いて、試験に備えた。PowerShell コマンドレットの問題は、ひらすらコマンドレット全文を手書きして、脳に叩き込んだ。実際に受験してみて、難易度は MCP 70-347 のほうが高いと感じた。MCP 70-346 は「ここがポイント」の類似問題が多く出題されたが、MCP 70-347 は初見の問題が多かった。MCP 70-347 はやはり Exchange Online の問題が多く、個人的に経験の少ない分野なので難しく感じられたのかもしれない。とはいえ、公式トレーニング教材の内容を90%くらい正確に理解して、「ここがポイント」をほぼ完璧に解けるようにしておけば、合格は難しくない。LPICレベル1やレベル2に比べたら、比較的合格しやすいように思う。

R で "[H]H:MM:SS" 形式の文字列を秒数に変換する

入力

入力として、以下のようなベクトルを想定する。各要素は "[H]H:MM:SS" 形式の文字列であり、時間を表している。要素はいくつあってもよい。

hhmmss = c("8:50:02", "0:40:03")

出力

出力として得たいのは、各要素を秒数に変換したベクトルである。

[1] 31802  2403

関数

以下の関数を定義する。

convert.hhmmss.to.seconds <- function(hhmmss) {
  unlist(lapply(lapply(strsplit(hhmmss, ":"), as.numeric), function(x) x %*% c(3600, 60, 1)))
}

実行例

hhmmss = c("8:50:02", "0:40:03")
convert.hhmmss.to.seconds(hhmmss)
[1] 31802  2403

入力の "SS" に小数点以下の桁が含まれている場合も、関数 convert.hhmmss.to.seconds は正しく動く。

hhmmss = c("8:50:02.06", "0:40:03.08")
convert.hhmmss.to.seconds(hhmmss)
[1] 31802.06  2403.08

LPIC 304-200 を受けてきた

はじめに

LPIC 304-200 を受けてきた。結果は合格。勉強方法と試験問題を振り返る。

勉強

黒本を使って勉強した。LPIC 304 向けの黒本は教科書と問題集を兼ねている。これ一冊で十分だ(というかこれ一冊しかない)。

徹底攻略 LPIC Level3 304 教科書+問題集[Version 2.0]対応

徹底攻略 LPIC Level3 304 教科書+問題集[Version 2.0]対応

大変読みやすく、ストレスなく読み進められた。内容が過不足なく整理されている感じであった。

出題ポイントは、問題集パートはもちろんのこと、教科書パートにも散りばめられている。

今回、短期間で効率よく暗記するために、Android アプリ AnkiDroid を導入した。教科書パートに載っている出題ポイントや例として載っているコマンド(オプション含め全て)、一度解いてみて間違った問題等を AnkiDroid に登録し、繰り返し解くことで記憶を定着させた。AnkiDroid に問題を登録するのは手間だが、一度登録してしまえば通勤中や昼休みに何度も繰り返し解けるので、問題を解けば解くほど効率がよいと感じた。実際の試験では選択肢形式の出題が多いが、選択肢形式の問題を解いて勉強しても記憶の定着が甘いので、AnkiDroid に問題を登録する際は記述形式となるように問題をアレンジした。

平日は1日あたり0.5~2時間、休日は1日あたり3~4時間くらい使って、10日間ほど勉強した。

試験

黒本の問題がほぼそのまま出る。事前に聞いてはいたものの、びっくりするほどそのままで拍子抜けした。試験にかかった時間はたったの22分で、誤答はおそらく2問だけ。今までの LPIC の試験で最も簡単だった。

さいごに

試験が簡単すぎて、合格してもそれほど嬉しいという気持ちが湧いてこなかった。難易度が高ければ高いほど、合格者にとって価値のある認定になるのではなかろうか。

Linux に Xen をインストールする

LPIC 304 のお勉強を兼ねて、Xen の検証環境を構築する。VMware Workstation 12 Player(以下、VMware Player)上の仮想マシンCentOS 6.4 をインストールし、その中に Xen をインストールしてみる。

はじめに

  • Xenアーキテクチャには触れません。
  • Xen のユーティリティにも触れません。
  • 手順はネットに繋がっていることが前提です。
  • Xen をデフォルトで起動するところまで持っていきます。

仮想マシンの作成

VMware Player を起動し、[新規仮想マシンの作成(N)] を選択する。ダイアログに従い適当に設定を進め、以下の画面が表示されたら [ハードウェアをカスタマイズ(C) ...] を選択する。

f:id:umanohoneo:20170215232240p:plain

左側の [プロセッサ] を選択し、右側の [優先モード(M)] を 「Intel VT-x/EPT または AMD-V/RVI」に設定する。また、「Intel VT-x/EPT または AMD-V/RVI を仮想化(V)」にチェックを入れる。[プロセッサ コアの数(C)] は物理マシンのスペックに応じて適当に。[閉じる] をクリックし、前の画面に戻る。

f:id:umanohoneo:20170215232535p:plain

後はお好み設定で CentOS 6.4 をインストールする。OS インストール時に Xen をインストールこともできるかもしれないが、後でもできるので一旦後回し。

今回はデスクトップ環境をインストールしたので、以降はその場合の手順を示す。

Xen のインストール

CentOS が起動したら [Applications] - [System Tools] - [Terminal] をクリックし、端末を起動する。

root にスイッチして、

$ su - 

yumXen っぽいパッケージを探す。

# yum list available | grep xen
centos-release-xen.x86_64
(一部省略)

centos-release-xen.x86_64 なるパッケージが見つかった。パッケージの情報を見てみる。
(以下はインストール後のコマンド実行結果を貼り付けている)

# yum info centos-release-xen
Installed Packages
Name        : centos-release-xen
Arch        : x86_64
Epoch       : 10
Version     : 8
Release     : 2.el6
Size        : 539  
Repo        : installed
From repo   : extras
Summary     : CentOS Virt SIG Xen repo configs
URL         : http://wiki.centos.org/QaWiki/Xen4
License     : GPL
Description : yum configs and scripts to allow easy installation of Xen on CentOS.
            : 
            : NOTE This package may change major versions of Xen automatically on
            : yum update.  If this is not the behavior you want, please install the
            : sub-package specific to the version of xen you want to use and then
            : remove this package.  (At the moment this is centos-release-xen-44 or
            :                        centos-release-xen-46).
(一部省略)

見るべきは Summary と Description だ。Xen on CentOS の簡易インストールを実現するための、yum の設定とスクリプト、ということらしい。Xen 本体ではないようだ。
パッケージが何者か分かったら、いよいよインストールする。

# yum install centos-release-xen

ちなみに、今の作業によって、Xen パッケージを配布しているリポジトリyum で参照するための .repo ファイルができているはずだ。

[root@localhost ~]# ls -l /etc/yum.repos.d/
-rw-r--r--. 1 root root  539 Mar 23  2016 CentOS-Xen.repo
(一部省略)

リポジトリが追加されたところで、もう一度 yumXen っぽいパッケージを探してみよう。

# yum list available | grep xen
xen.x86_64        4.6.3-5.el6    @centos-virt-xen
xen-doc.x86_64    4.6.3-5.el6    @centos-virt-xen
(一部省略、余白削除)

Xen のパッケージが見つかった。ドキュメントと一緒にインストールする。

# yum install xen xen-doc

これで XenXen 用のカーネルがインストールされた。

ブートローダの設定

マシン起動時に Xen が立ち上がるようにするため GRUB の設定をする。と言っても、Xen のインストール時に勝手に設定されているはず*1なので確認してみる。

# cat /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.18.44-20.el6.x86_64)
        root (hd0,0)
        kernel /xen.gz dom0_mem=1024M,max:1024M cpu(省略)
        module /vmlinuz-3.18.44-20.el6.x86_64 ro ro(省略)
        module /initramfs-3.18.44-20.el6.x86_64.img
title CentOS (2.6.32-358.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-358.el6.x86_64 ro ro(省略)
        initrd /initramfs-2.6.32-358.el6.x86_64.img

title から次の title までが一つのエントリで、上の例ではエントリが2つある。kernel /xen.gz ~となっている0番目のエントリが Xen の Domain-0 用のエントリだ(ここでは便宜上0番目から数える)。

マシン起動時にデフォルトで起動するエントリは、default で指定する。default=0 となっているので、デフォルトで Xen が起動する設定となっている。

想定どおりの設定となっていることが確認できた。

動作確認のため、マシンを再起動する。

# shutdown -r now

マシンが起動したら、稼働中のカーネルのリリースを確認してみよう。

$ uname -r
3.18.44-20.el6.x86_64

grub.conf のエントリと一致していたら成功だ。

統計検定2級(CBT)を受けてきた

はじめに

先日、統計検定2級(CBT)を受けてきた。結果は88点で合格。勉強方法や受験の流れについて振り返る。

勉強方法

勉強期間は計3週間ほど。年末年始の休みに集中的に勉強した。勉強には、日本統計学会公認の教科書と問題集(中身は過去問)を使った。試験までに問題集を2周して、過去問ならばほぼ完璧に解ける状態に自分を持っていった。

改訂版 日本統計学会公式認定 統計検定2級対応 統計学基礎

改訂版 日本統計学会公式認定 統計検定2級対応 統計学基礎

日本統計学会公式認定 統計検定 2級 公式問題集[2013〜2015年]

日本統計学会公式認定 統計検定 2級 公式問題集[2013〜2015年]

教科書の方は体系的学習に適した良い本だと思う。統計検定2級に合格することを目的とするならば、この本と問題集で事足りる。税込2,376円と、それほど高価でないのも良い。amazonレビューで低い評価が目立つが、これは一部のレビュアーが極端に低く評価しているからだ。評価が低い理由も、単なる誤植だったりと、★ひとつとするにはあんまりな理由だ。この本の良さを失うほどのものではない。ただ、他の本で学習したことがあるわけではないので、もっと良い本はあるかもしれない。
問題集の方も悪くない。解説が端的なので初学者に優しくはないが、このレベルの解説で理解できなかったら教科書に立ち戻ったほうがいい。

教科書や問題集の解説で直感的に理解しにくいところは、以下の本で補った。教科書と違って流し読みできるので、学習中のいい息抜きになった。ちなみに半分くらいしか読んでない。

統計学が最強の学問である[実践編]---データ分析のための思想と方法

統計学が最強の学問である[実践編]---データ分析のための思想と方法

受験までの流れ

受験までの流れは以下のとおり。

  1. Odyssey ID を登録
  2. 試験会場に受験申込み*1
  3. 試験会場で受験

1~2は受験日の前日に実施した。今回は試験会場として、オデッセイテスティングセンター有楽町を利用した。試験配信会社が運営しているので安心感がある。実際、受付の対応や試験環境に不満はなかった。

CBTの実際

秘密保持契約があるので中身の詳細は語れないが、難易度は筆記試験の過去問と同程度と感じた。過去問を完璧に解ける状態にしておけば、余裕をもって合格できるだろう。
会場では計算用紙とボールペンが借りられる。計算用紙は裏表に書き込めるものが試験開始時に2枚渡され、適宜新しいものと交換してもらえる。今回は交換しなかった。

最後に

残念なことに私の職場では統計検定の認知度が高くない。しかし、どんな仕事においても、統計学の考え方は役に立つと思っている。今後、統計検定の市場価値が向上していくことを願う。

*1:申込み方法は試験会場によって異なる模様

PowerShell で CSV ファイルを読み込む

PowerShellCSV ファイルを読み込むには、 Import-Csv コマンドレットを使用する。

基本的な使い方

入力サンプル

以下のような ASCII だけで構成された CSV ファイルを想定する。

PS> Get-Content file.csv
Name,Height,Weight
tako,96,93
ika,21,75
ebi,64,23
kani,28,24

file.csv を読み込んで、変数 csv に格納する

PS> $csv = Import-Csv file.csv

読み込んだ CSV を表示する

PS> $csv

Name Height Weight
---- ------ ------
tako 96     93
ika  21     75
ebi  64     23
kani 28     24

CSV から特定の列(カラム)を取り出す

"$変数名.列名" で特定の列を取り出せる。以下の例では、 "Name" 列を取り出している。

PS> $csv.Name
tako
ika
ebi
kani

CSV から特定の行(レコード)を取り出す

パイプラインで出力を Where-Object コマンドレットに渡し、絞り込み条件を指定することで、特定の行を取り出せる。以下の例では、"Name" 列 が "tako" である行を取り出している。

PS> $csv | Where-Object { $_.Name -eq "tako" }

Name Height Weight
---- ------ ------
tako 96     93

ここで、 "$_" はパイプラインで渡されたオブジェクトを表す。上記の例では、 "$csv" が該当する。

エイリアス

Import-Csvエイリアスとして、 ipcsv が使用可能である。

PS> $csv = ipcsv file.csv

Rでベクトルの累積和ベクトルを求める

累積和ベクトルとは

サイズ n のベクトル x の累積和ベクトルを以下のように定義する。

ベクトル x
  x1
  x2
  ...
  xn

累積和ベクトル
  x1
  x1 + x2
  ...
  x1 + x2 + ... xn

base パッケージの cumsum 関数を使う

x <- c(1, 2, 3)
> cumsum(x)
[1] 1 3 6

自分で実装する

累積和ベクトルの各成分は、ベクトルxの成分の線形和である。したがって、下三角行列とベクトル x を乗算すれば累積和ベクトルが求められる。
下三角行列は lower.tri 関数で生成する。第1引数 x には、生成したい下三角行列と同じ行数・列数を持つ matrix を指定する。このとき、 matrix の各成分は何でもよい。第2引数 diag には、下三角行列の対角成分を TRUE とするか、 FALSE (デフォルト)とするかを指定する。今回のように累積和を計算する場合は、 TRUE を指定する。

> lower.tri(matrix(1, nrow = 3, ncol = 3), diag = TRUE)
     [,1]  [,2]  [,3]
[1,] TRUE FALSE FALSE
[2,] TRUE  TRUE FALSE
[3,] TRUE  TRUE  TRUE

上記の下三角行列とベクトル x を乗算すれば、累積和ベクトルが求められる。行列の乗算には %*% 演算子を使う。演算結果は matrix で返るため、 vector が欲しければ as.vector 関数で vector に変換する。

> x <- c(1, 2, 3)
> as.vector(lower.tri(matrix(0, nrow = 3, ncol = 3), diag = TRUE) %*% x)
[1] 1 3 6