Fedora20をインストールしてみた
Fedora20をインストールしてみた
Fedora20の環境を用意する必要があったので、インストール後の設定手順をまとめてみました。
sshログインのみで使用する形態を想定しているため、GUIの設定は行わず、インストール後に最低限の設定をするだけの手順になっています。
インストールCD-ROMの入手
今回は以下のURLからネットワークインストール用のCD-ROMをダウンロードしました。インストール作業中に出てくる「ベース環境」の画面で「最小限のインストール」を選択すると、(CentOSでいうところの)minimalインストールになるようです。
- http://fedoraproject.org/ja/get-fedora-all
- http://download.fedoraproject.org/pub/fedora/linux/releases/20/Fedora/x86_64/iso/Fedora-20-x86_64-netinst.iso
インストール後の作業
不要なサービスの停止
必要に応じて不要なサービスを停止します。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内のフォーマットが少し異なっている)に対するスクレイピング手順に差し替えています。
Security Casual Talks 2014#2(すみだセキュリティ勉強会)に参加してきました
Security Casual Talks 2014#2(すみだセキュリティ勉強会)に参加してきました
Security Casual Talks 2014#2(すみだセキュリティ勉強会)に参加してきました。
勉強会参加者のツイートは、ハッシュタグ#sumida_secにて参照できます。
以下は勉強会のメモです。私が間違って理解したままメモを書いている箇所もあるかと思いますので、その点にご留意ください。 また、カッコ書きした項目は私の感想・意見となっています。
無線LANデンパゆんゆん観察
- 発表者は@ozuma5119さん
スライドは以下のURLで公開されています
(私が30分遅刻しての到着だったため、発表内容を聴くだけになっていました...)
CRYPT+YOU,UNDERSTAND TODAY!
- 発表者は@inaz2さん
資料は以下のURLで公開されています
- 換字式暗号
- 文字、ブロック単位でずらす暗号で、古典暗号のひとつ
- 「いくつずらしたか」が暗号鍵になる
- (古典暗号、現代暗号という区分が存在するみたいです)
- 換字式暗号の例としてはシーザー暗号がある
- NSAの採用担当者のツイートを例にした換字式暗号の解読デモ
- https://twitter.com/NSACareers/status/463321993878994945
- 英語だと"e","the"が多くでるという特徴を生かして解読する
- 換字式暗号を自動解読してくれるサービスが存在する
- ただし、これは「英語でかかれた文章」という前提があるから解ける、とのこと
- 文字、ブロック単位でずらす暗号で、古典暗号のひとつ
- xorスクランブルの復元
- (写真フイルムのネガポジ変換みたいなイメージ、反転→反転で元のデータに戻る)
- RC4(Rivest Cipher 4)
- AES(Advanced Encryption Standard)
- 共通鍵暗号方式のうち、ブロック暗号と呼ばれるもの
- 入力は128bit固定で、鍵長は126,192,256bitから選択する
- 128bitじゃない平分の時は、128bitのブロック毎に処理する。
- RSA
$ openssl genrsa 192 | openssl rsa -modulus ... Modulus=AAAA $ msieve -e -v AAA
- 実際に鍵長を指定するときは、2048bitよりも大きい長さを用いるほうがよい
RSAによる暗号化・復号化は処理(計算)が重いので、主に鍵共有、デジタル署名に使われる(「ハイブリッド暗号方式」と呼ばれる)
DH(Diffee-Hellman key exchange)鍵交換
TSL/SSL暗号化スイートの読み方
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 鍵共有 → ECDHE 通信相手の認証 → RSA データそのものの暗号化 → AES_128_CBC メッセージの改竄見地 → SHA1
Metasploitでペネトレーションテスト
- 発表者は@super_a1iceさん
- Metasploit Frameworkの基本的な使い方に関する話
- Metasploit Framework
- (触ったことがないツールなので、話を聴ききながらデモを見るだけになっていました...)
まとめ
Security Casual Talks 2014#2(すみだセキュリティ勉強会)のメモをまとめてみました。正直、スライドが公開されているのでメモをまとめる必要性は低いと思っていました。しかし、自分の理解をメモにまとめるのだと考えると、スライドを見返したりする必要があり、なかなか勉強になります。
暗号の話は学生時代に習った内容の復習的なところが多いものの、すっかり忘れていたりする項目もありました。今回の勉強会を元に知識をキャッチアップできればと思います。
BaaS(Backend as a Service)勉強会に参加してきました
BaaS(Backend as a Service)勉強会に参加してきました
BaaS(Backend as a Service)勉強会に参加してきました。
勉強会の参加者のツイート内容は#BaaS (Backend as a Service) 勉強会のつぶやきログにてまとめられています。
以下のメモについては私のメモをまとめただけなので、内容に間違いがある可能性にご留意ください。
そもそもBaaSとは?(予習)
初めて聞くキーワードに関する勉強会の場合、予習しておかないとメモをまとめるのに苦労するため、あらかじめBaaSについて簡単に調べてみました。
BaaSとは
アピアリーズさんのBaaSとはの解説を引用すると、「モバイルアプリサービスの運用に必要な汎用的なサーバ機能を提供するクラウドサービスの一形態です。」とのこと。
- モバイルアプリの開発はデバイス側(フロント側)、サーバサイド側、サーバの構築がセットになっている。
- デバイス側で完結するアプリは殆ど例を見なくなっている。
- モバイルアプリのサーバ構築では、以下の2点に頭を悩ませることになる。
- スケーラビリティ
- アイドルコスト(遊休コスト)
スケーラビリティとアイドルコスト
- 自前でのハードウェア確保の場合
- スケールアップの度にサービス停止が発生する。
- 場合によっては新しいサーバへデータを移行する必要がある。
- スケールアップの面倒がないように、始めから高性能なサーバを用意すると、今度はサーバが遊んでいる(アイドルコストが大きい)状態になってしまう。
- スケールアウトの場合、入念な設計と高度なサーバ管理技術が必要であり、実施は容易ではない。
そういえば、WEB+DB PRESSのVol.78の特集記事「DMM.com開発ノウハウ大公開」でもDMM.comさんのサーバ機器の変遷(サーバラックの追加・増設やデータセンターの移行)が解説されていました。
これらの問題への解決方法としてクラウドサービスがあり、その一つとしてBaaSがある、という話のようです。
○aaS
また、BaaS以外にも○aaSと名前のつくサービスがあり、以下のような分類となっています。
- IaaS(Infrastructure as a Service)
- PaaS(Platform as a Service)
- Heroku,OpenShift,DotCloud
- SaaS(Software as a Service)
- Salesforce Sales Cloud,Googleドキュメント,Microsoft Office 365
- BaaS(Backend as a Service)
- (今回の勉強会にでてくるサービス)
図で表現すると、利用者側から見た○aaSの分類は以下のようになります。
これらを踏まえてBaaS勉強会に参加してみました。
HTML5 Japan Cupについて
- 発表者は白石俊平(html5j管理人)さん。
- 発表スライドは以下のURLで公開されています。
- html5jについて
- 「日本が、世界のWebシーンをリードする存在になる。」を目標に掲げている。
- わりと規模が大きくなってきた。
- html5jのサブコミュニティ→14個くらいある。
- 現在開催中のHTML5 Japan Cup 2014のお話。
HTML5開発者にとってのBaaS活用のメリット
- 発表者は安藤幸央さん
- そもそもBaaSとはどのようなものか?
- サーバサイド開発用の言語が苦手な方でも、BaaSならサーバ機能を使った アプリを作れる!
- 発表スライドは以下のURLで公開されています
- BaaSの中にはサービスの中にはMBaaSに特化したものもある,
- クラウドサービスを実際の天候に見立てた場合、晴れだけでなく、雨の日もある。これを避ける「傘」がBaaSであると考えている
- 例えばfacebookのようなサービスをつくろうと考えた場合
- フロントエンドだけでなく、サーバも作り込む必要がある(フロント-サーバの連系)
- フロントは自分たちで作成し、バックエンドは既存のものを組み合わせて使おう、という考え
- フロントエンドだけでなく、サーバも作り込む必要がある(フロント-サーバの連系)
- サービスを作る際に必要な機能
- facebookとParse
- 最近のBaaS関連のニュースで大きかったトピック
- facebookが"Parse"というBaaSの会社を約84億円で買収した
- 無料+使いやすくしたために、買収後の利用者が10倍になった
- BaaS活用の観点
- スピード、(人的)リソース、コスト、の3つが重要
- スマホアプリ開発時の割合
- 開発する前に設計
- 開発→サーバ、クライアントの開発割合は50%/50%
- BaaSを使うとクライアント側の開発に集中できる
- BaaSの利用が向く開発
- 開発エンジニアが少ない場合
- バックエンドエンジニアのリソースが割けない場合
- 一人で開発する場合
- BaaSの利用が向かない場合
- 開発メンバが多い場合orスキルの高いメンバが多い場合はBaaS不要
- バックエンドエンジニアのリソースが確保できる場合
- 一般的な機能の組み合わせでできるサービスを構築する場合
- (BaaSを使うまでもない、という話?)
- Instagramの開発エピソード(BaaSが無かった頃のサービス開発エピソード)
- 最適なBaaSを選択
- BaaSベンダを選ぶ際の基準に関する話
- (発表者のスライド(38枚目)を見てもらった方が良いかも...)
- BaaSのデメリット
- セキュリティ→ベンダが対応してくれる
- ベンダロックイン→二つのサービスにまたがって動作させる、OSSのBaaSを活用
- ダウンタイム→あきらめと、落ちる前提でサービスを企画する
- テスト切り分け
- 価格設定
- 機能が足りない
現役BaaS開発者パネルディスカッション
- モデレータは冨田慎一(株式会社マッシュマトリックス)さん
- BaaS開発者として以下の方々が登壇されていました(敬称略)
- 荒川義弘(株式会社アピアリーズ)さん
- 石塚進(Kii株式会社)さん
- 野田雄也(ニフティ株式会社)さん
各社のBaaSの特徴紹介の後、モデレータの方から出されたテーマを元にBaaS開発者の方が話すという内容でした。その後、参加者からの質疑応答タイムとなっていました。
モデレータの方から出されたテーマを元にBaaS開発者の方が話した内容
(テーマその1.)日本のBaaS市場、これから伸びてゆく?盛り上がってゆく?そして、ぶっちゃけ儲かっている?
(テーマその2.)海外のBaaSベンダーは40社以上あり乱立している。大手の会社もBaaSやろうとしており、海外勢をどう考えている?海外と自分たちのBaaSベンダの違いは何であると考えているか?
- アピアリーズさん
- 海外/国内の違い→日本語対応、サポート。
- 日本国内でワンストップになるのが強みだと考えている。
- Kii株式会社さん
- モバイルでもローカルに特化するのも意味があると考えている。
- マルチサイト対応しているので、日本で作って中国に持っていけるのは自分たちの強みだと考えている。
- ニフティ株式会社さん
- 一番大きいのはサポートが日本であること。
- 企業で使おうと思うと早い時間で日本語でレスポンスがあるのはかなりのメリットと考える。
- (データセンタが日本にあるので)レイテンシが低いのもポイント
- が、海外からのレイテンシが大きくなるという逆の見方もあるとのこと
- アピアリーズさん
(テーマその3.)HTML5jカップでBaaSのからみで→MBaaSでモバイル、ネイティブアプリ/Webアプリという文脈でモバイルに限らずWebアプリを考えたときにBaaS利用はありえる?BaaS利用でHTML5はこれからどうなる?
- アピアリーズさん
- WebアプリでBaaSは十分にアリだと考えている。
- アプリKeyが無くてもOKにしている、WebアプリとBaaSは親和性が高いと考えている。
- Kii株式会社さん
- アリだと思う。元々BaaSに'M'が付くのはMobile(の開発)が特殊だったから
- Ruby on RailsとかはBaaSで置き換えてもよいのではと考えている。
- ネイティブ/Webアプリの文脈→前者はbaaSある。
- WebアプリはBaaSが取りに行ってないし、やろうという人もいない。我々としても後者にチャレンジしたいと考えている。
- ニフティ株式会社さん
- JavaScript SDKでキー書き出す。
- セキュリティはsignatureチェック、機能制限をかけようという考えている。
- PhoneGap→ブラウザオンリーでアプリが作成できるという開発環境。ライトなアプリはこれで十分。
- アピアリーズさん
(テーマその4.)今回の参加者からアンケートを取ったらサーバ系の人が多い。インフラ/DB/ミドルの構成教えて
(テーマその5.)言ってみればBaaSってサーバエンジニアをいらなくする技術なのでは?そう考えた時にサーバエンジニアのキャリアパスは?
質疑応答
Q1.BaaSを使ってmobile appを作ることを考えたとき、どういうアプリがBaaSに向いていると思いますか?
- アピアリーズさん
- 弊社のBaaSではキャンペーンアプリが多いという歴史があり、短期間、低コストであった。
- ヘビーなアクセスがあるようなゲームは自前のインフラとか考慮したりする必要があるので向いてないと思う。
- Kii株式会社さん
- 我々が色々な企業さんと話すと、いろいろなジャンルに向いていると思う。
- BaaSはテクニカルじゃない部分がある。
- アプリを複数持つとバックエンドを共通化したくなる。
- そのため、アプリではなく業務として共通化したいのでは。
- ニフティ株式会社さん
- 私もなんでもできると思っている。
- IaaSと同じでun-controllableなものをどうするかという点ではBaaSも同じ。
- un-controllableな箇所を許容できるならもつ、そうでないなら持たない。
- アピアリーズさん
Q2.将来どこで他社と差別化(機能、料金とか)を図ろうと考えていますか?
Q3.(Kii株式会社さんはオンプレを提供しているが)なぜオンプレしようと思ったのですか?また、他の会社はオンプレやる予定はありますか?
- アピアリーズさん
- オンプレはOEMで提供を検討している会社が数社ある。
- Kii株式会社さん
- オンプレに踏み切った理由→エンプラ向けの需要があるから。
- 米国のBaaS業者もエンプラに行っている。
- 既にあるエンプラ(MEEP)を喰いに行っている。
- ニフティ株式会社さん
- オンプレの話は問い合わせが多々ある。エンプラ系で多い。
- が、現状はできていない。検討は引き続き行っており、うまい方法があるか考えている。
- アピアリーズさん
飛び入りLT
質疑応答の後、自作BaaSサービスを作成された方の飛び入りLTがありました。福岡からの参加(!)とのことでした。
- 発表者は@nobkzさん
- Milkcocoaという自作BaaSサービスの紹介
- エンドユーザがWebアプリを作れないか!という観点で作成した
- あわせてflowerというグラフィカル言語の紹介
- Raspberry Piの上でも稼働するようです
まとめ
BaaS勉強会のメモをまとめてみました。今回は予習をしていったので楽にメモをまとめられると考えていたのですが、やはり四苦八苦してしまいました。メモを取りながら話のつながりをリアルタイムにまとめあげるという要領のよさが必要そうです...。
第1回SoftLayer勉強会に参加してきました
第1回SoftLayer勉強会に参加してきました
第1回SoftLayer勉強会が開催されたので参加してきました。
勉強会の告知ページの写真がラウドパークを彷彿とさせる感じだったので、Tシャツにジーンズという風貌で参加したところ、ほとんどの参加者が背広!まるで衣替えの日に一人だけ冬服で登校した中学生のような気分になってしまいました...(クラウド系の勉強会は背広の人が多い傾向があるようです)。
以下は勉強会のメモですが、クラウドまわりの知識に疎いので私の理解に間違いがある可能性にご留意ください。
SoftLayer Introduction
- 発表者は@urasakoさん
- 今回の勉強会の企画を行った方
(まずそもそも)クラウドってなに?
- NIST(アメリカ国立標準技術研究所)が「クラウド」の定義を行っている
-
- SoftLayerはIaaS(Cloud Infrastructure as a Service)を提供する
- 米国、アジア、ヨーロッパ合わせて13のデータセンタがある
- SoftLayerの利用形態
- server
- Bare Metal Server
- 2〜4時間ほどでプロビジョニング可能
- Virtual Server
- Private/PublicなVirtual Serverを構築できる
- Bare Metal Server
- storage
- Object Storage
- OpenStack swiftベースのオブジェクトストレージを持っている
- SAN(Storage Area Network)
- NAS(Network Attached Storage)
- CDN(Contents Delivery Network)
- QuantaStor
- Object Storage
- server
- SoftLayerのWebポータルサイト上で世界中のリージョンが見える
- CDN単独の提供も可能
- Automation & API
- Auto-scaling機構はないけれどAPIで操作できる
SoftLayerに関する日本語の資料について
- "SoftLayer_JPN"でググるとIBMのサイトがヒットする
- が、サイトが重い!
- 資料の閲覧にはIBM-IDが必要
- ゲーム基盤に選ばれているIBM SoftLayer
- "SoftLayer_JPN"でググるとIBMのサイトがヒットする
SoftLayerユーザ会について
- 日本SoftLayerユーザ会(JSLUG)が発足!
- 今後のSoftLayer関連の勉強会、イベント
- SoftLayer勉強会 in Hokkkaido(2014/06/12)
- SoftLayer Night Hands-on
- 2014/06/20
- 2014/06/24
- 2014/07/01(予定)
- 2014/08/01(予定)
- JTF(06/22)で'Hands-on
- 第2回SoftLayer勉強会(2014/07/25)
Email Delivery on Email
- 発表者は@nakansukeさん
- SoftLayerとSendGridの話
SendGridとは
- SoftLayerとSendGridの関係
- SendGridはSoftLayerで動いている
- "Built on SOftLayer,"
- 2011年6月にSoftLayerとSendGridはパートナーに
- SendGridのVP ofProduct&MarketingがもとSoftLayer
- Email Infurastracture as a Service(仮)
- ヘッダを見るとSendGridから来ていることが分かる
- 発表者はSendGridに関わるようになってから、届くメールヘッダを見る癖がついたとのこと
- SoftLayerからメールを送るときは実質SendGrid一択!
- 通数で料金が決まる
- SoftLayerとSendGridの関係
メールについて改めて復習
メールの到達性について
構造計画研究所について
- SendGridの日本代理店
- ブログ、日本語のドキュメントで情報発信している
- 「困ったときは弊社にご相談ください」「無料です!」とのこと
SoftLayer x Bit-isle = ? Bit-isleが提供するハイブリッドクラウドソリューション
発表者は成迫剛志さん
ビットアイル総合研究所
OpenStackに強く(ノウハウがある、という意味で)、所内の一定数の人にはOpenStackの研修を受けてもらっているとのこと
SoftLayerの色
- SoftLayerのデータセンターではラックの配線をキレイに色分けしているという話
- 緑色は管理ネットワーク(1本)
- 青色はプライベートネットワーク(2本)
- 赤はパブリックネットワーク(2本)
- 5本×3種類のネットワーク構成になっている
ラックは最初にきっちり配置し、後から追加・変更しないため、配線がキレイに揃っている
SoftLayerのプライベートネットワーク活用例
- ビットアイルのデータセンターとSoftLayer間のプライベートネットワークの活用例
ビットアイルデータセンター側にDBやioDriveなどの高速IOサーバーを用意し、SoftLayerとはBI Direct Accessで接続することでIOのレイテンシ低減
インターネットを介さない社内LAN/WANとの直接接続
- SoftLayerが提供するインターネットを介さないプライベートネットワークを活用する話
- 国際回線費用の大幅な削減になるとのこと
LT:今さらでも聞きたいSoftLayer network〜VLANとVPNを何とかしたい〜
- 発表者は新島智之さん
- 利用者の観点からのSoftLayerネットワーク構成に関する話
- SoftLayer上に最初のサーバを作成した段階で、パブリック/プライベートVLANが作成される
- IPは利用者側では付けられない
- パブリックVLANには119.x.45.74/29のサブネットが割り当てられる
- プライベートVLANには10.x.158.2/26のサブネットが割り当てられる
- サーバの数が増えてゆくと、自動的にサブネットが追加される
- Portable IPを使うと、VLANで使えるサブネットを追加できる
- 例えば、119.x.63.2/29(パブリックVLAN)、10.x.172.2/26(プライベートVLAN)のようなサブネットを追加できる
- 追加したサブネットはAliasで設定する仕組みのため、別のサーバに移動できる(IPアドレスの割り当てを動的に変更できる)
- VLAN間のルーティング
- VLAN spanningという機能をONにすることで、VLAN間のルーティングが行えるようになる
- 異なるデータセンターのVLAN間もルーティング可能
- 複数VLANとの通信
- Trank portを利用することで、複数のVLANと接続できる
- 最初のVLANはnative VLANとして扱われ、追加したVLANはtag VLANとして扱われる
コマンドラインで始めるSoftLayer
$ curl "https://${SL_USERNAME}:${SL_API_KEY}@api.softlayer.com/rest/v3/SoftLayer_Account.xml?objectMask=fitstName;lastName;id" (以降にXMLが続く)
- PythonによるSoftLayer CLIの話
- コマンド名が"sl"
- 現在のバージョンは3.1.0
- v3.1.0では以下のコマンドが追加されている
- compute
- server(Bare metal servers)
- vs(Virtual Servers)
- networking
- cdn(Content Delibery Network service management)
- storage
- snapshot(iSCSI snapshots)
- general
- ticket(Manage account tickets)
- compute
- v3.1.0では以下のコマンドが追加されている
- PythonにもSoftLayerのAPI Clientが用意されている
- 料金表を生成するサンプル
- https://github.com/ryumei/softlayer-utility/blob/master/sl-vs-prices.sh
- "--test"でdry-run
- その他にもAPIを利用したツール
- Object Storage Uploader
- Configuration Finder
- リファレンス
LT:ベアメタルサーバを作ってみた
- (集中力が途切れてしまってメモを取らずに話を聞くだけになっていました...)
LT: Riak on SoftLayer
- (こちらも話を聞くだけになっていました...)
- 発表者は@monmondawaさん
- 分散データベースriakの話
まとめ
第1回SoftLayer勉強会の参加メモをまとめてみました。SoftLayerって何?という状態で参加していたので、後から自分が読み返しても分かるようにメモをまとめるのが大変でした。初めて参加する勉強会には予習が必要だと痛感しました。SoftLayerは興味を惹かれるので、第2回も参加してみようと思います。
更新履歴
- 「メールの到達性について」の項目で説明と逆の意味にとれる文章になっていたのを修正しました。(5/27)
ご注文はうさぎですか?第7羽からインスパイアを受けてHTML5で「ごちうさパズル」を作ってみた
ご注文はうさぎですか?第7羽からインスパイアを受けてHTML5で「ごちうさパズル」を作ってみた
ごちうさパズル
ご注文はうさぎですか?の第7羽Call Me Sister.のストーリー中で、ココアがパズルを完成させてしまうというエピソードがありました。
このエピソードからインスパイアを受け、「ごちうさパズル」を作ってみました。
あそびかた
選択した分割数(ピースの数)に応じて画像がパズルのピース毎にシャッフルされます。最大で81ピースまで選べるようにしてあります。ごちうさ本編中では4000ピースのパズルだったので、81ピースはだいぶ少ないですが、なかなか没頭できます。
解くのが面倒になった時は"RESET"ボタンを押すとパズルが元に戻ります。
ごちうさパズルの実装
パズルのエピソードを観た時、HTML5で実装できそうだと思い立ったのですが、実装で地味にハマるところが多かったです。
パズルのピースをシャッフルする際の乱数データの取得方法
パズルのピースをシャッフルする際、乱数を使ってデータをシャッフルしています。パズルのピースは重複しないため、値が重複しないように乱数値をあつめる必要があります。かなり昔のI/Oというコンピュータ雑誌に「重複しない乱数列を得る方法」的な投稿コラムがあったのですが、当時はその原理を理解できませんでした。
が、実際には難しい話ではなく、以下の方法で実現できます。
- あらかじめ配列に値を入れておく(等差数列でOK)
- 乱数の値を取得し、配列のインデックスとする(乱数の範囲は0〜(配列のサイズ-1))
- インデックスが指す値を配列の末尾の値と入れ替える
- 乱数の範囲を1減らす
- 乱数の範囲が0より大きい間、処理を繰り返す
JavaScriptによるサンプルは以下のようになります。
var value_list = new Array(10000); // あらかじめ配列に値を入れておく for (var i = 0; i < value_list.length; i++) { value_list[i] = i; } var range = value_list.length - 1; do { // 乱数の値を取得し、配列のインデックスとする var index = ~~(Math.random() * range); // インデックスが指す値を配列の末尾の値と入れ替える var tmp = value_list[index]; value_list[index] = value_list[range]; value_list[range] = tmp; // 乱数の範囲を減らす range--; } while (0 < range); // 乱数の範囲が0より大きい間、処理を繰り返す for (var i = 0; i < value_list.length; i++) { console.log(value_list[i]); }
上記のサンプルを試してみます。配列の中身を一行毎出力しており、単に行数をカウントした値とsort,uniqで重複する値を除去した行数の値が同じであることから、重複しない値であることが分かります。動作環境はNetBSD-6.1-i386です。
$ node sample.js | wc -l 10000 $ node sample.js | sort | uniq | wc -l 10000
値もシャッフルされています。
$ node sample.js | head 2537 6218 7624 7580 692 4295 2508 6329 1150 4781
Pemtium M 1GHz,データの件数1万件の場合で0.4秒程度の処理時間です。
$ time (node sample.js 2>&1 > /dev/null) real 0m0.499s user 0m0.462s sys 0m0.020s $ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 9 model name : Intel(R) Pentium(R) M processor 1000MHz stepping : 5 cpu MHz : 996.80 fdiv_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu vme de pse tsc msr mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 tm
参考までに、取得した乱数値が重複していないか逐一確認する処理方法の場合と比較してみます。30秒程度かかっており、こちらはオススメできない方法となっています。
$ cat sample-bad.js var value_list = new Array(10000); for (var i = 0; i < value_list.length; i++) { var index; // 配列の値が初期値(-1)でない間繰り返す do { // 乱数の値を取得し、配列のインデックスとする index = ~~(Math.random() * value_list.length); } while (value_list.indexOf(index) != -1); value_list[i] = index; } for (var i = 0; i < value_list.length; i++) { console.log(value_list[i]); } $ time (node sample-bad.js 2>&1 > /dev/null) real 0m31.960s user 0m30.481s sys 0m0.040s
HTML5 Canvasと画像サイズの関係
ごちうさパズルではピースの数を選択できるようにしています。そのため、画像の幅・高さと1ピースあたりの幅・高さが割りきれないことがあり、ピースを並べて行った結果、Canvasや画像のサイズをわずかにはみ出してしまうことがあります。
今回のケースで考えると、画像サイズは600x600で、パズルのピースはNxNとしており、49pcs(7x7)と81pcs(9x9)の場合に幅・高さが割りきれない値になります。当初、単純に四捨五入(Math.round())する方法をとったのですが、Firefoxでは動作するもSafariではおかしなピースが描画されるという、ブラウザの挙動の違いにハマってしまいました。
$ node > 600/2 300 > 600/3 200 > 600/4 150 > 600/5 120 > 600/6 100 > 600/7 85.71428571428571 > 600/8 75 > 600/9 66.66666666666667
結果、割りきれないケースの場合は、扱う画像の範囲を少し小さく扱うことで対応しました。
> 600/9 66.66666666666667 > 66*9 594 /* 594pxを画像の幅・高さとする */
Canvas.strokeStyle()の設定
これは私がCanvasの仕様を把握できていなかっただけなのですが、Canvas.strokeStyle()などでストロークの色を変更すると、既に描画したストロークの色も一緒に変更されるようです(Firefoxでしか確認してないので、他のブラウザだと違うかもしれません)。描画したデータについても、内部的には状態を保持しているようです。
まとめ
ご注文はうさぎですか?第7羽のエピソードを元に「ごちうさパズル」を作ってみました。HTML Canvasまわりではブラウザ毎の挙動の微妙な違いにハマってしまいました。Canvasまわりは私の理解が追いついていないところもあり、もう少し調べてみようと思います。
pmml(MMLコンパイラ)によるMIDIファイル生成環境を構築してみた
pmml(MMLコンパイラ)によるMIDIファイル生成環境を構築してみた
ポケットミクちゃん本を読む会(その2)で使用するMIDIファイルを用意しておきたいと考え、MIDIファイルの生成環境を構築してみました。
以前開催した、やはり俺の耳コピはまちがっている。(その1) ゆるゆに-ゆるいUNIX勉強会-#6でもMIDIファイル生成環境の構築を行ったりしましたが、改めて備忘録として手順をまとめておこうと思います。
構築するMIDIファイル生成環境について
NetBSD-6.1-i386上に、pmmlとTiMidity++をインストールしてみます。pmmlはMML(Music Macro Language)コンパイラと呼ばれるツールで、MMLで記述した楽譜情報からMIDIファイルを生成します。TiMidityはソフトウェアMIDI音源で、pmmlで生成したMIDIファイルを再生するのに利用します。
PMMLをビルドする
まずはPMMLをビルドします。オリジナルのソースファイルはftp://ftp.u-aizu.ac.jp/u-aizu/pmml/にありますが、pmml-0.2p1.tar.gz(1998/06/17)以降は新しいバージョンがリリースされておらず、そのままの状態では現在の環境でビルドできません。
そのため、pmml-0.2p1.tar.gzをビルドが通るように修正したものを以下のリポジトリに用意しました。
cloneしてmakeするだけでビルドできます。筆者の環境ではNetBSD-6.1-i386とDebian GNU/Linux 7.4 (wheezy)でビルドできることを確認できています。
$ git clone https://github.com/furandon-pig/pmml-0.2p1-fork-201405.git $ cd pmml-0.2p1-fork-201405/
ビルドは単にmakeコマンドを実行するだけであり、./configure --prefix=...のような指定ができません(そもそも現状ではconfigure未対応です...)。インストール先を変更したい場合は、以下のようにMakefile中のLIBDIR,BINDIRを修正します。以下の例では/opt/pmml-0.2p1-fork-201405にインストールする設定に修正しています。
$ diff -u Makefile.orig Makefile --- Makefile.orig 2014-05-14 15:32:04.000000000 +0900 +++ Makefile 2014-05-14 15:33:04.000000000 +0900 @@ -5,10 +5,10 @@ #------ configuration parameters ------ # The directory to which PMML library files are installed. -LIBDIR = /usr/local/lib/pmml +LIBDIR = /opt/pmml-0.2p1-fork-201405/lib/pmml # The directory to which executable files are installed. -BINDIR = /usr/local/bin +BINDIR = /opt/pmml-0.2p1-fork-201405/bin # Command name of the C compiler CC = gcc
あとはmake,make installでビルドとインストールは完了です。
$ make 2>&1 | tee -a _make.log $ sudo make install 2>&1 | tee -a _make_install.log
TiMidity++をビルドする
TiMidityについてもconfigure,make,make installで完了します。パッケージで提供されているソフトウェアですが、今回は自分でビルドしてみます。インストール先は/opt/TiMidity++-2.13.0としています。
$ cd work $ wget http://ftp.jaist.ac.jp/pub/sourceforge/t/project/ti/timidity/TiMidity++/TiMidity++-2.13.0/TiMidity++-2.13.0.tar.gz $ tar zxvf TiMidity++-2.13.0.tar.gz $ cd TiMidity++-2.13.0 $ ./configure --prefix=/opt/TiMidity++-2.13.0 2>&1 | tee -a _configure.log $ gmake 2>&1 | tee -a _make.log $ sudo gmake install 2>&1 | tee -a _make_install.log
音源ファイルを用意する
TiMidityを使用するには、「音源ファイル」と呼ばれる、音色のファイル集が必要です。以下の手順で用意します。
$ cd work $ wget ftp://ftp.iij.ad.jp/pub/linux/gentoo/distfiles/shominst-0409.zip $ sudo mkdir -p /opt/TiMidity++-2.13.0/share/timidity $ cd /opt/TiMidity++-2.13.0/share/timidity $ sudo unzip /home/fpig/work/shominst-0409.zip # ディレクトリ直下に展開されるので注意
timidity.cfg内のファイルパスを自分の環境に合わせて修正します。/opt/TiMidity++-2.13にインストールしたtimidiyがデフォルトで参照するファイルパスに一致するよう音源ファイルを置いています(このためTiMidity側での音源ファイルの場所設定は不要です)。
$ diff -u timidity.cfg.orig timidity.cfg --- timidity.cfg.orig 1996-04-08 03:31:00.000000000 +0900 +++ timidity.cfg 2014-05-14 15:15:47.000000000 +0900 @@ -30,9 +30,9 @@ #dir /usr/local/lib/timidity # -dir /nethome/sak95/shom/lib/timidity/inst/GUS -dir /nethome/sak95/shom/lib/timidity/inst -dir /nethome/sak95/shom/lib/timidity/inst/test +dir /opt/TiMidity++-2.13.0/share/timidity/inst/GUS +dir /opt/TiMidity++-2.13.0/share/timidity/inst +dir /opt/TiMidity++-2.13.0/share/timidity/inst/test bank 0 source default.cfg
pmml,timidityコマンドのパスを設定する
pmml,timidyのコマンドを通常と異なる/opt以下にインストールしているため、環境変数PATHを設定します。
$ export PATH=$PATH:/opt/pmml-0.2p1-fork-201405/bin $ export PATH=$PATH:/opt/TiMidity++-2.13.0/bin
それぞれのコマンドが見つかることを確認して設定完了です。
$ which pmml timidity /opt/pmml-0.2p1-fork-201405/bin/pmml /opt/TiMidity++-2.13.0/bin/timidity
MMLのサンプルからMIDIファイルを生成する
MMLのコンパイル環境とMIDI再生環境が構築できたので、MMLのサンプルからMIDIファイルを生成してみます。 PMMLのexamplesディレクトリにMMLのサンプルがあるので、これを利用します。
"pmml <MMLファイル名>"でMMLをコンパイルします。MIDIファイルは MMLファイルと同じディレクトリ に生成される点に注意してください(相対パスでMMLファイルを指定すると「MIDIファイルが生成されない!」と早とちりしてしまいます...)
$ cd ~/work/pmml-0.2p1-fork-201405/examples $ pmml menuet1.pml $ ls Makefile grieg/ menuet1.mid menuet2.pml rand2.pml etude1.pml handel.pml menuet1.pml rand1.pml $ file menuet1.mid menuet1.mid: Standard MIDI data (format 1) using 3 tracks at 1/480
生成されたMIDIファイルをtimidityで再生してみます。
$ timidity menuet1.mid Playing menuet1.mid MIDI file: menuet1.mid Format: 1 Tracks: 3 Divisions: 480 Track name: (rh) Track name: (lh)
emacs+pmmlモードを使ってみる
PMMLの配布物にはpmml-mode.elというファイルが同梱されています。これを利用すると、emacs上でのMMLファイル作成が効率よく行えそうです。
pmml-mode.elを~/.emacs.dにコピーし、.emacsに以下の設定を追加します(最近のemacsは.emacsがobsoleteだった気がする...)。
$ cp pmml-0.2p1-fork-201405/emacs/pmml-mode.el ~/.emacs.d/ $ cat <<_EOF | tail -a ~/.emacs ;; PMML mode setup (setq pmml-player-command '("timidity" "-s16000")) (require 'pmml-mode) _EOF $ emacs --version GNU Emacs 24.3.1 ...
上記設定後、emacsで.pmlファイルを開くと自動的にpmmlモードになります。"C-c C-f"と入力すると、現在開いている.pmlファイルのコンパイルと再生が行われます。
基本的には"C-c C-f"だけでも良さそうですが、"M-x describe-bindings"で利用可能なpmmlモードのキーバインディングを確認してみました。
Major Mode Bindings: key binding 備考 --- ------- ---- C-c C-c pmml-record-finish (筆者の環境では利用できず) C-c C-f pmml-play-file pmlファイル全体を演奏する C-c C-p pmml-play-from-here-all カーソル位置から最後まで演奏する C-c C-q pmml-stop 演奏を停止する C-c C-r pmml-record (筆者の環境では"Recording is not supported."と表示される) C-c C-s pmml-step-record (筆者の環境では"Step recording is not supported."と表示される) C-c C-t pmml-show-track-summary MIDIトラックのサマリ情報を表示する C-c C-y pmml-play-region-all 選択したリージョンを演奏する C-c p pmml-play-from-here-solo カーソル位置のパートをソロで演奏する C-c y pmml-play-region-solo 選択したリージョンをソロで演奏する
MIDIファイルをWAVファイルに変換する
timidityのもう一つの機能として、MIDIファイルをWAVファイルに変換するというものがあります。"-Ow"でWAVファイルへの変換が行えます。
$ timidity -h ...中略... Available output modes (-O, --output-mode option): -Od NetBSD audio device -Ow RIFF WAVE file -Or Raw waveform data -Ou Sun audio file -Oa AIFF file -Ol List MIDI event -OM MOD -> MIDI file conversion Output format options (append to -O? option): `S' stereo `M' monophonic `s' signed output `u' unsigned output `1' 16-bit sample width `2' 24-bit sample width `8' 8-bit sample width `l' linear encoding `U' U-Law encoding `A' A-Law encoding `x' byte-swapped output
以下の例では、pmmlでMIDIファイルを生成し、そこからWAVファイルに変換しています。さらにMP3にエンコードするといった活用方法も可能です。
$ pmml menuet1.pml $ timidity -Ow2 menuet1.mid Playing menuet1.mid MIDI file: menuet1.mid Format: 1 Tracks: 3 Divisions: 480 Track name: (rh) Track name: (lh) Output menuet1.wav Playing time: ~42 seconds Notes cut: 0 Notes lost totally: 0 $ file menuet1.wav menuet1.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 24 bit, stereo 44100 Hz
まとめ
pmmlとTiMidityのビルドとインストール手順をまとめてみました。ビルドが通るよう修正したpmmlのソースコードは以前から手元にあったのですが、HDDの奥深くに埋もれてしまうことが何度かあったため、GitHub上のリポジトリで管理することにしました。TiMidityについても、それ自体のインストールと音源ファイルの準備という若干ややこしい手順のため、pmmlと共に一連のインストール手順としてまとめてみました。