ラブライブ!OP曲を(株)白ヤギさんのテキスト要約にかけてみた

ラブライブ!OP曲を(株)白ヤギさんのテキスト要約にかけてみた

つい先日、株式会社 白ヤギコーポレーションさんにて「自動要約サービス」が公開されました。

Webスクレイピング勉強会への参加で、自然言語処理に興味が湧いてきており、さっそくこのサービスを試してみました。

ラブライブ!OP曲をテキスト要約してみる

要約の元になるテキストとして、アニメ版ラブライブ!のOP曲を用いてみました(いずれも名曲です)。

結果は以下となりました。要約結果を自分のなかで予想したものと並べてみます。

「僕らは今のなかで」の要約結果

予想
  1. まっすぐな想いが みんなを結ぶ
  2. それぞれが好きな場所で頑張れるなら 新しい場所がゴール
  3. 怖がる癖は捨てちゃえ
結果(歌詞が丸ごと返ってきた)

「それは僕たちの奇跡」の要約結果

予想
  1. 夢を叶えるのはみんなの勇気
  2. 最後まで駆け抜けるよ!
  3. いまここで出会えた奇跡
結果(歌詞が丸ごと返ってきた)

歌詞が丸ごと要約結果として返されます。これは当たり前の結果であり、『要約』は文書内の重要な部分を抽出するものであるからして、ラブライブ!の歌詞は一字一句無駄は無いと言えるのです!(キリッ

……ではなく、少し考えてみると、歌詞というものは想いのたけをそのまま文字にしているので、論理的な構成を見つけ出して抽出する要約には不向きな文章と言えるのだと思います。

フランドン農学校の豚」を要約してみる

今度は歌詞ではなく、宮沢賢治の「フランドン農学校の豚」を要約してみましょう。

要約結果は以下となります。みごとに要約されています。

  1. フランドン農学校の豚宮沢賢治〔冒頭原稿一枚?なし〕以外の物質は、みなすべて、よくこれを摂取(せっしゅ)して、脂肪(しぼう)若(もし)くは蛋白質(たんぱくしつ)となし、その体内に蓄積(ちくせき)す。
  2. 」とこう書いてあったから、農学校の畜産(ちくさん)の、助手や又(また)小使などは金石でないものならばどんなものでも片(かた)っ端(ぱし)から、持って来てほうり出したのだ。
  3. というわけはその晩方、化学を習った一年生の、生徒が、自分の前に来ていかにも不思議そうにして、豚のからだを眺(なが)めて居た。
  4. 豚の方でも時々は、あの小さなそら豆形(まめがた)の怒(おこ)ったような眼(め)をあげて、そちらをちらちら見ていたのだ。
  5. ところが次の日のこと、畜産学の教師が又やって来て例の、水色の上着を着た、顔の赤い助手といつものするどい眼付して、じっと豚の頭から、耳から背中から尻尾(しっぽ)まで、まるでまるで食い込むように眺めてから、尖(とが)った指を一本立てて、「毎日阿麻仁(あまに)をやってあるかね。

まとめ

ラブライブ!OP曲をテキスト要約にかけてみました。あまり論理的な構成になっているとは言えない歌の歌詞のようなものは、機械的な要約に向かないようです。これを逆手に取って、自分の書いた文章の要約結果から文章の良し悪しを判定できたりもするのかなと思いました。

「第2回Webスクレイピング勉強会@東京」に参加してきました

「第2回Webスクレイピング勉強会@東京」に参加してきました

第2回Webスクレイピング勉強会@東京に参加し、お手軽に未知語を探すアイディアについて発表してきました。

発表してきた内容

前回に引き続き、今回の勉強会でも発表させていただきました。発表資料は以下のURLにて公開しています。

発表内容はGoogleサジェストで得られた単語をChasen(形態素解析器)にかけ、未知語の場合はChasen辞書の登録エントリを作成する、というものです。

Googleサジェスト結果からChasen辞書を作成するスクリプト

発表時はデモの実演ができませんでしたが、作成したスクリプトGitHubで公開しています。シェルスクリプトで作成しており、Chasenwgetがインストールされている環境であれば動作するかと思います。
(自分の環境ではNetBSD-6.1-i386にて動作確認が取れています)

以下のような実行結果を得られます。

$ ./suggest2chadic.sh きるみ 
(品詞 (名詞 一般)) ((見出し語 (キルミーダンス 3641)) (読み キルミーダンス) (発音 キルミーダンス))
(品詞 (名詞 一般)) ((見出し語 (キルミーベイベー 3641)) (読み キルミーベイベー) (発音 キルミーベイベー))

まとめ

第2回Webスクレイピング勉強会@東京にて発表してきました。この勉強会は全3回の予定となっており、次回が最終回となるようです。Webスクレイピング勉強会 Season 2が決定したり、この勉強会での知見を活かした発展的な勉強会が開催されるとイイなと思いつつ、次回も楽しみにしています。

CentOS 7.0でDockerを動かしてみた

CentOS 7.0でDockerを動かしてみた

先日開催された第2回東京SoftLayer勉強会で『SoftLayerでDockerを使ってみた』という発表があり、Dockerのインストールから使い方までの手順が解説されていました。

個人的にDockerを試してみたいということもあり、さっそく解説されていた手順を参考にDockerを動かしてみました。勉強会ではCentOS 6系向けの手順となっていましたが、私の方ではCentOS 7系で試してみました。

CentOS 7.0のセットアップ

GUI等は使用しないので、minimalインストールの状態からDocker環境を構築していきます。以下はインストール後にsshログインが行えるようになるまでの手順です。

SELinuxの無効化

/etc/selinux/configを以下のように修正し、SELinuxを無効化します。

--- config.orig 2014-07-29 11:24:02.949653548 +0900
+++ config      2014-07-29 11:24:09.957653412 +0900
@@ -4,7 +4,7 @@
 #     enforcing - SELinux security policy is enforced.
 #     permissive - SELinux prints warnings instead of enforcing.
 #     disabled - No SELinux policy is loaded.
-SELINUX=enforcing
+SELINUX=disabled
 # SELINUXTYPE= can take one of these two values:
 #     targeted - Targeted processes are protected,
 #     minimum - Modification of targeted policy. Only selected processes are protected.

grub.cfgの設定

起動時のコンソールログを見えるようにしておきたいので、/boot/grub2/grub.cfgを以下のように修正します。ついでにLANGもen_US.UTF-8に変更しておきます。

--- grub.cfg.orig       2014-07-29 11:24:18.721653243 +0900
+++ grub.cfg    2014-07-29 11:24:38.572652858 +0900
@@ -81,7 +81,7 @@
        else
          search --no-floppy --fs-uuid --set=root dd4521d9-ca1c-462b-b353-2ba57bf4fc61
        fi
-       linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet LANG=ja_JP.UTF-8
+       linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto  vconsole.font=latarcyrheb-sun16 LANG=en_US.UTF-8
        initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
 }
 menuentry 'CentOS Linux, with Linux 0-rescue-6764668114ff4741a8994286ae140fdd' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-6764668114ff4741a8994286ae140fdd-advanced-dd4521d9-ca1c-462b-b353-2ba57bf4fc61' {
@@ -95,7 +95,7 @@
        else
          search --no-floppy --fs-uuid --set=root dd4521d9-ca1c-462b-b353-2ba57bf4fc61
        fi
-       linux16 /boot/vmlinuz-0-rescue-6764668114ff4741a8994286ae140fdd root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet
+       linux16 /boot/vmlinuz-0-rescue-6764668114ff4741a8994286ae140fdd root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto  vconsole.font=latarcyrheb-sun16
        initrd16 /boot/initramfs-0-rescue-6764668114ff4741a8994286ae140fdd.img
 }
 if [ "x$default" = 'CentOS Linux, with Linux 3.10.0-123.el7.x86_64' ]; then default='Advanced options for CentOS Linux>CentOS Linux, with Linux 3.10.0-123.el7.x86_64'; fi;

ホスト名の設定

以下の手順でホスト名を設定します。

# echo dockertest.furandon.net > /etc/hostname

固定IPアドレスの設定

DHCPよりも固定IPアドレスの方が作業しやすいため、Arch Wikiの『固定IPアドレス』を参考にしながら設定します。

/etc/conf.d/network@enp0s3にIPアドレス等を記述します。/etc/conf.dディレクトリは存在しないので予め作成しておきます。

# mkdir /etc/conf.d
# touch /etc/conf.d/enp0s3

/etc/conf.d/network@enp0s3の中身は以下の通りです。

address=192.168.0.232
netmask=24
broadcast=192.168.0.255
gateway=192.168.0.1

/etc/systemd/system/network@.serviceにsystemdのユニットファイルを作成します。
(Arch Wikiの内容を参考に作成しています)
Arch Wikiの/etc/systemd/system/network@.service中でipコマンドが/usr/bin/ipでフルパス指定されていますが、CentOS-7では/sbin/ipとパスが異なるので注意してください。

[Unit]
Description=Network connectivity (%i)
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/network@%i

ExecStart=/sbin/ip link set dev %i up
ExecStart=/sbin/ip addr add ${address}/${netmask} broadcast ${broadcast} dev %i
ExecStart=/bin/sh -c 'test -n ${gateway} && /sbin/ip route add default via ${gateway}'

ExecStop=/sbin/ip addr flush dev %i
ExecStop=/sbin/ip link set dev %i down

[Install]
WantedBy=multi-user.target

サービスを有効化します。

# systemctl enable network@enp0s3.service

/etc/resolv.confの設定

インストール時にrpmパッケージのインストール等でネットワーク設定が行われており、/etc/resolv.confには(DHCPでのIPアドレス取得による)nameserver設定が入っています。固定IPアドレスでも同じnameserver設定を利用するため、この段階での設定変更は不要です。

LANGの設定

/etc/locale.confでLANGをen_US.UTF-8に設定します。
(日本語のままでいいよ、という場合はこの手順をスキップしてください)

--- locale.conf.orig    2014-07-29 11:24:55.014652540 +0900
+++ locale.conf 2014-07-29 11:25:01.258652419 +0900
@@ -1 +1 @@
-LANG="ja_JP.UTF-8"
+LANG="en_US.UTF-8"

不要なサービスの停止

Dockerを試す用途では不要と思われるサービスを停止します。

$ sudo systemctl disable avahi-daemon.service
$ sudo systemctl disable dbus-org.fedoraproject.FirewallD1.service
$ sudo systemctl disable dbus-org.freedesktop.Avahi.service
$ sudo systemctl disable dbus-org.freedesktop.NetworkManager.service
$ sudo systemctl disable dbus-org.freedesktop.nm-dispatcher.service
$ sudo systemctl disable NetworkManager-dispatcher.service
$ sudo systemctl disable NetworkManager.service
$ sudo systemctl disable postfix.service
$ sudo systemctl disable tuned.service
$ sudo systemctl disable avahi-daemon.socket

ユーザの追加

作業用のユーザを追加します。

$ sudo useradd -g users -G wheel -m -s /bin/bash fpig
$ sudo passwd fpig

再起動

ここで一旦再起動します。再起動後、固定IPアドレスが付与されているか等の確認をおこないます。

$ sudo shutdown -r now

ここまでで最低限の設定は完了し、sshでログインできる状態になっています。
以降はsshログインした状態での作業となります。

Dockerを試してみる

dockerのインストール

docker.x86_64というパッケージが提供されているので、これをインストールします。

$ yum search docker
...
docker-registry.noarch : Registry server for Docker
docker.x86_64 : Automates deployment of containerized applications
$ sudo yum install docker

勉強会で例示されていたCentOS 6系の環境では、EPELからDockerをインストールしていましたが、CentOS 7系の環境ではベースリポジトリにDockerパッケージが含まれていました。

$ rpm -qa | grep docker
docker-0.11.1-22.el7.centos.x86_64
$ yum provides docker
...
docker-0.11.1-19.el7.centos.x86_64 : Automates deployment of containerized
                                   : applications
Repo        : extras
$ grep -A5 '^\[extras' /etc/yum.repos.d/CentOS-Base.repo
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

Dockerサービスを有効化します。DockerパッケージにSystemdのユニットファイルが同梱されているので、これを利用します。

$ rpm -ql docker-0.11.1-22.el7.centos.x86_64 | grep systemd
/usr/lib/systemd/system/docker.service
$ sudo systemctl enable docker.service
ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service'
$ systemctl list-unit-files | grep docker
docker.service                            enabled

上記設定は再起動してから有効になるので、ここでは手動でdocker.serviceを起動します。

$ sudo systemctl start docker.service

さっそくdockerコマンドを使ってみます。

$ sudo docker version
Client version: 0.11.1-dev
Client API version: 1.12
Go version (client): go1.2
Git commit (client): 02d20af/0.11.1
Server version: 0.11.1-dev
Server API version: 1.12
Go version (server): go1.2
Git commit (server): 02d20af/0.11.1

Dockerイメージのダウンロード

手元でDockerイメージを作るところまで試してみたかったのですが、まだ使い始めたばかりということもあり、既存のDockerイメージファイルを使ってみることにしました。

$ sudo docker pull ubuntu

しばらく待つとUbuntuのイメージファイルが手元にダウンロードされます。使用可能なイメージはdocker imageで確認できます。

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               ba5877dc9bec        7 days ago          192.7 MB
ubuntu              trusty              ba5877dc9bec        7 days ago          192.7 MB
ubuntu              latest              ba5877dc9bec        7 days ago          192.7 MB
ubuntu              precise             b9e56c8f2cf5        7 days ago          103.8 MB
ubuntu              12.04               b9e56c8f2cf5        7 days ago          103.8 MB
ubuntu              14.10               6ef6f1a66de1        7 days ago          194.1 MB
ubuntu              utopic              6ef6f1a66de1        7 days ago          194.1 MB
ubuntu              12.10               c5881f11ded9        5 weeks ago         172.1 MB
ubuntu              quantal             c5881f11ded9        5 weeks ago         172.1 MB
ubuntu              13.04               463ff6be4238        5 weeks ago         169.4 MB
ubuntu              raring              463ff6be4238        5 weeks ago         169.4 MB
ubuntu              13.10               195eb90b5349        5 weeks ago         184.6 MB
ubuntu              saucy               195eb90b5349        5 weeks ago         184.6 MB
ubuntu              10.04               3db9c44f4520        3 months ago        183 MB
ubuntu              lucid               3db9c44f4520        3 months ago        183 MB

Dockerコンテナの起動

さっそくDockerでUbuntuを起動してみます。

$ sudo docker run -i -t ubuntu:14.10 /bin/bash

サクッとUbuntuが起動しました!
/etc/lsb-releaseを見ると、確かにUbuntuです。

root@9cf71dd83894:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.10
DISTRIB_CODENAME=utopic
DISTRIB_DESCRIPTION="Ubuntu Utopic Unicorn (development branch)"

Dockerコンテナのデタッチ・アタッチ

起動したDockerコンテナ上でexitするとコンテナは停止してしまいます。練習もかねてDockerコンテナのデタッチ→アタッチ→exitによるコンテナ停止という手順を試してみます。

Dockerコンテナを終了せずに抜ける(デタッチする)には、Ctrl+p Ctrl+qを入力します。

root@9cf71dd83894:/# (ここでCtrl+p Ctrl+qを入力)$
$

docker psコマンドで稼働しているコンテナを確認できます。

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9cf71dd83894        ubuntu:14.10        /bin/bash           9 minutes ago       Up 9 minutes                            backstabbing_rosalind0

コンテナにアタッチしてみます。

$ sudo docker attach 9cf71dd83894
root@9cf71dd83894:/#

無事にアタッチでできました。後はexitでコンテナを終了します。

root@9cf71dd83894:/# exit
exit
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$

export/import

私の手元ではまだ試していませんが、イメージファイルのexport/importも可能です。
以下の手順でexport/importを行います。

$ docker export <コンテナID>
$ docker export 14773ff9e93c > myweb.tar    # コマンド例
$ docker import [リポジトリTAG]
$ docker import < - myweb:rel1 < myweb.tar  # コマンド例

ローカルストレージのアタッチ

こちらも私の手元では試していませんが、Runコマンドの"-v"オプションでホストのディレクトリをアタッチ可能です。

$ docker run -t -i -v <local_dir>:<container dir>:<rw|ro> centos /bin/bash
$ docker run -d -p 5000:5000 -v /home/hoge/data:/tmp/data centos  # コマンド例

/home/data/dataは、共有ストレージ(NFS)やディスクミラー(DRBD)、分散ストレージ(Ceph-fs)等を利用して自分でミラーリングします。

まとめ

参加した勉強会でDockerの一連の使用手順が解説されていました。Dockerを覚えてみたいと思っていたので、さっそく覚えた手順を自分の環境で試してみました。

思っていたよりも簡単にコンテナの実行が行え、ついに我が家にもDockerの技術が伝来したという感じです。
(種子島に火縄銃が伝来した……という気分です)

まだ試してはいないものの、イメージのexport/importやプライベートリポジトリといった機能もあるようなので、勉強会用のイメージ提供に活用できればと思います。

第2回 東京SoftLayer勉強会に参加してきました

第2回 東京SoftLayer勉強会に参加してきました

第2回 東京SoftLayer勉強会に参加してきました。前回は5月だったので、2ヵ月ぶりの開催ですね。

前回の勉強会メモと同様に、今回も勉強会メモをまとめてみました。

サムライスタートアップアイランドご紹介

はじめに勉強会の会場であるサムライスタートアップアイランドの紹介がありました。

2011年11月1日にオープンしたサムライスタートアップアイランド(SSI=Samurai Startup Island)は、スタートアップ企業とその支援者が集まる場所を提供しているとのことです。
(SSIの紹介ページからの受け売りです……)
会計士さんも常駐しており、スタートアップ企業におけるファイナンス関係のお悩みごともフォローできますとのことです。

現在50社ほど入居しており、コワーキングスペースとしても活用されています。羽田空港が近いことから、外国からの訪問者への対応も考えられており、海外展開を考える企業にもオススメのようです。

SoftLayerのストレージと使い分けについて

発表者は日本IBMの新島さん。SoftLayerのビギナーズガイドを書いておられるとのことです。

SoftLayerはサーバに組み込まれたストレージだけでも複数種類あり、ストレージの観点から利用可能なサービスの一望と目的別の使い分け方の解説という内容での発表でした。

SoftLayerのストレージ

  • BM(Mare Metal Server)とVS(Virtual Server)で構成が異なる
  • BMのディスク

    • SATA,SAS,SSDから選んで指定できる
    • BMのモデルによって搭載できるディスクの台数が異なる
    • 生のディスク(物理的なディスク)なので、必ずミラーリングRAID構成にすること
      • BMのディスクは本当のサーバー(手元に物理サーバを構築する場合)と同じに考えた方がよい
  • VSのディスク

    • ローカルドライブとSAN storageのを選んで指定できる
    • ローカルドライブは2台で400Gまで

    • SAN storage(iSCSI)は以下の構成から選択できる

      • 5台まで、25,100Gまで、2台以降は100-2000GBまで)の2つ
    • 仮装サーバのローカルドライブ→故障すると少し時間かかる

      • (SoftLayerの中の人が故障ドライブをせっせと交換する)
    • SANストレージの場合はバックアップ構成がくめる
      • ただしネットワークも障害点となる可能性が出てくる
  • portable diskとしての利用

    • virtual serverの2nd diskを切り離し、portable diskとして利用できる
    • 切り離したportable diskは、別のvirtual serverに取り付けることもできる

SoftLayerで利用できるストレージ

  • NAS,iSCSI,オブジェクトストレージが利用できる
  • NAS
    • CIFS,FTPでアクセス可能
    • プライベートLANに接続されている
      • (SoftLayerのサーバルーム写真における、青色のケーブルですね)
    • 現時点では未対応のため、NFSは利用できない
  • iSCSI
    • iSCSIもプライベートLANに接続されている
    • スナップショットが取得可能
    • データセンター間でレプリケーション可能
  • オブジェクトストレージ
    • OpenStackのswift互換
    • ポータルやREST APIからアクセスできる
    • CloudFuseでインスタンスにmountして使うこともできる
    • CDNを使ってファイルを配信することもできる
  • eVault(イーボルト)というバックアップツールがある

iSCSIのスナップショット

  • 30分毎にレプリケーションが実行される
  • 切り戻しは時間がかかる
  • レプリカのカスケードはできないので、マスター復帰時には必ず切り戻しが行われる
    • 切り戻しは時間がかかる!とのこと

各ストレージの使い分け

  • サーバのストレージとして

    • 大容量ならBMでSATA Drive
    • 高速IOならBMでSSDSAS Drive
    • サーバ生涯時の切り替えならVSでSAN Drive
    • 少用量で安さならVSでlocal drive
  • データ用、バックアップ用として

    • Snapshot使いたいならiSCSI
    • 複数サーバで共有したいなら
      • NASもしくは
      • VSかBMでファイルサーバを構成、
    • archive用ならobject storage

その他

  • 近日中にiSCSIの弱点を克服したソリューションが出てくるかも?

Why Riak & Why SoftLayer?

発表者はBashoジャパンの上西さん。Riakの紹介とSoftLayer上でRiakを動かすと何が嬉しいかについての発表でした。

スライドはWhy Riak? Why SoftLayer?にて公開されています。

スライドが公開されているので、自分のメモは不要かとも思ったのですが、前回のSoftLayer勉強会でのRiakのLTはただ聞くだけになっていたので、今一度自分なりにRiakについてがーっとまとめてみました。

Riakについて

  • システムの運用において可用性は大事
  • しかし、可用性に対する脅威は数多く存在する
    • ハードウェア故障
    • ネットワーク故障
      • スプリットブレインシンドロームによるデータ破壊
    • ソフトウェアのアップデートやメンテナンス
    • システムの過負荷

Riak

  • RiakはErlangで記述されたNoSQLデータベース
  • QuorumレプリケーションによりN個のノードにデータを複製することでノードがひとりくらい壊れていてもデータの書き込みが可能
  • 各ノードが管理するパーティションConsistent Hashingと呼ばれる160bitのキー空間を等分したリング状のハッシュテーブルになっている
    • レプリカはN個(=3)のノードにコピーされる

ノードが一時故障した場合

  • リング上の次のパーティションに書き込むことで、レプリカがN個ある状態を担保しておく
  • 一時故障ノードが復旧した時にレプリカを返す

ネットワーク故障の場合

  • Riakでは分断された各ノードでの書き込みを許容する
  • 復旧したら書き戻す
  • そのため、復旧時にデータの不整合(暗黙的な上書き)が発生する場合がある
    • 以下の手法で不整合を回避する
    • 不整合のパターンはいくつか存在する
      • write-write conflick →比較的対応しやすい
      • write-delete conflick →少しややこしい対応手順になる

Riakのバックアップ機能

なぜクラウドでRiakか

  • DBなどのミドルウェアが優れていてもHWがこけたら意味がない
  • なので、SoftlayerのBM上でRiakを使えると嬉しい
  • なぜBMか?VSではダメなのか?
    • 分散システムで大事なことは「故障の単位」
    • VSが動いているBMがこけると、Riakからは多重故障にみえてしまう
      • するとRiakの分散ノードがまるごと落ちるという事態が発生する
      • そのため、RiakはBMでの運用を推奨している

その他

参考リンク

QuantaStor概説/QuantaStor使ってみた

発表者はアファーム・ビジネスパートナーズ株式会社の西脇さんと日本情報通信の常田さん。

QuantaStoreアーキテクチャユースケース、使ってみた感想についての発表でした。

  • OSNEXUSについて

  • QuantaStor

    • QuantaStorはSAN(iSCSI/FC)とNAS(NFS)を兼ね備えたストレージアプライアンス
    • 64bit Intel/AMDの汎用サーバで稼働するUbuntu Server(Linux)上にインストールし、ソフトウェアベースのストレージとして利用する
    • QuantaStorはBMのみで利用可能
      • また、RAID構成を組む必要があるため、ディスクは4本以上必要
      • (SoftLayerのBMのドライブ数は2,4,6,12,24,36から選択できる)
  • 来月のSoftwareDedisnからSoftLayerの記事が連載されるとのこと

参考リンク

Object Storageを使ってみた

発表者は日本IBM高良さんSoftLayer探検隊の隊長さんとのことです。

Raspberry PiとSoftLayerのObjectStorageの連携に関する発表でした。

発表スライドは第二回SoftLayerユーザ会 ラズベリーパイとオブジェクトストレージを繋いでみたにて公開されています。詳細な手順はSoftLayer探検隊 第16回 Raspberry Pi で撮影した画像をSoftLayerのオブジェクト・ストレージに保存するにて公開されています。

発表の中で「組み込み機器とクラウドがつながる時代になった」という説明が印象的でした。最近IoT(Internet of Things:モノのインターネット)という言葉(バズワード?)をよく聞きますが、Raspberry PiとSoftLayerの組み合わせによる具体的な事例を見るのは初めてだったので、とても感銘をうけました。

SoftLayerでDockerを使ってみた

発表者はCUPA(一般社団法人クラウド利用促進機構)荒井さん

Dockerを利用したシステムポータビリティとDR(Disaster Recovery)対応について、SoftLayerを使用しての解説でした。

Dockerは個人的に試してみたいと常々思っていたので、SoftLayerの話は一旦どっかに置いておき(Dockerだけに)、別途ブログ記事を分けてみました。

まとめ

第2回東京SoftLayer勉強会に参加してみました。何となくSoftLayerがどんなものが見えてきた気がします。とはいえ、実はまだSoftLayerを使ってみたことが無いので、そろそろ触ってみようかなと思います。

Emacs Lispで解く月刊少女野崎くんED「ウラオモテ・フォーチュン」

Emacs Lispで解く月刊少女野崎くんED「ウラオモテ・フォーチュン」

今期オススメのアニメのひとつである「月刊少女野崎くん」、ED曲の「ウラオモテ・フォーチュン」には以下のフレーズが出てきます。

キライの ハンタイの ハンタイの ハンタイの ハンタイの  
そのさらにハンタイの
キモチを伝えるのって 何だか難しい

ぐぬぬ、まるでバカボンのパパ話法(「賛成のハンタイなのだ」)です。これではスキなのかキライなのかよく分かりません。

ここはひとつ、Emacs Lispでスキなのかキライなのかはっきりさせてみましょう。
Emacsのscratchバッファ(lisp-interaction-modeなバッファならどれでもOKです)で以下を実行してみます。

(setq キライの nil)

(defun ハンタイの(p) (not p))
(defun そのさらにハンタイの(p) (not p))
(defun キモチを伝えるのって(p) (if p 'スキ 'キライ))
(defun 何だか難しい(p) p)

(何だか難しい
 (キモチを伝えるのって
  (そのさらにハンタイの
   (ハンタイの
    (ハンタイの
     (ハンタイの
      (ハンタイの キライの)))))))
スキ

無事に「スキ」というお返事(?)が得られました。

が、曲のラストでさらに苛烈なフレーズが出てきます。

キライの 
ハンタイの ハンタイの ハンタイの ハンタイの ハンタイの ハンタイの 
ハンタイは?

これはいけません。スキなのかキライなのか考えているうちに曲が終わってしまいます。これもEmacs Lispで解いてみましょう。

(setq キライの nil)

(defun ハンタイの(p) (not p))
(defun ハンタイは?(p) (if (not p) 'スキ 'キライ))

(ハンタイは?
 (ハンタイの
  (ハンタイの
   (ハンタイの
    (ハンタイの
     (ハンタイの
      (ハンタイの キライの)))))))
スキ

こちらも無事に「スキ」というお返事が得られました。

まとめ

月刊少女野崎くんED曲の「ウラオモテ・フォーチュン」をEmacs Lispで解いてみました。『(キライの (ハンタイの (ハンタイの ...)))』のように、歌詞の並び通りにしたかったのですが、実際は単語の順番をひっくり返しての処理になり、日本語は後置演算子なのか……と変なことに気がついてしまいました。

Fedora20をインストールしてみた

Fedora20をインストールしてみた

Fedora20の環境を用意する必要があったので、インストール後の設定手順をまとめてみました。

sshログインのみで使用する形態を想定しているため、GUIの設定は行わず、インストール後に最低限の設定をするだけの手順になっています。

インストールCD-ROMの入手

今回は以下のURLからネットワークインストール用のCD-ROMをダウンロードしました。インストール作業中に出てくる「ベース環境」の画面で「最小限のインストール」を選択すると、(CentOSでいうところの)minimalインストールになるようです。

インストール後の作業

不要なサービスの停止

必要に応じて不要なサービスを停止します。CentOS環境のようなchkconfigかと思っていたのですが、initデーモンがsystemdに置き換えられたため、コマンド自体が変わっていました。

systemdではsystemctlコマンドを使用しており、以下はchkconfigとのコマンド対応表です。

サービスの
一覧表示
CentOSの場合chkconfig --list
Fedora20の場合systemctl list-unit-files
現在有効に
なっている
サービスの
一覧表示
CentOSの場合chkconfig --list | grep 3:on
Fedora20の場合systemctl list-unit-files | grep enabled
サービスの
有効化
CentOSの場合chkconfig sshd on
Fedora20の場合systemctl enable sshd.service
サービスの
無効化
CentOSの場合chkconfig sshd off
Fedora20の場合systemctl disable sshd.service

ネットワークの設定

ネットワークまわりの設定はこれまでの方法(CentOS等の設定方法)と変わりないようです。

# diff -u /etc/sysconfig/network.orig /etc/sysconfig/network
--- /etc/sysconfig/network.orig 2014-06-26 16:56:00.223810936 +0900
+++ /etc/sysconfig/network      2014-06-26 17:02:09.848893449 +0900
@@ -1 +1,4 @@
 # Created by anaconda
+
+NETWORKING="yes"
+GATEWAY="192.168.0.1"

ただし、NICのデバイス名がeth0等ではなく、p2p1といった名前になっています。

# diff -u /etc/sysconfig/network-scripts/ifcfg-p2p1.orig /etc/sysconfig/network-scripts/ifcfg-p2p1
--- /etc/sysconfig/network-scripts/ifcfg-p2p1.orig      2014-06-26 16:38:20.626798779 +0900
+++ /etc/sysconfig/network-scripts/ifcfg-p2p1   2014-06-26 16:54:57.349810215 +0900
@@ -1,5 +1,7 @@
 TYPE="Ethernet"
-BOOTPROTO="dhcp"
+BOOTPROTO="none"
+IPADDR0="192.168.0.225"
+PREFIX0="24"
 DEFROUTE="yes"
 IPV4_FAILURE_FATAL="no"
 IPV6INIT="yes"

ホスト名の設定

ホスト名は/etc/hostnameに記載します。CentOS等では/etc/sysconfig/networkにHOSTNAME="..."な形式で設定していたのですが、これもFedora20では設定方法がかわったのでしょうか?(まだ調査しきれていないです...)

# cat vmfedora20 > /etc/hostname

SELinuxの無効化

SELinuxは無効化しておきます(ごめんなさい...)。

# diff -u /etc/selinux/config.orig /etc/selinux/config
--- /etc/selinux/config.orig    2014-06-26 17:04:15.353965308 +0900
+++ /etc/selinux/config 2014-06-26 17:04:42.989963918 +0900
@@ -4,7 +4,7 @@
 #     enforcing - SELinux security policy is enforced.
 #     permissive - SELinux prints warnings instead of enforcing.
 #     disabled - No SELinux policy is loaded.
-SELINUX=enforcing
+SELINUX=disabled
 # SELINUXTYPE= can take one of these three values:
 #     targeted - Targeted processes are protected,
 #     minimum - Modification of targeted policy. Only selected processes are protected.

起動時のログをコンソールに出力させる(grub.cfgの設定)

OS起動時のグラフィカルな起動画面もよいのですが、起動時のログがコンソールに出力されないと不安になるので、ログが出力されるよう設定します。

以下のdiffではちょっと分かりにくいですが、"rhgb quiet"というオプションを除去しているだけです。

# diff -u /boot/grub2/grub.cfg.orig /boot/grub2/grub.cfg
--- /boot/grub2/grub.cfg.orig   2014-06-26 16:59:24.535293206 +0900
+++ /boot/grub2/grub.cfg        2014-06-26 17:00:01.614295112 +0900
@@ -72,7 +72,7 @@
        else
          search --no-floppy --fs-uuid --set=root 6b176d94-7c9a-4ff7-a007-51d0cd40ccaa
        fi
-       linux   /boot/vmlinuz-3.14.8-200.fc20.x86_64 root=UUID=6b176d94-7c9a-4ff7-a007-51d0cd40ccaa ro vconsole.font=latarcyrheb-sun16  rhgb quiet LANG=ja_JP.UTF-8
+       linux   /boot/vmlinuz-3.14.8-200.fc20.x86_64 root=UUID=6b176d94-7c9a-4ff7-a007-51d0cd40ccaa ro vconsole.font=latarcyrheb-sun16  LANG=ja_JP.UTF-8
        initrd /boot/initramfs-3.14.8-200.fc20.x86_64.img
 }
 menuentry 'Fedora, with Linux 0-rescue-78fd1bcdf2504b058f547faf585019df' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-0-rescue-78fd1bcdf2504b058f547faf585019df-advanced-6b176d94-7c9a-4ff7-a007-51d0cd40ccaa' {

yum update

ここまでで一旦OSを再起動し、IPアドレスが付与されているか等の確認を行ってからyum updateを実行します。

# yum -y update

sudo設定について

Fedora20ではminimalインストールでもsudoがインストールされています。また、wheelグループがsudoできるよう設定されており、visudoで改めて設定する必要はありませんでした。

ユーザの追加

一般ユーザを追加します。sudoできるようにしたいので、セカンダリグループとしてwheelを指定します。

# useradd -g users -G wheel -m -s /bin/bash fpig
# passwd fpig

これでインストール後の設定は一通り完了です。後はsshでログインし、パッケージの追加等で生活環境を整えていきます。

まとめ

Fedora20のインストール後の設定手順をまとめてみました。initデーモンがsystemdに置き換えられた点がCentOSとの大きな違いでした。サービスの有効・無効を切り替えるコマンドもchkconfigからsystemctlになっており、当面はコマンドを調べながらの利用になりそうです。

第1回Webスクレイピング勉強会@東京に参加してきました

第1回Webスクレイピング勉強会@東京に参加してきました

第1回Webスクレイピング勉強会@東京に参加してきました。

シェルスクリプトでスクフェス(スクレイピングフェスティバル)」というタイトルで、シェルスクリプトによるWebスクレイピングの方法について発表してきました。

発表スライドのURLは以下になります。

第2回Webスクレイピング勉強会@東京の開催も決定しており、次回も楽しみです。

補足事項

発表スライド内のスクレイピング手順例は、とある新聞社のデータに対するものです。

勉強会での発表時は今現在のスクレイピング手順を説明していましたが、Web上に公開している発表スライドについては、古いデータ(HTML内のフォーマットが少し異なっている)に対するスクレイピング手順に差し替えています。